[stringtemplate-interest] Maps
Jacques Victor
jacques.victor at gmail.com
Thu Aug 20 00:27:11 PDT 2009
Hi there,
I've had a look at that function on the STG but my problem exists when
iterating through the ST's chunks. Each chunk object has no clear 'Name'
method from what I can see therefore I cannot pass getMap() the name of the
map.
I see you mentioned a 'Map' object on the getMap() STG return type. The
version of assembly I'm using does not seem to have this object.
Below is a sample of my code to give more context around the question:
*Assemblies: *
antlr.runtime.dll - V 2.7.7.3
StringTemplate.dll - V 3.0.1.6846
*Expected Output:*
My Dog barks.
*C# code snippet:*
Public void Process()
{
Console.WriteLine(RenderTemplate(new Dictionary<string,
object>(){"AnimalName","Dog"}));
}
public string RenderTemplate(Dictionary<string, object> parameters)
{
StringTemplateGroup group = new StringTemplateGroup("mygroup",
"c:/temp/my.stg");
StringTemplate st = group.GetInstanceOf("test1");
foreach (object chunk in st.Chunks)
{
if (chunk != null)
{
if (chunk.GetType() == typeof(ASTExpr))
{
//
// Insert code here to determine if chunk is a Map
//
string mapName = ((ASTExpr)chunk)*.?????????? *
/*
1. chunk.ToString returns "( . soundNameMap ( value
AnimalName ) )"....Based on the sample Template below.
I don't want to implement a dirty fix here to strip out
the map name
2. (((StringTemplateAST)((ASTExpr)(chunk)).AST).getText()
returns "."
3. (((StringTemplateAST)((ASTExpr)(chunk)).AST).Type returns
int 24. I'm unable to determine what this value maps to?
I've searched on the StringTemplate documentation and
can find no enumeration mapping.
*/
//I do not have a 'Map' object in the assembly version listed
above.
IDictionary map = group.GetMap(mapName);
//Don't do anything if the chunk is a map.
if(map == null))
{
// No map found thus, for this example, we assume it's a
placeholder variable in the template
if(parameters.ContainsKey(placeholder)
{
st.SetAttribute(chunk.ToString(),
parameters[placeholder]);
}
else
{
throw new ParameterNotFoundException("Parameter '" +
chunk.ToString() + "' is not in Dictionary.");
}
}
}
}
}
return st.ToString();
}
*STG Template - "my.stg"
*group mygroup;
soundNameMap ::= [
"Dog": "barks",
"Cat": "meows",
default: "N/A"
]
test1(AnimalName) ::= <<
My $AnimalName$ $soundNameMap.(AnimalName)$.
>>
2009/8/19 Terence Parr <parrt at cs.usfca.edu>
> see
>
> public Map getMap(String name) {}
>
> in STG. or subclass and walk field maps.
> T
>
>
> On Aug 18, 2009, at 6:38 AM, Jacques Victor wrote:
>
> Hi there,
>>
>> I've recently started using StringTemplate and today have run into a brick
>> wall...so to speak...
>>
>> I'm loading my *stg file in .Net (C#) and setting the stringtemplate
>> placeholder variables via a Dictionary. Once determining a chunk is of type
>> 'ASTExpr', I I'm struggling to determine if that chunk is indeed a map and
>> therefore not checking against my Dictionary and throwing an error if I
>> don't find the chunk placeholder variable in the Dictionary.
>>
>> Is it possible to get all the maps defined in a Stringtemplategroup file
>> or alternatively as I iterate through the chunks, in the StringTemplate
>> object, be able to identify a chunk as a map?
>>
>> I've searched the internet but can't find any enum/type that would make a
>> map chunk distinguishable, from other chunks, in .Net.
>>
>> Any help would greatly be appreciated.
>>
>> Thanks in advance.
>>
>> Regards
>> Jacques
>> _______________________________________________
>> stringtemplate-interest mailing list
>> stringtemplate-interest at antlr.org
>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/stringtemplate-interest/attachments/20090820/992781be/attachment-0001.html
More information about the stringtemplate-interest
mailing list