[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