package org.jtwig.functions.impl.control; import com.google.common.base.Optional; import org.jtwig.escape.EscapeEngine; import org.jtwig.escape.HtmlEscapeEngine; import org.jtwig.escape.NoneEscapeEngine; import org.jtwig.functions.FunctionRequest; import org.jtwig.functions.SimpleJtwigFunction; public class EscapeFunction extends SimpleJtwigFunction { @Override public String name() { return "escape"; } @Override public Object execute(final FunctionRequest request) { request.minimumNumberOfArguments(1); request.maximumNumberOfArguments(2); EscapeEngine escapeEngine = HtmlEscapeEngine.instance(); if (request.getNumberOfArguments() == 2) { if (request.get(1) instanceof Boolean) { if (!(boolean) request.get(1)) { escapeEngine = NoneEscapeEngine.instance(); } } else { String requestedEscapeMode = request.getEnvironment().getValueEnvironment().getStringConverter().convert(request.get(1)); Optional<EscapeEngine> optionalEscapeEngine = request.getEnvironment().getEscapeEnvironment().getEscapeEngineSelector().escapeEngineFor(requestedEscapeMode); if (optionalEscapeEngine.isPresent()) { escapeEngine = optionalEscapeEngine.get(); } else { throw request.exception(String.format("Invalid escape engine requested '%s'. Only supporting %s", requestedEscapeMode, request.getEnvironment().getEscapeEnvironment().getEscapeEngineSelector().availableEscapeEngines())); } } } Object value = request.get(0); request.getRenderContext().set(EscapeEngine.class, escapeEngine); return value; } }