in src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AttributePlugin.java [268:298]
public void afterAttributes(PushStream stream) {
HashMap<String, ExpressionNode> ignoredLiteralMap = new HashMap<>();
for (String attr : ignored) {
ignoredLiteralMap.put(attr, new BooleanConstant(true));
}
MapLiteral ignoredLiteral = new MapLiteral(ignoredLiteralMap);
String ignoredVar = compilerContext.generateVariable("ignoredAttributes");
stream.write(new VariableBinding.Start(ignoredVar, ignoredLiteral));
String attrNameVar = compilerContext.generateVariable("attrName");
String attrNameEscaped = compilerContext.generateVariable("attrNameEscaped");
String attrIndex = compilerContext.generateVariable("attrIndex");
stream.write(new Loop.Start(attrMapVar, attrNameVar, attrIndex));
stream.write(new VariableBinding.Start(
attrNameEscaped, escapeNode(new Identifier(attrNameVar), MarkupContext.ATTRIBUTE_NAME, null)));
stream.write(new Conditional.Start(attrNameEscaped, true));
String isIgnoredAttr = compilerContext.generateVariable("isIgnoredAttr");
stream.write(new VariableBinding.Start(
isIgnoredAttr, new PropertyAccess(new Identifier(ignoredVar), new Identifier(attrNameVar))));
stream.write(new Conditional.Start(isIgnoredAttr, false));
String attrContent = compilerContext.generateVariable("attrContent");
stream.write(new VariableBinding.Start(attrContent, attributeValueNode(new Identifier(attrNameVar))));
writeAttribute(stream, attrNameEscaped, attrContent);
stream.write(VariableBinding.END); // end of attrContent
stream.write(Conditional.END);
stream.write(VariableBinding.END);
stream.write(Conditional.END);
stream.write(VariableBinding.END);
stream.write(Loop.END);
stream.write(VariableBinding.END);
stream.write(VariableBinding.END);
}