Clover Coverage Report - XWiki Rendering - Parent POM 4.0-SNAPSHOT (Aggregated)
Coverage timestamp: Mon Mar 12 2012 18:03:13 CET
../../../../../../img/srcFileCovDistChart4.png 86% of files have more coverage
182   1,031   137   1.4
12   748   0.75   130
130     1.05  
1    
 
  XWikiGeneratorSink       Line # 56 182 0% 137 215 33.6% 0.33641976
 
  (14)
 
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.internal.parser.doxia;
21   
22    import java.io.StringReader;
23    import java.util.Collections;
24    import java.util.Stack;
25   
26    import org.apache.maven.doxia.logging.Log;
27    import org.apache.maven.doxia.sink.Sink;
28    import org.apache.maven.doxia.sink.SinkEventAttributes;
29    import org.xwiki.rendering.listener.CompositeListener;
30    import org.xwiki.rendering.listener.Format;
31    import org.xwiki.rendering.listener.HeaderLevel;
32    import org.xwiki.rendering.listener.InlineFilterListener;
33    import org.xwiki.rendering.listener.ListType;
34    import org.xwiki.rendering.listener.Listener;
35    import org.xwiki.rendering.listener.MetaData;
36    import org.xwiki.rendering.listener.QueueListener;
37    import org.xwiki.rendering.listener.VoidListener;
38    import org.xwiki.rendering.listener.WrappingListener;
39    import org.xwiki.rendering.listener.reference.ResourceReference;
40    import org.xwiki.rendering.listener.reference.ResourceType;
41    import org.xwiki.rendering.parser.ParseException;
42    import org.xwiki.rendering.parser.ResourceReferenceParser;
43    import org.xwiki.rendering.parser.StreamParser;
44    import org.xwiki.rendering.renderer.PrintRenderer;
45    import org.xwiki.rendering.renderer.PrintRendererFactory;
46    import org.xwiki.rendering.renderer.printer.DefaultWikiPrinter;
47    import org.xwiki.rendering.syntax.Syntax;
48    import org.xwiki.rendering.util.IdGenerator;
49   
50    /**
51    * Transforms Doxia events into XWiki Rendering events.
52    *
53    * @version $Id: 458ffac823f8451b5559a368ad2b6f24e104b79b $
54    * @since 2.1RC1
55    */
 
