package com.hubspot.jinjava.lib.tag; import org.apache.commons.lang3.StringUtils; import com.hubspot.jinjava.doc.annotations.JinjavaDoc; import com.hubspot.jinjava.doc.annotations.JinjavaSnippet; import com.hubspot.jinjava.interpret.JinjavaInterpreter; import com.hubspot.jinjava.tree.Node; import com.hubspot.jinjava.tree.TagNode; @JinjavaDoc( value = "Process all inner HubL as plain text", snippets = { @JinjavaSnippet( code = "{% raw %}\n" + " The personalization token for a contact's first name is {{ contact.firstname }}\n" + "{% endraw %}" ), }) public class RawTag implements Tag { private static final long serialVersionUID = -6963360187396753883L; @Override public String getName() { return "raw"; } @Override public String getEndTagName() { return "endraw"; } @Override public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) { StringBuilder result = new StringBuilder(); for (Node n : tagNode.getChildren()) { result.append(renderNodeRaw(n)); } return result.toString(); } public String renderNodeRaw(Node n) { StringBuilder result = new StringBuilder(n.getMaster().getImage()); for (Node child : n.getChildren()) { result.append(renderNodeRaw(child)); } if (TagNode.class.isAssignableFrom(n.getClass())) { TagNode t = (TagNode) n; if (StringUtils.isNotBlank(t.getEndName())) { result.append("{% ").append(t.getEndName()).append(" %}"); } } return result.toString(); } }