package org.jtwig.render.node.renderer; import com.google.common.base.Optional; import org.jtwig.escape.EscapeEngine; import org.jtwig.model.tree.ContentEscapeNode; import org.jtwig.render.RenderRequest; import org.jtwig.renderable.RenderException; import org.jtwig.renderable.Renderable; import org.jtwig.renderable.StringBuilderRenderResult; import org.jtwig.renderable.impl.StringRenderable; import org.jtwig.util.ErrorMessageFormatter; public class ContentEscapeNodeRender implements NodeRender<ContentEscapeNode> { @Override public Renderable render(RenderRequest request, ContentEscapeNode node) { String escapeModeName = node.getEscapeEngineName().or(request.getEnvironment().getEscapeEnvironment().getDefaultEscapeEngine()); Optional<EscapeEngine> escapeEngineOptional = request.getEnvironment().getEscapeEnvironment().getEscapeEngineSelector().escapeEngineFor(escapeModeName); if (escapeEngineOptional.isPresent()) { Renderable renderable = request.getEnvironment().getRenderEnvironment().getRenderNodeService() .render(request, node.getContent()); return new StringRenderable( renderable.appendTo(new StringBuilderRenderResult()).content(), escapeEngineOptional.get() ); } else { throw new RenderException(ErrorMessageFormatter.errorMessage(node.getPosition(), String.format("Invalid escape engine requested '%s'. Only supporting [%s]", escapeModeName, request.getEnvironment().getEscapeEnvironment().getEscapeEngineSelector().availableEscapeEngines()))); } } }