in doxia-modules/doxia-module-fml/src/main/java/org/apache/maven/doxia/module/fml/FmlParser.java [118:204]
protected void handleStartTag(XmlPullParser parser, Sink sink)
throws XmlPullParserException, MacroExecutionException {
if (parser.getName().equals(FAQS_TAG.toString())) {
String title = parser.getAttributeValue(null, "title");
if (title != null) {
faqs.setTitle(title);
}
String toplink = parser.getAttributeValue(null, "toplink");
if (toplink != null) {
if (toplink.equalsIgnoreCase("true")) {
faqs.setToplink(true);
} else {
faqs.setToplink(false);
}
}
} else if (parser.getName().equals(PART_TAG.toString())) {
currentPart = new Part();
currentPart.setId(parser.getAttributeValue(null, Attribute.ID.toString()));
if (currentPart.getId() == null) {
throw new XmlPullParserException("id attribute required for <part> at: (" + parser.getLineNumber() + ":"
+ parser.getColumnNumber() + ")");
} else if (!DoxiaUtils.isValidId(currentPart.getId())) {
String linkAnchor = DoxiaUtils.encodeId(currentPart.getId());
LOGGER.debug("Modified invalid link '{}' to '{}'", currentPart.getId(), linkAnchor);
currentPart.setId(linkAnchor);
}
} else if (parser.getName().equals(TITLE.toString())) {
buffer = new StringBuilder();
buffer.append(LESS_THAN).append(parser.getName()).append(GREATER_THAN);
} else if (parser.getName().equals(FAQ_TAG.toString())) {
currentFaq = new Faq();
currentFaq.setId(parser.getAttributeValue(null, Attribute.ID.toString()));
if (currentFaq.getId() == null) {
throw new XmlPullParserException("id attribute required for <faq> at: (" + parser.getLineNumber() + ":"
+ parser.getColumnNumber() + ")");
} else if (!DoxiaUtils.isValidId(currentFaq.getId())) {
String linkAnchor = DoxiaUtils.encodeId(currentFaq.getId());
LOGGER.debug("Modified invalid link '{}' to '{}'", currentFaq.getId(), linkAnchor);
currentFaq.setId(linkAnchor);
}
} else if (parser.getName().equals(QUESTION_TAG.toString())) {
buffer = new StringBuilder();
buffer.append(LESS_THAN).append(parser.getName()).append(GREATER_THAN);
} else if (parser.getName().equals(ANSWER_TAG.toString())) {
buffer = new StringBuilder();
buffer.append(LESS_THAN).append(parser.getName()).append(GREATER_THAN);
}
// ----------------------------------------------------------------------
// Macro
// ----------------------------------------------------------------------
else if (parser.getName().equals(MACRO_TAG.toString())) {
handleMacroStart(parser);
} else if (parser.getName().equals(PARAM.toString())) {
handleParamStart(parser, sink);
} else if (buffer != null) {
buffer.append(LESS_THAN).append(parser.getName());
int count = parser.getAttributeCount();
for (int i = 0; i < count; i++) {
buffer.append(SPACE).append(parser.getAttributeName(i));
buffer.append(EQUAL).append(QUOTE);
// TODO: why are attribute values HTML-encoded?
buffer.append(HtmlTools.escapeHTML(parser.getAttributeValue(i)));
buffer.append(QUOTE);
}
buffer.append(GREATER_THAN);
}
}