1 package org.apache.maven.doxia.module.fml;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.doxia.macro.MacroExecutionException;
23 import org.apache.maven.doxia.parser.XhtmlBaseParser;
24 import org.apache.maven.doxia.sink.Sink;
25 import org.apache.maven.doxia.sink.impl.SinkEventAttributeSet;
26 import org.codehaus.plexus.util.xml.pull.XmlPullParser;
27 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
28
29
30
31
32
33
34
35
36 public class FmlContentParser
37 extends XhtmlBaseParser
38 implements FmlMarkup
39 {
40
41 private boolean isEmptyElement;
42
43
44 protected void handleStartTag( XmlPullParser parser, Sink sink )
45 throws XmlPullParserException, MacroExecutionException
46 {
47 isEmptyElement = parser.isEmptyElementTag();
48
49 if ( parser.getName().equals( QUESTION_TAG.toString() )
50 || parser.getName().equals( TITLE.toString() )
51 || parser.getName().equals( ANSWER_TAG.toString() ) )
52 {
53
54 return;
55 }
56 else if ( parser.getName().equals( SOURCE_TAG.toString() ) )
57 {
58 verbatim();
59
60 sink.verbatim( SinkEventAttributeSet.BOXED );
61 }
62 else if ( !baseStartTag( parser, sink ) )
63 {
64 if ( isEmptyElement )
65 {
66 handleUnknown( parser, sink, TAG_TYPE_SIMPLE );
67 }
68 else
69 {
70 handleUnknown( parser, sink, TAG_TYPE_START );
71 }
72
73 if ( getLog().isDebugEnabled() )
74 {
75 String position = "[" + parser.getLineNumber() + ":"
76 + parser.getColumnNumber() + "]";
77 String tag = "<" + parser.getName() + ">";
78
79 getLog().debug( "Unrecognized fml tag: " + tag + " at " + position );
80 }
81 }
82 }
83
84
85 protected void handleEndTag( XmlPullParser parser, Sink sink )
86 throws XmlPullParserException, MacroExecutionException
87 {
88 if ( parser.getName().equals( QUESTION_TAG.toString() )
89 || parser.getName().equals( TITLE.toString() )
90 || parser.getName().equals( ANSWER_TAG.toString() ) )
91 {
92
93 return;
94 }
95 else if ( parser.getName().equals( SOURCE_TAG.toString() ) )
96 {
97 verbatim_();
98
99 sink.verbatim_();
100 }
101 else if ( !baseEndTag( parser, sink ) )
102 {
103 if ( !isEmptyElement )
104 {
105 handleUnknown( parser, sink, TAG_TYPE_END );
106 }
107 }
108
109 isEmptyElement = false;
110 }
111
112
113 protected void init()
114 {
115 super.init();
116
117 this.isEmptyElement = false;
118 }
119 }