STGroup grp = new STGroup('$', '$'); final CompiledST templateA = grp.defineTemplate("a", "<li>$it.fname$ $it.lname$</li>"); templateA.addArg(new FormalArgument("it")); final CompiledST templateB = grp.defineTemplate("b", "<ul>$list:a()$</ul>"); templateB.addArg(new FormalArgument("list"));
public static CompiledST defineBlankRegion(CompiledST outermostImpl, Token nameToken) { String outermostTemplateName = outermostImpl.name; String mangled = STGroup.getMangledRegionName(outermostTemplateName, nameToken.getText()); CompiledST blank = new CompiledST(); blank.isRegion = true; blank.templateDefStartToken = nameToken; blank.regionDefType = ST.RegionType.IMPLICIT; blank.name = mangled; outermostImpl.addImplicitlyDefinedTemplate(blank); return blank; }
public ST(STGroup group, String template) { this(); groupThatCreatedThisInstance = group; impl = groupThatCreatedThisInstance.compile(group.getFileName(), null, null, template, null); impl.hasFormalArgs = false; impl.name = UNKNOWN_NAME; impl.defineImplicitlyDefinedTemplates(groupThatCreatedThisInstance); }
public static CompiledST defineBlankRegion(CompiledST outermostImpl, Token nameToken) { String outermostTemplateName = outermostImpl.name; String mangled = STGroup.getMangledRegionName(outermostTemplateName, nameToken.getText()); CompiledST blank = new CompiledST(); blank.isRegion = true; blank.templateDefStartToken = nameToken; blank.regionDefType = ST.RegionType.IMPLICIT; blank.name = mangled; outermostImpl.addImplicitlyDefinedTemplate(blank); return blank; }
/** Create singleton template for use with dictionary values. */ public ST createSingleton(Token templateToken) { String template; if ( templateToken.getType()==GroupParser.BIGSTRING || templateToken.getType()==GroupParser.BIGSTRING_NO_NL ) { template = Misc.strip(templateToken.getText(),2); } else { template = Misc.strip(templateToken.getText(),1); } CompiledST impl = compile(getFileName(), null, null, template, templateToken); ST st = createStringTemplateInternally(impl); st.groupThatCreatedThisInstance = this; st.impl.hasFormalArgs = false; st.impl.name = ST.UNKNOWN_NAME; st.impl.defineImplicitlyDefinedTemplates(this); return st; }
public CompiledST defineRegion(String enclosingTemplateName, Token regionT, String template, Token templateToken) { String name = regionT.getText(); template = Misc.trimOneStartingNewline(template); template = Misc.trimOneTrailingNewline(template); CompiledST code = compile(getFileName(), enclosingTemplateName, null, template, templateToken); String mangled = getMangledRegionName(enclosingTemplateName, name); if ( lookupTemplate(mangled)==null ) { errMgr.compileTimeError(ErrorType.NO_SUCH_REGION, templateToken, regionT, enclosingTemplateName, name); return new CompiledST(); } code.name = mangled; code.isRegion = true; code.regionDefType = ST.RegionType.EXPLICIT; code.templateDefStartToken = regionT; rawDefineTemplate(mangled, code, regionT); code.defineArgDefaultValueTemplates(this); code.defineImplicitlyDefinedTemplates(this); return code; }
writeFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(tmpdir+"/"+"t.stg"); ST st = group.getInstanceOf("method"); st.impl.dump(); st.add("type", "float"); st.add("name", "foo"); st.add("locals", 3); st.add("args", new String[] {"x", "y", "z"}); ST s1 = group.getInstanceOf("assign"); ST paren = group.getInstanceOf("paren"); paren.add("x", "x"); s1.add("a", paren);
if ( arg.defaultValueToken.getType()==GroupParser.ANONYMOUS_TEMPLATE ) { CompiledST code = arg.compiledDefaultValue; if (code == null) { code = new CompiledST(); ST defaultArgST = group.createStringTemplateInternally(code); defaultArgST.groupThatCreatedThisInstance = group; String defArgTemplate = arg.defaultValueToken.getText(); if ( defArgTemplate.startsWith("{"+group.delimiterStartChar+"(") && defArgTemplate.endsWith(")"+group.delimiterStopChar+"}") ) { invokedST.rawSetAttribute(arg.name, toString(out, new InstanceScope(scope, invokedST), defaultArgST)); invokedST.rawSetAttribute(arg.name, defaultArgST); invokedST.rawSetAttribute(arg.name, arg.defaultValue);
st.impl = st.impl.clone(); st.add(argument.getKey(), argument.getValue()); } catch (CloneNotSupportedException ex) { noSuchAttributeReported = true; st.rawSetAttribute(argument.getKey(), argument.getValue()); st.rawSetAttribute(argument.getKey(), argument.getValue());
STLexer lexer; if ( templateToken!=null && templateToken.getType() == GroupParser.BIGSTRING_NO_NL ) CompiledST impl = new CompiledST(); impl.defineFormalArgs(args); return impl;
public CompiledST defineTemplate(String fullyQualifiedTemplateName, Token nameT, List<FormalArgument> args, String template, Token templateToken) { if ( verbose ) System.out.println("defineTemplate("+fullyQualifiedTemplateName+")"); if ( fullyQualifiedTemplateName==null || fullyQualifiedTemplateName.length()==0 ) { throw new IllegalArgumentException("empty template name"); } if ( fullyQualifiedTemplateName.indexOf('.')>=0 ) { throw new IllegalArgumentException("cannot have '.' in template names"); } template = Misc.trimOneStartingNewline(template); template = Misc.trimOneTrailingNewline(template); // compile, passing in templateName as enclosing name for any embedded regions CompiledST code = compile(getFileName(), fullyQualifiedTemplateName, args, template, templateToken); code.name = fullyQualifiedTemplateName; rawDefineTemplate(fullyQualifiedTemplateName, code, nameT); code.defineArgDefaultValueTemplates(this); code.defineImplicitlyDefinedTemplates(this); // define any anonymous subtemplates return code; }
m.bytecode.setText(currentScope.st.impl.disasm()); // BYTECODE DIS. m.template.moveCaretPosition(0); if ( currentScope.st.isAnonSubtemplate() ) { Interval r = currentScope.st.impl.getTemplateRange();
impl = template_stack.peek().state.impl; if ( template_stack.size() == 1 ) outermostImpl = impl; impl.defineFormalArgs(args); // make sure args are defined prior to compilation if ( name!=null && name.startsWith(Compiler.SUBTEMPLATE_PREFIX) ) { impl.addArg(new FormalArgument("i")); impl.addArg(new FormalArgument("i0"));
void super_new(ST self, String name, int nargs) { ST st = null; CompiledST imported = self.impl.nativeGroup.lookupImportedTemplate(name); if ( imported==null ) { errMgr.runTimeError(this, self, current_ip, ErrorType.NO_IMPORTED_TEMPLATE, name); st = self.groupThatCreatedThisInstance.createStringTemplateInternally(new CompiledST()); } else { st = imported.nativeGroup.getEmbeddedInstanceOf(this, self, current_ip, name); st.groupThatCreatedThisInstance = group; } // get n args and store into st's attr list storeArgs(self, nargs, st); sp -= nargs; operands[++sp] = st; }
public void defineImplicitlyDefinedTemplates(STGroup group) { if ( implicitlyDefinedTemplates !=null ) { for (CompiledST sub : implicitlyDefinedTemplates) { group.rawDefineTemplate(sub.name, sub, sub.templateDefStartToken); sub.defineImplicitlyDefinedTemplates(group); } } }
void super_new(ST self, String name, Map<String,Object> attrs) { ST st = null; CompiledST imported = self.impl.nativeGroup.lookupImportedTemplate(name); if ( imported==null ) { errMgr.runTimeError(this, self, current_ip, ErrorType.NO_IMPORTED_TEMPLATE, name); st = self.groupThatCreatedThisInstance.createStringTemplateInternally(new CompiledST()); } else { st = imported.nativeGroup.createStringTemplateInternally(imported); st.groupThatCreatedThisInstance = group; } // get n args and store into st's attr list storeArgs(self, attrs, st); operands[++sp] = st; }
st = self.groupThatCreatedThisInstance.getEmbeddedInstanceOf(this, scope, name); ip += Bytecode.OPND_SIZE_IN_BYTES; name = (String)operands[sp-nargs]; st = self.groupThatCreatedThisInstance.getEmbeddedInstanceOf(this, scope, name); storeArgs(scope, nargs, st); sp -= nargs; st = self.groupThatCreatedThisInstance.getEmbeddedInstanceOf(this, scope, name); case Bytecode.INSTR_NEWLINE : try { if ( (prevOpcode==0 && !self.isAnonSubtemplate() && !self.impl.isRegion) || prevOpcode==Bytecode.INSTR_NEWLINE || prevOpcode==Bytecode.INSTR_INDENT || self.impl.dump();
match(input, Token.DOWN, null); ID6=(CommonTree)match(input,ID,FOLLOW_ID_in_region249); retval.name = STGroup.getMangledRegionName(outermostTemplateName, (ID6!=null?ID6.getText():null)); pushFollow(FOLLOW_template_in_region259); template7=template(retval.name, null); sub.templateDefStartToken = ID6.token; outermostImpl.addImplicitlyDefinedTemplate(sub); emit2(((CommonTree)retval.start), Bytecode.INSTR_NEW, retval.name, 0); emit(((CommonTree)retval.start), Bytecode.INSTR_WRITE);
public void defineFormalArgs(List<FormalArgument> args) { hasFormalArgs = true; // even if no args; it's formally defined if ( args == null ) formalArguments = null; else for (FormalArgument a : args) addArg(a); }
public String getTemplateSource() { Interval r = getTemplateRange(); return template.substring(r.a, r.b+1); }