implementation for Markdown support
This commit is contained in:
35
pom.xml
35
pom.xml
@@ -21,12 +21,47 @@
|
|||||||
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>scala-tools</id>
|
||||||
|
<url>http://scala-tools.org/repo-releases</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>renejeschke-releases</id>
|
||||||
|
<url>http://maven.renejeschke.de</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.keypoint</groupId>
|
<groupId>com.keypoint</groupId>
|
||||||
<artifactId>png-encoder</artifactId>
|
<artifactId>png-encoder</artifactId>
|
||||||
<version>1.5</version>
|
<version>1.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- some mark down processors -->
|
||||||
|
|
||||||
|
<!--<dependency>
|
||||||
|
<groupId>org.markdownj</groupId>
|
||||||
|
<artifactId>markdownj</artifactId>
|
||||||
|
<version>0.3.0-1.0.2b4</version>
|
||||||
|
</dependency>-->
|
||||||
|
<!--<dependency>
|
||||||
|
<groupId>org.pegdown</groupId>
|
||||||
|
<artifactId>pegdown</artifactId>
|
||||||
|
<version>1.1.0</version>
|
||||||
|
</dependency>-->
|
||||||
|
<!--<dependency>
|
||||||
|
<groupId>org.tautua.markdownpapers</groupId>
|
||||||
|
<artifactId>markdownpapers-core</artifactId>
|
||||||
|
<version>1.2.7</version>
|
||||||
|
</dependency>-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.rjeschke</groupId>
|
||||||
|
<artifactId>txtmark</artifactId>
|
||||||
|
<version>0.7</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.io.StringReader;
|
|||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
import java.util.Scanner;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
@@ -21,6 +22,7 @@ import javax.swing.text.html.HTML;
|
|||||||
import javax.swing.text.html.HTMLEditorKit;
|
import javax.swing.text.html.HTMLEditorKit;
|
||||||
import javax.swing.text.html.parser.ParserDelegator;
|
import javax.swing.text.html.parser.ParserDelegator;
|
||||||
|
|
||||||
|
import com.github.rjeschke.txtmark.Processor;
|
||||||
import com.keypoint.PngEncoder;
|
import com.keypoint.PngEncoder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,6 +42,9 @@ import com.keypoint.PngEncoder;
|
|||||||
*/
|
*/
|
||||||
public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
||||||
|
|
||||||
|
private static final String MARKDOWN1 = "md";
|
||||||
|
private static final String MARKDOWN2 = "markdown";
|
||||||
|
|
||||||
private static final String IMAGES_DIR = "texdoclet_images";
|
private static final String IMAGES_DIR = "texdoclet_images";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,11 +52,11 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
*/
|
*/
|
||||||
StringBuffer ret;
|
StringBuffer ret;
|
||||||
|
|
||||||
Stack tblstk = new Stack();
|
Stack<TableInfo> tblstk = new Stack<TableInfo>();
|
||||||
TableInfo tblinfo;
|
TableInfo tblinfo;
|
||||||
int verbat = 0;
|
int verbat = 0;
|
||||||
int colIdx = 0;
|
int colIdx = 0;
|
||||||
Hashtable colors = new Hashtable(10);
|
Hashtable<String, String> colors = new Hashtable<String, String>(10);
|
||||||
String block = "";
|
String block = "";
|
||||||
String refurl = null;
|
String refurl = null;
|
||||||
String doPrintURL = null;
|
String doPrintURL = null;
|
||||||
@@ -59,6 +64,7 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
String refimg = null;
|
String refimg = null;
|
||||||
boolean notex = false;
|
boolean notex = false;
|
||||||
int imageindex = 0;
|
int imageindex = 0;
|
||||||
|
boolean inPreMarkdown = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new instance.
|
* Constructs a new instance.
|
||||||
@@ -78,8 +84,6 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
@Override
|
@Override
|
||||||
public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attrSet,
|
public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attrSet,
|
||||||
int pos) {
|
int pos) {
|
||||||
String str = null;
|
|
||||||
int i = 0;
|
|
||||||
if (tag.toString().equalsIgnoreCase("tex")) {
|
if (tag.toString().equalsIgnoreCase("tex")) {
|
||||||
if (attrSet.containsAttribute(HTML.Attribute.ENDTAG, "true")) {
|
if (attrSet.containsAttribute(HTML.Attribute.ENDTAG, "true")) {
|
||||||
notex = false;
|
notex = false;
|
||||||
@@ -210,13 +214,16 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
@Override
|
@Override
|
||||||
public void handleStartTag(HTML.Tag tag, MutableAttributeSet attrSet,
|
public void handleStartTag(HTML.Tag tag, MutableAttributeSet attrSet,
|
||||||
int pos) {
|
int pos) {
|
||||||
String str = null;
|
|
||||||
int i = 0;
|
|
||||||
if (notex) {
|
if (notex) {
|
||||||
return;
|
return;
|
||||||
} else if (tag == HTML.Tag.PRE) {
|
} else if (tag == HTML.Tag.PRE) {
|
||||||
ret.append(TeXDoclet.TRUETYPE + "\\small\n\\mbox{}\\newline ");
|
if (attrSet.containsAttribute("format", MARKDOWN1)
|
||||||
verbat++;
|
|| attrSet.containsAttribute("format", MARKDOWN2)) {
|
||||||
|
inPreMarkdown = true;
|
||||||
|
} else {
|
||||||
|
ret.append(TeXDoclet.TRUETYPE + "\\small\n\\mbox{}\\newline ");
|
||||||
|
verbat++;
|
||||||
|
}
|
||||||
} else if (tag == HTML.Tag.H1) {
|
} else if (tag == HTML.Tag.H1) {
|
||||||
ret.append("\\chapter*{");
|
ret.append("\\chapter*{");
|
||||||
} else if (tag == HTML.Tag.H2) {
|
} else if (tag == HTML.Tag.H2) {
|
||||||
@@ -261,8 +268,8 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
File file = new File(TeXDoclet.packageDir, refurl);
|
File file = new File(TeXDoclet.packageDir, refurl);
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
if (TeXDoclet.appendencies.contains(file.getPath())) {
|
if (TeXDoclet.appendencies.contains(file.getPath())) {
|
||||||
refurl = (String) TeXDoclet.appendencies
|
refurl = TeXDoclet.appendencies.get(file
|
||||||
.get(file.getPath());
|
.getPath());
|
||||||
} else {
|
} else {
|
||||||
refurl = "appendix"
|
refurl = "appendix"
|
||||||
+ new Integer(
|
+ new Integer(
|
||||||
@@ -312,6 +319,8 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
ret.append("\\begin{itemize}");
|
ret.append("\\begin{itemize}");
|
||||||
} else if (tag == HTML.Tag.I) {
|
} else if (tag == HTML.Tag.I) {
|
||||||
ret.append(TeXDoclet.ITALIC + " ");
|
ret.append(TeXDoclet.ITALIC + " ");
|
||||||
|
} else if (tag == HTML.Tag.EM) {
|
||||||
|
ret.append(TeXDoclet.ITALIC + " ");
|
||||||
} else if (tag == HTML.Tag.TABLE) {
|
} else if (tag == HTML.Tag.TABLE) {
|
||||||
tblstk.push(tblinfo);
|
tblstk.push(tblinfo);
|
||||||
tblinfo = new TableInfo();
|
tblinfo = new TableInfo();
|
||||||
@@ -323,7 +332,7 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
} else if (tag == HTML.Tag.TR) {
|
} else if (tag == HTML.Tag.TR) {
|
||||||
tblinfo.startRow(attrSet);
|
tblinfo.startRow(attrSet);
|
||||||
} else if (tag == HTML.Tag.FONT) {
|
} else if (tag == HTML.Tag.FONT) {
|
||||||
String sz = (String) attrSet.getAttribute(HTML.Attribute.SIZE);
|
// String sz = (String) attrSet.getAttribute(HTML.Attribute.SIZE);
|
||||||
String col = (String) attrSet.getAttribute(HTML.Attribute.COLOR);
|
String col = (String) attrSet.getAttribute(HTML.Attribute.COLOR);
|
||||||
ret.append("{");
|
ret.append("{");
|
||||||
if (col != null) {
|
if (col != null) {
|
||||||
@@ -332,8 +341,7 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
} else {
|
} else {
|
||||||
if ("abcdefABCDEF0123456789".indexOf(col.charAt(0)) != -1) {
|
if ("abcdefABCDEF0123456789".indexOf(col.charAt(0)) != -1) {
|
||||||
Color cc = new Color((int) Long.parseLong(col, 16));
|
Color cc = new Color((int) Long.parseLong(col, 16));
|
||||||
String name = (String) colors
|
String name = colors.get("color" + cc.getRGB());
|
||||||
.get("color" + cc.getRGB());
|
|
||||||
if (name == null) {
|
if (name == null) {
|
||||||
ret.append("\\definecolor{color" + colIdx
|
ret.append("\\definecolor{color" + colIdx
|
||||||
+ "}[rgb]{" + (cc.getRed() / 255.0) + ","
|
+ "}[rgb]{" + (cc.getRed() / 255.0) + ","
|
||||||
@@ -358,13 +366,15 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void handleEndTag(HTML.Tag tag, int pos) {
|
public void handleEndTag(HTML.Tag tag, int pos) {
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
if (notex) {
|
if (notex) {
|
||||||
return;
|
return;
|
||||||
} else if (tag == HTML.Tag.PRE) {
|
} else if (tag == HTML.Tag.PRE) {
|
||||||
verbat--;
|
if (!inPreMarkdown) {
|
||||||
ret.append("}\n");
|
verbat--;
|
||||||
|
ret.append("}\n");
|
||||||
|
} else {
|
||||||
|
inPreMarkdown = false;
|
||||||
|
}
|
||||||
} else if (tag == HTML.Tag.H1) {
|
} else if (tag == HTML.Tag.H1) {
|
||||||
ret.append("}");
|
ret.append("}");
|
||||||
} else if (tag == HTML.Tag.H2) {
|
} else if (tag == HTML.Tag.H2) {
|
||||||
@@ -437,9 +447,11 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
ret.append("\n\\end{itemize}\n");
|
ret.append("\n\\end{itemize}\n");
|
||||||
} else if (tag == HTML.Tag.I) {
|
} else if (tag == HTML.Tag.I) {
|
||||||
ret.append("}");
|
ret.append("}");
|
||||||
|
} else if (tag == HTML.Tag.EM) {
|
||||||
|
ret.append("}");
|
||||||
} else if (tag == HTML.Tag.TABLE) {
|
} else if (tag == HTML.Tag.TABLE) {
|
||||||
ret = tblinfo.endTable();
|
ret = tblinfo.endTable();
|
||||||
tblinfo = (TableInfo) tblstk.pop();
|
tblinfo = tblstk.pop();
|
||||||
} else if (tag == HTML.Tag.TH) {
|
} else if (tag == HTML.Tag.TH) {
|
||||||
tblinfo.endCol();
|
tblinfo.endCol();
|
||||||
} else if (tag == HTML.Tag.TD) {
|
} else if (tag == HTML.Tag.TD) {
|
||||||
@@ -457,6 +469,50 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
@Override
|
@Override
|
||||||
public void handleText(char[] data, int pos) {
|
public void handleText(char[] data, int pos) {
|
||||||
String str = new String(data);
|
String str = new String(data);
|
||||||
|
|
||||||
|
if (inPreMarkdown) {
|
||||||
|
|
||||||
|
String html = "";
|
||||||
|
|
||||||
|
// usually java documentation has a leading space character in each
|
||||||
|
// line
|
||||||
|
// that is to remove for markdown processing !
|
||||||
|
if (str.startsWith(" ")) {
|
||||||
|
str = removeLeadingSpaces(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
// test some Markdown processors here :
|
||||||
|
|
||||||
|
// 1. MarkdownJ
|
||||||
|
|
||||||
|
// MarkdownProcessor m = new MarkdownProcessor();
|
||||||
|
// html = m.markdown(str);
|
||||||
|
|
||||||
|
// 2. PegDown
|
||||||
|
|
||||||
|
// PegDownProcessor pp = new PegDownProcessor();
|
||||||
|
// html = pp.markdownToHtml(str);
|
||||||
|
|
||||||
|
// 3. MarkdownPapers
|
||||||
|
|
||||||
|
// Markdown md = new Markdown();
|
||||||
|
// StringWriter sw = new StringWriter();
|
||||||
|
// try {
|
||||||
|
// md.transform(new StringReader(str), sw);
|
||||||
|
// } catch (org.tautua.markdownpapers.parser.ParseException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// html = sw.toString();
|
||||||
|
|
||||||
|
// 4. Txtmark
|
||||||
|
|
||||||
|
html = Processor.process(str);
|
||||||
|
|
||||||
|
String toAppend = HTMLtoLaTeXBackEnd.fixText(html);
|
||||||
|
ret.append(toAppend);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < str.length(); ++i) {
|
for (int i = 0; i < str.length(); ++i) {
|
||||||
int c = str.charAt(i);
|
int c = str.charAt(i);
|
||||||
if (notex) {
|
if (notex) {
|
||||||
@@ -621,4 +677,18 @@ public class HTMLtoLaTeXBackEnd extends HTMLEditorKit.ParserCallback {
|
|||||||
return new String(result);
|
return new String(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String removeLeadingSpaces(String str) {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
Scanner scanner = new Scanner(str);
|
||||||
|
while (scanner.hasNextLine()) {
|
||||||
|
String l = scanner.nextLine();
|
||||||
|
if (l.startsWith(" ")) {
|
||||||
|
sb.append(l.substring(1) + System.getProperty("line.separator"));
|
||||||
|
} else {
|
||||||
|
sb.append(l + System.getProperty("line.separator"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,9 +90,10 @@ import com.sun.javadoc.Type;
|
|||||||
* src="http://upload.wikimedia.org/wikipedia/commons/9/92/LaTeX_logo.svg">
|
* src="http://upload.wikimedia.org/wikipedia/commons/9/92/LaTeX_logo.svg">
|
||||||
* </dl>
|
* </dl>
|
||||||
*
|
*
|
||||||
* <H3>Extra tags</H3> A new tag is defined: <CODE><TEX></CODE>. This tag
|
* <H3>Extra tags</H3> <H4><TEX></H4> A new tag is defined:
|
||||||
* is useful for passing <TEX txt="\TeX{}">TeX</TEX> code directly to the <TEX
|
* <CODE><TEX></CODE>. This tag is useful for passing <TEX
|
||||||
* txt="\TeX{}">TeX</TEX> compiler. The following code:
|
* txt="\TeX{}">TeX</TEX> code directly to the <TEX txt="\TeX{}">TeX</TEX>
|
||||||
|
* compiler. The following code:
|
||||||
*
|
*
|
||||||
* <PRE>
|
* <PRE>
|
||||||
*
|
*
|
||||||
@@ -111,12 +112,74 @@ import com.sun.javadoc.Type;
|
|||||||
* </TEX> The "alternative" text is ignored by the TeXDoclet, but useful if you
|
* </TEX> The "alternative" text is ignored by the TeXDoclet, but useful if you
|
||||||
* want to use both the TeXDoclet and a regular HTML based doclet.
|
* want to use both the TeXDoclet and a regular HTML based doclet.
|
||||||
*
|
*
|
||||||
|
* <H4><PRE format="markdown"></H4>
|
||||||
|
*
|
||||||
|
* Instead of writing your java documentation in often hard to read HTML code
|
||||||
|
* you can make use of <a
|
||||||
|
* href="http://en.wikipedia.org/wiki/Markdown">Markdown</a> syntax. The HTML
|
||||||
|
* <code><PRE></code> tag is used therefore to prevent your IDE from
|
||||||
|
* automatically reordering your Markdown documentation text. Markdown parsing
|
||||||
|
* is based on the <a href="https://github.com/sirthias/pegdown">Pegdown</a>
|
||||||
|
* implementation. The following code :
|
||||||
|
*
|
||||||
|
* <PRE>
|
||||||
|
*
|
||||||
|
* <PRE format="markdown">
|
||||||
|
*
|
||||||
|
* some text some text some text some text some text some text some text
|
||||||
|
*
|
||||||
|
* ##### Lists
|
||||||
|
*
|
||||||
|
* - item1
|
||||||
|
* 1. item11
|
||||||
|
* 2. item12
|
||||||
|
* - item1
|
||||||
|
*
|
||||||
|
* ##### Text formatting
|
||||||
|
*
|
||||||
|
* _emphasis_ and __strong__ and some `code` :
|
||||||
|
*
|
||||||
|
* code line 1
|
||||||
|
* code line 2
|
||||||
|
*
|
||||||
|
* some text some text some text some text some text some text some text
|
||||||
|
*
|
||||||
|
* <PRE>
|
||||||
|
*
|
||||||
|
* </PRE>
|
||||||
|
*
|
||||||
|
* will produce the following : <br>
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* <PRE format="md">
|
||||||
|
*
|
||||||
|
* some text some text some text some text some text some text some text
|
||||||
|
*
|
||||||
|
* ##### Lists
|
||||||
|
*
|
||||||
|
* - item1
|
||||||
|
* 1. item11
|
||||||
|
* 2. item12
|
||||||
|
* - item1
|
||||||
|
*
|
||||||
|
* ##### Text formatting
|
||||||
|
*
|
||||||
|
* _emphasis_ and __strong__ and some `code` :
|
||||||
|
*
|
||||||
|
* code line 1
|
||||||
|
* code line 2
|
||||||
|
*
|
||||||
|
* some text some text some text some text some text some text some text
|
||||||
|
*
|
||||||
|
* </PRE>
|
||||||
|
*
|
||||||
* @see HTMLtoLaTeXBackEnd
|
* @see HTMLtoLaTeXBackEnd
|
||||||
* @see #start(RootDoc) start
|
* @see #start(RootDoc) start
|
||||||
* @author Gregg Wonderly - C2 Technologies Inc.
|
* @author Gregg Wonderly - C2 Technologies Inc.
|
||||||
* @author Soeren Caspersen - XO Software.
|
* @author Soeren Caspersen - XO Software.
|
||||||
* @author Stefan Marx
|
* @author Stefan Marx
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("restriction")
|
||||||
public class TeXDoclet extends Doclet {
|
public class TeXDoclet extends Doclet {
|
||||||
|
|
||||||
private static final String OUT_FILENAME_DOCS_TEX = "docs.tex";
|
private static final String OUT_FILENAME_DOCS_TEX = "docs.tex";
|
||||||
@@ -137,8 +200,8 @@ public class TeXDoclet extends Doclet {
|
|||||||
/** Writer for writing to output file */
|
/** Writer for writing to output file */
|
||||||
public static PrintWriter os = null;
|
public static PrintWriter os = null;
|
||||||
static boolean inherited = true;
|
static boolean inherited = true;
|
||||||
static Hashtable map2;
|
static Hashtable<String, Package> map2;
|
||||||
static Vector map;
|
static Vector<Package> map;
|
||||||
static ClassFilter clsFilt;
|
static ClassFilter clsFilt;
|
||||||
static RootDoc theroot;
|
static RootDoc theroot;
|
||||||
static String docclass = "report";
|
static String docclass = "report";
|
||||||
@@ -162,9 +225,9 @@ public class TeXDoclet extends Doclet {
|
|||||||
static String packageFile = "docpackage.tex";
|
static String packageFile = "docpackage.tex";
|
||||||
static String preambleFile = "docinit.tex";
|
static String preambleFile = "docinit.tex";
|
||||||
static File packageDir = null;
|
static File packageDir = null;
|
||||||
static Hashtable appendencies = new Hashtable();
|
static Hashtable<String, String> appendencies = new Hashtable<String, String>();
|
||||||
static Hashtable refs = new Hashtable();
|
static Hashtable<String, Hashtable<?, ?>> refs = new Hashtable<String, Hashtable<?, ?>>();
|
||||||
static Hashtable externalrefs = new Hashtable();
|
static Hashtable<String, Hashtable<?, ?>> externalrefs = new Hashtable<String, Hashtable<?, ?>>();
|
||||||
|
|
||||||
static boolean includeTexOutputInOtherTexFile = false;
|
static boolean includeTexOutputInOtherTexFile = false;
|
||||||
static String sectionLevelMax = null;
|
static String sectionLevelMax = null;
|
||||||
@@ -382,7 +445,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
FileInputStream in = new FileInputStream(args[i][2]
|
FileInputStream in = new FileInputStream(args[i][2]
|
||||||
+ ".map");
|
+ ".map");
|
||||||
ObjectInputStream p = new ObjectInputStream(in);
|
ObjectInputStream p = new ObjectInputStream(in);
|
||||||
Hashtable exref = (Hashtable) p.readObject();
|
Hashtable<?, ?> exref = (Hashtable<?, ?>) p.readObject();
|
||||||
externalrefs.put(args[i][1], exref);
|
externalrefs.put(args[i][1], exref);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -428,8 +491,8 @@ public class TeXDoclet extends Doclet {
|
|||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
|
|
||||||
map2 = new Hashtable();
|
map2 = new Hashtable<String, Package>();
|
||||||
map = new Vector();
|
map = new Vector<Package>();
|
||||||
try {
|
try {
|
||||||
os = new PrintWriter(new FileWriter(outfile));
|
os = new PrintWriter(new FileWriter(outfile));
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@@ -559,8 +622,6 @@ public class TeXDoclet extends Doclet {
|
|||||||
|
|
||||||
ClassDoc[] cls = root.classes();
|
ClassDoc[] cls = root.classes();
|
||||||
|
|
||||||
ExecutableMemberDoc[] mems;
|
|
||||||
|
|
||||||
PackageDoc[] specifiedPackages = root.specifiedPackages();
|
PackageDoc[] specifiedPackages = root.specifiedPackages();
|
||||||
System.out.println("specifiedPackages : " + specifiedPackages.length);
|
System.out.println("specifiedPackages : " + specifiedPackages.length);
|
||||||
for (int i = 0; i < specifiedPackages.length; i++) {
|
for (int i = 0; i < specifiedPackages.length; i++) {
|
||||||
@@ -586,7 +647,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
Package v;
|
Package v;
|
||||||
PackageDoc pkgDoc = cd.containingPackage();
|
PackageDoc pkgDoc = cd.containingPackage();
|
||||||
String pkg = pkgDoc.name();
|
String pkg = pkgDoc.name();
|
||||||
if ((v = (Package) map2.get(pkg)) == null) {
|
if ((v = map2.get(pkg)) == null) {
|
||||||
v = new Package(pkg, pkgDoc);
|
v = new Package(pkg, pkgDoc);
|
||||||
map2.put(pkg, v);
|
map2.put(pkg, v);
|
||||||
map.add(v);
|
map.add(v);
|
||||||
@@ -595,9 +656,9 @@ public class TeXDoclet extends Doclet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sorting
|
// Sorting
|
||||||
Enumeration h = map.elements();
|
Enumeration<Package> h = map.elements();
|
||||||
while (h.hasMoreElements()) {
|
while (h.hasMoreElements()) {
|
||||||
final Package pkg = (Package) h.nextElement();
|
final Package pkg = h.nextElement();
|
||||||
pkg.sort();
|
pkg.sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -614,9 +675,9 @@ public class TeXDoclet extends Doclet {
|
|||||||
|
|
||||||
// Packages
|
// Packages
|
||||||
|
|
||||||
Enumeration e = map.elements();
|
Enumeration<Package> e = map.elements();
|
||||||
while (e.hasMoreElements()) {
|
while (e.hasMoreElements()) {
|
||||||
final Package pkg = (Package) e.nextElement();
|
final Package pkg = e.nextElement();
|
||||||
|
|
||||||
// os.println( "\\newpage" );
|
// os.println( "\\newpage" );
|
||||||
|
|
||||||
@@ -697,10 +758,10 @@ public class TeXDoclet extends Doclet {
|
|||||||
// i++;
|
// i++;
|
||||||
// }
|
// }
|
||||||
os.println("\\begin{appendix}");
|
os.println("\\begin{appendix}");
|
||||||
Iterator it = appendencies.keySet().iterator();
|
Iterator<String> it = appendencies.keySet().iterator();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
String sfa = (String) it.next();
|
String sfa = it.next();
|
||||||
File f = new File(sfa);
|
File f = new File(sfa);
|
||||||
String fname = f.getName().replace("_", "\\_");
|
String fname = f.getName().replace("_", "\\_");
|
||||||
System.out.println(fname);
|
System.out.println(fname);
|
||||||
@@ -888,7 +949,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
/**
|
/**
|
||||||
* Produces a table-of-contents for classes.
|
* Produces a table-of-contents for classes.
|
||||||
*/
|
*/
|
||||||
static void tocForClasses(String title, Vector v) {
|
static void tocForClasses(String title, Vector<ClassDoc> v) {
|
||||||
if (v.size() > 0) {
|
if (v.size() > 0) {
|
||||||
os.println("\\vskip .13in");
|
os.println("\\vskip .13in");
|
||||||
|
|
||||||
@@ -896,7 +957,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
+ HTMLtoLaTeXBackEnd.fixText(title) + "}}");
|
+ HTMLtoLaTeXBackEnd.fixText(title) + "}}");
|
||||||
|
|
||||||
for (int i = 0; i < v.size(); ++i) {
|
for (int i = 0; i < v.size(); ++i) {
|
||||||
ClassDoc cd = (ClassDoc) v.elementAt(i);
|
ClassDoc cd = v.elementAt(i);
|
||||||
os.print("\\entityintro{"
|
os.print("\\entityintro{"
|
||||||
+ HTMLtoLaTeXBackEnd.fixText(cd.name()) + "}" + "{"
|
+ HTMLtoLaTeXBackEnd.fixText(cd.name()) + "}" + "{"
|
||||||
+ refName(makeRefKey(cd.qualifiedName())) + "}" + "{");
|
+ refName(makeRefKey(cd.qualifiedName())) + "}" + "{");
|
||||||
@@ -925,11 +986,11 @@ public class TeXDoclet extends Doclet {
|
|||||||
|
|
||||||
// Classes
|
// Classes
|
||||||
ClassHierachy classHierachy = new ClassHierachy();
|
ClassHierachy classHierachy = new ClassHierachy();
|
||||||
Enumeration f = map.elements();
|
Enumeration<Package> f = map.elements();
|
||||||
while (f.hasMoreElements()) {
|
while (f.hasMoreElements()) {
|
||||||
final Package pkg = (Package) f.nextElement();
|
final Package pkg = f.nextElement();
|
||||||
for (int i = 0; i < pkg.classes.size(); i++) {
|
for (int i = 0; i < pkg.classes.size(); i++) {
|
||||||
classHierachy.add((ClassDoc) pkg.classes.get(i));
|
classHierachy.add(pkg.classes.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (classHierachy.root.size() != 0) {
|
if (classHierachy.root.size() != 0) {
|
||||||
@@ -947,9 +1008,9 @@ public class TeXDoclet extends Doclet {
|
|||||||
InterfaceHierachy interfaceHierachy = new InterfaceHierachy();
|
InterfaceHierachy interfaceHierachy = new InterfaceHierachy();
|
||||||
f = map.elements();
|
f = map.elements();
|
||||||
while (f.hasMoreElements()) {
|
while (f.hasMoreElements()) {
|
||||||
final Package pkg = (Package) f.nextElement();
|
final Package pkg = f.nextElement();
|
||||||
for (int i = 0; i < pkg.interfaces.size(); i++) {
|
for (int i = 0; i < pkg.interfaces.size(); i++) {
|
||||||
interfaceHierachy.add((ClassDoc) pkg.interfaces.get(i));
|
interfaceHierachy.add(pkg.interfaces.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (interfaceHierachy.root.size() != 0) {
|
if (interfaceHierachy.root.size() != 0) {
|
||||||
@@ -961,9 +1022,9 @@ public class TeXDoclet extends Doclet {
|
|||||||
ClassHierachy exceptionHierachy = new ClassHierachy();
|
ClassHierachy exceptionHierachy = new ClassHierachy();
|
||||||
f = map.elements();
|
f = map.elements();
|
||||||
while (f.hasMoreElements()) {
|
while (f.hasMoreElements()) {
|
||||||
final Package pkg = (Package) f.nextElement();
|
final Package pkg = f.nextElement();
|
||||||
for (int i = 0; i < pkg.exceptions.size(); i++) {
|
for (int i = 0; i < pkg.exceptions.size(); i++) {
|
||||||
exceptionHierachy.add((ClassDoc) pkg.exceptions.get(i));
|
exceptionHierachy.add(pkg.exceptions.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (exceptionHierachy.root.size() != 0) {
|
if (exceptionHierachy.root.size() != 0) {
|
||||||
@@ -975,9 +1036,9 @@ public class TeXDoclet extends Doclet {
|
|||||||
ClassHierachy errorHierachy = new ClassHierachy();
|
ClassHierachy errorHierachy = new ClassHierachy();
|
||||||
f = map.elements();
|
f = map.elements();
|
||||||
while (f.hasMoreElements()) {
|
while (f.hasMoreElements()) {
|
||||||
final Package pkg = (Package) f.nextElement();
|
final Package pkg = f.nextElement();
|
||||||
for (int i = 0; i < pkg.errors.size(); i++) {
|
for (int i = 0; i < pkg.errors.size(); i++) {
|
||||||
errorHierachy.add((ClassDoc) pkg.errors.get(i));
|
errorHierachy.add(pkg.errors.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (errorHierachy.root.size() != 0) {
|
if (errorHierachy.root.size() != 0) {
|
||||||
@@ -997,9 +1058,9 @@ public class TeXDoclet extends Doclet {
|
|||||||
* @param classes
|
* @param classes
|
||||||
* Vector of the classes to be laid out.
|
* Vector of the classes to be laid out.
|
||||||
*/
|
*/
|
||||||
static void layoutClasses(String type, Vector classes) {
|
static void layoutClasses(String type, List<ClassDoc> classes) {
|
||||||
for (int i = 0; i < classes.size(); ++i) {
|
for (int i = 0; i < classes.size(); ++i) {
|
||||||
ClassDoc cd = (ClassDoc) classes.elementAt(i);
|
ClassDoc cd = classes.get(i);
|
||||||
// os.println(
|
// os.println(
|
||||||
// "\\gdef\\classname{"+HTMLtoLaTeXBackEnd.fixText(cd.name())+"}" );
|
// "\\gdef\\classname{"+HTMLtoLaTeXBackEnd.fixText(cd.name())+"}" );
|
||||||
|
|
||||||
@@ -1207,8 +1268,6 @@ public class TeXDoclet extends Doclet {
|
|||||||
|
|
||||||
if (inherited == true) {
|
if (inherited == true) {
|
||||||
|
|
||||||
boolean yet = false;
|
|
||||||
|
|
||||||
if (!cd.isInterface()) {
|
if (!cd.isInterface()) {
|
||||||
|
|
||||||
ClassDoc par = cd.superclass();
|
ClassDoc par = cd.superclass();
|
||||||
@@ -1223,7 +1282,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
List superclasses = new Vector();
|
List<ClassDoc> superclasses = new Vector<ClassDoc>();
|
||||||
while (getSuperClass(cd, superclasses) != null) {
|
while (getSuperClass(cd, superclasses) != null) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1231,7 +1290,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
|
|
||||||
for (int m = superclasses.size() - 1; m >= 0; m--) {
|
for (int m = superclasses.size() - 1; m >= 0; m--) {
|
||||||
|
|
||||||
ClassDoc par = (ClassDoc) superclasses.get(m);
|
ClassDoc par = superclasses.get(m);
|
||||||
|
|
||||||
printInherited(par);
|
printInherited(par);
|
||||||
|
|
||||||
@@ -1251,7 +1310,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
* subsclass, that is not already in the list of superclasses adn adds it to
|
* subsclass, that is not already in the list of superclasses adn adds it to
|
||||||
* the list if found
|
* the list if found
|
||||||
*/
|
*/
|
||||||
static ClassDoc getSuperClass(ClassDoc subclass, List superclasses) {
|
static ClassDoc getSuperClass(ClassDoc subclass, List<ClassDoc> superclasses) {
|
||||||
ClassDoc[] cls = theroot.classes();
|
ClassDoc[] cls = theroot.classes();
|
||||||
for (int n = 0; n < cls.length; ++n) {
|
for (int n = 0; n < cls.length; ++n) {
|
||||||
ClassDoc cd2 = cls[n];
|
ClassDoc cd2 = cls[n];
|
||||||
@@ -1265,16 +1324,16 @@ public class TeXDoclet extends Doclet {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static List sortSuperclasses(List superclasses) {
|
static List<ClassDoc> sortSuperclasses(List<ClassDoc> superclasses) {
|
||||||
List result = new Vector();
|
List<ClassDoc> result = new Vector<ClassDoc>();
|
||||||
int count = superclasses.size();
|
int count = superclasses.size();
|
||||||
|
|
||||||
for (int k = 0; k < count; k++) {
|
for (int k = 0; k < count; k++) {
|
||||||
for (int i = 0; i < superclasses.size(); i++) {
|
for (int i = 0; i < superclasses.size(); i++) {
|
||||||
ClassDoc cd = (ClassDoc) superclasses.get(i);
|
ClassDoc cd = superclasses.get(i);
|
||||||
boolean isSubInterface = false;
|
boolean isSubInterface = false;
|
||||||
for (int j = 0; j < superclasses.size(); j++) {
|
for (int j = 0; j < superclasses.size(); j++) {
|
||||||
ClassDoc cd2 = (ClassDoc) superclasses.get(j);
|
ClassDoc cd2 = superclasses.get(j);
|
||||||
if (cd.subclassOf(cd2) && cd != cd2) {
|
if (cd.subclassOf(cd2) && cd != cd2) {
|
||||||
isSubInterface = true;
|
isSubInterface = true;
|
||||||
break;
|
break;
|
||||||
@@ -1379,12 +1438,11 @@ public class TeXDoclet extends Doclet {
|
|||||||
}
|
}
|
||||||
os.println("\\" + sectionLevels[2] + "{" + title + "}{");
|
os.println("\\" + sectionLevels[2] + "{" + title + "}{");
|
||||||
os.println("\\begin{verse}");
|
os.println("\\begin{verse}");
|
||||||
boolean first = true;
|
List<ExecutableMemberDoc> l = Arrays.asList(dmems);
|
||||||
List l = Arrays.asList(dmems);
|
|
||||||
Collections.sort(l);
|
Collections.sort(l);
|
||||||
Iterator itr = l.iterator();
|
Iterator<ExecutableMemberDoc> itr = l.iterator();
|
||||||
for (int i = 0; itr.hasNext(); ++i) {
|
for (int i = 0; itr.hasNext(); ++i) {
|
||||||
ExecutableMemberDoc mem = (ExecutableMemberDoc) itr.next();
|
ExecutableMemberDoc mem = itr.next();
|
||||||
if (hyperref) {
|
if (hyperref) {
|
||||||
os.print("\\hyperlink{"
|
os.print("\\hyperlink{"
|
||||||
+ refName(makeRefKey(mem.qualifiedName()
|
+ refName(makeRefKey(mem.qualifiedName()
|
||||||
@@ -1418,12 +1476,11 @@ public class TeXDoclet extends Doclet {
|
|||||||
}
|
}
|
||||||
os.println("\\" + sectionLevels[2] + "{" + title + "}{");
|
os.println("\\" + sectionLevels[2] + "{" + title + "}{");
|
||||||
os.println("\\begin{verse}");
|
os.println("\\begin{verse}");
|
||||||
boolean first = true;
|
List<FieldDoc> l = Arrays.asList(dmems);
|
||||||
List l = Arrays.asList(dmems);
|
|
||||||
Collections.sort(l);
|
Collections.sort(l);
|
||||||
Iterator itr = l.iterator();
|
Iterator<FieldDoc> itr = l.iterator();
|
||||||
for (int i = 0; itr.hasNext(); ++i) {
|
for (int i = 0; itr.hasNext(); ++i) {
|
||||||
FieldDoc mem = (FieldDoc) itr.next();
|
FieldDoc mem = itr.next();
|
||||||
if (hyperref) {
|
if (hyperref) {
|
||||||
os.print("\\hyperlink{"
|
os.print("\\hyperlink{"
|
||||||
+ refName(makeRefKey(mem.qualifiedName())) + "}{");
|
+ refName(makeRefKey(mem.qualifiedName())) + "}{");
|
||||||
@@ -1452,13 +1509,13 @@ public class TeXDoclet extends Doclet {
|
|||||||
if (useHr) {
|
if (useHr) {
|
||||||
os.println("\\rule[1em]{\\hsize}{2pt}\\vskip -2em");
|
os.println("\\rule[1em]{\\hsize}{2pt}\\vskip -2em");
|
||||||
}
|
}
|
||||||
List l = Arrays.asList(dmems);
|
List<ExecutableMemberDoc> l = Arrays.asList(dmems);
|
||||||
Collections.sort(l);
|
Collections.sort(l);
|
||||||
Iterator itr = l.iterator();
|
Iterator<ExecutableMemberDoc> itr = l.iterator();
|
||||||
os.println("\\vskip -2em");
|
os.println("\\vskip -2em");
|
||||||
os.println("\\begin{itemize}");
|
os.println("\\begin{itemize}");
|
||||||
for (int i = 0; itr.hasNext(); ++i) {
|
for (int i = 0; itr.hasNext(); ++i) {
|
||||||
ExecutableMemberDoc mem = (ExecutableMemberDoc) itr.next();
|
ExecutableMemberDoc mem = itr.next();
|
||||||
|
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
if (useHr) {
|
if (useHr) {
|
||||||
@@ -1794,14 +1851,14 @@ public class TeXDoclet extends Doclet {
|
|||||||
if (useHr) {
|
if (useHr) {
|
||||||
os.println("\\rule[1em]{\\hsize}{2pt}\\vskip -2em");
|
os.println("\\rule[1em]{\\hsize}{2pt}\\vskip -2em");
|
||||||
}
|
}
|
||||||
List l = Arrays.asList(dmems);
|
List<MemberDoc> l = Arrays.asList(dmems);
|
||||||
Collections.sort(l);
|
Collections.sort(l);
|
||||||
Iterator itr = l.iterator();
|
Iterator<MemberDoc> itr = l.iterator();
|
||||||
|
|
||||||
if (shortInheritance) {
|
if (shortInheritance) {
|
||||||
|
|
||||||
for (int i = 0; itr.hasNext(); ++i) {
|
for (int i = 0; itr.hasNext(); ++i) {
|
||||||
MemberDoc mem = (MemberDoc) itr.next();
|
MemberDoc mem = itr.next();
|
||||||
|
|
||||||
// print only member names
|
// print only member names
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
@@ -1817,7 +1874,7 @@ public class TeXDoclet extends Doclet {
|
|||||||
os.println("\\vskip -2em");
|
os.println("\\vskip -2em");
|
||||||
os.println("\\begin{itemize}");
|
os.println("\\begin{itemize}");
|
||||||
for (int i = 0; itr.hasNext(); ++i) {
|
for (int i = 0; itr.hasNext(); ++i) {
|
||||||
MemberDoc mem = (MemberDoc) itr.next();
|
MemberDoc mem = itr.next();
|
||||||
|
|
||||||
// Print signature
|
// Print signature
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user