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