On Oct 6, 2009, at 5:15 PM, Marius Dumitru Florea wrote:
Hi Lewis,
Lewis Denizen wrote:
Hi xwiki-users,
One small quirck with the 2.0 release - when I try something like
this:
{{box title="{{info}}test{{/info}}"}}this is a test{{/box}}
the output becomes a bit screwey... Parts of the {{info}} tag gets
added to
the content of the box instead of into the title. It does work
when the
{{info}} is escaped properly:
{{box title="~{~{info~}~}test~{~{/info~}~}"}}this is a test{{/box}}
but the WYSIWYG editor doesn't escape these (and it would make
things look a
bit nicer if we didn't have to escape on properly-quoted
parameters.. with
the obvious exception of a double-quote inside a quoted-
parameter :-)).
So... what should the right behavior be?
IMO there shouldn't be any need for escaping the { and } inside a
parameter value. It seems the XWiki 2.0 parser stops reading the
parameter value when it encounters }} which I think it's a bug.
Thomas should know more about it.
This is voluntary right now. Here's the grammar:
| <#MACRO_NAME: (<XWIKI_CHAR>)+ (["-", "_",
".", ":"]
(<XWIKI_CHAR>)+)* >
| <#MACRO_PARAMS: ( "~" ~[] | ~["}"] | "}"
~["}"] )* >
| <#MACRO_EMPTY: "{{" <MACRO_NAME> ((<SPACE>)
<MACRO_PARAMS>)?
"/}}" >
| <#MACRO_START: "{{" <MACRO_NAME> ((<SPACE>)
<MACRO_PARAMS>)?
"}}" >
| <#MACRO_END: "{{/" <MACRO_NAME> (<SPACE>)* "}}"
>
| <#MACRO_CONTENT: ( <XWIKI_CHAR> | <SPACE> |<NEW_LINE> |
<XWIKI_SPECIAL_SYMBOL> ) >
So }} is not allowed in a macro parameter. Otherwise there would be a
pb to know which "}}" correspond to the macro end (it would be harder).
BTW you only need to escape one "}" to make it work fine ;)
Note that quotes for macro values are optional right now and this is
the reason macro params are checked for }}.
We could decide that quotes are mandatory but it's a pretty big change
(would be for Syntax 2.1) and I don't think it's a good idea since
this your use case is pretty rare. And btw I still don't know if
accepting wiki syntax in parameters is a good thing or not.
Thanks
-Vincent
Thanks,
Marius
>
> -- Lewis