Re: What does "Velocimacro with a Body" mean?

Nathan Bubna <[email protected]> Wed, 7 Aug 2013 15:05:51 -0700
Newsgroups gmane.comp.jakarta.velocity.user
Message-ID <CAFyaDjFipM7sg2L-2mZYgsbXWDypZ2o0ZvETGMirRm-s5y5Prw@mail.gmail.com>
D'oh. I should have seen that.  Thanks, Alex!

On Wed, Aug 7, 2013 at 2:25 PM, Alex Fedotov <[email protected]> wrote:
> 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 <[email protected]> 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 <[email protected]>
>> A: Velocity Users List <[email protected]>; O. Olson
>> <[email protected]>
>> 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 <[email protected]> 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: [email protected]
>> > For additional commands, e-mail: [email protected]
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>