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