[stringtemplate-interest] Using the "format" option with a template calls

Terence Parr parrt at cs.usfca.edu
Fri Jan 28 13:31:25 PST 2011


Hi Udo, i looked again at your example:

main() ::= <<
<t()>
<t();format="upper">
<(t());format="upper">
<t().render;format="upper">
>>
-----------------
Rendering main will produce this output:
-----------------
  abc
  abc
ABC
  ABC
-----------------
3rd line is the (t()) case, 4th line produced by my ST ObjectAdapter.

I think that this is actually correct. <(t())> should evaluate immediately, which means it evaluates outside of the context of the outer expression so I cannot see the indentation. It's different than:

<t();format="upper">

Ter

On Jan 27, 2011, at 2:17 AM, Udo Borkowski wrote:

> I checked the toString method of the Interpreter (called by the tostr instruction) and noticed this code:
> 
> 	writeObjectNoOptions(new NoIndentWriter(sw), self, value);
> 
> I.e. the indentation is discarded "by intend" (by using the NoIndentWriter). I assume there is a good reason for this (Maybe you can give me a little hint or example?). 
> 
> However when writing the string representation of an ST object I think also writing the indentation is a good idea. Otherwise you loose all the nice formatting etc. 
> 
> So what about this replacement for the above line in Interpreter#toString(ST self, Object value):
> 
> 	STWriter out = (value instanceof ST) 
> 			? new AutoIndentWriter(sw) : new NoIndentWriter(sw);
> 	writeObjectNoOptions(out, self, value);
> 
> I.e. when writing an ST object use the AutoIndentWriter, otherwise the NoIndentWriter.
> 
> With this little change
> 
> 	<(t());format="upper"> 
> 
> now writes out the content of the template t in upper case, perfectly indented (as intended ;-).
> 
> 
> Udo
> 
> 
> 
> On 27.01.2011, at 01:49, Terence Parr wrote:
> 
>> Actually, do you have an STRenderer?  t() yields an ST not a string.
>> Ter
>> On Jan 25, 2011, at 4:07 PM, Udo Borkowski wrote:
>> 
>>>> Hi. does <(t()); format="upper"> work?
>>> 
>>> Nearly. It seems it eats (leading) white spaces.
>>> 
>>> Here my little example group:
>>> -------------------
>>> t() ::= <<
>>>   abc
>>>>> 
>>> 
>>> main() ::= <<
>>> «t()»
>>> «t();format="upper"»
>>> «(t());format="upper"»
>>> «t().render;format="upper"»
>>>>> 
>>> -----------------
>>> Rendering main will produce this output:
>>> -----------------
>>>   abc
>>>   abc
>>> ABC
>>>   ABC
>>> -----------------
>>> 3rd line is the (t()) case, 4th line produced by my ST ObjectAdapter.
>>> 
>>> Udo
>>> 
>>> On 25.01.2011, at 20:45, Terence Parr wrote:
>>> 
>>>> Hi. does <(t()); format="upper"> work?
>>>> Ter
>>>> On Jan 25, 2011, at 12:56 AM, Udo Borkowski wrote:
>>>> 
>>>>> While the "format" option work fine with attributes, like in
>>>>> 
>>>>> 	<attr;format="upper">
>>>>> 
>>>>> it does not seem to work when used together with template invocations, like:
>>>>> 
>>>>> 	<t();format="upper">
>>>>> 
>>>>> I don't know if this is intended (e.g. because of performance reasons) or a bug. I personally would like to have the format option also work in the latter situation. E.g. when I "refactor" my templates it happens data once stored in an attribute moves into a template. This was not possible when the "format" option is used.
>>>>> 
>>>>> 
>>>>> I am currently working around this by using a custom ObjectModelAdapter for ST, using this code:
>>>>> 
>>>>> 	public Object getProperty(ST self, Object o, Object property,
>>>>> 			String propertyName) throws STNoSuchPropertyException {
>>>>> 		if ("render".equals(propertyName) && (o instanceof ST)) {
>>>>> 			return ((ST) o).render();
>>>>> 		}
>>>>> 		return super.getProperty(self, o, property, propertyName);
>>>>> 	}
>>>>> 
>>>>> This way the above example looks like this:
>>>>> 
>>>>> 	<t().render;format="upper">
>>>>> 
>>>>> While this works fine I am still wondering if the "format" options should also work for the simple template call, too.
>>>>> 
>>>>> What do you think?
>>>>> 
>>>>> Udo
>>>>> 
>>>>> _______________________________________________
>>>>> stringtemplate-interest mailing list
>>>>> stringtemplate-interest at antlr.org
>>>>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>>> 
>>>> _______________________________________________
>>>> stringtemplate-interest mailing list
>>>> stringtemplate-interest at antlr.org
>>>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>> 
>> 
>> _______________________________________________
>> stringtemplate-interest mailing list
>> stringtemplate-interest at antlr.org
>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
> 



More information about the stringtemplate-interest mailing list