mirror of
https://github.com/sojamo/controlp5
synced 2024-12-23 19:53:49 +01:00
246 lines
7.6 KiB
Java
246 lines
7.6 KiB
Java
/*
|
|
* Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or
|
|
* without modification, are permitted provided that the following
|
|
* conditions are met:
|
|
*
|
|
* -Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* -Redistribution in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* This software is provided "AS IS," without a warranty of any
|
|
* kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
|
|
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
|
|
* EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
|
|
* DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
|
|
* RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR
|
|
* ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
|
|
* FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
|
|
* SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
|
|
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
|
|
* THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN
|
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
*
|
|
* You acknowledge that Software is not designed, licensed or
|
|
* intended for use in the design, construction, operation or
|
|
* maintenance of any nuclear facility.
|
|
*/
|
|
|
|
import com.sun.tools.doclets.Taglet;
|
|
import com.sun.javadoc.*;
|
|
import java.util.Map;
|
|
import java.io.*;
|
|
/**
|
|
* A sample Taglet representing @example. This tag can be used in any kind of
|
|
* {@link com.sun.javadoc.Doc}. It is not an inline tag. The text is displayed
|
|
* in yellow to remind the developer to perform a task. For
|
|
* example, "@example Hello" would be shown as:
|
|
* <DL>
|
|
* <DT>
|
|
* <B>To Do:</B>
|
|
* <DD><table cellpadding=2 cellspacing=0><tr><td bgcolor="yellow">Fix this!
|
|
* </td></tr></table></DD>
|
|
* </DL>
|
|
*
|
|
* @author Jamie Ho
|
|
* @since 1.4
|
|
*/
|
|
|
|
public class ExampleTaglet implements Taglet {
|
|
|
|
private static final String NAME = "example";
|
|
private static final String HEADER = "example To Do:";
|
|
|
|
/**
|
|
* Return the name of this custom tag.
|
|
*/
|
|
public String getName() {
|
|
return NAME;
|
|
}
|
|
|
|
/**
|
|
* Will return true since <code>@example</code>
|
|
* can be used in field documentation.
|
|
* @return true since <code>@example</code>
|
|
* can be used in field documentation and false
|
|
* otherwise.
|
|
*/
|
|
public boolean inField() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Will return true since <code>@example</code>
|
|
* can be used in constructor documentation.
|
|
* @return true since <code>@example</code>
|
|
* can be used in constructor documentation and false
|
|
* otherwise.
|
|
*/
|
|
public boolean inConstructor() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Will return true since <code>@example</code>
|
|
* can be used in method documentation.
|
|
* @return true since <code>@example</code>
|
|
* can be used in method documentation and false
|
|
* otherwise.
|
|
*/
|
|
public boolean inMethod() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Will return true since <code>@example</code>
|
|
* can be used in method documentation.
|
|
* @return true since <code>@example</code>
|
|
* can be used in overview documentation and false
|
|
* otherwise.
|
|
*/
|
|
public boolean inOverview() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Will return true since <code>@example</code>
|
|
* can be used in package documentation.
|
|
* @return true since <code>@example</code>
|
|
* can be used in package documentation and false
|
|
* otherwise.
|
|
*/
|
|
public boolean inPackage() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Will return true since <code>@example</code>
|
|
* can be used in type documentation (classes or interfaces).
|
|
* @return true since <code>@example</code>
|
|
* can be used in type documentation and false
|
|
* otherwise.
|
|
*/
|
|
public boolean inType() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Will return false since <code>@example</code>
|
|
* is not an inline tag.
|
|
* @return false since <code>@example</code>
|
|
* is not an inline tag.
|
|
*/
|
|
|
|
public boolean isInlineTag() {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Register this Taglet.
|
|
* @param tagletMap the map to register this tag to.
|
|
*/
|
|
public static void register(Map tagletMap) {
|
|
ExampleTaglet tag = new ExampleTaglet();
|
|
Taglet t = (Taglet) tagletMap.get(tag.getName());
|
|
if (t != null) {
|
|
tagletMap.remove(tag.getName());
|
|
}
|
|
tagletMap.put(tag.getName(), tag);
|
|
}
|
|
|
|
/**
|
|
* Given the <code>Tag</code> representation of this custom
|
|
* tag, return its string representation.
|
|
* @param tag the <code>Tag</code> representation of this custom tag.
|
|
*/
|
|
public String toString(Tag tag) {
|
|
return createHTML(readFile(tag.text()));
|
|
}
|
|
|
|
|
|
/**
|
|
* Given an array of <code>Tag</code>s representing this custom
|
|
* tag, return its string representation.
|
|
* @param tags the array of <code>Tag</code>s representing of this custom tag.
|
|
*/
|
|
public String toString(Tag[] tags) {
|
|
if (tags.length == 0) {
|
|
return null;
|
|
}
|
|
return createHTML(readFile(tags[0].text()));
|
|
}
|
|
|
|
|
|
|
|
String createHTML(String theString) {
|
|
if(theString!=null) {
|
|
String dd = "<script type=\"text/javascript\">\n" +
|
|
"<!--\n"+
|
|
"document.getElementsByTagName('html')[0].className = 'isjs';" +
|
|
"function toggle(dt) { var display, dd=dt; do{ dd = dd.nextSibling } while(dd.tagName!='DD'); toOpen =!dd.style.display;" +
|
|
"dd.style.display = toOpen? 'block':''; dt.getElementsByTagName('span')[0].innerHTML = toOpen? '-':'+' ; }\n" +
|
|
"-->\n</script>";
|
|
|
|
return dd+"\n<div id=\"test\" class=\"toggleList\">" +
|
|
"<dl><dt onclick=\"toggle(this);\"><span>+</span>Example</dt>" +
|
|
"<dd><code><pre>"+theString+"</pre></code>" +
|
|
"</dd></dl></div>";
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
/**
|
|
* check if the examples directory exists and return the example as given in the tag.
|
|
* @param theExample the name of the example
|
|
*/
|
|
String readFile(String theExample) {
|
|
String record = "";
|
|
String myResult = "";
|
|
int recCount = 0;
|
|
String myDir = "../examples/";
|
|
File file=new File(myDir);
|
|
if(file.exists()==false) {
|
|
myDir = "./examples/";
|
|
}
|
|
String[] s = theExample.split("\\/");
|
|
String myFile = "";
|
|
if(s.length>=1) {
|
|
myFile = s[s.length-1];
|
|
System.out.println("myFile\t"+myFile);
|
|
for(int i=0;i<s.length;i++) {
|
|
myDir += s[i]+"/";
|
|
}
|
|
System.out.println("myDir\t"+myDir);
|
|
}
|
|
String pde = myDir+myFile+".pde";
|
|
try {
|
|
|
|
FileReader fr = new FileReader(pde);
|
|
BufferedReader br = new BufferedReader(fr);
|
|
record = new String();
|
|
while ((record = br.readLine()) != null) {
|
|
myResult += record+"\n";
|
|
}
|
|
System.out.println("\nExampleTaglet ("+theExample+"), creating example code for "+pde+"\n");
|
|
} catch (IOException e) {
|
|
System.out.println(e);
|
|
System.out.println("\nExampleTaglet ("+theExample+"), pde not found "+pde+"\n");
|
|
return null;
|
|
}
|
|
return myResult;
|
|
}
|
|
}
|
|
|
|
|