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 > -Mark > > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

