public PluginInvoke invoke()

in src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TemplatePlugin.java [43:86]


    public PluginInvoke invoke(final Expression expressionNode, final PluginCallInfo callInfo, CompilerContext compilerContext) {
        final String templateName = decodeName(callInfo);

        return new DefaultPluginInvoke() {

            @Override
            public void beforeTagOpen(PushStream stream) {
                //ignoring template tags
                Patterns.beginStreamIgnore(stream);
            }

            @Override
            public void beforeElement(PushStream stream, String tagName) {
                Set<String> parameters = extractParameters();
                stream.write(new Procedure.Start(templateName, parameters));
            }

            @Override
            public void afterElement(PushStream stream) {
                stream.write(Procedure.END);
            }

            @Override
            public void afterTagOpen(PushStream stream) {
                Patterns.endStreamIgnore(stream); //resuming normal operation
            }

            @Override
            public void beforeTagClose(PushStream stream, boolean isSelfClosing) {
                Patterns.beginStreamIgnore(stream); //ignoring closing tags
            }

            @Override
            public void afterTagClose(PushStream stream, boolean isSelfClosing) {
                Patterns.endStreamIgnore(stream);
            }

            private Set<String> extractParameters() {
                Map<String, ExpressionNode> options = expressionNode.getOptions();
                return options.keySet();
            }

        };
    }