On Jan 19, 2011, at 2:30 PM, Sergiu Dumitriu wrote:

> On 01/19/2011 02:20 PM, Vincent Massol wrote:
>> 
>> On Jan 19, 2011, at 2:05 PM, sdumitriu (SVN) wrote:
>> 
>>> Author: sdumitriu
>>> Date: 2011-01-19 14:05:06 +0100 (Wed, 19 Jan 2011)
>>> New Revision: 33998
>>> 
>>> Modified:
>>>   platform/web/trunk/standard/src/main/webapp/templates/macros.vm
>>> Log:
>>> XWIKI-5890: #setVariableFromRequest doesn't work with Velocity 1.7, replace 
>>> with #readVariableFromRequest
>>> Corrected #setVariable so that it doesn't output any whitespace.
>>> 
>>> Modified: platform/web/trunk/standard/src/main/webapp/templates/macros.vm
>>> ===================================================================
>>> --- platform/web/trunk/standard/src/main/webapp/templates/macros.vm 
>>> 2011-01-19 13:01:30 UTC (rev 33997)
>>> +++ platform/web/trunk/standard/src/main/webapp/templates/macros.vm 
>>> 2011-01-19 13:05:06 UTC (rev 33998)
>>> @@ -1508,13 +1508,13 @@
>>>  * @param value the value to assign
>>>  *###
>>> #macro(setVariable $variableName $value)
>>> -  ## Only do this if the variable name is really a valid variable name
>>> -  #if ($variableName.matches('[a-zA-Z_][a-zA-Z0-9_-]*'))
>>> -    
>>> #evaluate("${escapetool.h}set(${escapetool.d}${variableName}=${escapetool.d}value)")
>>> -  #elseif ($variableName.matches('\$[a-zA-Z_][a-zA-Z0-9_-]*'))
>>> -    #evaluate("${escapetool.h}set(${variableName}=${escapetool.d}value)")
>>> -  #end
>>> +## Only do this if the variable name is really a valid variable name
>>> +#if ($variableName.matches('[a-zA-Z_][a-zA-Z0-9_-]*'))
>>> +#evaluate("${escapetool.h}set(${escapetool.d}${variableName}=${escapetool.d}value)")
>>> +#elseif ($variableName.matches('\$[a-zA-Z_][a-zA-Z0-9_-]*'))
>>> +#evaluate("${escapetool.h}set(${variableName}=${escapetool.d}value)")
>>> #end
>>> +#end
>> 
>> So we can't use indentation in macros?
>> Should we document this generally or is it specific to this macro (in which 
>> case maybe we should add a comment so that the next person doesn't start 
>> indenting it)?
> 
> I don't know, Marius complained that #setVariable creates whitespace, so 
> I removed them for this macro. For the other macros, it depends. I'd say 
> that utility macros that bring essential functionality should not output 
> spaces.
> 
> The problem comes from the fact that in wiki content, {{velocity}} has a 
> default whitespace filter which takes care of indentation whitespace, 
> but calling global macros will output the whitespace present in the 
> original macro. Maybe macros.vm should also be passed through the 
> whitespace filter before being parsed? Is that even possible?

We could create a VelocityFilter that removes leading whitespaces *after* 
velocity has been executed (default filter removes leading white spaces 
*before* the velocity has been executed).

You'd use it like this:

{{velocity filter="indentafter"}}
#myglobalmacro(....)
{{/velocity}}

Would that work?

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

Reply via email to