All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mustachejava.codes.ExtendCode Maven / Gradle / Ivy

package com.github.mustachejava.codes;

import com.github.mustachejava.Code;
import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache;
import com.github.mustachejava.MustacheException;
import com.github.mustachejava.MustacheFactory;
import com.github.mustachejava.TemplateContext;

import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

/**
 * Extending a template.
 * 

* User: sam * Date: 11/27/11 * Time: 10:39 AM */ public class ExtendCode extends PartialCode { private MustacheFactory mf; public ExtendCode(TemplateContext tc, DefaultMustacheFactory mf, Mustache codes, String name) throws MustacheException { super(tc, mf, codes, "<", name); this.mf = mf; } private Code[] replaceCodes(Code[] supercodes, Map replaceMap) { Code[] newcodes = supercodes.clone(); for (int i = 0; i < supercodes.length; i++) { Code code = supercodes[i]; if (code instanceof ExtendNameCode) { ExtendNameCode enc = (ExtendNameCode) code; ExtendNameCode extendReplaceCode = replaceMap.get(enc.getName()); if (extendReplaceCode != null) { newcodes[i] = extendReplaceCode; extendReplaceCode.appended = enc.appended; } else { enc.setCodes(replaceCodes(enc.getCodes(), replaceMap)); } } else { Code[] codes = code.getCodes(); if (codes != null) { code.setCodes(replaceCodes(codes, replaceMap)); } } } return newcodes; } @Override public Writer execute(Writer writer, Object[] scopes) throws MustacheException { return partialExecute(writer, scopes); } @Override public synchronized void init() { Map replaceMap = new HashMap(); for (Code code : mustache.getCodes()) { if (code instanceof ExtendNameCode) { // put name codes in the map ExtendNameCode erc = (ExtendNameCode) code; replaceMap.put(erc.getName(), erc); erc.init(); } else if (code instanceof WriteCode) { // ignore text } else { // fail on everything else throw new IllegalArgumentException( "Illegal code in extend section: " + code.getClass().getName()); } } partial = mf.compile(partialName()); Code[] supercodes = partial.getCodes(); // recursively replace named sections with replacements partial.setCodes(replaceCodes(supercodes, replaceMap)); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy