Subramanya Sastry has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/177761

Change subject: WIP: Fix quote minimization to deal with edits more 
comprehensively
......................................................................

WIP: Fix quote minimization to deal with edits more comprehensively

* There was a FIXME that anticipated this but for some reason, we never
  addressed this.

* I ran into this as part of the <nowiki> patch when I tried to remove
  what I thought was an unneeded test.

* This seems to improve selser serialization in a number of scenarios.

* To be verified and cleaned up.

Change-Id: Id85af3c67ea6c77e5e98c0bdbdcd18d9d483acb7
---
M lib/mediawiki.DOMUtils.js
M lib/mediawiki.WikitextSerializer.js
M lib/wts.minimizeWTQuoteTags.js
M tests/parserTests-blacklist.js
4 files changed, 63 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/61/177761/1

diff --git a/lib/mediawiki.DOMUtils.js b/lib/mediawiki.DOMUtils.js
index 691691e..39ce0b1 100644
--- a/lib/mediawiki.DOMUtils.js
+++ b/lib/mediawiki.DOMUtils.js
@@ -1004,6 +1004,9 @@
                        };
                }
 
+               // Clear out the loaded value
+               this.getNodeData(node)["parsoid-diff"] = undefined;
+
                // Add serialization info to this node
                this.setJSONAttribute(node, 'data-parsoid-diff', dpd);
        },
@@ -1095,6 +1098,17 @@
                return next;
        },
 
+       numNonDeletedChildNodes: function(node) {
+               var n = 0, child = node.firstChild;
+               while (child) {
+                       if (!this.isMarkerMeta(child, "mw:DiffMarker")) {
+                               n++;
+                       }
+                       child = child.nextSibling;
+               }
+               return n;
+       },
+
        /**
         * Get the first mw:DiffMarker child of node
         */
