package nebula.simpletemplate;
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
import org.stringtemplate.v4.misc.ErrorType;
/** A group derived from a string not a file or directory. */
public class STGroupString extends STGroup {
public String sourceName;
public String text;
protected boolean alreadyLoaded = false;
public STGroupString(String text) {
this("<string>", text, '<', '>');
}
public STGroupString(String sourceName, String text) {
this(sourceName, text, '<', '>');
}
public STGroupString(String sourceName, String text, char delimiterStartChar, char delimiterStopChar) {
super(delimiterStartChar, delimiterStopChar);
this.sourceName = sourceName;
this.text = text;
}
// @Override
// public boolean isDictionary(String name) {
// if (!alreadyLoaded) load();
// return super.isDictionary(name);
// }
@Override
public boolean isDefined(String name) {
if (!alreadyLoaded) load();
return super.isDefined(name);
}
@Override
protected CompiledST load(String name) {
if (!alreadyLoaded) load();
return rawGetTemplate(name);
}
@Override
public void load() {
if (alreadyLoaded) return;
alreadyLoaded = true;
GroupParser parser = null;
try {
ANTLRStringStream fs = new ANTLRStringStream(text);
fs.name = sourceName;
GroupLexer lexer = new GroupLexer(fs);
CommonTokenStream tokens = new CommonTokenStream(lexer);
parser = new GroupParser(tokens);
// no prefix since this group file is the entire group, nothing
// lives
// beneath it.
parser.group(this, "/");
} catch (Exception e) {
errMgr.IOError(null, ErrorType.CANT_LOAD_GROUP_FILE, e, "<string>");
}
}
@Override
public String getFileName() {
return "<string>";
}
}