Re: Expression Handling Again

Dan Miller <[email protected]> Thu, 22 Sep 2005 11:39:49 -0700 (PDT)
Newsgroups gmane.comp.java.webmacro.user
Message-ID <[email protected]>
That method works great to get the result. One last
thing, how come webmacro expressions do not return
double. Is that historical? Now that we use a grammar
and parser for WM can is it possible to expand
expressions? 

Thanks

--- "Eric B. Ridge" <[email protected]> wrote:

> Rather than creating a StringMacro, create a
> StringTemplate, with a  
> mini-template of:
>      #set $foo = $x + 1
> 
> Then use a custom TemplateVisitor to pull out the
> "SetValue" argument  
> of the #set directive:
> 
>      static class MyTemplateVisitor extends
> TemplateVisitor {
>          Object value;
> 
>          public Object getValue() {
>              return value;
>          }
> 
>          public void visitDirectiveArg(String
> string, Object object) {
>              // the #set directive has 2 arguments: 
> "SetTarget" (LHS)
>              // and "SetValue" (RHS).  We're only
> interested in  
> "SetValue"
>              if (string.equals("SetValue")) {
>                  value = object;
>              }
>          }
>      }
> 
> So, you're code will be something like:
> 
> public Object evalExpression (Context context,
> String expression) {
>      StringTemplate tmpl =  new StringTemplate
> (context.getBroker(),  
> "#set $foo = " + expression);
>      MyTemplateVisitor visitor = new
> MyTemplateVisitor();
> 
>      template.parse();
>      template.accept(visitor);
> 
>      Object value = visitor.getValue();
>      if (value instanceof Maco) {
>          return ((Macro) value).evaluate(_context);
>      } else {
>          return value;
>      }
> }
> 
> Hope this helps.
> 
> eric
> 
> 
> 
> 
> 
> On Sep 22, 2005, at 12:22 PM, Dan Miller wrote:
> 
> > I guess what I was wondering about was using the
> api
> > directly stepping in before the #set places the
> result
> > into the context. I was looking into the src for
> > PropertyMethod and trying to figure out how to get
> the
> > result.
> >
> > I am using webmacro throughout a webproject, and
> would
> > like to use similiar webmacro expression in xml
> files
> > which are read and processed. Thanks
> >
> > --- Keats Kirsch <[email protected]> wrote:
> >
> >
> >> AFAIK there are only two ways to get something
> out
> >> of a WM template
> >> expansion -- capture the result of the expansion,
> or
> >> pull something from
> >> the context.  Actually I suppose you could use
> the
> >> #bean directive to
> >> create a "global" variable and then get it from
> the
> >> Broker.
> >>
> >> Maybe if you can explain your requirements we
> could
> >> think of a way of
> >> doing what you want.
> >>
> >> Keats
> >>
> >> Dan Miller wrote:
> >>
> >>
> >>> The usage of the StringMacro to use the #set
> >>>
> >> directive
> >>
> >>> works great. I was wondering if there is
> anything
> >>> exposed to evaluate the expression without
> >>>
> >> modifying
> >>
> >>> the context.
> >>>
> >>> This works great, but I would like to leave the
> >>> context as is, not adding new temp variables to
> the
> >>> context.
> >>>
> >>> Context ctx = new Context();
> >>> ctx.put("val1", 1);
> >>> ctx.put("val2", 155);
> >>> Macro macro = null;
> >>> macro = new StringMacro("#set $val = $val1 +
> >>>
> >> $val2");
> >>
> >>> macro.evaluate( ctx);
> >>> Integer val = (Integer)ctx.get("val");
> >>>
> >>>
> >>> I am looking forward to the 2.0 release.
> >>>
> >>>
> >>>
> >>
> >>
> >>
> >>
> >>
> >>
> >
>
-------------------------------------------------------
> >
> >> SF.Net email is sponsored by:
> >> Tame your development challenges with Apache's
> >> Geronimo App Server. Download
> >> it for free - -and be entered to win a 42" plasma
> tv
> >> or your very own
> >> Sony(tm)PSP.  Click here to play:
> >> http://sourceforge.net/geronimo.php
> >> _______________________________________________
> >> Webmacro-user mailing list
> >> [email protected]
> >>
> >>
> >
>
https://lists.sourceforge.net/lists/listinfo/webmacro-user
> >
> >>
> >>
> >
> >
> >
> >
> > __________________________________
> > Yahoo! Mail - PC Magazine Editors' Choice 2005
> > http://mail.yahoo.com
> >
> >
> >
>
-------------------------------------------------------
> > SF.Net email is sponsored by:
> > Tame your development challenges with Apache's
> Geronimo App Server.  
> > Download
> > it for free - -and be entered to win a 42" plasma
> tv or your very own
> > Sony(tm)PSP.  Click here to play:
> http://sourceforge.net/geronimo.php
> > _______________________________________________
> > Webmacro-user mailing list
> > [email protected]
> >
>
https://lists.sourceforge.net/lists/listinfo/webmacro-user
> >
> 
> 
> 
>
-------------------------------------------------------
> SF.Net email is sponsored by:
> Tame your development challenges with Apache's
> Geronimo App Server. Download
> it for free - -and be entered to win a 42" plasma tv
> or your very own
> Sony(tm)PSP.  Click here to play:
> http://sourceforge.net/geronimo.php
> _______________________________________________
> Webmacro-user mailing list
> [email protected]
> 
=== message truncated ===


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php