public class STGroup
extends java.lang.Object
.st
template files and/or group files.
Individual template files contain formal template definitions. In a sense,
it's like a single group file broken into multiple files, one for each template.
ST v3 had just the pure template inside, not the template name and header.
Name inside must match filename (minus suffix).Modifier and Type | Field and Description |
---|---|
static ErrorManager |
DEFAULT_ERR_MGR |
static java.lang.String |
DEFAULT_KEY |
static STGroup |
defaultGroup |
char |
delimiterStartChar |
char |
delimiterStopChar |
static java.lang.String |
DICT_KEY
When we use key as a value in a dictionary, this is how we signify.
|
java.lang.String |
encoding
The encoding to use for loading files.
|
ErrorManager |
errMgr
The
ErrorManager for entire group; all compilations and executions. |
static java.lang.String |
GROUP_FILE_EXTENSION |
boolean |
iterateAcrossValues
v3 compatibility; used to iterate across
Map.values() instead of
v4's default Map.keySet() . |
static java.lang.String |
TEMPLATE_FILE_EXTENSION |
static boolean |
trackCreationEvents
For debugging with
STViz . |
static boolean |
verbose
Watch loading of groups and templates.
|
Constructor and Description |
---|
STGroup() |
STGroup(char delimiterStartChar,
char delimiterStopChar) |
Modifier and Type | Method and Description |
---|---|
CompiledST |
compile(java.lang.String srcName,
java.lang.String name,
java.util.List<FormalArgument> args,
java.lang.String template,
org.antlr.runtime.Token templateToken)
Compile a template.
|
ST |
createSingleton(org.antlr.runtime.Token templateToken)
Create singleton template for use with dictionary values.
|
ST |
createStringTemplate(CompiledST impl) |
ST |
createStringTemplateInternally(CompiledST impl)
Differentiate so we can avoid having creation events for regions,
map operations, and other implicit "new ST" events during rendering.
|
ST |
createStringTemplateInternally(ST proto) |
void |
defineDictionary(java.lang.String name,
java.util.Map<java.lang.String,java.lang.Object> mapping)
Define a map for this group.
|
CompiledST |
defineRegion(java.lang.String enclosingTemplateName,
org.antlr.runtime.Token regionT,
java.lang.String template,
org.antlr.runtime.Token templateToken) |
CompiledST |
defineTemplate(java.lang.String templateName,
java.lang.String template)
for testing
|
CompiledST |
defineTemplate(java.lang.String name,
java.lang.String argsS,
java.lang.String template)
for testing
|
CompiledST |
defineTemplate(java.lang.String fullyQualifiedTemplateName,
org.antlr.runtime.Token nameT,
java.util.List<FormalArgument> args,
java.lang.String template,
org.antlr.runtime.Token templateToken) |
CompiledST |
defineTemplateAlias(org.antlr.runtime.Token aliasT,
org.antlr.runtime.Token targetT)
Make name and alias for target.
|
void |
defineTemplateOrRegion(java.lang.String fullyQualifiedTemplateName,
java.lang.String regionSurroundingTemplateName,
org.antlr.runtime.Token templateToken,
java.lang.String template,
org.antlr.runtime.Token nameToken,
java.util.List<FormalArgument> args) |
AttributeRenderer |
getAttributeRenderer(java.lang.Class<?> attributeType)
Get renderer for class
T associated with this group. |
java.lang.String |
getFileName() |
java.util.List<STGroup> |
getImportedGroups() |
ST |
getInstanceOf(java.lang.String name)
The primary means of getting an instance of a template from this
group.
|
STErrorListener |
getListener() |
static java.lang.String |
getMangledRegionName(java.lang.String enclosingTemplateName,
java.lang.String name)
The
"foo" of t() ::= "<@foo()>" is mangled to
"/region__/t__foo" |
ModelAdaptor |
getModelAdaptor(java.lang.Class<?> attributeType) |
java.lang.String |
getName() |
java.net.URL |
getRootDirURL()
Return root dir if this is group dir; return dir containing group file
if this is group file.
|
java.util.Set<java.lang.String> |
getTemplateNames() |
static java.lang.String |
getUnMangledTemplateName(java.lang.String mangledName)
Return
"t.foo" from "/region__/t__foo" |
java.net.URL |
getURL(java.lang.String fileName) |
void |
importTemplates(STGroup g)
Make this group import templates/dictionaries from
g . |
void |
importTemplates(org.antlr.runtime.Token fileNameToken)
Import template files, directories, and group files.
|
void |
invalidateModelAdaptorCache(java.lang.Class<?> attributeType)
Remove at least all types in cache that are subclasses or implement
attributeType . |
boolean |
isDefined(java.lang.String name)
Is this template defined in this group or from this group below?
Names must be absolute, fully-qualified names like
/a/b . |
boolean |
isDictionary(java.lang.String name) |
void |
load()
Force a load if it makes sense for the group.
|
CompiledST |
loadAbsoluteTemplateFile(java.lang.String fileName)
Load template file into this group using absolute
fileName . |
void |
loadGroupFile(java.lang.String prefix,
java.lang.String fileName)
Load a group file with full path
fileName ; it's relative to root by prefix . |
CompiledST |
loadTemplateFile(java.lang.String prefix,
java.lang.String unqualifiedFileName,
org.antlr.runtime.CharStream templateStream)
Load template stream into this group.
|
CompiledST |
lookupTemplate(java.lang.String name)
Look up a fully-qualified name.
|
void |
rawDefineTemplate(java.lang.String name,
CompiledST code,
org.antlr.runtime.Token defT) |
java.util.Map<java.lang.String,java.lang.Object> |
rawGetDictionary(java.lang.String name) |
CompiledST |
rawGetTemplate(java.lang.String name) |
void |
registerModelAdaptor(java.lang.Class<?> attributeType,
ModelAdaptor adaptor)
Add an adaptor for a kind of object so ST knows how to pull properties
from them.
|
void |
registerRenderer(java.lang.Class<?> attributeType,
AttributeRenderer r)
Register a renderer for all objects of a particular "kind" for all
templates evaluated relative to this group.
|
void |
registerRenderer(java.lang.Class<?> attributeType,
AttributeRenderer r,
boolean recursive) |
void |
setListener(STErrorListener listener) |
java.lang.String |
show() |
java.lang.String |
toString() |
void |
undefineTemplate(java.lang.String name) |
void |
unload()
Unload all templates, dictionaries and import relationships, but leave
renderers and adaptors.
|
public static final java.lang.String GROUP_FILE_EXTENSION
public static final java.lang.String TEMPLATE_FILE_EXTENSION
public static final java.lang.String DICT_KEY
public static final java.lang.String DEFAULT_KEY
public java.lang.String encoding
public char delimiterStartChar
public char delimiterStopChar
public static final ErrorManager DEFAULT_ERR_MGR
public static boolean verbose
public static boolean trackCreationEvents
public boolean iterateAcrossValues
Map.values()
instead of
v4's default Map.keySet()
.
But to convert ANTLR templates, it's too hard to find without
static typing in templates.public static STGroup defaultGroup
public ErrorManager errMgr
ErrorManager
for entire group; all compilations and executions.
This gets copied to parsers, walkers, and interpreters.public STGroup()
public STGroup(char delimiterStartChar, char delimiterStopChar)
public ST getInstanceOf(java.lang.String name)
/a/b
.public ST createSingleton(org.antlr.runtime.Token templateToken)
public boolean isDefined(java.lang.String name)
/a/b
.public CompiledST lookupTemplate(java.lang.String name)
public void unload()
getInstanceOf(java.lang.String)
to reload templates. Call unload()
on each
group in the imports
list, and remove all elements in
importsToClearOnUnload
from imports
.public void load()
public CompiledST rawGetTemplate(java.lang.String name)
public java.util.Map<java.lang.String,java.lang.Object> rawGetDictionary(java.lang.String name)
public boolean isDictionary(java.lang.String name)
public CompiledST defineTemplate(java.lang.String templateName, java.lang.String template)
public CompiledST defineTemplate(java.lang.String name, java.lang.String argsS, java.lang.String template)
public CompiledST defineTemplate(java.lang.String fullyQualifiedTemplateName, org.antlr.runtime.Token nameT, java.util.List<FormalArgument> args, java.lang.String template, org.antlr.runtime.Token templateToken)
public CompiledST defineTemplateAlias(org.antlr.runtime.Token aliasT, org.antlr.runtime.Token targetT)
public CompiledST defineRegion(java.lang.String enclosingTemplateName, org.antlr.runtime.Token regionT, java.lang.String template, org.antlr.runtime.Token templateToken)
public void defineTemplateOrRegion(java.lang.String fullyQualifiedTemplateName, java.lang.String regionSurroundingTemplateName, org.antlr.runtime.Token templateToken, java.lang.String template, org.antlr.runtime.Token nameToken, java.util.List<FormalArgument> args)
public void rawDefineTemplate(java.lang.String name, CompiledST code, org.antlr.runtime.Token defT)
public void undefineTemplate(java.lang.String name)
public CompiledST compile(java.lang.String srcName, java.lang.String name, java.util.List<FormalArgument> args, java.lang.String template, org.antlr.runtime.Token templateToken)
public static java.lang.String getMangledRegionName(java.lang.String enclosingTemplateName, java.lang.String name)
"foo"
of t() ::= "<@foo()>"
is mangled to
"/region__/t__foo"
public static java.lang.String getUnMangledTemplateName(java.lang.String mangledName)
"t.foo"
from "/region__/t__foo"
public void defineDictionary(java.lang.String name, java.util.Map<java.lang.String,java.lang.Object> mapping)
public void importTemplates(STGroup g)
g
.
On unload imported templates are unloaded but stay in the imports
list.public void importTemplates(org.antlr.runtime.Token fileNameToken)
t()
then we
search for t()
in the subgroup first.
Templates are loaded on-demand from import dirs. Imported groups are
loaded on-demand when searching for a template.
The listener of this group is passed to the import group so errors
found while loading imported element are sent to listener of this group.
On unload imported templates are unloaded and removed from the imports
list.
This method is called when processing import statements specified in
group files. Use importTemplates(STGroup)
to import templates
'programmatically'.public java.util.List<STGroup> getImportedGroups()
public void loadGroupFile(java.lang.String prefix, java.lang.String fileName)
fileName
; it's relative to root by prefix
.public CompiledST loadAbsoluteTemplateFile(java.lang.String fileName)
fileName
.public CompiledST loadTemplateFile(java.lang.String prefix, java.lang.String unqualifiedFileName, org.antlr.runtime.CharStream templateStream)
unqualifiedFileName
is
"a.st"
. The prefix
is path from group root to
unqualifiedFileName
like "/subdir"
if file is in
/subdir/a.st
.public void registerModelAdaptor(java.lang.Class<?> attributeType, ModelAdaptor adaptor)
Object
, Map
, ST
, and Aggregate
model
adaptors for you first. Adaptors you add have priority over default
adaptors.
If an adaptor for type T
already exists, it is replaced by the
adaptor
argument.
This must invalidate cache entries, so set your adaptors up before
calling ST.render()
for efficiency.public void invalidateModelAdaptorCache(java.lang.Class<?> attributeType)
attributeType
.public ModelAdaptor getModelAdaptor(java.lang.Class<?> attributeType)
public void registerRenderer(java.lang.Class<?> attributeType, AttributeRenderer r)
r
to render if
object in question is an instance of attributeType
. Recursively
set renderer into all import groups.public void registerRenderer(java.lang.Class<?> attributeType, AttributeRenderer r, boolean recursive)
public AttributeRenderer getAttributeRenderer(java.lang.Class<?> attributeType)
T
associated with this group.
For non-imported groups and object-to-render of class T
, use renderer
(if any) registered for T
. For imports, any renderer
set on import group is ignored even when using an imported template.
You should set the renderer on the main group
you use (or all to be sure). I look at import groups as
"helpers" that should give me templates and nothing else. If you
have multiple renderers for String
, say, then just make uber combined
renderer with more specific format names.public ST createStringTemplate(CompiledST impl)
public ST createStringTemplateInternally(CompiledST impl)
public java.lang.String getName()
public java.lang.String getFileName()
public java.net.URL getRootDirURL()
public java.net.URL getURL(java.lang.String fileName)
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String show()
public STErrorListener getListener()
public void setListener(STErrorListener listener)
public java.util.Set<java.lang.String> getTemplateNames()