Hi,
We've had an interesting discussion with Thomas about the need to
introduce a new onRawText() event in the rendering module to replace
the current begin/endXML() events.
Here's the need (discovered by Ludovic):
* In some cases we want to inject rendered content directly in the
renderer's output. For example there are some cases where we want to
inject HTML directly (in order to bypass parsing)
What we propose:
* Remove the current XML events
* Add a onRawText(Syntax syntax) event and a corresponding RawBlock
block. A raw text is text injected directly in the rendered output
without any parsing/modification. Note that the content depends
completely on the rendered used hence the Syntax parameter.
* Add a new {{raw syntax="syntaxId"}} macro so that users can inject
content in the few cases where it's needed
* Modify the HTML Macro to use RawBlock blocks instead of XMLBlock.
Also add a new "clean=true|false" parameter (defaut is to clean). When
clean = true, we pass the content to the HTML cleaner.
<Implementation note>We still need to parse the content when
wiki=true. We generate RawBlock blocks when we have startElement/
endElement/CDATA/Comment xml parser events.</Implementation note>
This solves a number of issues:
* We have a generic way to inject rendered content directly for the
special cases when it's needed (ex: the user really wants to inject
invalid HTML such as META tags in the body content)
* We remove the XML events which were a bit weird to have in the first
place.
Note that we'll probably need to add some new events in the future
such as one for demarcating a set of blocks (which would translate in
DIV or SPAN in the XHTML renderer for example). This is needed for
example for the Box Macro which is currently using XMLBlock but that's
not completely correct.
WDYT?
Thanks
-Vincent