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 protected void handleStartTag(XmlPullParser parser, Sink sink)
43 throws XmlPullParserException, MacroExecutionException {
44 isEmptyElement = parser.isEmptyElementTag();
45
46 if (parser.getName().equals(QUESTION_TAG.toString())
47 || parser.getName().equals(TITLE.toString())
48 || parser.getName().equals(ANSWER_TAG.toString())) {
49
50 return;
51 } else if (parser.getName().equals(SOURCE_TAG.toString())) {
52 verbatim();
53
54 sink.verbatim(SinkEventAttributeSet.SOURCE);
55 } else if (!baseStartTag(parser, sink)) {
56 if (isEmptyElement) {
57 handleUnknown(parser, sink, TAG_TYPE_SIMPLE);
58 } else {
59 handleUnknown(parser, sink, TAG_TYPE_START);
60 }
61
62 LOGGER.warn(
63 "Unrecognized fml tag <{}> at [{}:{}]",
64 parser.getName(),
65 parser.getLineNumber(),
66 parser.getColumnNumber());
67 }
68 }
69
70 protected void handleEndTag(XmlPullParser parser, Sink sink)
71 throws XmlPullParserException, MacroExecutionException {
72 if (parser.getName().equals(QUESTION_TAG.toString())
73 || parser.getName().equals(TITLE.toString())
74 || parser.getName().equals(ANSWER_TAG.toString())) {
75
76 return;
77 } else if (parser.getName().equals(SOURCE_TAG.toString())) {
78 verbatim_();
79
80 sink.verbatim_();
81 } else if (!baseEndTag(parser, sink)) {
82 if (!isEmptyElement) {
83 handleUnknown(parser, sink, TAG_TYPE_END);
84 }
85 }
86
87 isEmptyElement = false;
88 }
89
90
91
92
93 protected void init() {
94 super.init();
95
96 this.isEmptyElement = false;
97 }
98 }