JavaScript: change filter application strategy and grouping/extraction code to work around ordering issues.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
mediawiki = rr.Parser({
|
mediawiki = rr.Parser({
|
||||||
'list-blockquote1': rr.Node('blockquote', rr.Sequence(
|
'list-blockquote1': rr.Node('blockquote1', rr.Sequence(
|
||||||
rr.StartOfLine(),
|
rr.StartOfLine(),
|
||||||
rr.Literal(': '),
|
rr.Literal(': '),
|
||||||
rr.Ref('singleline-wikichunk'),
|
rr.Ref('singleline-wikichunk'),
|
||||||
@@ -313,5 +313,18 @@ mediawiki = rr.Parser({
|
|||||||
rr.SplitElementAndNest('src', ['imgtemp', 'src']),
|
rr.SplitElementAndNest('src', ['imgtemp', 'src']),
|
||||||
rr.ChildToAttribute('imgtemp', 'src'),
|
rr.ChildToAttribute('imgtemp', 'src'),
|
||||||
rr.RenameElement('imgtemp', 'img'),
|
rr.RenameElement('imgtemp', 'img'),
|
||||||
rr.ChildToAttribute('a', 'href')
|
rr.ChildToAttribute('a', 'href'),
|
||||||
|
rr.GroupSiblings('blockquote', [
|
||||||
|
'blockquote1', 'blockquote2', 'blockquote3', 'blockquote4',
|
||||||
|
'blockquote5']),
|
||||||
|
rr.GroupSiblings('blockquote', [
|
||||||
|
'blockquote2', 'blockquote3', 'blockquote4', 'blockquote5']),
|
||||||
|
rr.GroupSiblings('blockquote', ['blockquote3', 'blockquote4', 'blockquote5']),
|
||||||
|
rr.GroupSiblings('blockquote', ['blockquote4', 'blockquote5']),
|
||||||
|
rr.GroupSiblings('blockquote', ['blockquote5']),
|
||||||
|
rr.ExtractElement('blockquote1'),
|
||||||
|
rr.ExtractElement('blockquote2'),
|
||||||
|
rr.ExtractElement('blockquote3'),
|
||||||
|
rr.ExtractElement('blockquote4'),
|
||||||
|
rr.ExtractElement('blockquote5')
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -761,7 +761,7 @@ rr.ExtractElement = function(nodeName) {
|
|||||||
}
|
}
|
||||||
var parentNode = node.parentNode;
|
var parentNode = node.parentNode;
|
||||||
for (var i = 0; i < node.childNodes.length; i++) {
|
for (var i = 0; i < node.childNodes.length; i++) {
|
||||||
parentNode.appendChild(node.childNodes[i]);
|
parentNode.insertBefore(node.childNodes[i], node);
|
||||||
}
|
}
|
||||||
parentNode.removeChild(node);
|
parentNode.removeChild(node);
|
||||||
parentNode.normalize();
|
parentNode.normalize();
|
||||||
@@ -783,15 +783,17 @@ rr.GroupSiblings = function(parentName, childNames) {
|
|||||||
if (childNames.indexOf(node.nodeName) == -1) {
|
if (childNames.indexOf(node.nodeName) == -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (node.previousSibling &&
|
var nodes = [];
|
||||||
node.previousSibling.nodeName == parentName) {
|
for (var iterNode = node;
|
||||||
// Group with previous node.
|
iterNode && childNames.indexOf(iterNode.nodeName) != -1;
|
||||||
node.previousSibling.appendChild(node);
|
iterNode = iterNode.nextSibling) {
|
||||||
return;
|
nodes.push(iterNode);
|
||||||
}
|
}
|
||||||
var newNode = document.createElement(parentName);
|
var newNode = document.createElement(parentName);
|
||||||
node.parentNode.replaceChild(newNode, node);
|
node.parentNode.replaceChild(newNode, node);
|
||||||
newNode.appendChild(node);
|
for (var i = 0; i < nodes.length; i++) {
|
||||||
|
newNode.appendChild(nodes[i]);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -859,9 +861,8 @@ rr.SplitElementAndNest = function(originalName, newNames) {
|
|||||||
*/
|
*/
|
||||||
rr.ApplyFilter = function(node, filter) {
|
rr.ApplyFilter = function(node, filter) {
|
||||||
filter(node);
|
filter(node);
|
||||||
var children = Array.prototype.slice.call(node.childNodes);
|
for (var i = 0; i < node.childNodes.length; i++) {
|
||||||
for (var i = 0; i < children.length; i++) {
|
rr.ApplyFilter(node.childNodes[i], filter);
|
||||||
rr.ApplyFilter(children[i], filter);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
9
test.js
9
test.js
@@ -54,10 +54,11 @@ QUnit.test('Base', function(assert) {
|
|||||||
'</li></ul></ul><li>Item 1c</li></ul><ol><li>Item 1a</li><li>Item 1b</li>',
|
'</li></ul></ul><li>Item 1c</li></ul><ol><li>Item 1a</li><li>Item 1b</li>',
|
||||||
'<ol><li>Item 2</li><ol><li>Item 3</li></ol></ol><li>Item 1c</li></ol>',
|
'<ol><li>Item 2</li><ol><li>Item 3</li></ol></ol><li>Item 1c</li></ol>',
|
||||||
"<def>I don't really understand what a definition is</def><blockquote>",
|
"<def>I don't really understand what a definition is</def><blockquote>",
|
||||||
'But blockquotes are easy</blockquote><blockquote2>Even larger ones',
|
'But blockquotes are easy<blockquote>Even larger ones<blockquote>',
|
||||||
'</blockquote2><blockquote5>And really huge ones</blockquote5><pre>This ',
|
'<blockquote><blockquote>And really huge ones</blockquote></blockquote>',
|
||||||
'line is pre-formatted and <del>not interpolated</del>\nThis ',
|
'</blockquote></blockquote></blockquote><pre>This line is pre-formatted ',
|
||||||
'line is also pre-formatted\n</pre></p>'
|
'and <del>not interpolated</del>\nThis line is also ',
|
||||||
|
'pre-formatted\n</pre></p>'
|
||||||
].join('');
|
].join('');
|
||||||
|
|
||||||
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
||||||
|
|||||||
2
test.py
2
test.py
@@ -50,4 +50,4 @@ code looks like <code>this</code>. Fixed width text looks like
|
|||||||
stop <u>this from being underlined</u>, or just try
|
stop <u>this from being underlined</u>, or just try
|
||||||
<pre>interrupting cow style.</pre><blockquote>This is a blockquote</blockquote></p><p><h2>Header 2</h2><h3>Header 3 <i>with italics</i></h3><h4>Header 4</h4><h5>Header 5</h5><h6>Header 6</h6><hr></hr><ul><li>Item 1a</li><li>Item 1b</li><ul><li>Item 2</li><ul><li>Item 3</li></ul></ul><li>Item 1c</li></ul><ol><li>Item 1a</li><li>Item 1b</li><ol><li>Item 2</li><ol><li>Item 3</li></ol></ol><li>Item 1c</li></ol><def>I don't really understand what a definition is</def><blockquote>But blockquotes are easy</blockquote><blockquote2>Even larger ones</blockquote2><blockquote5>And really huge ones</blockquote5><pre>This line is pre-formatted and <del>not interpolated</del>
|
<pre>interrupting cow style.</pre><blockquote>This is a blockquote</blockquote></p><p><h2>Header 2</h2><h3>Header 3 <i>with italics</i></h3><h4>Header 4</h4><h5>Header 5</h5><h6>Header 6</h6><hr></hr><ul><li>Item 1a</li><li>Item 1b</li><ul><li>Item 2</li><ul><li>Item 3</li></ul></ul><li>Item 1c</li></ul><ol><li>Item 1a</li><li>Item 1b</li><ol><li>Item 2</li><ol><li>Item 3</li></ol></ol><li>Item 1c</li></ol><def>I don't really understand what a definition is</def><blockquote>But blockquotes are easy</blockquote><blockquote2>Even larger ones</blockquote2><blockquote5>And really huge ones</blockquote5><pre>This line is pre-formatted and <del>not interpolated</del>
|
||||||
This line is also pre-formatted
|
This line is also pre-formatted
|
||||||
</pre></p></wikidoc>"""
|
</pre></p></wikidoc>""", result
|
||||||
|
|||||||
Reference in New Issue
Block a user