On 9/6/2011 8:40 AM, Vincent Massol wrote:
Hi Mark,

On Sep 6, 2011, at 2:15 PM, Mark Wallace wrote:

On 9/3/2011 3:08 AM, Vincent Massol wrote:
Hi,

On Sep 2, 2011, at 10:48 PM, Mark Wallace wrote:


I have a macro (implemented in Java) with this interface:

      public List<Block>  execute(InferenceParameter parameters, String 
content, MacroTransformationContext context) ;

I want to call this macro from within a velocity script.  When I do, it returns a 
List<Block>.  How do I get the velocity script to render the List<Block>  
properly?

You could check the tutorial at 
http://rendering.xwiki.org/xwiki/bin/view/Main/ExtendingMacro
  (check the deployment at the end).


I'm not having a problem invoking the macro in a wiki page.  But sometimes I'd 
like to invoke it from within a larger velocity script.   I.e.

I can do this:
{{mymacro param="hello"/}}
But I'd also like to do this:
{{velocity}}
#set($words = ["Some", "velocity", "code"])
#foreach($word in $words)
   $word ##
   $services.mymacro($word)
#end
{{/velocity}}
I didn't see anything in the deployment part of the tutorial about doing this.
I was going to respond the following:

-----
Your first use case is a macro while your second one isn't. The second use case 
is simply a programmatic service or API that you wish to expose. Macros are not 
supposed to return anything.

To implement your second use case you'd create a Script Service component in 
java, see http://extensions.xwiki.org/xwiki/bin/view/Extension/Script+Module

Now there's another possibility which is to:
* call your macro using a groovy script. You'll need to look it up and call its 
execute method. This will return a List of Blocks
* still in the groovy macro code, lookup a renderer and tell it to render the 
list of blocks.

This is slightly more tricky and I don't see why you'd want to do this TBH. To 
help you further we'd need to know more about your specific use case.
-----

But I just understood that you simply want to render the macro from inside your 
velocity script. So you'd just need to do this:

{{velocity}}
#set($words = ["Some", "velocity", "code"])
#foreach($word in $words)
   $word ##
   {{mymacro param="$word"/}}
#end
{{/velocity}}

Hope it helps,
-Vincent
Yes, this is all I needed. Didn't realize I could invoke it inline. Not sure how I missed that! Thanks!
  -Mark


Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to