Hi Nick,
I don't have a computer in the coming week to teat out, so bear with
me if I missinderstand something.
The reason == is escaped as \== is that only in this case this is
problematic, if all markup characters were escaped we would beed to
escape also a single occurrnce of = to \=. No?
Lukas
On Monday, 18 July 2011, Nick Ager <nick.ager(a)gmail.com> wrote:
Hi,
I added code to the Wysiwyg editor to escape markup within text nodes. To illustrate here
is an example from the (javascript) test-suite:
it("should escaped text containing link markup", function() {
expect("To create a link, put it between
<code>*</code>").shouldParseInto("To create a link, put it between
==\\*==");
});
This works fine, the problem arises with:
it("should escaped text containing code markup", function() {
expect("To make something <code>monospaced</code>, surround it with
<code>==</code>").shouldParseInto("To make something ==monospaced==,
surround it with ==\\=\\===");
});
Should text containing '==' translate into '\==' OR '\=\='.
rendering ' ==\==== ' into html [1] results in:
'<p> <code>=</code>= </p>'
whereas rendering '==\=\=== ' into html results in: '<p>
<code>==</code> </p>'
The html reflects the PRDocument structure. It seems that PRDocumentParser doesn't
parse ' ==\==== ' as expected.Worse the sequence: wiki text-> PRDocument ->
wiki text fails:
PRWikiWriter write: (PRDocumentParser parse: ' ==\=\=== ') => '
==\==== '
However I have a fix. I've locally modified PRDocumentParser
class>>#escape:using: so that any multi-character markup is multiply escaped:
'@@' -> '\@\@' '--' => '\-\-'
This seems to solve the ambiguous parsing problem and the round-trip problem. Great.
However many tests will need rewriting to reflect that any multi-character markup is
escaped with multiple slashes. Before fixing the tests, I wanted to check that people
thought it made sense.
Thanks
Nick
[1] | document renderer |
document := PRDocumentParser parse: ' ==\==== '. renderer := PRViewRenderer
new.
^ WAHtmlCanvas builder fullDocument: false;
render: [ :r | renderer withinContentDo: [ renderer start: document in: self on: r ]
].
--
Lukas Renggli
www.lukas-renggli.ch