Coverage Report - org.webslinger.ext.wiki.HtmlOutput
 
Classes in this File Line Coverage Branch Coverage Complexity
HtmlOutput
0%
0/118
0%
0/3
0
 
 1  
 package org.webslinger.ext.wiki;
 2  
 
 3  
 import java.io.StringWriter;
 4  
 import java.util.LinkedList;
 5  
 import java.util.Iterator;
 6  
 import java.util.ListIterator;
 7  
 
 8  
 import org.webslinger.ext.wiki.parser.*;
 9  
 
 10  
 public class HtmlOutput extends AbstractWikiVisitor {
 11  
     // FIXME: variable/control nodes
 12  
     protected final StringWriter writer;
 13  0
     protected StringBuilder indent = new StringBuilder();
 14  
 
 15  0
     public HtmlOutput(StringWriter writer) {
 16  0
         this.writer = writer;
 17  0
     }
 18  
 
 19  
     protected Object visitChildren(SimpleNode node, Object data) {
 20  0
         int length = indent.length();
 21  0
         if (!(node instanceof WikiPage || node instanceof WikiList)) indent.append(' ');
 22  
         try {
 23  0
             return super.visitChildren(node, data);
 24  
         } finally {
 25  0
             indent.setLength(length);
 26  
         }
 27  
     }
 28  
 
 29  
     protected void visitChild(Node parent, Node child, ListIterator<Node> it, Object data) {
 30  0
         super.visitChild(parent, child, it, data);
 31  0
         if (parent instanceof WikiTranscludeTarget && it.hasNext()) writer.write(", ");
 32  0
     }
 33  
 
 34  
     public Object visit(WikiTransclude node, Object data) {
 35  0
         throw new UnsupportedOperationException();
 36  
     }
 37  
 
 38  
     public Object visit(WikiTranscludeTarget node, Object data) {
 39  0
         throw new UnsupportedOperationException();
 40  
     }
 41  
 
 42  
     public Object visit(WikiTranscludeParam node, Object data) {
 43  0
         throw new UnsupportedOperationException();
 44  
     }
 45  
 
 46  
     public Object visit(WikiBold node, Object data) {
 47  0
         writer.write("<b>");
 48  
         try {
 49  0
             return visitChildren(node, data);
 50  
         } finally {
 51  0
             writer.write("</b>");
 52  
         }
 53  
     }
 54  
 
 55  
     public Object visit(WikiBreak node, Object data) {
 56  0
         writer.write("<br />");
 57  0
         return data;
 58  
     }
 59  
 
 60  
     public Object visit(WikiDivClass node, Object data) {
 61  0
         writer.write("<div class=\"");
 62  0
         writer.write(node.getClassName());
 63  0
         writer.write("\">");
 64  
         try {
 65  0
             return visitChildren(node, data);
 66  
         } finally {
 67  0
             writer.write("</div>");
 68  
         }
 69  
     }
 70  
 
 71  
     public Object visit(WikiDivStyle node, Object data) {
 72  0
         writer.write("<div style=\"");
 73  0
         writer.write(node.getStyle());
 74  0
         writer.write("\">");
 75  
         try {
 76  0
             return visitChildren(node, data);
 77  
         } finally {
 78  0
             writer.write("</div>");
 79  
         }
 80  
     }
 81  
 
 82  
     public Object visit(WikiHeader node, Object data) {
 83  0
         writer.write(indent.toString());
 84  0
         writer.write("<h");
 85  0
         writer.write(node.getLength());
 86  0
         writer.write('>');
 87  
         try {
 88  0
             return visitChildren(node, data);
 89  
         } finally {
 90  0
             writer.write("</h");
 91  0
             writer.write(node.getLength());
 92  0
             writer.write(">\n");
 93  
         }
 94  
     }
 95  
 
 96  
     public Object visit(WikiHR node, Object data) {
 97  0
         writer.write("<hr />");
 98  0
         return data;
 99  
     }
 100  
 
 101  
     public Object visit(WikiItalics node, Object data) {
 102  0
         writer.write("<i>");
 103  
         try {
 104  0
             return visitChildren(node, data);
 105  
         } finally {
 106  0
             writer.write("</i>");
 107  
         }
 108  
     }
 109  
 
 110  
     public Object visit(WikiLink node, Object data) {
 111  
         Node link, title;
 112  0
         if (node.jjtGetNumChildren() > 1) {
 113  0
             title = node.jjtGetChild(0);
 114  0
             link = node.jjtGetChild(1);
 115  
         } else {
 116  0
             link = node.jjtGetChild(0);
 117  0
             title = link;
 118  
         }
 119  0
         writer.write("<a href=\"");
 120  0
         link.jjtAccept(this, data);
 121  0
         writer.write("\">");
 122  0
         title.jjtAccept(this, data);
 123  0
         writer.write("</a>");
 124  0
         return data;
 125  
     }
 126  
 
 127  
     public Object visit(WikiListItem node, Object data) {
 128  0
         writer.write(indent.toString());
 129  0
         writer.write("<li>");
 130  
         try {
 131  0
             return visitChildren(node, data);
 132  
         } finally {
 133  0
             writer.write("</li>\n");
 134  
         }
 135  
     }
 136  
 
 137  
     public Object visit(WikiMono node, Object data) {
 138  0
         writer.write("<tt>");
 139  
         try {
 140  0
             return visitChildren(node, data);
 141  
         } finally {
 142  0
             writer.write("</tt>");
 143  
         }
 144  
     }
 145  
 
 146  
     public Object visit(WikiOrderedList node, Object data) {
 147  0
         writer.write(indent.toString());
 148  0
         writer.write("<ol>\n");
 149  
         try {
 150  0
             return visitChildren(node, data);
 151  
         } finally {
 152  0
             writer.write(indent.toString());
 153  0
             writer.write("</ol>\n");
 154  
         }
 155  
     }
 156  
 
 157  
     public Object visit(WikiPage node, Object data) {
 158  0
         writer.write("<style>\n");
 159  0
         writer.write("p {\n");
 160  0
         writer.write(" border: 1px solid green;\n");
 161  0
         writer.write("}\n");
 162  0
         writer.write("</style>\n");
 163  0
         return visitChildren(node, data);
 164  
     }
 165  
 
 166  
     public Object visit(WikiParagraph node, Object data) {
 167  0
         writer.write("\n");
 168  0
         writer.write(indent.toString());
 169  0
         writer.write("<p>");
 170  
         try {
 171  0
             return visitChildren(node, data);
 172  
         } finally {
 173  0
             writer.write("</p>");
 174  
         }
 175  
     }
 176  
 
 177  
     public Object visit(WikiPre node, Object data) {
 178  0
         writer.write("<pre>");
 179  
         try {
 180  0
             return visitChildren(node, data);
 181  
         } finally {
 182  0
             writer.write("</pre>");
 183  
         }
 184  
     }
 185  
 
 186  
     public Object visit(WikiTable node, Object data) {
 187  0
         writer.write(indent.toString());
 188  0
         writer.write("<table border=\"1\">\n");
 189  
         try {
 190  0
             return visitChildren(node, data);
 191  
         } finally {
 192  0
             writer.write(indent.toString());
 193  0
             writer.write("</table>\n");
 194  
         }
 195  
     }
 196  
 
 197  
     public Object visit(WikiTableCaption node, Object data) {
 198  0
         writer.write(indent.toString());
 199  0
         writer.write("<caption>");
 200  
         try {
 201  0
             return visitChildren(node, data);
 202  
         } finally {
 203  0
             writer.write("</caption>\n");
 204  
         }
 205  
     }
 206  
 
 207  
     public Object visit(WikiTableData node, Object data) {
 208  0
         writer.write(indent.toString());
 209  0
         writer.write("<td>");
 210  
         try {
 211  0
             return visitChildren(node, data);
 212  
         } finally {
 213  0
             writer.write("</td>\n");
 214  
         }
 215  
     }
 216  
 
 217  
     public Object visit(WikiTableHeader node, Object data) {
 218  0
         writer.write(indent.toString());
 219  0
         writer.write("<th>");
 220  
         try {
 221  0
             return visitChildren(node, data);
 222  
         } finally {
 223  0
             writer.write("</th>\n");
 224  
         }
 225  
     }
 226  
 
 227  
     public Object visit(WikiTableRow node, Object data) {
 228  0
         writer.write(indent.toString());
 229  0
         writer.write("<tr>\n");
 230  
         try {
 231  0
             return visitChildren(node, data);
 232  
         } finally {
 233  0
             writer.write(indent.toString());
 234  0
             writer.write("</tr>\n");
 235  
         }
 236  
     }
 237  
 
 238  
     public Object visit(WikiTerm node, Object data) {
 239  0
         writer.write("<dl>\n");
 240  0
         writer.write(indent.toString());
 241  0
         writer.write("<dt>");
 242  0
         writer.write(node.getTerm());
 243  0
         writer.append("</dt>\n");
 244  0
         writer.write(indent.toString());
 245  0
         writer.write("<dd>");
 246  
         try {
 247  0
             return visitChildren(node, data);
 248  
         } finally {
 249  0
             writer.write("</dd>\n");
 250  0
             writer.write("</dl>");
 251  
         }
 252  
     }
 253  
 
 254  
     public Object visit(WikiText node, Object data) {
 255  0
         writer.write(node.getText());
 256  0
         return data;
 257  
     }
 258  
 
 259  
     public Object visit(WikiUnorderedList node, Object data) {
 260  0
         writer.write(indent.toString());
 261  0
         writer.write("<ul>\n");
 262  
         try {
 263  0
             return visitChildren(node, data);
 264  
         } finally {
 265  0
             writer.write(indent.toString());
 266  0
             writer.write("</ul>\n");
 267  
         }
 268  
     }
 269  
 }