[stringtemplate-interest] [ST4] How to apply multiple "format"s to an expression?

Udo Borkowski ub at abego-software.de
Sat Feb 19 06:58:08 PST 2011


Hi Colin,

> Humm ... but it would be interesting to build a Renderer that took a delimited set of format parameters.  
> 
> <n;format="%15s,upper">
> 
> Of course comma works great here but not for the general case .. maybe make the delimiter a parameter to the renderer? I might slap something together to try it out. 


this sounds like a great idea.

May I throw in some suggestions?

Rather than using the commonly used separator "," I would use the pipe '|' character to separate the multiple format parts (by default). Actually the new renderer to be written has some "pipe" functionality: the output of one renderer is the input for another and so on. So ‘|‘ also makes semantically.

Of cause there should be the option to change the separator. However I would not (only) make this a parameter to the renderer but also make this an option in the format string itself. E.g. in one application you may want to use the same renderer (instance) with different separators.

Here two possible formats:

<n;format="|upper|%15s">

Here the initial ‘|‘ indicates the pipe formatting and the pipe renderer splits the rest of the format text and processes each format one after another. 

To define a different separator one could start with ‘|x|‘, i.e. the new separator is framed by two pipe chars. E.g. to use the ";" one would write:

<n;format="|;|upper;%15s">


An alternative syntax may start with a keyword to indicate we want to do piping. The character following the keyword is then used as the separator. E.g. if we use the keyword "pipe" the tag would look like this:

<n;format="pipe|upper|%15s">

or for the semicolon case:

<n;format="pipe;upper;%15s">

I would prefer the second syntax. In that case there would not even be the need to decide for a good "default separator" ;-)


Udo


 
On 18.02.2011, at 23:53, Collin Fagan wrote:

> This could actually be done by extending the ObjectModelAdaptor model adapter to have it check for such a method.
> 
> Such an adapter is available as part of STRUM.
> PublicMethodModelAdapter - access any public method from ST
> Humm ... but it would be interesting to build a Renderer that took a delimited set of format parameters.  
> 
> <n;format="%15s,upper">
> 
> Of course comma works great here but not for the general case .. maybe make the delimiter a parameter to the renderer? I might slap something together to try it out. 
> 
> Collin
> 
> On Fri, Feb 18, 2011 at 4:29 PM, Sam Harwell <sharwell at pixelminegames.com> wrote:
> Does this work:
> 
>  
> <(upper(n)); format="%-15s">
> 
>  
> With this definition of upper(x)?
> 
>  
> upper(x) ::= <<
> 
> <x; format="upper">
> 
> >> 
> 
>  
> Also, here’s an interesting case where if <x.y> checked for a method y() (zero parameters and non-void return value), you could use <n.toUpperCase; format="%-15s">. This could actually be done by extending the ObjectModelAdaptor model adapter to have it check for such a method.
> 
>  
> Sam
> 
>  
> From: stringtemplate-interest-bounces at antlr.org [mailto:stringtemplate-interest-bounces at antlr.org] On Behalf Of Udo Borkowski
> Sent: Friday, February 18, 2011 4:02 PM
> To: stringtemplate-interest List
> Subject: [stringtemplate-interest] [ST4] How to apply multiple "format"s to an expression?
> 
>  
> Hi,
> 
>  
> I would like to generate a constant definition like this:
> 
>  
>             public static final int ABC             = 123;
> 
>             public static final int GHIJKLMN        = 456;
> 
>  
> To make sure the "="s are aligned I can use the Java String format padding feature, e.g. use a template like this:
> 
>  
> t1(n,v) ::= <<
> 
> public static final int «n;format="%-15s"» = «v»;
> 
> >> 
> 
>  
> However the name is given in mixed case and I need to "upper" it, e.g. with something like this:
> 
>  
> t2(n,v) ::= <<
> 
> public static final int «n;format="upper"» = «v»;
> 
> >> 
> 
>  
> Is there a way to combine both formats, so I get an uppercased, right padded name?
> 
>  
>  
> Udo
> 
>  
> 
> _______________________________________________
> 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/20110219/d72659b4/attachment.html 


More information about the stringtemplate-interest mailing list