protected void handleStartTag()

in doxia-modules/doxia-module-fml/src/main/java/org/apache/maven/doxia/module/fml/FmlParser.java [119:205]


    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);
        }
    }