Add link support to mediawiki grammer. Fix a bug in rr.Node()

This commit is contained in:
Ian Gulliver
2014-06-30 21:12:12 -07:00
parent 1586375bba
commit 7affa466d4
3 changed files with 33 additions and 3 deletions

View File

@@ -99,6 +99,12 @@ var mediawiki = {
rr.Ref('singleline-wikichunk'),
rr.EndOfLine())),
'multiline-a': rr.Node('a', rr.Sequence(
rr.Literal('[['),
rr.Node('href', rr.SingleLineText()),
rr.Literal('|'),
rr.Ref('multiline-wikichunk'),
rr.Literal(']]'))),
'multiline-b': rr.Node('b', rr.Sequence(
rr.Literal("'''"),
rr.Ref('multiline-wikichunk'),
@@ -152,6 +158,12 @@ var mediawiki = {
rr.Ref('multiline-wikichunk'),
rr.Literal('</ins>'))),
'singleline-a': rr.Node('a', rr.Sequence(
rr.Literal('[['),
rr.Node('href', rr.SingleLineText()),
rr.Literal('|'),
rr.Ref('singleline-wikichunk'),
rr.Literal(']]'))),
'singleline-b': rr.Node('b', rr.Sequence(
rr.Literal("'''"),
rr.Ref('singleline-wikichunk'),
@@ -224,7 +236,8 @@ var mediawiki = {
rr.Ref('list-ulli2'),
rr.Ref('list-ulli3'),
rr.Ref('multiline-bi'),
rr.Ref('multiline-a'),
rr.Ref('multiline-bi'), // before b and i
rr.Ref('multiline-b'),
rr.Ref('multiline-blockquote'),
rr.Ref('multiline-code'),
@@ -243,7 +256,8 @@ var mediawiki = {
rr.MultiLineText())),
'singleline-wikichunk': rr.ZeroOrMore(rr.Or(
rr.Ref('singleline-bi'),
rr.Ref('singleline-a'),
rr.Ref('singleline-bi'), // before b and i
rr.Ref('singleline-b'),
rr.Ref('singleline-code'),
rr.Ref('singleline-comment'),

View File

@@ -304,7 +304,7 @@ rr.Node_.prototype.match = function(context) {
var node = document.createElement(this.name_);
var nodes = next['value']['nodes'];
for (var i = 0; i < nodes.length; i++) {
node.appendChild(nodes[i]);
node.appendChild(nodes[i].cloneNode(true));
}
node.normalize();
return {

16
test.js
View File

@@ -81,3 +81,19 @@ QUnit.test('singleline-wikichunk', function(assert) {
var iterable = context.rules['wikidoc'].match(context);
assert.equal(iterable.next().value.nodes[0].innerHTML, expected);
});
QUnit.test('Link', function(assert) {
assert.expect(1);
var content = [
"[[http://www.example.com/foo|Test text ''with formatting'']]"
].join('\n');
var expected = [
'<p><a><href>http://www.example.com/foo</href>',
'Test text <i>with formatting</i></a></p>'
].join('');
var context = new rr.Context(mediawiki, content);
var iterable = context.rules['wikidoc'].match(context);
assert.equal(iterable.next().value.nodes[0].innerHTML, expected);
});