56    public class XWikiGeneratorSink implements Sink
57    {
58    private Stack<Listener> listener = new Stack<Listener>();
59   
60    private Stack<Object> parameters = new Stack<Object>();
61   
62    private ResourceReferenceParser linkReferenceParser;
63   
64    private IdGenerator idGenerator;
65   
66    private PrintRendererFactory plainRendererFactory;
67   
68    private StreamParser plainParser;
69   
70    private int lineBreaks = 0;
71   
72    private int inlineDepth = 0;
73   
74    private Syntax syntax;
75   
76    private MetaData documentMetadata;
77   
78    private boolean isInVerbatim;
79   
80    private StringBuffer accumulatedText = new StringBuffer();
81   
82    /**
83    * @since 3.0M3
84    */
 
85  15 toggle public XWikiGeneratorSink(Listener listener, ResourceReferenceParser linkReferenceParser,
86    PrintRendererFactory plainRendererFactory, IdGenerator idGenerator, StreamParser plainParser, Syntax syntax)
87    {
88  15 pushListener(listener);
89   
90  15 this.linkReferenceParser = linkReferenceParser;
91  15 this.idGenerator = idGenerator != null ? idGenerator : new IdGenerator();
92  15 this.plainRendererFactory = plainRendererFactory;
93  15 this.plainParser = plainParser;
94  15 this.syntax = syntax;
95  15 this.documentMetadata = new MetaData();
96  15 this.documentMetadata.addMetaData(MetaData.SYNTAX, this.syntax);
97    }
98   
 
99  180 toggle public Listener getListener()
100    {
101  180 return this.listener.peek();
102    }
103   
 
104  36 toggle private Listener pushListener(Listener listener)
105    {
106  36 return this.listener.push(listener);
107    }
108   
 
109  21 toggle private Listener popListener()
110    {
111  21 return this.listener.pop();
112    }
113   
 
114  0 toggle private boolean isInline()
115    {
116  0 return this.inlineDepth > 0;
117    }
118   
 
119  142 toggle private void flushEmptyLines()
120    {
121  142 if (this.lineBreaks > 0) {
122  0 if (isInline()) {
123  0 for (int i = 0; i < this.lineBreaks; ++i) {
124  0 getListener().onNewLine();
125    }
126    } else {
127  0 if (this.lineBreaks >= 2) {
128  0 getListener().onEmptyLines(lineBreaks - 1);
129    } else {
130  0 getListener().onNewLine();
131    }
132    }
133    }
134    }
135   
 
136  4 toggle @Override
137    public void flush()
138    {
139  4 flushEmptyLines();
140    }
141   
 
142  10 toggle @Override
143    public void enableLogging(Log arg0)
144    {
145    // Not used.
146    }
147   
 
148  0 toggle @Override
149    public void anchor(String name, SinkEventAttributes attributes)
150    {
151  0 flushEmptyLines();
152   
153  0 getListener().onId(name);
154    }
155   
 
156  0 toggle @Override
157    public void anchor(String name)
158    {
159  0 anchor(name, null);
160    }
161   
 
162  0 toggle @Override
163    public void anchor_()
164    {
165    // Nothing to do since for XWiki anchors don't have children and thus the XWiki Block is generated in the Sink
166    // anchor start event
167    }
168   
 
169  0 toggle @Override
170    public void author(SinkEventAttributes attributes)
171    {
172    // XWiki's Listener model doesn't support authors. Don't do anything.
173    }
174   
 
175  0 toggle @Override
176    public void author()
177    {
178    // XWiki's Listener model doesn't support authors. Don't do anything.
179    }
180   
 
181  0 toggle @Override
182    public void author_()
183    {
184    // XWiki's Listener model doesn't support authors. Don't do anything.
185    }
186   
 
187  0 toggle @Override
188    public void body(SinkEventAttributes attributes)
189    {
190  0 body();
191    }
192   
 
193  15 toggle @Override
194    public void body()
195    {
196  15 getListener().beginDocument(this.documentMetadata);
197    }
198   
 
199  15 toggle @Override
200    public void body_()
201    {
202  15 getListener().endDocument(this.documentMetadata);
203    }
204   
 
205  10 toggle @Override
206    public void bold()
207    {
208  10 flushEmptyLines();
209   
210  10 getListener().beginFormat(Format.BOLD, Listener.EMPTY_PARAMETERS);
211    }
212   
 
213  10 toggle @Override
214    public void bold_()
215    {
216  10 flushEmptyLines();
217   
218  10 getListener().endFormat(Format.BOLD, Listener.EMPTY_PARAMETERS);
219    }
220   
 
221  4 toggle @Override
222    public void close()
223    {
224    // Not used.
225    }
226   
 
227  0 toggle @Override
228    public void comment(String comment)
229    {
230    // TODO: Not supported yet by the XDOM.
231    }
232   
 
233  0 toggle @Override
234    public void date(SinkEventAttributes attributes)
235    {
236    // XWiki's Listener model doesn't support dates. Don't do anything.
237    }
238   
 
239  0 toggle @Override
240    public void date()
241    {
242    // XWiki's Listener model doesn't support dates. Don't do anything.
243    }
244   
 
245  0 toggle @Override
246    public void date_()
247    {
248    // XWiki's Listener model doesn't support dates. Don't do anything.
249    }
250   
 
251  0 toggle @Override
252    public void definedTerm(SinkEventAttributes attributes)
253    {
254  0 getListener().beginDefinitionTerm();
255   
256  0 ++this.inlineDepth;
257    }
258   
 
259  0 toggle @Override
260    public void definedTerm()
261    {
262  0 definedTerm(null);
263    }
264   
 
265  0 toggle @Override
266    public void definedTerm_()
267    {
268  0 flushEmptyLines();
269   
270    // Limitation: XWiki doesn't use parameters on this Block.
271  0 getListener().endDefinitionTerm();
272   
273  0 --this.inlineDepth;
274    }
275   
 
276  0 toggle @Override
277    public void definition(SinkEventAttributes attributes)
278    {
279  0 getListener().beginDefinitionDescription();
280   
281  0 ++this.inlineDepth;
282    }
283   
 
284  0 toggle @Override
285    public void definition()
286    {
287  0 definition(null);
288    }
289   
 
290  0 toggle @Override
291    public void definition_()
292    {
293  0 flushEmptyLines();
294   
295    // Limitation: XWiki doesn't use parameters on this Block.
296  0 getListener().endDefinitionDescription();
297   
298  0 --this.inlineDepth;
299    }
300   
 
301  0 toggle @Override
302    public void definitionList(SinkEventAttributes attributes)
303    {
304  0 flushEmptyLines();
305   
306  0 getListener().beginDefinitionList(Listener.EMPTY_PARAMETERS);
307    }
308   
 
309  0 toggle @Override
310    public void definitionList()
311    {
312  0 definitionList(null);
313    }
314   
 
315  0 toggle @Override
316    public void definitionList_()
317    {
318    // TODO: Handle parameters
319  0 getListener().endDefinitionList(Listener.EMPTY_PARAMETERS);
320    }
321   
 
322  0 toggle @Override
323    public void definitionListItem(SinkEventAttributes attributes)
324    {
325    // Nothing to do since for XWiki the definition list items are the definition term/descriptions.
326    }
327   
 
328  0 toggle @Override
329    public void definitionListItem()
330    {
331    // Nothing to do since for XWiki the definition list items are the definition term/descriptions.
332    }
333   
 
334  0 toggle @Override
335    public void definitionListItem_()
336    {
337    // Nothing to do since for XWiki the definition list items are the definition term/descriptions.
338    }
339   
 
340  0 toggle @Override
341    public void figure(SinkEventAttributes attributes)
342    {
343    // Nothing to do
344    }
345   
 
346  0 toggle @Override
347    public void figure()
348    {
349    // Nothing to do
350    }
351   
 
352  0 toggle @Override
353    public void figure_()
354    {
355    // Nothing to do
356    }
357   
 
358  0 toggle @Override
359    public void figureCaption(SinkEventAttributes attributes)
360    {
361    // TODO: Handle caption as parameters in the future
362    }
363   
 
364  0 toggle @Override
365    public void figureCaption()
366    {
367  0 figureCaption(null);
368    }
369   
 
370  0 toggle @Override
371    public void figureCaption_()
372    {
373    // TODO: Handle caption as parameters in the future
374    }
375   
 
376  0 toggle @Override
377    public void figureGraphics(String source, SinkEventAttributes attributes)
378    {
379  0 flushEmptyLines();
380   
381    // TODO: Handle image to attachments. For now we only handle URLs.
382  0 getListener().onImage(new ResourceReference(source, ResourceType.URL), false, Listener.EMPTY_PARAMETERS);
383    }
384   
 
385  0 toggle @Override
386    public void figureGraphics(String source)
387    {
388  0 figureGraphics(source, null);
389    }
390   
 
391  10 toggle @Override
392    public void head(SinkEventAttributes sinkEventAttributes)
393    {
394  10 head();
395    }
396   
 
397  14 toggle @Override
398    public void head()
399    {
400    // When in head don't output anything
401  14 pushListener(new VoidListener());
402    }
403   
 
404  14 toggle @Override
405    public void head_()
406    {
407    // Start generating stuff again...
408  14 popListener();
409    }
410   
 
411  0 toggle @Override
412    public void horizontalRule(SinkEventAttributes attributes)
413    {
414  0 flushEmptyLines();
415   
416    // TODO: Handle parameters
417  0 getListener().onHorizontalLine(Listener.EMPTY_PARAMETERS);
418    }
419   
 
420  0 toggle @Override
421    public void horizontalRule()
422    {
423  0 horizontalRule(null);
424    }
425   
 
426  4 toggle @Override
427    public void italic()
428    {
429  4 flushEmptyLines();
430   
431  4 getListener().beginFormat(Format.ITALIC, Listener.EMPTY_PARAMETERS);
432    }
433   
 
434  4 toggle @Override
435    public void italic_()
436    {
437  4 flushEmptyLines();
438   
439  4 getListener().endFormat(Format.ITALIC, Listener.EMPTY_PARAMETERS);
440    }
441   
 
442  0 toggle @Override
443    public void lineBreak(SinkEventAttributes attributes)
444    {
445  0 ++this.lineBreaks;
446    }
447   
 
448  0 toggle @Override
449    public void lineBreak()
450    {
451  0 lineBreak(null);
452    }
453   
 
454  1 toggle @Override
455    public void link(String name, SinkEventAttributes attributes)
456    {
457  1 flushEmptyLines();
458   
459  1 ResourceReference resourceReference = this.linkReferenceParser.parse(name);
460   
461  1 getListener().beginLink(resourceReference, false, Listener.EMPTY_PARAMETERS);
462   
463  1 this.parameters.push(resourceReference);
464    }
465   
 
466  1 toggle @Override
467    public void link(String name)
468    {
469  1 link(name, null);
470    }
471   
 
472  1 toggle @Override
473    public void link_()
474    {
475  1 flushEmptyLines();
476   
477  1 getListener().endLink((ResourceReference) this.parameters.pop(), false, Listener.EMPTY_PARAMETERS);
478    }
479   
 
480  0 toggle @Override
481    public void list(SinkEventAttributes attributes)
482    {
483  0 flushEmptyLines();
484   
485    // TODO: Handle parameters
486  0 getListener().beginList(ListType.BULLETED, Listener.EMPTY_PARAMETERS);
487    }
488   
 
489  0 toggle @Override
490    public void list()
491    {
492  0 list(null);
493    }
494   
 
495  0 toggle @Override
496    public void list_()
497    {
498  0 getListener().endList(ListType.BULLETED, Listener.EMPTY_PARAMETERS);
499    }
500   
 
501  0 toggle @Override
502    public void listItem(SinkEventAttributes attributes)
503    {
504    // TODO: Handle parameters
505  0 getListener().beginListItem();
506   
507  0 ++this.inlineDepth;
508    }
509   
 
510  0 toggle @Override
511    public void listItem()
512    {
513  0 listItem(null);
514    }
515   
 
516  0 toggle @Override
517    public void listItem_()
518    {
519  0 flushEmptyLines();
520   
521  0 getListener().endListItem();
522   
523  0 --this.inlineDepth;
524    }
525   
 
526  0 toggle @Override
527    public void monospaced()
528    {
529  0 flushEmptyLines();
530   
531  0 getListener().beginFormat(Format.MONOSPACE, Listener.EMPTY_PARAMETERS);
532    }
533   
 
534  0 toggle @Override
535    public void monospaced_()
536    {
537  0 flushEmptyLines();
538   
539  0 getListener().endFormat(Format.MONOSPACE, Listener.EMPTY_PARAMETERS);
540    }
541   
 
542  0 toggle @Override
543    public void nonBreakingSpace()
544    {
545  0 flushEmptyLines();
546   
547  0 getListener().onSpace();
548    }
549   
 
550  0 toggle @Override
551    public void numberedList(int numbering, SinkEventAttributes sinkEventAttributes)
552    {
553  0 flushEmptyLines();
554   
555  0 getListener().beginList(ListType.NUMBERED, Listener.EMPTY_PARAMETERS);
556    }
557   
 
558  0 toggle @Override
559    public void numberedList(int numbering)
560    {
561  0 numberedList(numbering, null);
562    }
563   
 
564  0 toggle @Override
565    public void numberedList_()
566    {
567  0 getListener().endList(ListType.NUMBERED, Listener.EMPTY_PARAMETERS);
568    }
569   
 
570  0 toggle @Override
571    public void numberedListItem(SinkEventAttributes attributes)
572    {
573  0 getListener().beginListItem();
574   
575  0 ++this.inlineDepth;
576    }
577   
 
578  0 toggle @Override
579    public void numberedListItem()
580    {
581  0 numberedListItem(null);
582    }
583   
 
584  0 toggle @Override
585    public void numberedListItem_()
586    {
587  0 flushEmptyLines();
588   
589  0 getListener().endListItem();
590   
591  0 --this.inlineDepth;
592    }
593   
 
594  0 toggle @Override
595    public void pageBreak()
596    {
597    // Not supported in XWiki.
598    }
599   
 
600  15 toggle @Override
601    public void paragraph(SinkEventAttributes attributes)
602    {
603  15 flushEmptyLines();
604   
605    // TODO: handle parameters
606  15 getListener().beginParagraph(Listener.EMPTY_PARAMETERS);
607   
608  15 ++this.inlineDepth;
609    }
610   
 
611  6 toggle @Override
612    public void paragraph()
613    {
614  6 paragraph(null);
615    }
616   
 
617  15 toggle @Override
618    public void paragraph_()
619    {
620  15 flushEmptyLines();
621   
622  15 getListener().endParagraph(Listener.EMPTY_PARAMETERS);
623   
624  15 --this.inlineDepth;
625    }
626   
 
627  0 toggle @Override
628    public void rawText(String text)
629    {
630  0 flushEmptyLines();
631   
632  0 getListener().onVerbatim(text, isInline(), Listener.EMPTY_PARAMETERS);
633    }
634   
 
635  7 toggle @Override
636    public void section(int level, SinkEventAttributes attributes)
637    {
638  7 flushEmptyLines();
639   
640  7 getListener().beginSection(Listener.EMPTY_PARAMETERS);
641    }
642   
 
643  7 toggle @Override
644    public void section_(int level)
645    {
646  7 flushEmptyLines();
647   
648  7 getListener().endSection(Listener.EMPTY_PARAMETERS);
649    }
650   
 
651  0 toggle @Override
652    public void section1()
653    {
654  0 section(1, null);
655    }
656   
 
657  0 toggle @Override
658    public void section1_()
659    {
660  0 section_(1);
661    }
662   
 
663  0 toggle @Override
664    public void section2()
665    {
666  0 section(2, null);
667    }
668   
 
669  0 toggle @Override
670    public void section2_()
671    {
672  0 section_(2);
673    }
674   
 
675  0 toggle @Override
676    public void section3()
677    {
678  0 section(3, null);
679    }
680   
 
681  0 toggle @Override
682    public void section3_()
683    {
684  0 section_(3);
685    }
686   
 
687  0 toggle @Override
688    public void section4()
689    {
690  0 section(4, null);
691    }
692   
 
693  0 toggle @Override
694    public void section4_()
695    {
696  0 section_(4);
697    }
698   
 
699  0 toggle @Override
700    public void section5()
701    {
702  0 section(5, null);
703    }
704   
 
705  0 toggle @Override
706    public void section5_()
707    {
708  0 section_(5);
709    }
710   
 
711  7 toggle @Override
712    public void sectionTitle(int level, SinkEventAttributes attributes)
713    {
714  7 flushEmptyLines();
715   
716  7 CompositeListener composite = new CompositeListener();
717   
718  7 composite.addListener(new QueueListener());
719  7 composite.addListener(this.plainRendererFactory.createRenderer(new DefaultWikiPrinter()));
720   
721  7 pushListener(composite);
722   
723  7 ++this.inlineDepth;
724    }
725   
 
726  0 toggle @Override
727    public void sectionTitle()
728    {
729    // Should be deprecated in Doxia
730    }
731   
 
732  7 toggle @Override
733    public void sectionTitle_(int level)
734    {
735  7 flushEmptyLines();
736   
737  7 CompositeListener composite = (CompositeListener) getListener();
738   
739  7 QueueListener queue = (QueueListener) composite.getListener(0);
740  7 PrintRenderer renderer = (PrintRenderer) composite.getListener(1);
741   
742  7 popListener();
743   
744  7 HeaderLevel headerLevel = HeaderLevel.parseInt(level);
745  7 String id = this.idGenerator.generateUniqueId("H", renderer.getPrinter().toString());
746   
747  7 getListener().beginHeader(headerLevel, id, Listener.EMPTY_PARAMETERS);
748  7 queue.consumeEvents(getListener());
749  7 getListener().endHeader(headerLevel, id, Listener.EMPTY_PARAMETERS);
750   
751  7 --this.inlineDepth;
752    }
753   
 
754  0 toggle @Override
755    public void sectionTitle_()
756    {
757    // Should be deprecated in Doxia
758    }
759   
 
760  0 toggle @Override
761    public void sectionTitle1()
762    {
763  0 sectionTitle(1, null);
764    }
765   
 
766  0 toggle @Override
767    public void sectionTitle1_()
768    {
769  0 sectionTitle_(1);
770    }
771   
 
772  0 toggle @Override
773    public void sectionTitle2()
774    {
775  0 sectionTitle(2, null);
776    }
777   
 
778  0 toggle @Override
779    public void sectionTitle2_()
780    {
781  0 sectionTitle_(2);
782    }
783   
 
784  0 toggle @Override
785    public void sectionTitle3()
786    {
787  0 sectionTitle(3, null);
788    }
789   
 
790  0 toggle @Override
791    public void sectionTitle3_()
792    {
793  0 sectionTitle_(3);
794    }
795   
 
796  0 toggle @Override
797    public void sectionTitle4()
798    {
799  0 sectionTitle(4, null);
800    }
801   
 
802  0 toggle @Override
803    public void sectionTitle4_()
804    {
805  0 sectionTitle_(4);
806    }
807   
 
808  0 toggle @Override
809    public void sectionTitle5()
810    {
811  0 sectionTitle(5, null);
812    }
813   
 
814  0 toggle @Override
815    public void sectionTitle5_()
816    {
817  0 sectionTitle_(5);
818    }
819   
 
820  0 toggle @Override
821    public void table(SinkEventAttributes attributes)
822    {
823  0 flushEmptyLines();
824   
825    // TODO: Handle parameters
826  0 getListener().beginTable(Listener.EMPTY_PARAMETERS);
827    }
828   
 
829  0 toggle @Override
830    public void table()
831    {
832  0 table(null);
833    }
834   
 
835  0 toggle @Override
836    public void table_()
837    {
838  0 getListener().endTable(Listener.EMPTY_PARAMETERS);
839    }
840   
 
841  0 toggle @Override
842    public void tableCaption(SinkEventAttributes attributes)
843    {
844    // TODO: Handle this
845    }
846   
 
847  0 toggle @Override
848    public void tableCaption()
849    {
850  0 tableCaption(null);
851    }
852   
 
853  0 toggle @Override
854    public void tableCaption_()
855    {
856    // TODO: Handle this
857    }
858   
 
859  0 toggle @Override
860    public void tableCell(SinkEventAttributes attributes)
861    {
862    // TODO: Handle parameters
863  0 getListener().beginTableCell(Listener.EMPTY_PARAMETERS);
864   
865  0 ++this.inlineDepth;
866    }
867   
 
868  0 toggle @Override
869    public void tableCell()
870    {
871  0 tableCell((SinkEventAttributes) null);
872    }
873   
 
874  0 toggle @Override
875    public void tableCell(String width)
876    {
877    // TODO: Handle width
878  0 tableCell((SinkEventAttributes) null);
879    }
880   
 
881  0 toggle @Override
882    public void tableCell_()
883    {
884  0 flushEmptyLines();
885   
886  0 getListener().endTableCell(Listener.EMPTY_PARAMETERS);
887   
888  0 --this.inlineDepth;
889    }
890   
 
891  0 toggle @Override
892    public void tableHeaderCell(SinkEventAttributes attributes)
893    {
894    // TODO: Handle parameters
895  0 getListener().beginTableHeadCell(Listener.EMPTY_PARAMETERS);
896   
897  0 ++this.inlineDepth;
898    }
899   
 
900  0 toggle @Override
901    public void tableHeaderCell()
902    {
903  0 tableHeaderCell((SinkEventAttributes) null);
904    }
905   
 
906  0 toggle @Override
907    public void tableHeaderCell(String width)
908    {
909    // TODO: Handle width
910  0 tableHeaderCell((SinkEventAttributes) null);
911    }
912   
 
913  0 toggle @Override
914    public void tableHeaderCell_()
915    {
916  0 flushEmptyLines();
917   
918  0 getListener().endTableHeadCell(Listener.EMPTY_PARAMETERS);
919   
920  0 --this.inlineDepth;
921    }
922   
 
923  0 toggle @Override
924    public void tableRow(SinkEventAttributes attributes)
925    {
926    // TODO: Handle parameters
927  0 getListener().beginTableRow(Listener.EMPTY_PARAMETERS);
928    }
929   
 
930  0 toggle @Override
931    public void tableRow()
932    {
933  0 tableRow(null);
934    }
935   
 
936  0 toggle @Override
937    public void tableRow_()
938    {
939  0 getListener().endTableRow(Listener.EMPTY_PARAMETERS);
940    }
941   
 
942  0 toggle @Override
943    public void tableRows(int[] arg0, boolean arg1)
944    {
945    // Not supported by XWiki.
946    }
947   
 
948  0 toggle @Override
949    public void tableRows_()
950    {
951    // Not supported by XWiki.
952    }
953   
 
954  50 toggle @Override
955    public void text(String text, SinkEventAttributes attributes)
956    {
957  50 flushEmptyLines();
958   
959  50 if (this.isInVerbatim) {
960  4 this.accumulatedText.append(text);
961  4 return;
962    }
963   
964    // TODO Handle parameters
965    // Since Doxia doesn't generate events at the word level we need to reparse the
966    // text to extract spaces, special symbols and words.
967   
968    // TODO: Use an inline parser. See http://jira.xwiki.org/jira/browse/XWIKI-2748
969  46 WrappingListener inlineFilterListener = new InlineFilterListener();
970  46 inlineFilterListener.setWrappedListener(getListener());
971   
972    // Parse the text using the plain text parser
973  46 try {
974  46 this.plainParser.parse(new StringReader(text), inlineFilterListener);
975    } catch (ParseException e) {
976    // Shouldn't happen since we use a StringReader which shouldn't generate any IO.
977  0 throw new RuntimeException("Failed to parse raw text [" + text + "]", e);
978    }
979    }
980   
 
981  50 toggle @Override
982    public void text(String text)
983    {
984  50 text(text, null);
985    }
986   
 
987  0 toggle @Override
988    public void title(SinkEventAttributes attributes)
989    {
990    // XWiki's Listener model doesn't support titles. Don't do anything.
991    }
992   
 
993  0 toggle @Override
994    public void title()
995    {
996    // XWiki's Listener model doesn't support titles. Don't do anything.
997    }
998   
 
999  0 toggle @Override
1000    public void title_()
1001    {
1002    // XWiki's Listener model doesn't support titles. Don't do anything.
1003    }
1004   
 
1005  2 toggle @Override
1006    public void verbatim(SinkEventAttributes attributes)
1007    {
1008  2 this.isInVerbatim = true;
1009    }
1010   
 
1011  0 toggle @Override
1012    public void verbatim(boolean boxed)
1013    {
1014  0 this.isInVerbatim = true;
1015    }
1016   
 
1017  2 toggle @Override
1018    public void verbatim_()
1019    {
1020    // TODO: Handle inline or not inline for verbatim
1021  2 getListener().onVerbatim(this.accumulatedText.toString(), true, Collections.<String, String>emptyMap());
1022  2 this.accumulatedText.setLength(0);
1023  2 this.isInVerbatim = false;
1024    }
1025   
 
1026  0 toggle @Override
1027    public void unknown(String arg0, Object[] arg1, SinkEventAttributes arg2)
1028    {
1029    // TODO: Not supported yet by the XDOM.
1030    }
1031    }