It does not work because bodyContent is an instance of the ASTNode class
and not a string, so it does not have the trim method.

Use something like this:

#macro(my_trim)#set($str="$bodyContent")$str.trim()#end

Test:

before#@my_trim()    -blah-     #{end}after

Renders:
before-blah-after


On Wed, Aug 7, 2013 at 5:09 PM, O. Olson <olson_...@yahoo.it> wrote:

>
>
> Thank you very much Nathan for clarifying what body content
> meant. At least now I know what it means, but I think I am having a problem
> with my trim function here. It seems to delete everything. I have no clue
> how
> this worked previously.
>
> To avoid naming conflicts, I decided to rename my macro. It
> now looks like:
>  #macro(query_url $query_param)
>     q=$query_param
> #end
>
> #macro(my_trim)$!bodyContent.trim()#end
>
>
>
> I call it using
>  #@my_trim()#query_url("sometext")#end
>
>
> And the result is blank i.e. I do not see anything in the
> result. I now attempt:
> #macro(my_trim)PREPEND$!bodyContent.trim()#end
>
>
> This time I see only:
>  PREPEND
>
> This is expected, but why nothing from  $!bodyContent.trim()
>
> I don't know what is happening to trim() function i.e. why
> it is not working. But thank you for answering my question.
>
> O. O.
>
>
> ----- Messaggio originale -----
> Da: Nathan Bubna <nbu...@gmail.com>
> A: Velocity Users List <user@velocity.apache.org>; O. Olson <
> olson_...@yahoo.it>
> Cc:
> Inviato: Lunedì 5 Agosto 2013 22:34
> Oggetto: Re: What does "Velocimacro with a Body" mean?
>
> Yes, all velocimacros have bodies in their definition:
>
>   #macro( foo ) definition only #end
>   #macro( bar ) definition accepts $bodyContent #end
>
> Not all velocimacros accept bodies in their usage:
>
>   #foo()
>   #@bar() body content when used #end
>
> Produces:
>
>   definition only
>   definition accepts body content when used
>
> As to why your example ends up with preceding spaces, i am not
> certain. The "format" part in particular, because Velocity has only
> input text and output text, no "format".  Try defining your #@trim
> like so:
>
>   #macro( trim )$!bodyContent.trim()#end
>
> to ensure there are no sneaky whitespaces hiding in the definition.
>
>
> On Mon, Aug 5, 2013 at 9:25 AM, O. Olson <olson_...@yahoo.it> wrote:
> > Hi,
> >
> >             I am new to
> > Velocity and I am wondering what "Velocimacro with a Body" means?
> > Here, I am referring to the description in
> http://velocity.apache.org/engine/releases/velocity-1.7/vtl-reference-guide.html#amacro_-_Allows_users_to_define_a_Velocimacro_VM_a_repeated_segment_of_a_VTL_template_as_required
> >
> >             I thought
> > all Velocimacros had bodies, just like all non-trivial functions in C or
> Java
> > have bodies. I attempted the use the above suggestion given in the URL
> and it did not
> > work.
> >
> > I attempted the following in my Global Library:
> >
> > #macro(query_url $query_param)
> >     q=$query_param
> > #end
> >
> > #macro(trim)
> > $!bodyContent.trim()
> > #end
> >
> > According to the above URL, in my template, I called this
> > using:
> >
> > #@trim()#query_url("sometext")#end
> >
> >
> > The result seems to be:
> >             q=sometext
> >
> > i.e. there are spaces in the front that I don't like.
> > (Depending on the format you are looking at, these preceeding spaces
> might be
> > deleted, but they appear in the rendered results.) Any ideas what I am
> doing
> > wrong?
> >
> > Thank you in advance,
> > O. O.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
> > For additional commands, e-mail: user-h...@velocity.apache.org
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
> For additional commands, e-mail: user-h...@velocity.apache.org
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
> For additional commands, e-mail: user-h...@velocity.apache.org
>
>

Reply via email to