001 package de.java2html.converter;
002
003 import java.io.BufferedWriter;
004 import java.io.IOException;
005
006 import de.java2html.javasource.TypedSource;
007 import de.java2html.options.JavaSourceConversionOptions;
008 import de.java2html.options.JavaSourceStyleTable;
009
010 /**
011 * @author Markus Gebhard
012 * @author Christian Hujer (adaption to XHTML 1.1)
013 */
014 public class JavaSource2Xhtml11Converter extends AbstractJavaSourceToXmlConverter {
015
016 private final static String XHTML_HEADER_END = "</head>\n<body>\n";
017 private final static String XHTML_FOOTER = "</body>\n</html>";
018
019 public JavaSource2Xhtml11Converter() {
020 super(new ConverterMetaData("xhtml11", "XHTML 1.1 (with stylesheet)", "xhtml"));
021 }
022
023 @Override
024 protected String getHeaderEnd() {
025 return XHTML_HEADER_END;
026 }
027
028 @Override
029 protected String getFooter() {
030 return XHTML_FOOTER;
031 }
032
033 @Override
034 protected String createHeader(JavaSourceStyleTable styleTable, String title, String charset) {
035 return XML_HEADER + createHeaderStart(styleTable, title, charset);
036 }
037
038 private String createHeaderStart(JavaSourceStyleTable styleTable, String title, String charset) {
039 if (title == null) {
040 title = ""; //$NON-NLS-1$
041 }
042 return "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"
043 + "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n"
044 + "<head>\n<style type=\"text/css\">\n"
045 + createStyleSheet(styleTable)
046 + "</style>\n"
047 + "<meta http-equiv=\"Content-Type\" content=\"application/xhtml+xml; charset="
048 + charset
049 + "\" />\n"
050 + "<title>"
051 + title
052 + "</title>\n";
053 }
054
055 @Override
056 public void convert(TypedSource source, JavaSourceConversionOptions options, BufferedWriter writer)
057 throws IOException {
058 if (source == null) {
059 throw new IllegalStateException("Trying to write out converted code without having source set.");
060 }
061
062 if (options.isShowLineNumbers()) {
063 writer.write("<table class=\"java\">\n<tr class=\"java\">\n<td valign=\"top\" class=\"java-ln\">");
064 writer.write("\n");
065
066 if (isPre()) {
067 writer.write("<pre class=\"java-ln\">");
068 }
069 else {
070 writer.write("<code class=\"java-ln\">");
071 }
072 for (int i = 1; i <= source.getLineCount(); i++) {
073 writer.write(String.valueOf(i) + getLineEnd());
074 writer.write("\n");
075 }
076 if (isPre()) {
077 writer.write("</pre>\n");
078 }
079 else {
080 writer.write("</code>\n");
081 }
082 writer.write("</td>\n");
083 writer.write("<td valign=\"top\" class=\"java\">");
084 writer.write("\n");
085 }
086 else {
087 writer.write("<div class=\"java\">");
088 }
089 if (isPre()) {
090 writer.write("<pre class=\"java\">");
091 }
092 else {
093 writer.write("<code class=\"java\">");
094 }
095 writeCodeToXml(writer, source, options);
096 if (isPre()) {
097 writer.write("</pre>");
098 }
099 else {
100 writer.write("</code>");
101 }
102 if (options.isShowLineNumbers()) {
103 writer.write("</td>\n</tr>\n</table>");
104 }
105 else {
106 writer.write("</div>");
107 }
108 writer.write("\n");
109 }
110 }
|