[
https://issues.apache.org/jira/browse/VELOCITY-666?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12663451#action_12663451
]
Nathan Bubna commented on VELOCITY-666:
---------------------------------------
I share your skepticism about committing this. I don't know that
#macro( strong $txt $bodyContent )
<strong>$bodyContent</strong> $txt
#end
#define( $bodyContent )
<u>This text is underlined and bold</u>
#end
#strong( $foobar $bodyContent )
Is awkward or long enough to warrant another directive just to shorten it to
this
#macro( strong $txt )
<strong>$bodyContent</strong> $txt
#end
#call( 'strong' $foobar )
<u>This text is underlined and bold</u>
#end
It is hard to find the right balance in these things. Right now, i am inclined
to leave this out, as it doesn't seem to provide any needed function, just a
somewhat better syntax. And i think what we really want syntactically is this:
#macro( strong $txt )
<strong>$bodyContent</strong> $txt
#end
#strong( $foobar )
<u>This text is underlined and bold</u>
#end
If that happens, #call will just be a complication for us to deprecate and for
users to change uses thereof.
I also happen to know that there are longtime users who are in the habit of
using a #call( $tool.doThis() ) macro and recommending that practice to others.
Adding this directive will surely break things for people upgrading.
I think the bottom line for me is that each directive we add risks conflict
with existing macros, increases the famously-low learning curve for Velocity
and--as you said--increases the internal complexity/size of Velocity. If we
are going to add a new directive, then i think we should be sure that it is
well worth the cost. I don't think #call has crossed that threshold, unless i
am missing something it can do.
If it could be implemented in such a way that it didn't require so many
internal patches, it would be fine as an optional user directive (like #local).
I'm not sure, though, if that is possible for this.
> RFC: new directive: #call
> -------------------------
>
> Key: VELOCITY-666
> URL: https://issues.apache.org/jira/browse/VELOCITY-666
> Project: Velocity
> Issue Type: Improvement
> Affects Versions: 1.6.2, 1.7
> Reporter: Jarkko Viinamäki
> Attachments: velocity-call-directive.patch
>
>
> Inspired by VELOCITY-583 (BlockMacro support) I implemented the same
> functionality in a slightly different way.
> This patch introduces a new directive #call("mymacro" $arg1 $arg2 ... ) any
> valid Velocity content here #end
> This directive causes a call to defined macro with given arguments AND passes
> the enclosed AST as an argument which can be referenced with $bodyContent
> (default, name is configurable).
> An example:
> #set($foobar = "yeah!")
>
> #macro(strong $txt)
> <strong>$bodyContent</strong> $txt
> #end
> #call("strong" $foobar)
> <u>This text is underlined and bold</u>
> #end
>
> Will print:
> <strong><u>This text is underlined and bold<u></strong> yeah!
> Like I commented in VELOCITY-583 the same thing can be done by first using
> #define to build up some custom AST and then pass that AST as an argument to
> some macro. While it works, it's not as convenient as this syntax. This patch
> however increases the amount of code lines in Velocity and the implementation
> is a bit "hackish" so even I'm not totally convinced whether we should commit
> this.
> But anyway, here it is, I'd love to hear your comments.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]