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 }