On May 5, 2009, at 12:32 PM, Thomas Mortagne wrote:
On Tue, May 5, 2009 at 12:01, Vincent Massol
<vincent(a)massol.net>
wrote:
On May 5, 2009, at 11:57 AM, Lewis Denizen wrote:
Thanks Vincent. One more question - is it
possible to execute an
XWiki 2.0
macro from Velocity context?
yes the velocity macro does this:
1) executes velocity on the full macro content which is considered as
text
2) run the wiki parser on the result
I think it's not exactly what Lewis asked. His problem is that he want
to execute a macro inside code macro so for that he need velocity to
generate the result of the macro in the code macro content and not
just the macro itself.
There is no easy way to do that in velocity, this means access the
parser as component execute it on {{date-macro date="-1b"
format="yyyyMMdd"/}}, execute transformations (other components) on it
and re-render the XDOM. And all that just to print a date if i
understood well your use case.
Well first we'd need to know why Lewis needs to do that!
I think we can rephrase the question as: how to pretty print a
generated text.
The general answer I think is:
{{velocity}}
## Compute the content here
#set ($content = "....")
{{code language="java"}}
$content
{{/code}}
{{/velocity}}
As Thomas said though, if you want to execute wiki syntax from
velocity you can probably do something like:
#set ($mydoc = $xwiki.getDocument("dummy"))
$mydoc.setContent("{{mymacro/}}")
#set ($content = $mydoc.getRenderedContent())
Note that the current document in the xwiki context would still be the
current document and not "dummy" so any macro that uses the current
document would not use "dummy".
I'd like to know more about the use case.
Thanks
-Vincent
>> On Tue, May 5, 2009 at 4:46 PM, Vincent Massol
<vincent(a)massol.net>
>> wrote:
>>
>>> Hi Lewis,
>>>
>>> On May 5, 2009, at 9:11 AM, Lewis Denizen wrote:
>>>
>>>> Hi xwiki-users,
>>>>
>>>> Just wondering if it's possible to add a macro inside a code
>>>> macro?
>>>> What I
>>>> want to do is something like this:
>>>>
>>>> {{code language="sql"}}
>>>> select *
>>>> from xyz
>>>> where from_date = '{{date-macro date="-1b"
format="yyyyMMdd"/}}'
>>>> --
>>>> The
>>>> date-macro returns the last business date in yyyyMMdd format
>>>> {{/code}}
>>>
>>> If by adding you mean execution it, then no it's not possible since
>>> it's not the goal of the code macro. The code macro is supposed to
>>> render its content as is without any interpretation (only syntax
>>> coloring).
>>>
>>> However if what you want is to execute some stuff you can use this
>>> trick:
>>>
>>> {{velocity}}
>>> {{code}}
>>> ...
>>> Some velocity code here that will be executed, including a velocity
>>> macro
>>> ...
>>> {{/code}}
>>> {{/velocity}}
>>>
>>> Thanks
>>> -Vincent