Coverage Report - org.webslinger.ext.wiki.WikiMacroOutput
 
Classes in this File Line Coverage Branch Coverage Complexity
WikiMacroOutput
83%
85/102
100%
2/2
0
WikiMacroOutput$1
N/A
N/A
0
WikiMacroOutput$Plugin
0%
0/4
N/A
0
WikiMacroOutput$Plugin$1
0%
0/2
N/A
0
WikiMacroOutput$Plugin$2
0%
0/4
N/A
0
WikiMacroOutput$Plugin$3
0%
0/4
0%
0/1
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  
 import java.util.Map;
 8  
 
 9  
 import org.webslinger.commons.vfs.FileResolver;
 10  
 import org.webslinger.ext.wiki.parser.*;
 11  
 import org.webslinger.ext.wiki.WikiMarkup;
 12  
 import org.webslinger.ext.wiki.WikiUtil;
 13  
 
 14  3
 public abstract class WikiMacroOutput extends AbstractWikiVisitor {
 15  0
     protected enum Plugin {
 16  0
         NOT_SUPPORTED {
 17  
             public Object visit(WikiMacroOutput output, String fullName, WikiXml node, Object data) {
 18  0
                 throw new IllegalArgumentException("Xml(" + node.getName() + ") not supported");
 19  
             }
 20  
         },
 21  
 
 22  0
         EXISTS {
 23  
             public Object visit(WikiMacroOutput output, String fullName, WikiXml node, Object data) {
 24  0
                 output.startXml(fullName, node.getAttributes());
 25  
                     try {
 26  0
                         return output.visitChildren(node, data);
 27  
                     } finally {
 28  0
                         output.endXml(fullName, node.getAttributes());
 29  
                     }
 30  
             }
 31  
         },
 32  
 
 33  0
         BLOCK {
 34  
             public Object visit(WikiMacroOutput output, String fullName, WikiXml node, Object data) {
 35  0
                 if (node.jjtGetNumChildren() > 0) throw new IllegalArgumentException("Xml(" + node.getName() + ") does not support children");
 36  0
                 output.acceptXml(fullName, node.getAttributes());
 37  0
                 return data;
 38  
             }
 39  
         };
 40  
 
 41  
         protected abstract Object visit(WikiMacroOutput output, String fullName, WikiXml node, Object data);
 42  
     };
 43  
     // FIXME: variable/control nodes
 44  
 
 45  
     public Object visit(WikiTransclude node, Object data) {
 46  0
         throw new UnsupportedOperationException("Transclude not supported");
 47  
     }
 48  
 
 49  
     public Object visit(WikiTranscludeTarget node, Object data) {
 50  0
         throw new UnsupportedOperationException("TranscludeTarget not supported");
 51  
     }
 52  
 
 53  
     public Object visit(WikiTranscludeParam node, Object data) {
 54  0
         throw new UnsupportedOperationException("TranscludeParam not supported");
 55  
     }
 56  
 
 57  
     protected void appendText(StringBuilder sb, Node node) {
 58  10
         if (node instanceof WikiText) sb.append(((WikiText) node).getText());
 59  10
         super.appendText(sb, node);
 60  10
     }
 61  
 
 62  
     public Object visit(WikiXml node, Object data) {
 63  0
         String fullName = "WikiXml" + WikiUtil.cleanLink(node.getName());
 64  0
         return detectXml(fullName, data).visit(this, fullName, node, data);
 65  
     }
 66  
 
 67  
     public Object visit(WikiBold node, Object data) {
 68  2
         startMacro("WikiBold");
 69  
         try {
 70  2
             return visitChildren(node, data);
 71  
         } finally {
 72  2
             endMacro("WikiBold");
 73  
         }
 74  
     }
 75  
 
 76  
     public Object visit(WikiBreak node, Object data) {
 77  0
         acceptMacro("WikiBreak");
 78  0
         return data;
 79  
     }
 80  
 
 81  
     public Object visit(WikiDivClass node, Object data) {
 82  1
         startMacro("WikiDivClass", "name", node.getClassName());
 83  
         try {
 84  1
             return visitChildren(node, data);
 85  
         } finally {
 86  1
             endMacro("WikiDivClass");
 87  
         }
 88  
     }
 89  
 
 90  
     public Object visit(WikiDivStyle node, Object data) {
 91  1
         startMacro("WikiDivStyle", "style", node.getStyle());
 92  
         try {
 93  1
             return visitChildren(node, data);
 94  
         } finally {
 95  1
             endMacro("WikiDivStyle");
 96  
         }
 97  
     }
 98  
 
 99  
     public Object visit(WikiHeader node, Object data) {
 100  5
         startMacro("WikiHeading", "level", new Integer(node.getLength()), "label", getText(node));
 101  
         try {
 102  5
             return visitChildren(node, data);
 103  
         } finally {
 104  5
             endMacro("WikiHeading");
 105  5
             blockNewline();
 106  
         }
 107  
     }
 108  
 
 109  
     public Object visit(WikiHR node, Object data) {
 110  0
         acceptMacro("WikiRule");
 111  0
         return data;
 112  
     }
 113  
 
 114  
     public Object visit(WikiItalics node, Object data) {
 115  1
         startMacro("WikiItalics");
 116  
         try {
 117  1
             return visitChildren(node, data);
 118  
         } finally {
 119  1
             endMacro("WikiItalics");
 120  
         }
 121  
     }
 122  
 
 123  
     public Object visit(WikiLink node, Object data) {
 124  
         String link, title;
 125  13
         if (node.jjtGetNumChildren() > 1) {
 126  4
             title = ((WikiText) node.jjtGetChild(0).jjtGetChild(0)).getText();
 127  4
             link = ((WikiText) node.jjtGetChild(1).jjtGetChild(0)).getText();
 128  
         } else {
 129  9
             link = ((WikiText) node.jjtGetChild(0).jjtGetChild(0)).getText();
 130  9
             title = null;
 131  
         }
 132  13
         acceptMacro("WikiLink", "type", new Integer(WikiMarkup.LINK_HYPER), "target", link, "text", title);
 133  13
         return data;
 134  
     }
 135  
 
 136  
     public Object visit(WikiListItem node, Object data) {
 137  6
         startMacro("WikiListItem");
 138  
         try {
 139  6
             return visitChildren(node, data);
 140  
         } finally {
 141  6
             endMacro("WikiListItem");
 142  
         }
 143  
     }
 144  
 
 145  
     public Object visit(WikiMono node, Object data) {
 146  1
         startMacro("WikiMono");
 147  
         try {
 148  1
             return visitChildren(node, data);
 149  
         } finally {
 150  1
             endMacro("WikiMono");
 151  
         }
 152  
     }
 153  
 
 154  
     public Object visit(WikiOrderedList node, Object data) {
 155  1
         startMacro("WikiList", "type", new Integer(0));
 156  
         try {
 157  1
             return visitChildren(node, data);
 158  
         } finally {
 159  1
             endMacro("WikiList");
 160  1
             blockNewline();
 161  
         }
 162  
     }
 163  
 
 164  
     public Object visit(WikiPage node, Object data) {
 165  3
         return visitChildren(node, data);
 166  
     }
 167  
 
 168  
     public Object visit(WikiParagraph node, Object data) {
 169  2
         startMacro("WikiParagraph");
 170  
         try {
 171  2
             return visitChildren(node, data);
 172  
         } finally {
 173  2
             endMacro("WikiParagraph");
 174  2
             blockNewline();
 175  
         }
 176  
     }
 177  
 
 178  
     public Object visit(WikiPre node, Object data) {
 179  1
         startMacro("WikiPre");
 180  
         try {
 181  1
             return visitChildren(node, data);
 182  
         } finally {
 183  1
             endMacro("WikiPre");
 184  
         }
 185  
     }
 186  
 
 187  
     public Object visit(WikiSpace node, Object data) {
 188  5
         acceptText(" ");
 189  5
         return data;
 190  
     }
 191  
 
 192  
     public Object visit(WikiTable node, Object data) {
 193  1
         startMacro("WikiTable");
 194  
         try {
 195  1
             return visitChildren(node, data);
 196  
         } finally {
 197  1
             endMacro("WikiTable");
 198  1
             blockNewline();
 199  
         }
 200  
     }
 201  
 
 202  
     public Object visit(WikiTableCaption node, Object data) {
 203  0
         throw new UnsupportedOperationException("TableCaption not supported");
 204  
     }
 205  
 
 206  
     public Object visit(WikiTableData node, Object data) {
 207  10
         startMacro("WikiTableCell");
 208  
         try {
 209  10
             return visitChildren(node, data);
 210  
         } finally {
 211  10
             endMacro("WikiTableCell");
 212  
         }
 213  
     }
 214  
 
 215  
     public Object visit(WikiTableHeader node, Object data) {
 216  1
         startMacro("WikiTableHeading");
 217  
         try {
 218  1
             return visitChildren(node, data);
 219  
         } finally {
 220  1
             endMacro("WikiTableHeading");
 221  
         }
 222  
     }
 223  
 
 224  
     public Object visit(WikiTableRow node, Object data) {
 225  2
         startMacro("WikiTableRow");
 226  
         try {
 227  2
             return visitChildren(node, data);
 228  
         } finally {
 229  2
             endMacro("WikiTableRow");
 230  2
             blockNewline();
 231  
         }
 232  
     }
 233  
 
 234  
     public Object visit(WikiTerm node, Object data) {
 235  1
         startMacro("WikiDefinition");
 236  1
         startMacro("WikiTerm");
 237  1
         acceptText(node.getTerm());
 238  1
         endMacro("WikiTerm");
 239  1
         startMacro("WikiExplanation");
 240  
         try {
 241  1
             return visitChildren(node, data);
 242  
         } finally {
 243  1
             endMacro("WikiExplanation");
 244  1
             endMacro("WikiDefinition");
 245  
         }
 246  
     }
 247  
 
 248  
     public Object visit(WikiText node, Object data) {
 249  33
         acceptText(node.getText());
 250  33
         return data;
 251  
     }
 252  
 
 253  
     public Object visit(WikiUnorderedList node, Object data) {
 254  1
         startMacro("WikiList", "type", new Integer(1));
 255  
         try {
 256  1
             return visitChildren(node, data);
 257  
         } finally {
 258  1
             endMacro("WikiList");
 259  1
             blockNewline();
 260  
         }
 261  
     }
 262  
 
 263  
     protected void acceptMacro(String name, String arg1Name, Object arg1Value, String arg2Name, Object arg2Value, String arg3Name, Object arg3Value) {
 264  13
         acceptMacro(name, new Object[] {arg1Name, arg1Value, arg2Name, arg2Value, arg3Name, arg3Value});
 265  13
     }
 266  
 
 267  
     protected void acceptMacro(String name, String arg1Name, Object arg1Value, String arg2Name, Object arg2Value) {
 268  0
         acceptMacro(name, new Object[] {arg1Name, arg1Value, arg2Name, arg2Value});
 269  0
     }
 270  
 
 271  
     protected void acceptMacro(String name, String argName, Object argValue) {
 272  0
         acceptMacro(name, new Object[] {argName, argValue});
 273  0
     }
 274  
 
 275  
     protected void acceptMacro(String name) {
 276  0
         acceptMacro(name, new Object[0]);
 277  0
     }
 278  
 
 279  
     protected void startMacro(String name, String arg1Name, Object arg1Value, String arg2Name, Object arg2Value) {
 280  5
         startMacro(name, new Object[] {arg1Name, arg1Value, arg2Name, arg2Value});
 281  5
     }
 282  
 
 283  
     protected void startMacro(String name, String argName, Object argValue) {
 284  4
         startMacro(name, new Object[] {argName, argValue});
 285  4
     }
 286  
 
 287  
     protected void startMacro(String name) {
 288  30
         startMacro(name, new Object[0]);
 289  30
     }
 290  
 
 291  
     protected void endMacro(String name) {
 292  39
         endMacro(name, new Object[0]);
 293  39
     }
 294  
 
 295  
     protected Plugin detectXml(String name, Object data) {
 296  0
         return Plugin.NOT_SUPPORTED;
 297  
     }
 298  
 
 299  
     protected abstract void acceptText(String text);
 300  
     protected abstract void acceptMacro(String name, Object[] args);
 301  
     protected abstract void startMacro(String name, Object[] args);
 302  
     protected abstract void endMacro(String name, Object[] args);
 303  
     protected abstract void acceptXml(String name, Map attributes);
 304  
     protected abstract void startXml(String name, Map attributes);
 305  
     protected abstract void endXml(String name, Map attributes);
 306  
     protected abstract void blockNewline();
 307  
 }