package com.github.mustachejava.codes; import com.github.mustachejava.Code; import com.github.mustachejava.DefaultMustacheFactory; import com.github.mustachejava.Mustache; import com.github.mustachejava.TemplateContext; import com.github.mustachejava.util.InternalArrayList; import com.github.mustachejava.util.Node; import java.io.Writer; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * Default Mustache */ public class DefaultMustache extends DefaultCode implements Mustache { private Code[] codes; private boolean inited = false; public DefaultMustache(TemplateContext tc, DefaultMustacheFactory df, Code[] codes, String name) { super(tc, df, null, name, null); setCodes(codes); } @Override public Code[] getCodes() { return codes; } public Writer run(Writer writer, List<Object> scopes) { if (codes != null) { for (Code code : codes) { writer = code.execute(writer, scopes); } } return writer; } @Override public Node invert(String text) { return invert(new Node(), text, new AtomicInteger(0)); } @Override public void setCodes(Code[] newcodes) { codes = newcodes; } @Override public Writer execute(Writer writer, List<Object> scopes) { if (!(scopes instanceof InternalArrayList)) { scopes = new InternalArrayList<>(scopes); } return super.execute(writer, scopes); } @Override public void identity(Writer writer) { // No self output at the top level runIdentity(writer); } @Override public synchronized void init() { if (!inited) { inited = true; super.init(); } } // Used for an optimization in PartialCode private boolean isRecursive = false; public boolean isRecursive() { return isRecursive; } public void setRecursive() { isRecursive = true; } }