KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > java2html > converter > AbstractJavaSourceToXmlConverter


1 package de.java2html.converter;
2
3 import java.io.BufferedWriter JavaDoc;
4 import java.io.IOException JavaDoc;
5
6 import de.java2html.javasource.JavaSourceType;
7 import de.java2html.options.JavaSourceConversionOptions;
8 import de.java2html.options.JavaSourceStyleTable;
9 import de.java2html.util.HtmlUtilities;
10
11 /**
12  * @author Markus Gebhard
13  */

14 public abstract class AbstractJavaSourceToXmlConverter extends AbstractJavaSourceConverter {
15
16   //original style sheet by Jan Tisje
17
// "td.java, td.java-ln {vertical-align:top;}\n" +
18
// "tt.java, tt.java-ln, pre.java, pre.java-ln {line-height:1em; margin-bottom:0em;}\n" +
19
// "td.java-ln { text-align:right; }\n"+
20
// "tt.java-ln, pre.java-ln { color:#888888 }\n"+
21
// "/* UNDEFINED */ span.java0 { color:black; }\n" +
22
// "/* CODE */ span.java1 { color:black; }\n" +
23
// "/* CODE_KEYWORD */ span.java2 { color:black; font-weight:bold; }\n" +
24
// "/* CODE_TYPE */ span.java3 { color:darkblue ;}\n" +
25
// "/* QUOTE */ span.java4 { color:darkgreen; }\n" +
26
// "/* COMMENT_LINE */ span.java5 { color:#888888; font-style:italic; }\n" +
27
// "/* COMMENT_BLOCK */ span.java6 { color:#888888; font-style:italic; }\n" +
28
// "/* COMMENT_JAVADOC */ span.java7 { color:green; font-style:italic; }\n" +
29
// "/* COMMENT_KEYWORD */ span.java8 { color:green; font-style:italic; font-weight:bold; }\n" +
30
// "/* EMPTY */ span.java9 {}\n" +
31
// "/* NUM_CONSTANT */ span.java10 { color:orange; }\n" +
32
// "/* CHAR_CONSTANT */ span.java11 { color:red; } ";
33

34   protected final static String JavaDoc XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
35
36   protected boolean lineNumbers = true;
37   protected boolean pre = true;
38   protected String JavaDoc lineEnd = "";
39   private String JavaDoc space = " ";
40   private String JavaDoc headEnd = "";
41   private String JavaDoc foot = "";
42
43   private final static String JavaDoc TAG_START = "<span class=\"java";
44   private final static String JavaDoc TAG_END = "\">";
45   private final static String JavaDoc TAG_CLOSE = "</span>";
46
47   public AbstractJavaSourceToXmlConverter(ConverterMetaData metaData) {
48     super(metaData);
49     setOptions(false, false);
50   }
51
52   /** @deprecated As of Sep 13, 2004 (Markus Gebhard) Only options in the
53    * Java2HtmlConversionOptions are available */

54   public void setOptions(boolean lineNumbers, boolean pre) {
55     this.lineNumbers = lineNumbers;
56     this.pre = pre;
57     foot = getFooter();
58     headEnd = getHeaderEnd();
59     if (pre) {
60       lineEnd = "";
61       space = " "; // normal space
62
}
63     else {
64       lineEnd = "<br />";
65       space = "&#xA0;";
66     }
67   }
68
69   public String JavaDoc getDocumentHeader(JavaSourceConversionOptions options, String JavaDoc title) {
70     return createHeader(options.getStyleTable(), title) + headEnd;
71   }
72
73   public String JavaDoc getDocumentFooter(JavaSourceConversionOptions options) {
74     return foot;
75   }
76
77   protected abstract String JavaDoc createHeader(JavaSourceStyleTable styleTable, String JavaDoc title);
78
79   protected abstract String JavaDoc getHeaderEnd();
80
81   protected abstract String JavaDoc getFooter();
82
83   protected static String JavaDoc createStyleSheet(JavaSourceStyleTable styleTable) {
84     StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
85     buffer.append("td.java, td.java-ln {vertical-align:top;}\n"
86         + "tt.java, tt.java-ln, pre.java, pre.java-ln {line-height:1em; margin-bottom:0em;}\n"
87         + "td.java-ln { text-align:right; }\n"
88         + "tt.java-ln, pre.java-ln { color:#888888 }\n");
89
90     JavaSourceType[] types = JavaSourceType.getAll();
91     for (int i = 0; i < types.length; i++) {
92       appendStyle(buffer, types[i], styleTable);
93     }
94     return buffer.toString();
95   }
96
97   private static void appendStyle(StringBuffer JavaDoc buffer, JavaSourceType type, JavaSourceStyleTable styleTable) {
98     buffer.append("/* " + type.getName() + " */ ");
99     buffer.append("span.java" + type.getID() + " { ");
100     buffer.append("font-size: 10pt; ");
101     buffer.append("color:" + styleTable.get(type).getHtmlColor() + "; ");
102     if (styleTable.get(type).isBold()) {
103       buffer.append("font-weight:bold; ");
104     }
105     if (styleTable.get(type).isItalic()) {
106       buffer.append("font-style:italic; ");
107     }
108     buffer.append("}\n");
109   }
110
111   public String JavaDoc getBlockSeparator(JavaSourceConversionOptions options) {
112     return "";
113   }
114
115   protected void toXml(String JavaDoc sourceCode, JavaSourceType[] sourceTypes, int start, int end, BufferedWriter JavaDoc writer)
116       throws IOException JavaDoc {
117     writer.write(TAG_START + sourceTypes[start].getID() + TAG_END);
118
119     String JavaDoc t = HtmlUtilities.encode(sourceCode, start, end + 1, "\r\n ");
120
121     for (int i = 0; i < t.length(); ++i) {
122       char ch = t.charAt(i);
123       if (ch == ' ')
124         if ((i < t.length() - 1) && (t.charAt(i + 1) == ' ')) {
125           writer.write(space);
126         }
127         else {
128           writer.write(" ");
129         }
130       else if (ch == '\n') {
131         writer.write(lineEnd + "\n");
132       }
133       else if (ch != '\r') {
134         writer.write(ch);
135       }
136     }
137
138     writer.write(TAG_CLOSE);
139   }
140 }
Popular Tags