in src/main/java/org/apache/sling/scripting/sightly/impl/html/dom/TreeTraverser.java [55:115]
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("");
}
}