- switch(a.style) {
- case H: p.println(); p.println(); p.print("\\"+head+"section{"); emit2(p, a, "sub"+head); p.println("}"); break;
- case B: p.print("{\\bf{"); emit2(p, a, head); p.print("}}"); break;
- case UL: p.print("{\\ul{"); emit2(p, a, head); p.print("}}"); break;
- case IT: p.print("{\\it{"); emit2(p, a, head); p.print("}}"); break;
- case TT: p.print("{\\tt{"); emit2(p, a, head); p.print("}}"); break;
- case SO: p.print("{\\overstrike{"); emit2(p, a, head); p.print("}}"); break;
- case Q: p.print("``"); emit2(p, a, head); p.print("''"); break;
- case EMDASH: p.print(" \\emdash "); break;
- case LIST: p.println(); p.println("\\startitemize[symbol]"); emit2(p, a, head); p.println("\\stopitemize"); break;
- case PRE:
- if (a.getFirstChild() != null) {
- p.println();
- p.println("\\begin{verbatim}");
- p.println(a.getFirstChild().getText());
- p.println("\\end{verbatim}");
- }
+ }
+ }
+
+
+ // Paragraph //////////////////////////////////////////////////////////////////////////////
+
+ public static interface Paragraph extends ToHTML {
+ public static final Class[] subclasses = new Class[] { Blockquote.class, P.class, HR.class };
+ public static class HR implements Paragraph { public void toHTML(ToHTML.HTML sb) { sb.append("\n<hr>\n"); } }
+ public static class P extends Text.TextArray implements Paragraph { public String tag() { return "p"; } }
+ public static class Blockquote extends Text.TextArray implements Paragraph { public String tag() { return "blockquote"; } }
+ }
+
+ public static abstract class List extends Text {
+ public Text[][] points;
+ public abstract String tag();
+ public void toHTML(ToHTML.HTML sb) {
+ sb.append("<"+tag()+">\n");
+ for(Text[] t : points) sb.tag("li", t);
+ sb.append("</"+tag()+">\n");
+ }
+ }
+ public static class OL extends List { public String tag() { return "ol"; } }
+ public static class UL extends List { public String tag() { return "ul"; } }
+
+
+
+ // Tags //////////////////////////////////////////////////////////////////////////////
+
+ public static class Chars extends Text.TextString { }
+ public static class Symbol extends Text.TextString { }
+ public static class Keyword extends Text.TextString { public String tag() { return "tt"; } }
+ public static class Subscript extends Text.TextString { public String tag() { return "sub"; } }
+ public static class Superscript extends Text.TextString { public String tag() { return "super"; } }
+ public static class Bold extends Text.TextArray { public String tag() { return "b"; } }
+ public static class Smallcap extends Text.TextArray { public String tag() { return "sc"; } }
+ public static class Strikethrough extends Text.TextArray { public String tag() { return "strike"; } }
+ public static class TT extends Text.TextArray { public String tag() { return "tt"; } }
+ public static class Underline extends Text.TextArray { public String tag() { return "u"; } }
+ public static class Italic extends Text.TextArray { public String tag() { return "i"; } }
+ public static class Citation extends Text.TextArray { /* FIXME */ }
+ public static class Footnote extends Text.TextArray { /* FIXME */ }
+ public static class LineBreak extends Text { public void toHTML(ToHTML.HTML sb) { sb.tag("br"); } }
+ public static class Today extends Text { }
+ public static class Euro extends Text { public void toHTML(ToHTML.HTML sb) { sb.entity(8364); } }
+ public static class Link extends Text {
+ public Object word;
+ public URI href;
+ public void toHTML(ToHTML.HTML sb) { sb.tag("a", new Object[] { "href", href }, word); }
+ }
+ public static class Entity extends Text {
+ public final String entity;
+ public Entity(String entity) { this.entity = entity; }
+ public void toHTML(ToHTML.HTML sb) { sb.entity(entity); }
+ }
+
+
+ // Network //////////////////////////////////////////////////////////////////////////////
+
+ public static interface Host extends ToHTML {
+ public static class DNS implements Host {
+ public String[] part;
+ public void toHTML(ToHTML.HTML sb) {
+ for(int i=0; i<part.length; i++)
+ sb.append((i==0 ? "" : ".")+part[i]);