Subramanya Sastry has uploaded a new change for review.
https://gerrit.wikimedia.org/r/93626
Change subject: WIP: Tweak separator handling to better handle non-Parsoid HTML
......................................................................
WIP: Tweak separator handling to better handle non-Parsoid HTML
* Can help deal with recent PHP parser changes that emits newlines
after <ul> and before </ul> tags.
Change-Id: If17867dca335e08d06ade3a511d54685afb879de
---
M js/lib/mediawiki.WikitextSerializer.js
M js/tests/parserTests-blacklist.js
M js/tests/parserTests.txt
3 files changed, 90 insertions(+), 38 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid
refs/changes/26/93626/1
diff --git a/js/lib/mediawiki.WikitextSerializer.js
b/js/lib/mediawiki.WikitextSerializer.js
index 11293bf..0cd938e 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -2291,16 +2291,6 @@
},
sepnls: {
before: function (node, otherNode) {
- // SSS FIXME: Thoughts about a fix (abandoned
in this patch)
- //
- // Checking for otherNode.nodeName === 'BODY'
and returning
- // {min:0, max:0} should eliminate the annoying
leading newline
- // bug in parser tests, but it seems to cause
other niggling issues
- // <ul> <li>foo</li></ul> serializes to " *foo"
which is buggy.
- // So, we may need another constraint/flag/test
in makeSeparator
- // about the node and its context so that
leading pre-inducing WS
- // can be stripped
-
if (DU.isText(otherNode) &&
DU.isListItem(node.parentNode)) {
// A list nested inside a list item
// <li> foo <dl> .. </dl></li>
@@ -2309,7 +2299,31 @@
return {min:1, max:2};
}
},
- after: wtListEOL //id({min:1, max:2})
+ after: wtListEOL, //id({min:1, max:2})
+ firstChildParent: function(node, otherNode) {
+ if (otherNode.nodeName === 'BODY') {
+ // FIXME: Possibly also a check for
DU.isListItem(otherNode)
+ //
+ // A list nested inside a list item
+ // Ex: <ul><li><ul>...</ul></li></ul>
+ //
+ // But, that requires a smarter
handling of mergeConstraints
+ // to merge <some-node> -- <ul> -- <li>
where the intermediate
+ // <ul> doesn't emit any wikitext.
+ return {min:0, max:0};
+ } else {
+ return {};
+ }
+ },
+ lastChildParent: function(node, otherNode) {
+ if (otherNode.nodeName === 'BODY') {
+ // A list nested inside a list item
+ // Ex: <ul><li><ul>...</ul></li></ul>
+ return {min:0, max:2};
+ } else {
+ return {};
+ }
+ },
}
};
}
@@ -2359,6 +2373,13 @@
} else {
return {};
}
+ },
+ firstChildParent: function(node, otherNode) {
+ if (DU.isList(otherNode)) {
+ return {min:0, max:0};
+ } else {
+ return {};
+ }
}
}
},
@@ -2384,6 +2405,13 @@
firstChild: function (node, otherNode) {
if (!DU.isList(otherNode)) {
return {min:0, max: 0};
+ } else {
+ return {};
+ }
+ },
+ firstChildParent: function(node, otherNode) {
+ if (DU.isList(otherNode)) {
+ return {min:0, max:0};
} else {
return {};
}
@@ -2418,6 +2446,13 @@
firstChild: function (node, otherNode) {
if (!DU.isList(otherNode)) {
return {min:0, max: 0};
+ } else {
+ return {};
+ }
+ },
+ firstChildParent: function(node, otherNode) {
+ if (DU.isList(otherNode)) {
+ return {min:0, max:0};
} else {
return {};
}
@@ -3810,7 +3845,13 @@
// below that fails.
//
// Ex: "<div>foo</div>\n <span>bar</span>"
- if (nlConstraints.min > 0 && sep.match(/
+(<!--(?:[^\-]|-(?!->))*-->[^\n]*)?$/g)) {
+ //
+ // We also should test for onSOL state to deal with HTML like:
+ // <ul> <li>foo</li></ul>
+ // and strip the leading space before non-indent-pre-safe tags
+ if ((nlConstraints.min > 0 || state.onSOL) &&
+ sep.match(/ +(<!--(?:[^\-]|-(?!->))*-->[^\n]*)?$/g))
+ {
// 'sep' is the separator before 'nodeB' and it has leading
spaces on a newline.
// We have to decide whether that leading space will trigger
indent-pres in wikitext.
// The decision depends on where this separator will be emitted
relative
@@ -3888,9 +3929,10 @@
* XXX: Use nesting information for conflict resolution / switch to scoped
* constraints?
*/
-WSP.mergeConstraints = function (oldConstraints, newConstraints) {
+WSP.mergeConstraints = function (state, oldConstraints, newConstraints,
prevNode) {
//console.log(oldConstraints);
var res = {a: oldConstraints.a, b:newConstraints.b};
+
res.min = Math.max(oldConstraints.min || 0, newConstraints.min || 0);
res.max = Math.min(oldConstraints.max !== undefined ?
oldConstraints.max : 2,
newConstraints.max !== undefined ? newConstraints.max :
2);
@@ -3903,7 +3945,15 @@
}
res.max = res.min;
+
+ // FIXME: Ugly hack to prevent ultra-verbose warnings
+ var x = oldConstraints.constraintInfo;
+ var y = newConstraints.constraintInfo;
+ oldConstraints.constraintInfo = undefined;
+ newConstraints.constraintInfo = undefined;
console.error('Incompatible constraints (merge):', res,
oldConstraints, newConstraints);
+ oldConstraints.constraintInfo = x;
+ newConstraints.constraintInfo = y;
}
return res;
};
@@ -3939,11 +3989,11 @@
sepType = "parent-child";
// parent-child separator, nodeA parent of nodeB
nlConstraints = this.getSepNlConstraints(state, nodeA,
sepHandlerA.firstChild,
-
nodeB, sepHandlerB.before);
+
nodeB, sepHandlerB.firstChildParent || sepHandlerB.before);
} else if ( nodeA.parentNode === nodeB ) {
sepType = "child-parent";
// parent-child separator, nodeB parent of nodeA
- nlConstraints = this.getSepNlConstraints(state, nodeA,
sepHandlerA.after,
+ nlConstraints = this.getSepNlConstraints(state, nodeA,
sepHandlerA.lastChildParent || sepHandlerA.after,
nodeB, sepHandlerB.lastChild);
} else {
// sibling separator
@@ -3967,7 +4017,7 @@
if(state.sep.constraints) {
// Merge the constraints
- state.sep.constraints =
this.mergeConstraints(state.sep.constraints, nlConstraints);
+ state.sep.constraints = this.mergeConstraints(state,
state.sep.constraints, nlConstraints, nodeA);
//if (state.sep.lastSourceNode &&
state.sep.lastSourceNode.nodeType === nodeA.TEXT_NODE) {
// state.sep.lastSourceNode = nodeA;
//}
diff --git a/js/tests/parserTests-blacklist.js
b/js/tests/parserTests-blacklist.js
index 85fc651..6aecc9a 100644
--- a/js/tests/parserTests-blacklist.js
+++ b/js/tests/parserTests-blacklist.js
@@ -1319,7 +1319,6 @@
add("html2wt", "Definition Lists: Mixed Lists: Test 9");
add("html2wt", "Definition Lists: Mixed Lists: Test 10");
add("html2wt", "Definition Lists: Mixed Lists: Test 11 (parsoid)");
-add("html2wt", "Definition Lists: Weird Ones: Test 1 (parsoid)");
add("html2wt", "External links: non-bracketed");
add("html2wt", "External links: numbered");
add("html2wt", "External links: dollar sign in URL");
@@ -1487,7 +1486,6 @@
add("html2wt", "Multiple list tags generated by templates");
add("html2wt", "Single-comment whitespace lines dont break lists, and neither
do multi-comment whitespace lines");
add("html2wt", "Replacing whitespace with tabs still doesn't break the list
(gerrit 78327)");
-add("html2wt", "Parsoid: Test of whitespace serialization with Templated
bullets");
add("html2wt", "Unbalanced closing block tags break a list\n(Parsoid-only
since php parser generates broken html -- relies on Tidy to fix up)");
add("html2wt", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up)");
add("html2wt", "Unclosed formatting tags that straddle lists are closed and
reopened\n(Parsoid-only since php parser generates broken html -- relies on
Tidy to fix up)");
@@ -2165,6 +2163,7 @@
// Blacklist for selser
+add("selser", "Extra newlines: More paragraphs with indented comment
[3,4,0,2,0]", "\n\n<!--boo-->\nb");
add("selser", "Italics and possessives (1) [1]", "obtained by ''[[Lunar
Prospector]]'''s gamma-ray spectrometer");
add("selser", "Italics and possessives (1) [2]", "mylboba6mj3v7vi\n\nobtained
by ''[[Lunar Prospector]]'''s gamma-ray spectrometer");
add("selser", "Italics and possessives (1) [[4,[[4],0],0]]", "obtained by
''[[Lunar Prospector]]'''s gamma-ray spectrometer");
@@ -2482,6 +2481,7 @@
add("selser", "Definition Lists: Hacky use to indent tables [[[1]],0,[2]]",
":{|\n|foo\n|bar\n|}\nthis text\nshould be left alone");
add("selser", "Definition Lists: Hacky use to indent tables [[[[2]]],0,0]",
":: 8vyka9uv140wwmi\n:{|\n|foo\n|bar\n|}\nthis text\nshould be left alone");
add("selser", "Definition Lists: Hacky use to indent tables [[1],3,0]",
":{|\n|foo\n|bar\n|}\nthis text\nshould be left alone");
+add("selser", "Table / list interaction: lists nested in tables nested in
indented lists [4,3,[[2],4,[2]]]", "wysduevmbbwng66r\n\n*e\n*f");
add("selser", "Definition Lists: Nesting: Multi-level (Parsoid only)
[[[3,2],[3],0,1]]", ";t19mvwgsrbe5gbvs4i :d1\n;t2 ::d2\n;;;t3 :::d3");
add("selser", "Definition Lists: Nesting: Multi-level (Parsoid only)
[[2,2,0,1]]", ": 30qwj9nju0widx6r\n;t1 \n: 9n4rno4f9st9be29:d1\n;t2 ::d2\n;;;t3
:::d3");
add("selser", "Definition Lists: Nesting: Multi-level (Parsoid only)
[[2,[4],2,1]]", ": cajh3zep82dquxr\n;t1 :d1\n;t2 ::d2\n;;;t3 :::d3");
@@ -2531,7 +2531,7 @@
add("selser", "Definition Lists: Mixed Lists: Test 3 [[[[1]]]]", ":: d1\n*:::
d2");
add("selser", "Definition Lists: Mixed Lists: Test 3 [[[[[[1]]]]]]", ":
d1\n*::: d2");
add("selser", "Definition Lists: Mixed Lists: Test 4 [[[2]]]",
"*6mu8sv5g21s5g66r\n;d1 :d2\n*;d3 :d4");
-add("selser", "Definition Lists: Mixed Lists: Test 4 [[[[[3,[4]],1,0,0,4]]]]",
";d1 :d2\n*;d3 \n*: u1mwndrpqlmfs9k9\n");
+add("selser", "Definition Lists: Mixed Lists: Test 4 [[[[[3,[4]],1,0,0,4]]]]",
";d1 :d2\n*;d3 \n*: u1mwndrpqlmfs9k9");
add("selser", "Definition Lists: Mixed Lists: Test 4 [[1]]", ";d1 :d2\n*;d3
:d4");
add("selser", "Definition Lists: Mixed Lists: Test 4 [[[1]]]", ";d1 :d2\n*;d3
:d4");
add("selser", "Definition Lists: Mixed Lists: Test 5 [[[1]]]", ":d1\n*:: d2");
@@ -2548,7 +2548,7 @@
add("selser", "Definition Lists: Mixed Lists: Test 7 [[[[2,2,0]]]]", ":*
jl7l11bxkgpn9udi\n* d1\n:* d2");
add("selser", "Definition Lists: Mixed Lists: Test 7 [[[1]]]", "* d1\n:* d2");
add("selser", "Definition Lists: Mixed Lists: Test 7 [[[[0,4,3]]]]", "* d1\n");
-add("selser", "Definition Lists: Mixed Lists: Test 7 [[[[0,2,4]]]]", "* d1\n:*
s9flo7ozh9ztzkt9\n");
+add("selser", "Definition Lists: Mixed Lists: Test 7 [[[[0,2,4]]]]", "* d1\n:*
s9flo7ozh9ztzkt9");
add("selser", "Definition Lists: Mixed Lists: Test 7 [[[[2,0,3]]]]", ":*
lvom8bcinxy74x6r\n* d1\n");
add("selser", "Definition Lists: Mixed Lists: Test 8 [[[[[4]],3,[3]]]]", "*
d1\n:");
add("selser", "Definition Lists: Mixed Lists: Test 8 [[1]]", "* d1\n::* d2");
@@ -2843,6 +2843,7 @@
add("selser", "BUG 2: [[page|http://url/]] should link to page, not
http://url/ [[0,[3]]]", "[[Main Page|http://url/]]");
add("selser", "BUG 2: [[page|http://url/]] should link to page, not
http://url/ [[1,0]]", "[[Main Page|<nowiki/>]]\n");
add("selser", "BUG 2: [[page|http://url/]] should link to page, not
http://url/ [[2,3]]", "cu9gzpv2drkke29[[Main Page|http://url/]]");
+add("selser", "<nowiki> inside a link [[3,0,0]]", "[[Main Page|the main page
<nowiki>[it's not very good]</nowiki>]]");
add("selser", "Internal link with is link prefix [[4,2,2]]", "Aðrir
64ixo7lf8gxpqfrmótmælenda[[söfnuður|söfnuðir]] og");
add("selser", "Internal link with is link prefix [[3,2,4]]", "Aðrir
s3ai59qwk4kj4imótmælenda[[söfnuður|söfnuðir]] og");
add("selser", "Internal link with is link trail and link prefix
[[[0,2],2,0,0,2,2,[0,2],4,1]]",
"[[mótmælendatrú|xxx]]ar\n[[mótmælendatrú]]ar\nn6ye85ixgdp9zfrmótmælenda[[söfnuður]]\nmótmælenda[[söfnuður|söfnuðir]]\nmótmælenda[[söfnuður|söfnuðir]]xxx");
@@ -2923,7 +2924,7 @@
add("selser", "Horizontal ruler (should it add that extra space?)
[0,0,0,4,0,0]", "<hr>\n<hr >\nfoo <hr\n> bar");
add("selser", "Horizontal ruler (should it add that extra space?)
[0,0,0,3,4,2]", "<hr>\n<hr >\nfoo d13gtt9304e1m7vi bar");
add("selser", "Mixed list [4,2,[1]]", "n297ww1j5cm1jor\n** Level 3, but
ordered");
-add("selser", "Mixed list [[[2,2,0,0,0,[[4]]],3,4,4,3],0,[1]]", "*Mixed
list\n0rgjqgna0dqs38fr\n*# with numbers\n** and bullets\n*# and numbers\n*
sywz38l1bbsdobt9\n\n** Level 3, but ordered");
+add("selser", "Mixed list [[[2,2,0,0,0,[[4]]],3,4,4,3],0,[1]]", "*Mixed
list\n0rgjqgna0dqs38fr\n*# with numbers\n** and bullets\n*# and numbers\n*
sywz38l1bbsdobt9\n** Level 3, but ordered");
add("selser", "Mixed list [1,0,[1]]", "*Mixed list\n*# with numbers\n** and
bullets\n*# and numbers\n*bullets again\n**bullet level 2\n***bullet level
3\n***#Number on level 4\n**bullet level 2\n**#Number on level 3\n**#Number on
level 3\n*#number level 2\n*Level 1\n*** Level 3\n** Level 3, but ordered");
add("selser", "Mixed list [[2,3,[2,[[0,[[3,1]]],0,3],2,4],2,4],3,[[2]]]", "*
gjmnfiyxk9ey7gb9\n*Mixed list\n*# with numbers\n** and bullets\n*# and
numbers\n*bullets again\n**bullet level 2\n***bullet level 3\n***#Number on
level 4\n\nrjgy3pohejkmx6r\n* 99gg1s4u1ot4vx6r\n#xje6eyfcfl3ul3di\n** Level 3,
but ordered");
add("selser", "Mixed list
[[2,4,[0,[[4,[2]],0,[0,[0,2,0]]],4,[1]],2,[0,[2]]],3,[1]]", "*
50lxb7pz4q3vunmi\n*Mixed list\n*# with numbers\n** and bullets\n*# and
numbers\n*bullets again\n**bullet level 2\n*** kbumjjxqv5eidx6r\n***bullet
level 3\n***#Number on level 4\n**bullet level 2\n**#Number on level
3\n**#Number on level 3\n*#number level 2\n*Level 1\n** cpdtevcvqx2mx6r\n***
Level 3\n** Level 3, but ordered");
@@ -2961,12 +2962,13 @@
add("selser", "Nested lists 7 (skip initial nesting levels) [[[2]]]",
"*tg28w4nd7g0kke29\n** foo");
add("selser", "Nested lists 7 (skip initial nesting levels) [[[[[1]]]]]", "*
foo");
add("selser", "2. Lists with start-of-line-transparent tokens before bullets:
Template close [0,0,2]", "*foo {{echo|bar\n}}9uqf8ew08p2b7qfr\n*baz");
+add("selser", "List items from template [0,0,0,3,4,[[4],3,[3],0,3,[2]]]",
"\n{{inner list}}\n* item 2\n\n* item 0\n* notSOL{{inner list}}\n* item 2");
add("selser", "List interrupted by empty line or heading [[1],0,[1],2,3,0,0]",
"* foo\n\n* bar\n\n* Another list item");
add("selser", "List interrupted by empty line or heading
[[[4]],4,[[1]],0,[3],2,2]", "* foo\n\n* bar\n== A heading
==\n1xzetsjere75jyvi\n* Another list item");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [1,2,[3,2,[3],0]]", "* foo\n* <li>li-hack\n*
{{echo|<li>templated li-hack}}\n* <!--foo--> <li> unsupported li-hack with
preceding comments\n\n<ul>\n<li>6gpem64rni3yds4i</li><li><li>not a
li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[1,0,0,0,0,0,[0,2,2],2],2,[2,0,[4],4]]", "*
foo\n* <li>li-hack\n* {{echo|<li>templated li-hack}}\n* <!--foo--> \n*
9aw17w0fg4zbmx6r<li> unsupported li-hack with preceding
comments\n\n<ul>\n<li><li>not a li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[4,2,[3],0,0,0,[4,2,3],3],0,2]", "*
3snwnj5c00nhr529\n* <li>li-hack\n* {{echo|<li>templated li-hack}}\n* <!--foo-->
\n\nmfkpew81wvrvygb9<ul>\n<li><li>not a li-hack\n</li>\n</ul>");
-add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[3,0,0,0,0,0,[2,0,0],0],0,[0,0,1,0]]", "\n*
<li>li-hack\n* {{echo|<li>templated li-hack}}\n* <!--foo--> <li> unsupported
li-hack with preceding comments\n\n<ul>\n<li><li
data-foobar=\"9irufodzdrt3xr\">not a li-hack\n</li>\n</ul>");
+add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[3,0,0,0,0,0,[2,0,0],0],0,[0,0,1,0]]", "*
<li>li-hack\n* {{echo|<li>templated li-hack}}\n* <!--foo--> <li> unsupported
li-hack with preceding comments\n\n<ul>\n<li><li
data-foobar=\"9irufodzdrt3xr\">not a li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[4,3,2,0,0,0,3,4],4,2]", "* heew4bmxhynl8fr\n*
jxmnsyhftuik9* <li>li-hack\n* {{echo|<li>templated li-hack}}\n*
ut2i94jm55sfko6r\n\nx0q9zelof75y7gb9<ul>\n<li><li>not a li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[0,2,0,2,0,0,4,4],0,[2,0,0,0]]", "* foo\n*
<li>li-hack\n* {{echo|<li>templated li-hack}}\n* e9pz8g9s5urkvs4i\n*
88uxy4iag0v8to6r\n\n<ul>\n<li><li>not a li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[0,4,[4],4,0,0,4,1],2,1]", "* foo\n*
<li>li-hack\n* {{echo|<li>templated li-hack}}\n* 06p0h25k869zr529<li
data-foobar=\"ck3o9hquxu7bvs4i\"> unsupported li-hack with preceding
comments</li>\n\n<ul data-foobar=\"av6idg5yinyu8fr\">\n<li><li>not a
li-hack\n</li>\n</ul>");
@@ -2976,7 +2978,7 @@
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[1,0,[4],0,0,0,1,2],0,0]", "* foo\n*
<li>li-hack\n* {{echo|<li>templated li-hack}}\n* <!--foo--> \n*
z8yfv5z7q6o8byb9<li> unsupported li-hack with preceding
comments\n\n<ul>\n<li><li>not a li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [1,0,3]", "* foo\n* <li>li-hack\n*
{{echo|<li>templated li-hack}}\n* <!--foo--> <li> unsupported li-hack with
preceding comments\n");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[[4],3,1,0,0,0,[2,2,4],0],4,3]", "* foo\n* <li
data-foobar=\"cn76ap9tripgy14i\">li-hack</li>\n* {{echo|<li>templated
li-hack}}\n* <!--foo--> <li> unsupported li-hack with preceding comments\n");
-add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[3,4,4,0,0,4,[2,4,4],0],0,3]", "\n*
fxkmu1c9q5omvx6r\n* {{echo|<li>templated li-hack}}\n* <!--foo--> <li>
unsupported li-hack with preceding comments\n");
+add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[3,4,4,0,0,4,[2,4,4],0],0,3]", "*
fxkmu1c9q5omvx6r\n* {{echo|<li>templated li-hack}}\n* <!--foo--> <li>
unsupported li-hack with preceding comments\n");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [2,0,2]", "v63uarsscvo8yqfr\n* foo\n*
<li>li-hack\n* {{echo|<li>templated li-hack}}\n* <!--foo--> <li> unsupported
li-hack with preceding comments\n\nfl0wa30cmdndn29<ul>\n<li><li>not a
li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [2,2,1]", "phdtjgrh0wvwvcxr\n* foo\n*
<li>li-hack\n* {{echo|<li>templated li-hack}}\n* <!--foo--> <li> unsupported
li-hack with preceding comments\n\n<ul
data-foobar=\"e3qh364hiowasjor\">\n<li><li>not a li-hack\n</li>\n</ul>");
add("selser", "Test the li-hack\n(Cannot test this with PHP parser since it
relies on Tidy for the hack) [[[3],3,1,0,0,3,[2,0,0],4],0,[3,0,1,2]]", "*
foo\n* <li data-foobar=\"49afghrf0njw0zfr\">li-hack</li>\n*
{{echo|<li>templated li-hack}}\n* <!--foo--> \n*
12sgn2zg2no8ncdi\n\n<ul>\n<li><li data-foobar=\"ayqvyg3gs800be29\">not a
li-hack\n</li>\n</ul>");
@@ -2988,7 +2990,7 @@
add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [2,3,[2,0,0]]", "rnfnpskpq3nb3xr\n\n<span>\n*
hmsx2w3nrnt57b9\n*a</span><span>\n*b</span>");
add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [4,0,[0,4,0]]", "jqby6yf3jmijxlxr\n*a</span><span>\n*b</span>");
add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [[1],0,1]", "<span
data-foobar=\"1miryz5dj8ht1emi\">\n*a</span><span>\n*b</span>");
-add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [[4],0,[3,3,[3]]]", "2r812k6qnhw4gqfr\n\n*b</span>");
+add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [[4],0,[3,3,[3]]]", "2r812k6qnhw4gqfr\n*b</span>");
add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [1,0,2]", "<span>\n1y79ib1a8bksatt9\n*a</span><span>\n*b</span>");
add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [0,0,[4,3,[4]]]", "<span>\n* 8zvgy6amuvmtpgb9\n*b</span>");
add("selser", "Unbalanced closing non-block tags don't break a
list\n(Parsoid-only since php parser generates broken html -- relies on Tidy to
fix up) [0,3,1]", "<span>\n*a</span><span>\n*b</span>");
@@ -3105,14 +3107,14 @@
add("selser", "pre-save transform: Signature expansion [1]", "* ~~~\n*
<noinclude>~~~</noinclude>\n* <includeonly>~~~</includeonly>\n*
<onlyinclude>~~~</onlyinclude>");
add("selser", "pre-save transform: Signature expansion [[2,4,3,0,0,0,4]]", "*
32fknwefh04l5wmi\n* ~~~\n* <includeonly>~~~</includeonly>\n* azo82cwrwz478pvi");
add("selser", "pre-save transform: Signature expansion
[[2,0,[3,0,4,2],2,[4,0,0],0,3]]", "* hz1vd0iqjsepcik9\n* ~~~\n*
<noinclude><nowiki>~~~</nowiki>0bktyo96eqyw4s4i</noinclude>\n*
<includeonly>~~~</includeonly>\n");
-add("selser", "pre-save transform: Signature expansion
[[3,0,2,3,3,0,[4,3,0,4]]]", "\n* itjoznribbkjra4i\n*
<noinclude>~~~</noinclude>\n* <nowiki>~~~</nowiki>5dhwnz8dwu434n29");
+add("selser", "pre-save transform: Signature expansion
[[3,0,2,3,3,0,[4,3,0,4]]]", "* itjoznribbkjra4i\n*
<noinclude>~~~</noinclude>\n* <nowiki>~~~</nowiki>5dhwnz8dwu434n29");
add("selser", "pre-save transform: Signature expansion
[[[2],2,[0,0,4,4],4,[0,3,0],2,2]]", "* ~~~\n*
<noinclude><nowiki>~~~</nowiki>yk5lx11ir8u84cxr\n* \n* qkk22lec4f8byb9\n*
<onlyinclude>~~~</onlyinclude>");
add("selser", "pre-save transform: Signature expansion
[[0,4,[0,0,3,0],4,[2,0,2],3,[0,2,0,1]]]", "* ~~~\n*
<noinclude>~~~</noinclude>\n* <includeonly>~~~</includeonly>e8gh2f3hm17l23xr\n*
roruz1ccua8j8aor<onlyinclude><nowiki>~~~</nowiki></onlyinclude>");
add("selser", "pre-save transform: Signature expansion
[[[4],0,[3,3,4,1],0,[4,0,0],2,4]]", "* ~~~\n*
<nowiki>~~~</nowiki></noinclude>\n* <includeonly>~~~</includeonly>\n*
751getf9ir90ms4i");
add("selser", "pre-save transform: Signature expansion
[[[4],0,[4,2,0,4],3,[3,2,0],3,4]]", "* ~~~\n*
vusuko7gj1bdquxr<noinclude><nowiki>~~~</nowiki>mmr4r7rquwuyp66r\n*
38ngghdx9qbk2o6r<includeonly>~~~</includeonly>\n* hwud01ex616y9zfr");
add("selser", "pre-save transform: Signature expansion
[[2,0,1,0,2,0,[4,4,3,0]]]", "* bqju9j481lg3z0k9\n* ~~~\n*
<noinclude><nowiki>~~~</nowiki></noinclude>\n* jzrurxzih8semi\n*
<includeonly>~~~</includeonly>\n*
afwkn1acaje2ke29<nowiki>~~~</nowiki></onlyinclude>");
add("selser", "pre-save transform: Signature expansion
[[2,0,3,0,[2,0,0],0,[0,4,0,0]]]", "* l8ywvav463s7nwmi\n* ~~~\n*
<includeonly>~~~</includeonly>\n*
pb665fdgs7tlnmi<nowiki>~~~</nowiki></onlyinclude>");
-add("selser", "pre-save transform: Signature expansion [[3,3,2,0,1,0,4]]",
"\n* n4e6pky0yzdj9k9\n* <noinclude>~~~</noinclude>\n*
<includeonly>~~~</includeonly>\n* ur7u96qiqwdpwrk9");
+add("selser", "pre-save transform: Signature expansion [[3,3,2,0,1,0,4]]", "*
n4e6pky0yzdj9k9\n* <noinclude>~~~</noinclude>\n*
<includeonly>~~~</includeonly>\n* ur7u96qiqwdpwrk9");
add("selser", "pre-save transform: Signature expansion
[[0,3,3,0,[4,3,4],3,[3,4,0,1]]]", "* ~~~\n* yw1kct238p6kzkt9\n*
09d84mjn1li8uxr<nowiki>~~~</nowiki></onlyinclude>");
add("selser", "pre-save transform: Signature expansion
[[1,3,[3,0,3,0],0,4,0,3]]", "*<nowiki> ~~~</nowiki>\n*
<noinclude>~~~</noinclude>\n* toxqhbpksmr3haor\n");
add("selser", "pre-save transform: Signature expansion in nowiki tags (bug 93)
[[3],3,2,0,0,3,0,[4,3,2],0,2,4,0,0,[0,0,0,4,0,0,0,0],0,0]", "Shall not
expand:\n\n18slesrh1zbvgqfr\n\n<nowiki>~~~~</nowiki>\n\n<includeonly><nowiki>~~~~</nowiki></includeonly>\n\nktcua1lf94yousorpew82dlvmvb49529</noinclude>da7bot3zdv6uhaor\n\n<onlyinclude><nowiki>~~~~</nowiki></onlyinclude>\n\n{{subst:Foo}}
shall be converted to FOO\n\nAs well as inside
noinclude/onlyinclude<noinclude>{{subst:Foo}}zvvzh0cx02wng66r<onlyinclude>{{subst:Foo}}</onlyinclude>\n\nBut
not inside includeonly\n<includeonly>{{subst:Foo}}</includeonly>");
@@ -3387,14 +3389,14 @@
add("selser", "Say the magic word
[[1,2,0,0,0,4,0,4,0,3,0,4,0,2,2,0,1,3,1,4,[4,0],3,[2],3,0,0,3,0,[2,0],0,4,0,[4,0],0,0,0,2,2,0,0,0,4,0]]",
"* {{PAGENAME}}\n* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n*
{{BASEPAGENAME}}\n* {{BASEPAGENAMEE}}\n* {{SUBPAGENAME}}\n* gk916dn8vo39pb9\n*
{{SUBPAGENAMEE}}\n* Warning: Page/template fetching disabled, and no cache for
Template:ROOTPAGENAME\n* Warning: Page/template fetching disabled, and no cache
for Template:ROOTPAGENAMEE\n* {{TALKPAGENAME}}\n* {{TALKPAGENAMEE}}\n*
{{SUBJECTPAGENAME}}\n* {{NAMESPACEE}}\n* nq88p8lp1395dn29\n*
{{NAMESPACENUMBER}}\n* {{TALKSPACE}}\n* 2fslukxw6dyujtt9\n* {{TALKSPACEE}}\n*
{{SUBJECTSPACE}}\n* {{SUBJECTSPACEE}}\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
add("selser", "Say the magic word
[[[4,0],4,4,0,0,0,3,2,[4],2,0,2,0,0,[2],0,2,4,4,3,0,0,[4],0,0,0,1,2,[4,0],0,[3,0],0,[3,0],2,[3,0],2,[4],0,0,0,3,4,[4]]]",
"* {{PAGENAME}}\n* 9ci6bx3b0kd9rudi\n* {{FULLPAGENAME}}\n* {{BASEPAGENAME}}\n*
{{BASEPAGENAMEE}}\n* {{SUBPAGENAME}}\n* {{SUBPAGENAMEE}}\n* lx383jf85ogh9f6r\n*
{{ROOTPAGENAME}}\n* bapujq71wvyam7vi\n* {{TALKPAGENAME}}\n*
{{TALKPAGENAMEE}}\n* {{SUBJECTPAGENAME}}\n* Warning: Page/template fetching
disabled, and no cache for Template:SUBJECTPAGENAMEE\n* {{NAMESPACEE}}\n*
{{NAMESPACE}}\n* {{NAMESPACENUMBER}}\n* {{TALKSPACE}}\n* {{TALKSPACEE}}\n*
{{SUBJECTSPACE}}\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
add("selser", "Say the magic word
[[[3,0],3,3,0,[2,0],2,0,0,[3],3,0,0,4,2,2,4,0,0,4,4,[2,0],0,4,3,[3],2,4,2,0,0,4,0,1,0,0,0,4,0,3,0,0,3,1]]",
"* {{PAGENAME}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n*
{{BASEPAGENAME}}\n* {{BASEPAGENAMEE}}\n* 9i1mmzlf0ombzkt9\n*
bgaa5if3qh6ywrk9\n* {{SUBPAGENAMEE}}\n* {{ROOTPAGENAME}}\n* ainvbpywayrxusor\n*
{{TALKPAGENAME}}\n* bciwqmn6odo647vi\n* {{SUBJECTPAGENAME}}\n*
kpa6yhaj8dj9k9\n* {{NAMESPACEE}}\n* i035l9fsgojemi\n* {{NAMESPACENUMBER}}\n*
{{TALKSPACE}}\n* m7c5k2h72dpfogvi\n* {{SUBJECTSPACEE}}\n* Warning:
Page/template fetching disabled, and no cache for Template:Dynamic");
-add("selser", "Say the magic word
[[3,2,1,0,0,2,0,4,[2],2,4,2,4,2,3,4,0,3,0,4,[3,0],2,0,0,3,4,3,4,[2,0],0,4,3,2,4,0,0,0,4,1,0,[2],2,[3]]]",
"\n* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n*
{{BASEPAGENAME}}\n* h8ohqlxjqi6kcsor\n* zxy3r1yxs3bzw7b9\n* {{ROOTPAGENAME}}\n*
{{ROOTPAGENAMEE}}\n* {{TALKPAGENAME}}\n* {{TALKPAGENAMEE}}\n* {{NAMESPACEE}}\n*
jya8hpq0rzppsyvi\n* szqdq4la370hpvi\n* {{NAMESPACENUMBER}}\n* {{TALKSPACE}}\n*
{{TALKSPACEE}}\n* {{SUBJECTSPACE}}\n* {{SUBJECTSPACEE}}\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
+add("selser", "Say the magic word
[[3,2,1,0,0,2,0,4,[2],2,4,2,4,2,3,4,0,3,0,4,[3,0],2,0,0,3,4,3,4,[2,0],0,4,3,2,4,0,0,0,4,1,0,[2],2,[3]]]",
"* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n*
{{BASEPAGENAME}}\n* h8ohqlxjqi6kcsor\n* zxy3r1yxs3bzw7b9\n* {{ROOTPAGENAME}}\n*
{{ROOTPAGENAMEE}}\n* {{TALKPAGENAME}}\n* {{TALKPAGENAMEE}}\n* {{NAMESPACEE}}\n*
jya8hpq0rzppsyvi\n* szqdq4la370hpvi\n* {{NAMESPACENUMBER}}\n* {{TALKSPACE}}\n*
{{TALKSPACEE}}\n* {{SUBJECTSPACE}}\n* {{SUBJECTSPACEE}}\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
add("selser", "Say the magic word
[[0,0,0,0,[2,0],0,[3,0],0,2,4,1,0,0,2,4,0,0,0,2,0,0,0,0,0,[4],0,4,2,3,0,2,3,0,2,2,0,0,2,[4,0],3,1,3,3]]",
"* {{PAGENAME}}\n* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n*
ndb2aagd04yousor\n* {{BASEPAGENAME}}\n* Warning: Page/template fetching
disabled, and no cache for Template:BASEPAGENAMEE\n* {{SUBPAGENAME}}\n*
fygamhzidon7b9\n* {{ROOTPAGENAME}}\n* uo6tfy23ptvmfgvi\n* {{ROOTPAGENAMEE}}\n*
{{TALKPAGENAME}}\n* {{TALKPAGENAMEE}}\n* {{SUBJECTPAGENAME}}\n*
emopyckkbxd2t9\n* 0vj36772upbq33di\n* {{NAMESPACE}}\n* {{NAMESPACENUMBER}}\n*
7hb5codowjowp14i\n* {{TALKSPACE}}\n* {{TALKSPACEE}}\n* {{SUBJECTSPACE}}\n*
Warning: Page/template fetching disabled, and no cache for
Template:SUBJECTSPACEE\n");
add("selser", "Say the magic word
[[[3,0],0,3,3,[4,0],2,4,0,[2],3,[3],2,2,0,3,0,[2],0,3,0,3,0,1,4,3,0,0,0,[2,0],0,1,3,0,4,3,0,0,0,3,2,4,4,4]]",
"* {{PAGENAME}}\n* {{FULLPAGENAME}}\n* ot8fvtvt654mfgvi\n* {{BASEPAGENAME}}\n*
{{BASEPAGENAMEE}}\n* 6qpg23x7oeyfzuxr\n* {{SUBPAGENAME}}\n* {{ROOTPAGENAME}}\n*
Warning: Page/template fetching disabled, and no cache for
Template:TALKPAGENAMEE\n* {{SUBJECTPAGENAMEE}}\n* {{NAMESPACEE}}\n*
{{NAMESPACE}}\n* {{NAMESPACENUMBER}}\n* {{TALKSPACEE}}\n* 62rooavhbu7vte29\n*
6cugsy47w4fb6gvi");
add("selser", "Say the magic word
[[2,0,[2,0],2,1,0,0,0,4,3,0,2,1,4,2,0,[4],0,2,3,3,3,0,0,2,3,4,0,2,3,3,0,0,3,2,2,[3],2,[3,0],3,0,0,1]]",
"* m4apfjoelhvbzkt9\n* {{PAGENAME}}\n* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n*
{{FULLPAGENAMEE}}\n* wa0cg4hdwpb3ayvi\n* {{BASEPAGENAMEE}}\n* Warning:
Page/template fetching disabled, and no cache for Template:SUBPAGENAME\n*
wxdzcid37j6h6w29\n* {{SUBPAGENAMEE}}\n* {{ROOTPAGENAME}}\n* cw8ole0rv1iz4cxr\n*
{{ROOTPAGENAMEE}}\n* {{TALKPAGENAMEE}}\n* d5y6q7rs1czestt9\n*
{{SUBJECTPAGENAME}}\n* tdeczyetofajor\n* om7ogw2ujoamj9k9\n* {{NAMESPACEE}}\n*
{{NAMESPACENUMBER}}\n* bauxyjkh5r4l5wmi\n* {{TALKSPACE}}\n* {{TALKSPACEE}}\n*
{{SUBJECTSPACE}}\n* {{SUBJECTSPACEE}}\n* Warning: Page/template fetching
disabled, and no cache for Template:Dynamic");
add("selser", "Say the magic word
[[4,3,2,0,[4,0],0,0,0,3,2,0,2,1,2,4,2,[4],0,4,2,0,4,[2],0,0,3,[4],3,0,4,3,2,3,2,[3,0],0,1,0,2,0,0,0,0]]",
"* z1su9pb83ka6pqfr\n* tm8a2l4q8dmtpgb9\n* {{PAGENAMEE}}\n*
{{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n* {{BASEPAGENAMEE}}\n* Warning:
Page/template fetching disabled, and no cache for Template:SUBPAGENAME\n*
su22den5zrveipb9\n* {{ROOTPAGENAME}}\n* tqg4uaq5g1qkhuxr\n* {{TALKPAGENAME}}\n*
{{TALKPAGENAMEE}}\n* {{SUBJECTPAGENAME}}\n* {{SUBJECTPAGENAMEE}}\n*
{{NAMESPACEE}}\n* {{TALKSPACE}}\n* Warning: Page/template fetching disabled,
and no cache for Template:TALKSPACEE\n* ipcotpiu1vxfajor\n* {{SUBJECTSPACE}}\n*
{{SUBJECTSPACEE}}\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
add("selser", "Say the magic word
[[[3,0],4,2,0,[2,0],3,0,3,0,0,3,2,[2],0,[2],0,[2],4,[3],3,0,3,2,0,2,4,0,2,[3,0],0,1,2,[4,0],0,[3,0],0,1,2,0,0,4,0,0]]",
"* {{PAGENAME}}\n* ky0hpvdy19u7syvi\n* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n*
{{FULLPAGENAMEE}}\n* {{BASEPAGENAME}}\n* {{SUBPAGENAME}}\n* {{SUBPAGENAMEE}}\n*
{{ROOTPAGENAME}}\n* {{ROOTPAGENAMEE}}\n* {{TALKPAGENAME}}\n*
5zd33tzhsq6ywrk9\n* {{TALKPAGENAMEE}}\n* q1ve04zv3pn45cdi\n*
{{SUBJECTPAGENAME}}\n* {{SUBJECTPAGENAMEE}}\n* {{NAMESPACEE}}\n*
{{NAMESPACE}}\n* {{NAMESPACENUMBER}}\n* {{TALKSPACE}}\n* Warning: Page/template
fetching disabled, and no cache for Template:TALKSPACEE\n* {{SUBJECTSPACE}}\n*
adrxf8dxaj5j0pb9\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
add("selser", "Say the magic word
[[0,0,[2,0],2,0,0,[3,0],0,0,0,2,3,4,0,3,3,[4],0,2,3,4,3,3,3,3,0,0,4,[3,0],3,4,0,[3,0],0,4,0,2,0,1,0,3,0,2]]",
"* {{PAGENAME}}\n* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n*
{{BASEPAGENAME}}\n* u6lhiqyib0pphkt9\n* {{BASEPAGENAMEE}}\n*
o6hntwguej73z0k9\n* {{ROOTPAGENAME}}\n* k4k4qiif4xbqehfr\n*
{{ROOTPAGENAMEE}}\n* aac9u9e7hyvf5hfr\n* {{SUBJECTPAGENAMEE}}\n*
{{NAMESPACEE}}\n* bhm6scwc2qd26gvi\n* {{NAMESPACENUMBER}}\n*
v2fdxdbteyn45cdi\n* 91971rq8r5rvn29\n* {{TALKSPACEE}}\n* {{SUBJECTSPACE}}\n*
8bf6iukplc95dn29\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
-add("selser", "Say the magic word
[[3,0,1,0,[3,0],4,[4,0],0,3,4,1,3,1,0,0,0,0,0,3,0,3,4,3,0,1,0,0,4,[2,0],4,4,0,2,0,4,2,[3],0,3,2,[3],3,[2]]]",
"\n* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n* Warning:
Page/template fetching disabled, and no cache for Template:BASEPAGENAMEE\n*
Warning: Page/template fetching disabled, and no cache for
Template:SUBPAGENAME\n* {{SUBPAGENAMEE}}\n* {{ROOTPAGENAME}}\n* Warning:
Page/template fetching disabled, and no cache for Template:SUBJECTPAGENAME\n*
{{SUBJECTPAGENAMEE}}\n* {{NAMESPACEE}}\n* 46udxo406dy4x6r\n*
95cg7ex9o52hjjor\n* {{NAMESPACENUMBER}}\n* mzuww97pkvcgnwmi\n*
{{TALKSPACEE}}\n* {{SUBJECTSPACEE}}\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
+add("selser", "Say the magic word
[[3,0,1,0,[3,0],4,[4,0],0,3,4,1,3,1,0,0,0,0,0,3,0,3,4,3,0,1,0,0,4,[2,0],4,4,0,2,0,4,2,[3],0,3,2,[3],3,[2]]]",
"* {{PAGENAMEE}}\n* {{FULLPAGENAME}}\n* {{FULLPAGENAMEE}}\n* Warning:
Page/template fetching disabled, and no cache for Template:BASEPAGENAMEE\n*
Warning: Page/template fetching disabled, and no cache for
Template:SUBPAGENAME\n* {{SUBPAGENAMEE}}\n* {{ROOTPAGENAME}}\n* Warning:
Page/template fetching disabled, and no cache for Template:SUBJECTPAGENAME\n*
{{SUBJECTPAGENAMEE}}\n* {{NAMESPACEE}}\n* 46udxo406dy4x6r\n*
95cg7ex9o52hjjor\n* {{NAMESPACENUMBER}}\n* mzuww97pkvcgnwmi\n*
{{TALKSPACEE}}\n* {{SUBJECTSPACEE}}\n*
{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}");
add("selser", "ISBN code coverage [2]", "v9jyhulo7jnka9k9\n\nISBN
978-0-1234-56 789");
add("selser", "ISBN code coverage [[[3],2,0]]", "ISBN
978-0-1234-5641z4rabqzspaxlxr 789");
add("selser", "ISBN code coverage [1]", "ISBN 978-0-1234-56 789");
@@ -3472,6 +3474,10 @@
add("selser", "Free external link invading image caption [[0,[4]]]",
"[[Image:Foobar.jpg|thumb|http://x|hello]]");
add("selser", "Free external link invading image caption [[0,[3]]]",
"[[Image:Foobar.jpg|thumb|http://x|hello]]");
add("selser", "Free external link invading image caption [[0,[2]]]",
"[[Image:Foobar.jpg|thumb|http://x|hello]]");
+add("selser", "percent-encoding and + signs in comments (Bug 26410)
[[3,0,0]]", "[[ABC%33D% ++|+%20]]");
+add("selser", "percent-encoding and + signs in comments (Bug 26410)
[[3,3,0]]", "[[ABC%33D% ++|+%20]]");
+add("selser", "percent-encoding and + signs in comments (Bug 26410)
[[3,0,[3]]]", "[[ABC%33D% ++|+%20]]");
+add("selser", "percent-encoding and + signs in comments (Bug 26410)
[[3,0,[2]]]", "[[ABC%33D% ++|+%20]]");
add("selser", "preload: check that it doesn't try to do tricks [[2]]", "*
didei13ahu0afw29\n* <!-- Hello --> ''{{world}}''
{{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}}
#if:1|2|3}}");
add("selser", "preload: check that it doesn't try to do tricks [2]",
"zkok5psclsnbqpvi\n* <!-- Hello --> ''{{world}}''
{{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}}
#if:1|2|3}}");
add("selser", "preload: check that it doesn't try to do tricks
[[[4,0,0,1,4,0]]]", "* <!-- Hello --> ''Warning: Page/template fetching
disabled, and no cache for Template:World'' Warning: Page/template fetching
disabled, and no cache for Template:How_are_you{{ {{{|safesubst:}}}
#if:1|2|3}}");
@@ -3679,6 +3685,12 @@
add("selser", "Headings: 4a. No escaping needed (testing just h1 and h2)
[4,3,4,0,0,0,0,2,3,0,4,2,2,0,2]", "ocrps9v6n6lmcxr\n\nx56cdedpb531h5mi\n\n=
=foo= =\n\n==foo=
bar=\n\nuvgzu2vpz7ntrzfr\n\nksxmuylbj4blc8fr\n=''=''foo==\n\nqlo0n5voltnmte29\n=<nowiki>=</nowiki>=");
add("selser", "Headings: 4a. No escaping needed (testing just h1 and h2)
[2,3,[2],0,3,0,0,0,1,0,2,0,2,2,[[3]]]",
"v10aezhks9rdaemi\n==foo=\n\n=foo==\n\n==foo=
bar=\n\n===foo==\n\nlf5hzwbg7ujtt9\n==foo===\n\nh2dgrpr2fx647vi\n=''=''foo==\n\n=<nowiki>=</nowiki>=");
add("selser", "Headings: 4a. No escaping needed (testing just h1 and h2)
[2,4,4,3,0,0,4,4,2,2,[2],0,0,4,3]",
"ixqxdfuj1yioogvi\n==foo=\n\ndat2l79l360w9udi\n\n= =foo=
=\n\nn1wi0vrqn1c92j4i\n\nzt7hsspui04zehfr\n===foo==\n\n==foo===\n\n=''=''foo==\n");
+add("selser", "Lists: 1. Nested inside html
[[1],0,0,0,[1],4,[4],0,[4],2,4,0,[[[3]]],0,[3]]",
"*<nowiki>*foo</nowiki>\n\n*<nowiki>#foo</nowiki>\n\n*<nowiki>:foo</nowiki>\n\n*
ob02l0vkqyf1or\n#
77i6sh5wpm4jwcdi\n\ndmv3qwke6irudi\n\n#<nowiki>:foo</nowiki>\n\n#");
+add("selser", "Lists: 1. Nested inside html
[[4],3,[4],0,[[3]],0,4,0,[[4]],3,4,2,[[[2]]],0,3]", "* dsxfuxcwxesqyqfr\n\n*
owgw4nkqnfef80k9\n\n*\n\nz8ike8xrrxxn7b9\n#zn3w0alil9uanhfr\n\nprnzwyte3puy2e29\n\n#<nowiki>:foo</nowiki>\n");
+add("selser", "Lists: 1. Nested inside html
[1,0,4,0,[[[3]]],0,[3],2,[3],4,[[[3]]],0,[[1]],0,4]",
"*<nowiki>*foo</nowiki>\n\n4z2d9eh8d3lq5mi\n\n*<nowiki>:foo</nowiki>\n\n*\n\n#\n\n#<nowiki>#foo</nowiki>\n\n#<nowiki>:foo</nowiki>\n\nnzg4ucp3trjrwwmi");
+add("selser", "Lists: 1. Nested inside html
[[[2]],3,3,0,3,0,3,0,[2],0,[2],2,4,2,[[[4]]]]",
"*cqapt5lkmn7y14i<nowiki>*foo</nowiki>\n#
2tr4lpaoqrzoajor\n#<nowiki>*foo</nowiki>\n\n#
1hchid9nhsqq6w29\n#<nowiki>#foo</nowiki>\n\ncgewghu5bugfd2t9\n\n#<nowiki>;foo</nowiki>");
+add("selser", "Lists: 1. Nested inside html
[4,0,2,0,[[[3]]],3,3,2,[[[2]]],0,[[2]],2,[[3]],0,[[[2]]]]",
"ok4w3sud87low29\n\nvin27aabhpf4j9k9\n*<nowiki>#foo</nowiki>\n\n*<nowiki>:foo</nowiki>\n\n#<nowiki>*foo</nowiki>\n\n#dml26i0dcxxenrk9<nowiki>#foo</nowiki>\n\n#\n\n#<nowiki>;foo</nowiki>");
+add("selser", "Lists: 4. No escapes needed [4,2,[[0,2]],2,[2]]",
"p6ibs2626wjc3di\n\n*''foo''*bar\n\n* z15lpdjl1wzv9529\n*[[Foo]]: bar");
add("selser", "Tables: 1b. No escaping needed [2]", "!foo");
add("selser", "Tables: 1b. No escaping needed [4]", "!foo");
add("selser", "Tables: 1b. No escaping needed [3]", "!foo");
diff --git a/js/tests/parserTests.txt b/js/tests/parserTests.txt
index 6a17898..b1e6adc 100644
--- a/js/tests/parserTests.txt
+++ b/js/tests/parserTests.txt
@@ -17856,16 +17856,11 @@
<p>123</p><figure typeof="mw:Image/Thumb" class="mw-halign-right"><a
href="./File:Wiki.png"><img
src="http://192.168.142.128/mw/images/thumb/b/bc/Wiki.png/131px-Wiki.png"
width="131" height="150" resource="./File:Wiki.png"></a></figure><p>456</p>
!!end
-# Wacky -- the leading newline in input is required because
-# that is what the serializer emits. To be fixed. Not fixing
-# the test because this test is required to test serialization of
-# new content and preferred whitespace style.
!! test
Lists: Serialize correctly even when list content is wrapped in p-tags (like
VE does)
!! options
parsoid=html2wt
!! input
-
* foo
!! result
<ul>
@@ -17930,16 +17925,11 @@
<span>bar</span>
!! end
-# Wacky -- the leading newline in input is required because
-# that is what the serializer emits. To be fixed. Not fixing
-# the test because this test is required to test serialization of
-# new content and preferred whitespace style.
!! test
Lists: Add space after bullets
!! options
parsoid=html2wt
!! input
-
* foo
* bar
* <span> baz</span>
--
To view, visit https://gerrit.wikimedia.org/r/93626
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If17867dca335e08d06ade3a511d54685afb879de
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits