1. Project Clover database Tue Dec 20 2016 21:24:09 CET
  2. Package org.xwiki.rendering.wikimodel.confluence

File ConfluenceExtendedWikiParser.java

 

Coverage histogram

../../../../../img/srcFileCovDistChart6.png
69% of files have more coverage

Code metrics

20
41
14
2
190
135
25
0.61
2.93
7
1.79

Classes

Class Line # Actions
ConfluenceExtendedWikiParser 40 3 0% 2 0
1.0100%
ConfluenceExtendedWikiParser.EnhancedListener 42 38 0% 23 31
0.5571428555.7%
 

Contributing tests

This file is covered by 1 test. .

Source view

1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19    */
20    package org.xwiki.rendering.wikimodel.confluence;
21   
22    import java.io.Reader;
23    import java.io.StringReader;
24    import java.util.ArrayDeque;
25    import java.util.Deque;
26   
27    import org.xwiki.rendering.wikimodel.CompositeListener;
28    import org.xwiki.rendering.wikimodel.IWemListener;
29    import org.xwiki.rendering.wikimodel.WikiParameters;
30    import org.xwiki.rendering.wikimodel.WikiParserException;
31   
32    /**
33    * <pre>
34    * http://confluence.atlassian.com/renderer/notationhelp.action?section=all
35    * </pre>
36    *
37    * @version $Id: c04b35becb6cca45ec6be76266a802f11a7b5b26 $
38    * @since 4.0M1
39    */
 
40    public class ConfluenceExtendedWikiParser extends ConfluenceWikiParser
41    {
 
42    public static class EnhancedListener extends CompositeListener
43    {
44    private Deque<Boolean> fSkipDocument = new ArrayDeque<Boolean>();
45   
 
46  5 toggle public EnhancedListener(IWemListener... listeners)
47    {
48  5 super(listeners);
49    }
50   
 
51  5 toggle @Override
52    public void beginDocument(WikiParameters params)
53    {
54  5 if (!skipDocument()) {
55  5 super.beginDocument(params);
56    }
57    }
58   
 
59  7 toggle @Override
60    public void beginSection(
61    int docLevel,
62    int headerLevel,
63    WikiParameters params)
64    {
65  7 if (!skipDocument()) {
66  7 super.beginSection(docLevel, headerLevel, params);
67    }
68    }
69   
 
70  7 toggle @Override
71    public void beginSectionContent(
72    int docLevel,
73    int headerLevel,
74    WikiParameters params)
75    {
76  7 if (!skipDocument()) {
77  7 super.beginSectionContent(docLevel, headerLevel, params);
78    }
79  7 push(false);
80    }
81   
 
82  5 toggle @Override
83    public void endDocument(WikiParameters params)
84    {
85  5 if (!skipDocument()) {
86  5 super.endDocument(params);
87    }
88    }
89   
 
90  7 toggle @Override
91    public void endSection(
92    int docLevel,
93    int headerLevel,
94    WikiParameters params)
95    {
96  7 if (!skipDocument()) {
97  7 super.endSection(docLevel, headerLevel, params);
98    }
99    }
100   
 
101  7 toggle @Override
102    public void endSectionContent(
103    int docLevel,
104    int headerLevel,
105    WikiParameters params)
106    {
107  7 pop();
108  7 if (!skipDocument()) {
109  7 super.endSectionContent(docLevel, headerLevel, params);
110    }
111    }
112   
 
113  0 toggle @Override
114    public void onMacroBlock(
115    String macroName,
116    WikiParameters params,
117    String content)
118    {
119  0 String type = null;
120  0 if ("note".equals(macroName)) {
121  0 type = "N";
122  0 } else if ("tip".equals(macroName)) {
123  0 type = "T";
124    }
125  0 if (type != null) {
126  0 beginInfoBlock(type, params);
127  0 parseContent(content);
128  0 endInfoBlock(type, params);
129    } else {
130  0 super.onMacroBlock(macroName, params, content);
131    }
132    }
133   
134    /**
135    * @param content
136    * @throws WikiParserException
137    */
 
138  0 toggle private void parseContent(String content)
139    {
140  0 try {
141  0 push(true);
142  0 StringReader reader = new StringReader(content);
143  0 ConfluenceWikiParser parser = new ConfluenceWikiParser();
144  0 parser.parse(reader, this);
145  0 pop();
146    } catch (WikiParserException e) {
147  0 throw new RuntimeException(e);
148    }
149    }
150   
 
151  7 toggle private void pop()
152    {
153  7 fSkipDocument.pop();
154    }
155   
 
156  7 toggle private void push(boolean b)
157    {
158  7 fSkipDocument.push(b);
159    }
160   
 
161  38 toggle private boolean skipDocument()
162    {
163  38 if (fSkipDocument.isEmpty()) {
164  30 return false;
165    }
166  8 Boolean peek = fSkipDocument.peek();
167  8 return peek;
168    }
169    }
170   
171    /**
172    *
173    */
 
174  5 toggle public ConfluenceExtendedWikiParser()
175    {
176  5 super();
177    }
178   
179    /**
180    * @see org.xwiki.rendering.wikimodel.IWikiParser#parse(java.io.Reader,
181    * org.xwiki.rendering.wikimodel.IWemListener)
182    */
 
183  5 toggle @Override
184    public void parse(Reader reader, IWemListener listener)
185    throws WikiParserException
186    {
187  5 IWemListener composite = new EnhancedListener(listener);
188  5 super.parse(reader, composite);
189    }
190    }