diff --git a/lib/mediawiki.WikitextSerializer.js 
b/lib/mediawiki.WikitextSerializer.js
index a9a1e46..37d5c84 100644
--- a/lib/mediawiki.WikitextSerializer.js
+++ b/lib/mediawiki.WikitextSerializer.js
@@ -1239,7 +1239,7 @@
        var state = new SerializerState(this, this.options);
        try {
                // Minimize I/B tags
-               minimizeWTQuoteTags(body);
+               minimizeWTQuoteTags(body, state.env);
 
                // Don't serialize the DOM if debugging is disabled
                this.env.log(this.logType, function() {
diff --git a/lib/wts.minimizeWTQuoteTags.js b/lib/wts.minimizeWTQuoteTags.js
index a63a294..e25b5cf 100644
--- a/lib/wts.minimizeWTQuoteTags.js
+++ b/lib/wts.minimizeWTQuoteTags.js
@@ -4,6 +4,8 @@
 var DU = require('./mediawiki.DOMUtils.js').DOMUtils,
        Consts = require('./mediawiki.wikitext.constants.js').WikitextConstants;
 
+var env;
+
 var ignoreableAttribs = new Set(['data-parsoid']);
 function similar(a, b) {
        var isHtml_a = DU.isLiteralHTMLNode(a),
@@ -25,9 +27,9 @@
  * For example: a='<b><i>x</i></b>' b='<i>y</i>' => '<i><b>x</b>y</i>'
  */
 function swappable(a, b) {
-       return a.childNodes.length === 1 &&
-               similar(a, a.firstChild) &&
-               mergable(a.firstChild, b);
+       return DU.numNonDeletedChildNodes(a) === 1 &&
+               similar(a, DU.firstNonDeletedChildNode(a)) &&
+               mergable(DU.firstNonDeletedChildNode(a), b);
 }
 
 /** Transfer all of b's children to a and delete b */
@@ -35,14 +37,18 @@
        DU.migrateChildren(b, a);
        b.parentNode.removeChild(b);
 
+       DU.setDiffMark(a, env, "children-changed");
        return a;
 }
 
-/** b is a's sole child.  Switch them around. */
+/** b is a's sole non-deleted child.  Switch them around. */
 function swap(a, b) {
        DU.migrateChildren(b, a);
        a.parentNode.insertBefore(b, a);
        b.appendChild(a);
+
+       DU.setDiffMark(a, env, "children-changed");
+       DU.setDiffMark(b, env, "children-changed");
 
        return b;
 }
@@ -76,7 +82,7 @@
        }
 
        while (a) {
-               b = a.nextSibling;
+               b = DU.nextNonDeletedSibling(a);
                if (!b) {
                        break;
                }
@@ -98,12 +104,12 @@
                                // so we don't need to recurse.
                                minimizeTags(a, rewriteablePair, false);
                        } else if (swappable(a, b)) {
-                               a = merge(swap(a, a.firstChild), b);
+                               a = merge(swap(a, 
DU.firstNonDeletedChildNode(a)), b);
                                // again, a has new children, but the grandkids 
have already
                                // been minimized.
                                minimizeTags(a, rewriteablePair, false);
                        } else if (swappable(b, a)) {
-                               a = merge(a, swap(b, b.firstChild));
+                               a = merge(a, swap(b, 
DU.firstNonDeletedChildNode(b)));
                                // again, a has new children, but the grandkids 
have already
                                // been minimized.
                                minimizeTags(a, rewriteablePair, false);
@@ -119,16 +125,21 @@
        return node;
 }
 
-function minimizeWTQuoteTags(node) {
+function minimizeWTQuoteTags(node, e) {
+       env = e;
        return minimizeTags(node, function(a, b) {
                        // - 'a' and 'b' are both B/I tags
-                       // - at least one of them is new
-                       //   FIXME: What if neither is new, but one of them is 
modified?
-                       //   Do we want to minimize and introduce a dirty diff?
-                       // - neither is an encapsulated elt
+                       // - at least one of them is new/modified
+                       // - there is a deletion marker between them
+                       //   (which would be skipped over above)
                        return Consts.WTQuoteTags.has( a.nodeName ) &&
                                Consts.WTQuoteTags.has( b.nodeName ) &&
-                               (DU.isNewElt(a) || DU.isNewElt(b));
+                               (DU.isNewElt(a)
+                               || DU.isNewElt(b)
+                               || DU.hasCurrentDiffMark(a, env)
+                               || DU.hasCurrentDiffMark(b, env)
+                               || DU.isMarkerMeta(a.nextSibling, 
"mw:DiffMarker")
+                               );
                }, true);
 }
 
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index a1f90cf..47a0b59 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -1849,13 +1849,15 @@
 add("selser", "Italics and possessives (1) [[4,1,4]]", 
"nahe6nth1skedn29''[[Lunar Prospector]]'''tw799rbafavsfw29");
 add("selser", "Italics and possessives (1) [[3,0,0]]", "''[[Lunar 
Prospector]]'''s gamma-ray spectrometer");
 add("selser", "Italics and possessives (2) [1]", "'''''Flaming Pie''''' is ... 
released in 1997. In ''Flaming Pie'''s liner notes");
-add("selser", "Italics and possessives (2) [[2,3,0,0]]", 
"0zb8t8umky2pgb9'''''Flaming Pie'''''''Flaming Pie'''s liner notes");
+add("selser", "Italics and possessives (2) [[2,3,0,0]]", 
"0zb8t8umky2pgb9'''''Flaming Pie'''Flaming Pie'''s liner notes");
 add("selser", "Italics and possessives (2) [[[[4]],4,0,3]]", 
"'''''d312q2axy1fw29'''''5w7rrd5xccndygb9''Flaming Pie'''\n");
 add("selser", "Italics and possessives (2) [[[[4]],0,0,0]]", 
"'''''1qqtc3s8ljl9pb9''''' is ... released in 1997. In ''Flaming Pie'''s liner 
notes");
 add("selser", "Italics and possessives (2) [2]", 
"tci84mu6dedpwrk9\n\n'''''Flaming Pie''''' is ... released in 1997. In 
''Flaming Pie'''s liner notes");
 add("selser", "Italics and possessives (2) [[[[2]],3,2,0]]", 
"'''''brlbkt3xozx2mx6rFlaming Pie'''''s566hxp012srwwmi''Flaming Pie'''s liner 
notes");
 add("selser", "Italics and possessives (2) [[4,0,0,2]]", "97l4x4c02fkcsor is 
... released in 1997. In ''Flaming Pie'''g16yfq5x2tv2huxrs liner notes");
 add("selser", "Italics and possessives (3) [1]", "The first monolingual 
dictionary written in a Romance language was ''Sebastián Covarrubias''' 
''Tesoro de la lengua castellana o española'', published in 1611 in Madrid. In 
1612 the first edition of the ''Vocabolario dell'[[Accademia della Crusca]]'', 
for Italian, was published. In 1690 in Rotterdam was published, posthumously, 
the ''Dictionnaire Universel''.");
+add("selser", "Italics and possessives (3) [[0,[4],3,4,4,[2,[2]],3,[4],0]]", 
"The first monolingual dictionary written in a Romance language was 
''8aye6sr2nsotuik9''xx07zu1k6y5019k98wh8tx130x1lwhfr''s73v0cvjbkbxd2t9Vocabolario
 dell'[[Accademia della Crusca|172v5ctpuwn4s4iAccademia della 
Crusca]]77lhz88f7otdfgvi''.");
+add("selser", "Italics and possessives (3) [[4,4,0,2,0,1,3,1,0]]", 
"3k2lbv3a6vyousorlpvhv0cyexrsh5mi kypmjlvum0u23xr''Tesoro de la lengua 
castellana o española'', published in 1611 in Madrid. In 1612 the first edition 
of the ''Vocabolario dell'[[Accademia della Crusca]]Dictionnaire Universel''.");
 add("selser", "Italics and possessives (3) [[3,0,0,1,0,2,0,0,0]]", 
"''Sebastián Covarrubias''' ''Tesoro de la lengua castellana o española'', 
published in 1611 in Madrid. In 1612 the first edition of the 
5tvfu8jb1lkdquxr''Vocabolario dell'[[Accademia della Crusca]]'', for Italian, 
was published. In 1690 in Rotterdam was published, posthumously, the 
''Dictionnaire Universel''.");
 add("selser", "Italics and possessives (3) [2]", "y1z50d22dwqdj9k9\n\nThe 
first monolingual dictionary written in a Romance language was ''Sebastián 
Covarrubias''' ''Tesoro de la lengua castellana o española'', published in 1611 
in Madrid. In 1612 the first edition of the ''Vocabolario dell'[[Accademia 
della Crusca]]'', for Italian, was published. In 1690 in Rotterdam was 
published, posthumously, the ''Dictionnaire Universel''.");
 add("selser", "Italics and possessives (3) [[0,2,2,2,0,3,3,4,0]]", "The first 
monolingual dictionary written in a Romance language was 
m0zdrix825wxw29''Sebastián Covarrubias'''uyoh7ao7utm7k3xr 
sj75fcn6bccba9k9''Tesoro de la lengua castellana o española'', published in 
1611 in Madrid. In 1612 the first edition of the 298jcuxw70e5qaor.\n");
@@ -1863,10 +1865,13 @@
 add("selser", "Italics and possessives (3) [[0,2,0,1,3,2,0,2,0]]", "The first 
monolingual dictionary written in a Romance language was 
jojl0grg3oc4n29''Sebastián Covarrubias''' ''Tesoro de la lengua castellana o 
española''ezphtpwtiq9f6r''Vocabolario dell'[[Accademia della Crusca]]'', for 
Italian, was published. In 1690 in Rotterdam was published, posthumously, the 
lhz9qfdq9eh4cxr''Dictionnaire Universel''.");
 add("selser", "Italics and possessives (3) [[0,0,0,[3],4,[0,1],3,4,3]]", "The 
first monolingual dictionary written in a Romance language was ''Sebastián 
Covarrubias''' ''<nowiki/>''zlam3qm2v92xd2t9''Vocabolario dell'[[Accademia 
della Crusca]]''nz6g2ndeiaw9izfr\n");
 add("selser", "Italics and possessives (3) [[0,2,0,0,2,3,3,0,0]]", "The first 
monolingual dictionary written in a Romance language was 
g2q5y8qe0r2lz0k9''Sebastián Covarrubias''' ''Tesoro de la lengua castellana o 
española''e2wdru4i4ulhm2t9, published in 1611 in Madrid. In 1612 the first 
edition of the ''Dictionnaire Universel''.");
+add("selser", "Italics and possessives (3) [[0,[3],0,1,3,1,0,2,0]]", "The 
first monolingual dictionary written in a Romance language was ''<nowiki/>'' 
''Tesoro de la lengua castellana o españolaVocabolario dell'[[Accademia della 
Crusca]]'', for Italian, was published. In 1690 in Rotterdam was published, 
posthumously, the hhstwc14sq19vn29''Dictionnaire Universel''.");
 add("selser", "Italics and possessives (3) [[0,0,0,1,3,4,0,0,0]]", "The first 
monolingual dictionary written in a Romance language was ''Sebastián 
Covarrubias''' ''Tesoro de la lengua castellana o española''is1s406juryeqaor, 
for Italian, was published. In 1690 in Rotterdam was published, posthumously, 
the ''Dictionnaire Universel''.");
 add("selser", "Italics and bold: 3-quote opening sequence: (3,2) [2]", 
"s5wcf5sr3xuk57b9\n\n'''foo''");
 add("selser", "Italics and bold: 4-quote opening sequence: (4,3) [2]", 
"kcvw0a0oy19hehfr\n\n''''foo'''");
-add("selser", "Italics and bold: multiple quote sequences: (3,4,3+3) w/ nowiki 
[[[1],3,0]]", "'''<nowiki>foo'</nowiki>''''''<nowiki/>'''");
+add("selser", "Italics and bold: multiple quote sequences: (3,4,3+3) w/ nowiki 
[[[1],3,0]]", "'''<nowiki>foo'</nowiki><nowiki/>'''\n");
+add("selser", "Italics and bold: multiple quote sequences: (3,4,3+3) w/ nowiki 
[[0,3,[1]]]", "'''<nowiki>foo'</nowiki><nowiki/>'''\n");
+add("selser", "Italics and bold: multiple quote sequences: (3,4,3+3) w/ nowiki 
[[[1],3,[3]]]", "'''<nowiki>foo'</nowiki>'''\n");
 add("selser", "Italics and bold: other quote tests: (3,2,3,3) [2]", 
"kqb6fw9ti9j54s4i\n\n'''this is about ''foo'''s family'''");
 add("selser", "Italicized possessive [1]", "The ''[[Main Page]]'''s talk 
page.");
 add("selser", "Italicized possessive [2]", "niydmvd0qbk2o6r\n\nThe ''[[Main 
Page]]'''s talk page.");
@@ -1951,7 +1956,7 @@
 add("selser", "5a. White-space in indent-pre [[2,0,4]]", " d3ppdqvqzdxi529a<br 
/>\n 82567nb6q9hbmx6r");
 add("selser", "5a. White-space in indent-pre [[2,0,0]]", " 9blj98gpz0py14ia<br 
/>\n \n \n b");
 add("selser", "5a. White-space in indent-pre [[0,2,0]]", " 
am3m3vd8oxzu84cxr<br />\n \n \n b");
-add("selser", "5c. White-space in indent-pre [[0,3,0,2,2]]", " 
''a''''b''vf945p94fagu8fr\n   5plpbwtgtdtpgb9''c''");
+add("selser", "5c. White-space in indent-pre [[0,3,0,2,2]]", " 
''ab''vf945p94fagu8fr\n   5plpbwtgtdtpgb9''c''");
 add("selser", "Definition lists: self-closed tag [2]", 
"x14l42v2vh392j4i\n;one<br/>two : two-line fun");
 add("selser", "Definition lists: self-closed tag [1]", ";one<br/>two : 
two-line fun");
 add("selser", "Definition lists: self-closed tag [[[4,2,4,0],[2]]]", 
";hfmudey4je6u5wmi18aco6b1yahy3nmi<br/>199ekjza5e7phkt9 :b3ubf9dln2x7ds4i 
two-line fun");
@@ -2100,14 +2105,14 @@
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[3,0,[2],0,3,4,3,[0,[0,[1]],4],0,1]]", "\n[http://example.com 
4n2162e1fd730udi'''text''']'''rgd08hyitua0pb9''Something [http://example.com 
mixed''''', even bold''''']l55strlralri19k9''\n'''''Now [http://example.com 
both'''''<nowiki/>''''']'''''");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid [1]", 
"''[http://example.com text'']\n[http://example.com '''text]'''\n''Something 
[http://example.com in italic'']\n''Something [http://example.com mixed''''', 
even bold]'''\n'''''Now [http://example.com both''''']");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid [2]", 
"ypjgrwin4revcxr\n\n''[http://example.com text'']\n[http://example.com 
'''text]'''\n''Something [http://example.com in italic'']\n''Something 
[http://example.com mixed''''', even bold]'''\n'''''Now [http://example.com 
both''''']");
-add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[0,1]],0,3,1,4,1,3,[0,[0,[[3]]],3],4,3]]", "''[http://example.com 
text''<nowiki/>'']''\n'''<nowiki/>'''7qwqa9229ey7gb9''Something 
[http://example.com in italic'']''<nowiki/>''Something [http://example.com 
mixed'''''<nowiki/>''''']''counvgra3151xlxr\n");
+add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[0,1]],0,3,1,4,1,3,[0,[0,[[3]]],3],4,3]]", "''[http://example.com 
text''<nowiki/>'']''\n'''<nowiki/>'''7qwqa9229ey7gb9''Something 
[http://example.com in italic'']Something [http://example.com 
mixed'''''<nowiki/>''''']''counvgra3151xlxr\n");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[2,0,4,4,2,1,0,3,0,4]]", "fxsbmxalr8f9wwmi''[http://example.com 
text'']\ng1cxmyk709vygb9kr3b7p92rmg0t3xrc6f6w79eiwfjemi\n''Something 
[http://example.com in italic''<nowiki/>'']''\n\nxqwjvsy7ltvgqfr\n");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,0,0,0,0,4,4,4,0,[3]]]", "0zdw3pkk57hnnrk9\n[http://example.com 
'''text]'''\nizanpf6huff20529vfp1wv58jce1xlxry331mymvx0cc8fr\n'''<nowiki/>'''");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[1,3,2,2,0,1,4,[0,3,0],0,[4]]]", "''[http://example.com 
text'']''9ois0yoxiebfbt9[http://example.com 
'''text]saoppxketkic0udi'''\n''Something [http://example.com in 
italic'']''o0hyqnpaq38cwhfr''Something '<nowiki/>''\n'''hyq0ggqn4hzadcxr'''");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[3,0,3,3,4,[3,[4,0]],0,[0,1,3],0,[[3,[0,2]]]]]", 
"\nsjft3sgyl0i9t3xr''[http://example.com 
spz6gumbba84zpvi''<nowiki/>'']''\n''Something [http://example.com mixed''''', 
even bold]''\n'''''[http://example.com 
bothi78rcmgoegtoi529'''''<nowiki/>''''']'''''");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[[3],0,[2],0,4,1,0,4,3,3]]", "''<nowiki/>''\n[http://example.com 
rgkc3a28h38cwhfr'''text]'''fuoqrsdna64dkj4i''Something [http://example.com in 
italic'']''\nmsb55932ah7rdx6r\n");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[3,0,3,1,0,2,4,3,3,[[0,[0,1]]]]]", 
"\n'''<nowiki/>'''\nz032w7z1kdo0f6r''Something [http://example.com in 
italic'']o88q9qaoc6ljif6r'''''Now [http://example.com 
both'''''<nowiki/>''''']'''''");
-add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[2,2,[2],1,0,[3,0],3,[3,[0,[[4]]],0],0,3]]", 
"o9nab4h230tnvcxr''[http://example.com 
text'']u5sfhyznivd3g14i\n[http://example.com 
isdro1map7qa1yvi'''text]'''<nowiki/>'''\n''[http://example.com in 
italic'']''<nowiki/>''[http://example.com 
mixed'''''o08ug21d18h3erk9''''']'''\n");
+add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[2,2,[2],1,0,[3,0],3,[3,[0,[[4]]],0],0,3]]", 
"o9nab4h230tnvcxr''[http://example.com 
text'']u5sfhyznivd3g14i\n[http://example.com 
isdro1map7qa1yvi'''text]'''<nowiki/>'''\n''[http://example.com in 
italic''][http://example.com mixed'''''o08ug21d18h3erk9''''']'''\n");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[[2],4,[[4]],0,4,[0,4],2,2,3,[4]]]", "''kndlu276kxz5b3xr[http://example.com 
text'']''66fz4jk56gtd42t9[http://example.com 
'''hbtqecdqt5oecdi''']'''sr9o6vidsk5u3di''Something 
81gi1py5yann4s4i''i1h0s35lu287iudi\nr1c3unvdylanhfr''Something 
[http://example.com mixed''''', even bold]''''''cwiw4wazt6kfn7b9'''");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[2,0,3,0,3,2,0,[3,2,0],2,[3]]]", "rxaa2sxf4o8yqfr''[http://example.com 
text'']\n'''mtebxw1xl4x11yvi''Something [http://example.com in 
italic'']\n''vt2hxx23uta3v7vi[http://example.com mixed''''', even 
bold]'''fr3tlqbb4piizfr\n'''<nowiki/>'''");
 add("selser", "Bug 2702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,2,0,0,4,[2,[4,1]],0,1,2,1]]", 
"uypp3nxnupst6gvi5lixlomwktb4vx6r\n[http://example.com 
'''text]'''1euo2nqbj6mvx6r''s5ucqw1bludz33diSomething [http://example.com 
iqi27jd7nxoxyldi''<nowiki/>'']''\n''Something [http://example.com mixed''''', 
even bold]'''3rrma1jx3c70hpvi\n'''''Now [http://example.com both''''']'''");
@@ -2648,8 +2653,8 @@
 add("selser", "Mixing markup for italics and bold [[0,0,[4,[4]]]]", 
"'<nowiki/>''bold''''''ofte4w4zkeh77gb9''xbrpnwqlrllerk9'''''");
 add("selser", "Mixing markup for italics and bold [[0,2,1]]", 
"'7hmry58pm8to6r''bold''''''bold''bolditalics'''''");
 add("selser", "Mixing markup for italics and bold [[0,0,4]]", 
"'<nowiki/>''bold'''vs6oe9iomie8kt9");
-add("selser", "Mixing markup for italics and bold [[2,0,[3,[2]]]]", 
"9rfbagd91q44e7b9'<nowiki/>''bold'''<nowiki/>'''''dwszs7lpqhvvx6rbolditalics'''''");
-add("selser", "Mixing markup for italics and bold [[2,2,[3,0]]]", 
"3gqsk0fqzf6crf6r'asugzbokcr3323xr''bold'''<nowiki/>'''''bolditalics'''''");
+add("selser", "Mixing markup for italics and bold [[2,0,[3,[2]]]]", 
"9rfbagd91q44e7b9'<nowiki/>''bold'<nowiki/>'''dwszs7lpqhvvx6rbolditalics'''''\n");
+add("selser", "Mixing markup for italics and bold [[2,2,[3,0]]]", 
"3gqsk0fqzf6crf6r'asugzbokcr3323xr''bold'<nowiki/>'''bolditalics'''''\n");
 add("selser", "Section extraction, <pre> around bogus header (bug 10309) 
[[2],2,[3],3,0,0,2]", "==0mqyujy54j1qbyb9 Section One 
==\nyzn329uexnp3z0k9\n<pre></pre>\n\n== Section Two 
==\nppzttjn4r8gp66r\n\nstuff");
 add("selser", "Handling of &#x0A; in URLs [[[2]]]", "*a1yhylbtfjgrdx6r\n* 
irc://&#x0A;a");
 add("selser", "Handling of &#x0A; in URLs [[[[2]]]]", "** 0r68g30euvbfn7b9\n* 
irc://&#x0A;a");
@@ -2868,15 +2873,20 @@
 add("selser", "Entities in ref name [1]", "<ref name=\"test &amp; 
me\">hi</ref>");
 add("selser", "Headings: 5. Empty headings [[2],3,2,0,4,4,0,2,1,3,0]", 
"=hnjo2713bjvjwcdi<nowiki/>=\nx2d05yq3dapaxlxr\n==<nowiki/>==\n\nkaovt9si227ta9k9\n\nb2688fvzpaocrf6r\n====<nowiki/>====\nljshl952j0emte29\n\n=====<nowiki/>=====\n\n======<nowiki/>======");
 add("selser", "Headings: 6a. Heading chars in SOL context (with trailing 
spaces) [4,0,1,0,4,4,[2],3]", "o4fu7yz6zedvlsor\n\n<nowiki>=a=</nowiki> 
\n\nfzi337zwgfmbzkt9\n\nrziif3qr3rspp66r\n\nzm9kz709iqpsnhfr<nowiki>=a=</nowiki>
 \t");
-add("selser", "1. Quotes inside <b> and <i> 
[[3,2,1,3,0,3,4,0,2,3,0,1,4,1,3,[2,0,0,0],0,0,0,0,0,2,0,0,4,0,0,2,3,3,0,1,3,4,3,0,0,3,4,3,3,0,2]]",
 
"3ggp4kwixzloko6r\n''<nowiki>''foo''</nowiki>''''<nowiki>'''foo'''</nowiki>''wednybdch5ixusor<nowiki/>jiu7uxfou9n6d2t9's\n\n'''<nowiki>''foo''</nowiki>'''5yp9smtnl1bgldi'''<nowiki>'''foo'''</nowiki>'''<nowiki/>'''0adusjelvz3t0529foo'<nowiki/>''bar'<nowiki/>''baz'''\n'''foo'''<nowiki/>'s\n'<nowiki/>myh73q54kveljtt9''foo''\n''foo''c10qrc4l4kkjra4i'\n'<nowiki/>c9meu8765gjpp66r''foo''<nowiki/>'''foo'''8qu5jiqalmvg3nmi'\n'<nowiki/>191wmp849f7gmn29\n6zhdeznwfwxko6r''<span>fool</span>'s
 errand''");
-add("selser", "1. Quotes inside <b> and <i> 
[[2,3,[1],4,0,0,[3],0,2,2,0,4,0,0,4,1,0,0,0,0,3,1,4,3,2,4,0,0,0,0,0,0,0,2,1,0,2,[2],0,3,0,0,4]]",
 
"b9ve2r72aq44e7b9''<nowiki/>'foo'<nowiki/>''<nowiki/>''<nowiki>''foo''</nowiki>''jduad2jvmauac3di''<nowiki>'''foo'''</nowiki>''\n''<nowiki/>''<nowiki/>hb7ucb9xukofajor's\nimf9p1zrvbbdfgvi'''<nowiki/>'foo'<nowiki/>'''\nd92wpym0cizwu3di\n'''<nowiki>'''foo'''</nowiki>'''4mia6l6nhzolxr'''foo'<nowiki/>''bar'<nowiki/>''baz'''\n'''foo'''<nowiki/>'s\n'''foo''6wag5p5b648l4n29rs74ede4dxiuow29<nowiki/>s455j5uyzl0daemi<nowiki/>''foo''<nowiki/>'\n'<nowiki/>'''foo'''\nc9hosabzbqhbyb9'''foo'''<nowiki/>'\n'1yl4yeqhhtr19k9<nowiki/>'''9k3pgwyb0uvaq0k9foo'''<nowiki/>''fools'<span>
 errand</span>''\n3mwa3kwctc8r529\n");
-add("selser", "1. Quotes inside <b> and <i> 
[[4,2,4,0,[[3]],3,0,3,3,[1,0,3],0,[3],4,0,0,[4,4,[3,1],4],2,[2],2,2,0,1,0,[3],3,0,0,4,0,3,0,[2],0,4,0,2,0,0,3,0,0,0,[[2],0]]]",
 
"hfzzqh4z896n7b9y9b5b0h3xt4vx6r\nzopywt5d4aacq5mi\n''<nowiki></nowiki>''''foo'''''<nowiki/>'foo'<nowiki/>'''\n'''<nowiki/>'''uqjub7vnyn45cdi'''<nowiki>'''foo'''</nowiki>'''\n'''83tn7m6x3eib2o6rmtl1eup7hihyf1or''<nowiki/>''fijnecivtgwrk9'''p1oe0q0yue4s4i\n'''8uyg5pcth3cmobt9foo'''pyjfygv6wqzlrf6r<nowiki/>eojrt6m8f16y9zfr's\n'<nowiki/>''foo''\n''<nowiki/>''<nowiki/>'\n'<nowiki/>zos87pvfob027qfr<nowiki/><nowiki/>'''n96yj3i9qz1tt9foo'''\nksi8t5exrcgi7ldi<nowiki/>h040bax80duc8fr'\n'<nowiki/>'''foo'''<nowiki/>'\n''fools'<span>
 errand</span>''\n''<span>6bj2bwfnyer0be29fool</span>'s errand''");
-add("selser", "1. Quotes inside <b> and <i> 
[[[2,0,3],0,[[3]],4,4,2,[3],3,0,[0,3,1],3,[2],3,[[3]],3,[0,1,2,2],3,3,0,4,4,4,0,[4],0,0,0,0,4,0,2,1,0,3,0,2,0,2,4,2,[3,1],4,1]]",
 
"''rou4oqqj45pwg66r<nowiki/>'foo'''\n''<nowiki></nowiki>''6o82gwbgw9xxn7b9n4fc723rbxtg9zfr2po5rm4z5rhehfr\n''<nowiki/>''<nowiki/>'s\n'''<nowiki/><nowiki/>'''<nowiki/>'''8vtzkg2u8wnopqfr<nowiki>''foo''</nowiki>'''<nowiki/>'''<nowiki></nowiki>'''<nowiki/>'''foo'<nowiki/>ipon7rm9iy0hpvi''bar'<nowiki/>''jsehige2uxov42t9baz'''<nowiki/>dinfburnti0ms4ibximthck3qgaxlxrrbhllev1hoo2mx6r\n''tvi87wnpldblc8fr''<nowiki/>'\n'<nowiki/>''foo''mans72mc33csdcxr'\n'dnvvbq5ayqc6usor<nowiki/>'''foo'''\n<nowiki/>9293k6dvvmoq1tt9'\n'<nowiki/>zs5z7v3q0qaug14i'''foo'''deu4ioyka97fogvii2578yu6svt5ipb9'\n''<span
 data-foobar=\"ntagvrajvtoqolxr\"> 
errand</span>''icug3imme9mjkyb9''<span>fool</span>'s errand''");
+add("selser", "1. Quotes inside <b> and <i> 
[[3,2,1,3,0,3,4,0,2,3,0,1,4,1,3,[2,0,0,0],0,0,0,0,0,2,0,0,4,0,0,2,3,3,0,1,3,4,3,0,0,3,4,3,3,0,2]]",
 
"3ggp4kwixzloko6r\n''<nowiki>''foo''</nowiki><nowiki>'''foo'''</nowiki>''wednybdch5ixusor<nowiki/>jiu7uxfou9n6d2t9's\n\n'''<nowiki>''foo''</nowiki>'''5yp9smtnl1bgldi'''<nowiki>'''foo'''</nowiki>0adusjelvz3t0529foo'<nowiki/>''bar'<nowiki/>''baz'''\n'''foo'''<nowiki/>'s\n'<nowiki/>myh73q54kveljtt9''foo''\n''foo''c10qrc4l4kkjra4i'\n'<nowiki/>c9meu8765gjpp66r''foo''<nowiki/>'''foo'''8qu5jiqalmvg3nmi'\n'<nowiki/>191wmp849f7gmn29\n6zhdeznwfwxko6r''<span>fool</span>'s
 errand''");
+add("selser", "1. Quotes inside <b> and <i> 
[[2,3,[1],4,0,0,[3],0,2,2,0,4,0,0,4,1,0,0,0,0,3,1,4,3,2,4,0,0,0,0,0,0,0,2,1,0,2,[2],0,3,0,0,4]]",
 
"b9ve2r72aq44e7b9''<nowiki/>'foo'<nowiki/><nowiki>''foo''</nowiki>''jduad2jvmauac3di''<nowiki>'''foo'''</nowiki>''\n''<nowiki/>''<nowiki/>hb7ucb9xukofajor's\nimf9p1zrvbbdfgvi'''<nowiki/>'foo'<nowiki/>'''\nd92wpym0cizwu3di\n'''<nowiki>'''foo'''</nowiki>'''4mia6l6nhzolxr'''foo'<nowiki/>''bar'<nowiki/>''baz'''\n'''foo'''<nowiki/>'s\n'''foo''6wag5p5b648l4n29rs74ede4dxiuow29<nowiki/>s455j5uyzl0daemi<nowiki/>''foo''<nowiki/>'\n'<nowiki/>'''foo'''\nc9hosabzbqhbyb9'''foo'''<nowiki/>'\n'1yl4yeqhhtr19k9<nowiki/>'''9k3pgwyb0uvaq0k9foo'''<nowiki/>''fools'<span>
 errand</span>''\n3mwa3kwctc8r529\n");
+add("selser", "1. Quotes inside <b> and <i> 
[[4,2,4,0,[[3]],3,0,3,3,[1,0,3],0,[3],4,0,0,[4,4,[3,1],4],2,[2],2,2,0,1,0,[3],3,0,0,4,0,3,0,[2],0,4,0,2,0,0,3,0,0,0,[[2],0]]]",
 
"hfzzqh4z896n7b9y9b5b0h3xt4vx6r\nzopywt5d4aacq5mi\n''<nowiki></nowiki>foo'''''<nowiki/>'foo'<nowiki/>'''\n'''<nowiki/>'''uqjub7vnyn45cdi'''<nowiki>'''foo'''</nowiki>'''\n'''83tn7m6x3eib2o6rmtl1eup7hihyf1or''<nowiki/>''fijnecivtgwrk9'''p1oe0q0yue4s4i\n'''8uyg5pcth3cmobt9foo'''pyjfygv6wqzlrf6r<nowiki/>eojrt6m8f16y9zfr's\n'<nowiki/>''foo''\n''<nowiki/>''<nowiki/>'\n'<nowiki/>zos87pvfob027qfr<nowiki/><nowiki/>'''n96yj3i9qz1tt9foo'''\nksi8t5exrcgi7ldi<nowiki/>h040bax80duc8fr'\n'<nowiki/>'''foo'''<nowiki/>'\n''fools'<span>
 errand</span>''\n''<span>6bj2bwfnyer0be29fool</span>'s errand''");
+add("selser", "1. Quotes inside <b> and <i> 
[[[0,4,0],3,1,3,1,2,1,0,2,2,0,[3],4,[[2]],0,3,3,3,0,3,3,[3],0,[2],3,2,0,3,0,0,0,4,4,4,0,2,1,2,4,2,[4,0],2,4]]",
 
"''<nowiki/>av6ia62qlqj5g66r<nowiki/><nowiki>''foo''</nowiki><nowiki>'''foo'''</nowiki>''2qbh5zutf82p4x6r\n''foo''<nowiki/>uw9jcki2j9azto6r's\nkvikr5b01zq41jor'''<nowiki/>'foo'<nowiki/>'''\n'''<nowiki/>'''u70g0hr9yg5jyvi'''<nowiki>hdyz8z5toahjv2t9'''foo'''</nowiki>'''\n<nowiki/>''<nowiki/>''\n''ykgu26a711ao47vifoo''vi6ls290eteghkt9'\n'<nowiki/><nowiki/>'\n'<nowiki/>ilyo093i3ipy14iy0oztpvqryffxbt98fh6lvjb5wxw29<nowiki/>y9rq51gjn7gy14i'\n'<nowiki/>t492w9pqm0urqkt9'''foo'''3g9imvuxcw86ko6rovhh9d5w53oywrk9'\n''6gj1mm8uwmydgqfr<span>
 errand</span>''n2rdecq8tfgsnhfr\n3zz0b2o5uka6pqfr\n");
+add("selser", "1. Quotes inside <b> and <i> 
[[[2,0,3],0,[[3]],4,4,2,[3],3,0,[0,3,1],3,[2],3,[[3]],3,[0,1,2,2],3,3,0,4,4,4,0,[4],0,0,0,0,4,0,2,1,0,3,0,2,0,2,4,2,[3,1],4,1]]",
 
"''rou4oqqj45pwg66r<nowiki/>'foo'''\n''<nowiki></nowiki>''6o82gwbgw9xxn7b9n4fc723rbxtg9zfr2po5rm4z5rhehfr\n''<nowiki/>''<nowiki/>'s\n'''<nowiki/><nowiki/>8vtzkg2u8wnopqfr<nowiki>''foo''</nowiki><nowiki></nowiki>foo'<nowiki/>ipon7rm9iy0hpvi''bar'<nowiki/>''jsehige2uxov42t9baz'''<nowiki/>dinfburnti0ms4ibximthck3qgaxlxrrbhllev1hoo2mx6r\n''tvi87wnpldblc8fr''<nowiki/>'\n'<nowiki/>''foo''mans72mc33csdcxr'\n'dnvvbq5ayqc6usor<nowiki/>'''foo'''\n<nowiki/>9293k6dvvmoq1tt9'\n'<nowiki/>zs5z7v3q0qaug14i'''foo'''deu4ioyka97fogvii2578yu6svt5ipb9'\n''<span
 data-foobar=\"ntagvrajvtoqolxr\"> 
errand</span>''icug3imme9mjkyb9''<span>fool</span>'s errand''");
+add("selser", "1. Quotes inside <b> and <i> 
[[3,0,[[3]],0,1,0,0,1,4,4,2,2,4,2,0,1,4,4,4,0,0,4,4,0,3,0,0,2,0,0,0,[3],3,[4],0,3,0,3,3,0,2,3,[1,2]]]",
 
"\n''<nowiki></nowiki>''\n''<nowiki>'''foo'''</nowiki>''\n''foo''<nowiki/>zn8e50rixfo2mx6rnwxcb0vltssmj9k971d5b4dgu6av2t9\nb5vbc2u00aoflxr'''<nowiki>''foo''</nowiki>'''2pmyruoajdjcerk9x1opqkhimg77rpb9'''<nowiki>'''foo'''</nowiki>'''\n'''foo'<nowiki/>''bar'<nowiki/>''baz'''q8wvj0qw43x47vio054hnv223wbqpvid0g2obid9akvgqfr's\n'<nowiki/>dj4fdj44116ecdiqxeb9eikbg3krzfr''foo''<nowiki/>'\n'<nowiki/>pnvdzbfba10pb9''foo''<nowiki/>'\n'<nowiki/>'''0kybjloy4qf9wwmi'''<nowiki/><nowiki/>'\n5h2hbokwkouyds4i''fools'<span>
 errand</span><span 
data-foobar=\"e7bgdd2wwqy6i529\">fool</span>0h73fkwca49ggb9's errand''\n");
 add("selser", "1. Quotes inside <b> and <i> 
[[3,0,[[4]],4,0,0,3,0,0,[2,0,3],0,2,0,[4],0,[0,0,1,2],4,0,0,2,0,1,2,0,0,3,0,[4],0,0,3,[2],3,4,3,4,0,[4],1,3,1,3,3]]",
 
"\n''<nowiki>9du4tukpxr5p14i</nowiki>''a3oxn4o6xuoez5mi''<nowiki>'''foo'''</nowiki>''\n<nowiki/>'s\n'''zb6b8p4dsrgj5rk9<nowiki/>'foo''''\nn5g2nainzi9evcxr'''<nowiki>''foo''</nowiki>'''\n'''fjf9en2rxyw1xlxr'''\n'''foo'<nowiki/>''bar'<nowiki/>''3t058jjruq4wvcxrbaz'''w3assj8fjchm2t9'''foo'''<nowiki/>406bo4oovs3sdcxr's\n'<nowiki/>''foo''l8ur9en9wqe8w7b9\n''foo''<nowiki/><nowiki/>''upyarw5tif1rlik9''<nowiki/>'\n''''xf76q2gb9hmbcsorfoo'''zeaqonfmvysexw295dvwath003dqjjor<nowiki/>'''q5arckx2cdk4vx6r'''<nowiki/>''fools'<span>
 errand</span>''\n");
 add("selser", "1. Quotes inside <b> and <i> 
[[4,2,0,0,[2],0,1,0,4,[0,0,3],2,0,2,[[3]],0,[0,1,[3,0],0],0,4,4,0,1,2,0,[3],0,0,1,0,4,4,3,0,4,[2],0,4,4,3,0,4,4,4,[[4],3]]]",
 
"acy673rinovfgviplr0nwpq14079zfr\n''<nowiki>''foo''</nowiki>''\n''x9s8roz7iecul3di<nowiki>'''foo'''</nowiki>''\n''foo''<nowiki/>ncaawjaqbiall3di'''<nowiki/>'foo''''7mofib93ncj714i\n'''<nowiki>''foo''</nowiki>'''a0h559r0kaf9a4i\n'''<nowiki></nowiki>'''\n'''foo'<nowiki/>''<nowiki/>''baz'''\n265zz6wn68zg2e29dcfy6wfyuuonipb9's\n'<nowiki/>n0so9m9gubthjjor''foo''\n''<nowiki/>''<nowiki/>'\n'<nowiki/>''foo''eu8bi30kt40lik9enwlc3t7myt4kj4i'''foo'''x6ngpya7ros10pb9'''pil88s26p0mp9zfrfoo'''<nowiki/>guy0jrmki6v18aor79cji1kde00jxlxr<nowiki/>ce9yefc1ixp3nmiudh3zchhff94fgvi41nysayj1hsemi''<span>6nuqrvo7e9qtcsor</span>''\n");
-add("selser", "1. Quotes inside <b> and <i> 
[[1,2,2,3,0,0,0,0,0,4,3,[1],4,2,2,2,0,0,1,2,0,0,0,2,1,0,0,0,4,3,3,1,4,0,0,0,4,1,0,0,4,0,[[3],0]]]",
 
"''<nowiki/>'foo'<nowiki/>''8mwsali9gk87iudi\npexq8y928svpldi''<nowiki>''foo''</nowiki>''''<nowiki>'''foo'''</nowiki>''\n''foo''<nowiki/>'s\n6l3n0isukyxbhuxr'''<nowiki>''foo''</nowiki>'''293if16rvbo6rya8ucw2l1ot4vx6r'''<nowiki>'''foo'''</nowiki>'''d3o8cb65amo8yqfr\nv76s1c9t27a2a9k9'''foo'<nowiki/>''bar'<nowiki/>''baz'''\n'''foo'''<nowiki/>6au4ok542pv9ggb9's\n'<nowiki/>''foo''\nx1kph61h3w12a9k9''foo''<nowiki/>'\n'<nowiki/>''foo''gbi7s1g1j9ssjor'''foo'''h0tu65jvy6iuow29'''foo'''<nowiki/>'\n'372t8iv11r7zm2t9'''foo'''<nowiki/>'\n38wbt83fs04o0f6r\n''<span></span>'s
 errand''\n");
-add("selser", "1. Quotes inside <b> and <i> 
[[4,0,4,0,0,2,1,4,2,1,3,[3],3,[[2]],3,3,3,0,4,0,3,4,0,[3],0,0,4,[2],3,0,0,[4],0,3,0,0,1,[3],0,0,[0,4],2,[0,4]]]",
 
"bcv9t18xvahh0k9\n7j4ebaxa7o9ftj4i\n''<nowiki>'''foo'''</nowiki>''mry7gwh281tt9\n''foo''6z57b2fhe9yn9udi7d4vr8m4oxcivn29's\n'''<nowiki/>'foo'<nowiki/>'''<nowiki/>'''<nowiki/>'''<nowiki/>'''<nowiki>x4ljrkxn00jxlxr'''foo'''</nowiki>''''''foo'''eg408kyvbtck57b9's\n'72iu8q6iuihehfr\n''<nowiki/>''<nowiki/>'\n'hs9psbz3fcdw8kt9''hpob0uhvs0885mifoo'''\n'<nowiki/>'''1ikpa9oovowghkt9'''\n<nowiki/>'\n'<nowiki/>'''<nowiki/>'''<nowiki/>'\n''fools'2cecdk1nov927qfr''qgboi2cpqmovquxr\n''<span>fool</span>kx25x3hw1m7vi''");
-add("selser", "1. Quotes inside <b> and <i> 
[[3,0,0,0,0,4,4,0,3,1,3,0,3,1,3,4,4,4,0,3,4,3,3,3,0,0,3,4,0,4,0,1,0,0,0,3,0,0,0,0,[4,1],0,[4,3]]]",
 
"\n''<nowiki>''foo''</nowiki>''\n''<nowiki>'''foo'''</nowiki>''948m22lf1cnb3xrbaoqjpy11p33ow29<nowiki/>'''<nowiki/>'foo'<nowiki/>''''''<nowiki>''foo''</nowiki>'''<nowiki/>'''<nowiki>'''foo'''</nowiki>'''425jab38ms32qpvibrv2d7nt35mnp14id7vrobs3yc01wcdi<nowiki/>cecami0l4gh6ko6r<nowiki/>'\n'fuu53k5nxiw45cdi<nowiki/>qt7vtmu20tmg3nmi<nowiki/>'''foo'''\n'''foo'''<nowiki/><nowiki/>'''foo'''<nowiki/>'\n''3nwoam12iuplow29<span
 data-foobar=\"9ivydae96nqj8aor\"> errand</span>''\n''k626q8sbirv34n29''");
+add("selser", "1. Quotes inside <b> and <i> 
[[1,2,2,3,0,0,0,0,0,4,3,[1],4,2,2,2,0,0,1,2,0,0,0,2,1,0,0,0,4,3,3,1,4,0,0,0,4,1,0,0,4,0,[[3],0]]]",
 
"''<nowiki/>'foo'<nowiki/>''8mwsali9gk87iudi\npexq8y928svpldi''<nowiki>''foo''</nowiki><nowiki>'''foo'''</nowiki>''\n''foo''<nowiki/>'s\n6l3n0isukyxbhuxr'''<nowiki>''foo''</nowiki>'''293if16rvbo6rya8ucw2l1ot4vx6r'''<nowiki>'''foo'''</nowiki>'''d3o8cb65amo8yqfr\nv76s1c9t27a2a9k9'''foo'<nowiki/>''bar'<nowiki/>''baz'''\n'''foo'''<nowiki/>6au4ok542pv9ggb9's\n'<nowiki/>''foo''\nx1kph61h3w12a9k9''foo''<nowiki/>'\n'<nowiki/>''foo''gbi7s1g1j9ssjor'''foo'''h0tu65jvy6iuow29'''foo'''<nowiki/>'\n'372t8iv11r7zm2t9'''foo'''<nowiki/>'\n38wbt83fs04o0f6r\n''<span></span>'s
 errand''\n");
+add("selser", "1. Quotes inside <b> and <i> 
[[4,0,4,0,0,2,1,4,2,1,3,[3],3,[[2]],3,3,3,0,4,0,3,4,0,[3],0,0,4,[2],3,0,0,[4],0,3,0,0,1,[3],0,0,[0,4],2,[0,4]]]",
 
"bcv9t18xvahh0k9\n7j4ebaxa7o9ftj4i\n''<nowiki>'''foo'''</nowiki>''mry7gwh281tt9\n''foo''6z57b2fhe9yn9udi7d4vr8m4oxcivn29's\n'''<nowiki/>'foo'<nowiki/><nowiki>x4ljrkxn00jxlxr'''foo'''</nowiki>foo'''eg408kyvbtck57b9's\n'72iu8q6iuihehfr\n''<nowiki/>''<nowiki/>'\n'hs9psbz3fcdw8kt9''hpob0uhvs0885mifoo'''\n'<nowiki/>'''1ikpa9oovowghkt9'''\n<nowiki/>'\n'<nowiki/>'''<nowiki/>'''<nowiki/>'\n''fools'2cecdk1nov927qfr''qgboi2cpqmovquxr\n''<span>fool</span>kx25x3hw1m7vi''");
+add("selser", "1. Quotes inside <b> and <i> 
[[3,0,0,0,0,4,4,0,3,1,3,0,3,1,3,4,4,4,0,3,4,3,3,3,0,0,3,4,0,4,0,1,0,0,0,3,0,0,0,0,[4,1],0,[4,3]]]",
 
"\n''<nowiki>''foo''</nowiki>''\n''<nowiki>'''foo'''</nowiki>''948m22lf1cnb3xrbaoqjpy11p33ow29<nowiki/>'''<nowiki/>'foo'<nowiki/><nowiki>''foo''</nowiki><nowiki>'''foo'''</nowiki>'''425jab38ms32qpvibrv2d7nt35mnp14id7vrobs3yc01wcdi<nowiki/>cecami0l4gh6ko6r<nowiki/>'\n'fuu53k5nxiw45cdi<nowiki/>qt7vtmu20tmg3nmi<nowiki/>'''foo'''\n'''foo'''<nowiki/><nowiki/>'''foo'''<nowiki/>'\n''3nwoam12iuplow29<span
 data-foobar=\"9ivydae96nqj8aor\"> errand</span>''\n''k626q8sbirv34n29''");
+add("selser", "1. Quotes inside <b> and <i> 
[[2,0,[4],0,[2],2,[2],3,0,1,3,1,0,1,0,[0,2,[0,3],4],3,4,1,2,0,[3],0,[2],4,2,4,3,0,3,4,3,3,3,0,3,0,1,3,0,2,0,[0,3]]]",
 
"sx87l4zay3dnp14i''<nowiki/>'foo'<nowiki/>''\n''0kml3vuceuerk9''\n''1sbtzk31mw9afw29<nowiki>'''foo'''</nowiki>''r93igyqh11vbcsor\n''y6sbapzqpstw3ik9foo''<nowiki/>'s\n'''<nowiki/>'foo'<nowiki/><nowiki>''foo''</nowiki>'''\n'''<nowiki>'''foo'''</nowiki>'''\n'''foo'fd4pwvqpwqumcxr<nowiki/>''bar'<nowiki/>''02j8cb0kd9rudi'''z6ecfej7h6r2uik9<nowiki/>0lw8ky2w9e019k9's\n'<nowiki/>''<nowiki/>''\n''jirdtfgbxlsrlik9foo''3vqeg2i0wsj4te29kwkw80bajb1n61or'\n'rrjx6fkjajug14i<nowiki/>c4sat7pg7k1sv2t9<nowiki/><nowiki/>'''foo'''<nowiki/>'\n65nhx786limdvx6r''fools'<span>
 errand</span>''\n''<span>fool</span>''");
+add("selser", "1. Quotes inside <b> and <i> 
[[[2,0,0],2,[[3]],0,2,0,0,1,0,[2,0,4],0,4,0,[[2]],0,4,3,2,4,3,0,0,0,1,2,0,4,1,3,3,1,0,0,0,3,2,3,0,0,0,[0,[3]],3,[[3],0]]]",
 
"''es46exuy3rpv6lxr<nowiki/>'foo'<nowiki/>''9lie3fn2xgzrrudi\n''<nowiki></nowiki>''\nhtda1ot8ovjqncdi''<nowiki>'''foo'''</nowiki>''\n''foo''<nowiki/>'s\n'''k7lgn4pezn2ep14i<nowiki/>'foo'ds664qx68o20529'''\ng9y64rrhdde4gqfr\n'''<nowiki>9zk8vipefj1t6gvi'''foo'''</nowiki>'''\nfr7un8vrsmbfn7b9hxhjdizbj88jv2t9'''foo'''l7d0p06g7tu766r<nowiki/>''foo''\n''foo''00lf2pwa757v6lxr<nowiki/>'\n'uoebnwplbpxecdi''foo''<nowiki/>'''foo'''\n'''foo'''ps4j17czdqdunmi'\n'<nowiki/>'''foo'''<nowiki/>'\n''fools'<span></span><span></span>'s
 errand''\n");
+add("selser", "1. Quotes inside <b> and <i> 
[[[1,0,4],2,4,0,0,3,[2],3,2,2,0,0,2,2,0,[0,0,[4,2],2],3,[2],4,3,1,3,4,1,1,4,4,0,4,0,0,[2],0,4,2,0,3,3,0,0,4,0,2]]",
 
"''<nowiki/>'foo'w0pcxxar7ge3ik9''bzleu526yptoi529\nib5hb5y8xz11c3di\n''<nowiki>'''foo'''</nowiki>k77bgkp0t0qf47vifoo''0eetyhd3jbnpnwmi's\nbjswb1egzry919k9'''<nowiki/>'foo'<nowiki/>'''\n'''<nowiki>''foo''</nowiki>'''6t2yim2nv6j38fr\nt31umyu5wuibpgb9'''<nowiki>'''foo'''</nowiki>'''\n'''foo'<nowiki/>''vnmvq8xi8cs7nwmisp29j7hya739dx6r<nowiki/>''5pfu21xak35zh0k9bazilk7hsfpjl2l0udifoo'''uc4d486rno5stt9<nowiki/>r3qn35k1otbakyb9''foo''<nowiki/>d6wc89asddakbj4if8djolrdxwdn29''foo''1gdahe5e9ecul3di'\n'<nowiki/>'''f6fj5dd0ubpxecdifoo'''\nx1titwv3kyxbhuxrn9afay0mqvndn29<nowiki/>'\n'<nowiki/>'\n2rj49oo2k49uow29\n7y91xffb6ih5xw29''<span>fool</span>'s
 errand''");
 add("selser", "HTML tag with broken attribute value quoting [1]", "<span 
title=\"Hello world>Foo</span>");
 add("selser", "HTML tag with broken attribute value quoting [2]", 
"zlkpme7jgj76tj4i\n\n<span title=\"Hello world>Foo</span>");
 add("selser", "HTML tag with broken attribute value quoting [[2]]", 
"19ydfukj49zoajor<span title=\"Hello world>Foo</span>");

-- 
To view, visit https://gerrit.wikimedia.org/r/177761
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id85af3c67ea6c77e5e98c0bdbdcd18d9d483acb7
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to