private void traverseElement()

in src/main/java/org/apache/sling/scripting/sightly/impl/html/dom/TreeTraverser.java [55:111]


    private void traverseElement(TemplateElementNode elem) {
        SightlyCompilerException bubbledError = null;
        StringBuilder offendingInput = new StringBuilder();
        if ("ROOT".equalsIgnoreCase(elem.getName())) {
            traverseChildren(elem);
            return;
        }
        String tagName = elem.getName();

        if (elem.isStartElement()) {
            handler.onOpenTagStart("<" + tagName, tagName);
            try {
                for (TemplateAttribute attribute : elem.getAttributes()) {
                    handler.onAttribute(attribute.getName(), attribute.getValue(), attribute.getQuoteChar());
                }
            } catch (SightlyCompilerException e) {
                if (StringUtils.isEmpty(e.getOffendingInput())) {
                    bubbledError = e;
                    offendingInput.append("<").append(tagName);
                    for (TemplateAttribute attribute : elem.getAttributes()) {
                        String quoteChar = String.valueOf(attribute.getQuoteChar());
                        offendingInput.append(" ").append(attribute.getName());
                        if (StringUtils.isNotEmpty(attribute.getValue())) {
                            offendingInput.append("=").append(quoteChar).append(attribute.getValue()).append(quoteChar);
                        }
                    }
                } else {
                    throw e;
                }
            }
            if (elem.hasEndSlash()) {
                handler.onOpenTagEnd("/>");
                if (bubbledError != null) {
                    offendingInput.append("/>");
                }
            } else {
                handler.onOpenTagEnd(">");
                if (bubbledError != null) {
                    offendingInput.append(">");
                }
            }
            if (bubbledError != null) {
                throw new SightlyCompilerException(bubbledError.getMessage(), offendingInput.toString());
            }
        } else {
            handler.onOpenTagStart("", tagName);
            handler.onOpenTagEnd("");
        }

        traverseChildren(elem);

        if (elem.isHasEndElement()) {
            handler.onCloseTag("</" + elem.getName() + ">");
        } else {
            handler.onCloseTag("");
        }
    }