jenkins-bot has submitted this change and it was merged.
Change subject: Implement a heuristic to strip <nowiki/> in some quote scenarios
......................................................................
Implement a heuristic to strip <nowiki/> in some quote scenarios
* When <i> and <b> tags are matched up properly on a line, any
quote char that precedes a <i> or <b> tag does not need to be
protected with a <nowiki/>.
* Since this is hard to do without a full-line context, the
<nowiki/> is stripped after the fact by examining the current
line of serialized output.
* Lets us get rid of a few <nowiki/> copies of parser tests and
fixes some failing tests.
Change-Id: I81d15ecce888f6e0104fb089329a9db77828d86c
---
M lib/mediawiki.WikitextSerializer.js
M lib/wts.SerializerState.js
M lib/wts.escapeWikitext.js
M tests/parserTests-blacklist.js
M tests/parserTests.txt
5 files changed, 62 insertions(+), 61 deletions(-)
Approvals:
Cscott: Looks good to me, approved
jenkins-bot: Verified
diff --git a/lib/mediawiki.WikitextSerializer.js
b/lib/mediawiki.WikitextSerializer.js
index 0e114db..5dc4e7f 100644
--- a/lib/mediawiki.WikitextSerializer.js
+++ b/lib/mediawiki.WikitextSerializer.js
@@ -1240,6 +1240,41 @@
return out;
}
+// This implements a heuristic to strip a common source of <nowiki/>s.
+// - When <i> and <b> tags are matched up properly, any single ' char
+// before <i> or <b> does not need <nowiki/> protection.
+function stripUnnecessaryQuoteNowikis(wt) {
+ // no-quotes OR matched quote segments with 5/3/2 quotes OR
single-quote char
+ // Within the matched quote-segments, be conservative and don't match
higher-priority
+ // parser characters like [{< -- used for links and templates. This
should prevent
+ // inadvertent matching up across links/templates/tags.
+ var testRE =
/^[^']+$|^[^']*(('''''[^\[\{<']+'''''|'''[^\[\{<']+'''|''[^\[\{<']+''|')([^']+|$))+('|$)$/;
+
+ return wt.split(/\n|$/).map(function(line) {
+ // * Strip out nowiki-protected strings since we are only
interested in
+ // quote sequences that correspond to <i>/<b> tags.
+ // * Find segments separated by <nowiki/>s.
+ // * If all the segments contain balanced i/b tags, and the
<nowiki/>
+ // separated a quote and an i/b tag, we can remove all the
<nowiki/>s
+ var pieces = line.replace(/<nowiki>.*?<\/nowiki>/g,
'').split(/<nowiki\/>/);
+
+ var n = pieces.length;
+ for (var i = 0; i < n; i++) {
+ if (!testRE.test(pieces[i]) ||
+ // All but the first piece should start with ''
+ (i > 0 && !/^''/.test(pieces[i])) ||
+ // All but the last piece should end in a
single ' char
+ // since that is the only scenario we are
optimizing for here
+ (i < n-1 && !/(^|[^'])'$/.test(pieces[i])))
+ {
+ return line;
+ }
+ }
+
+ return line.replace(/<nowiki\/>/g, '');
+ }).join("\n");
+}
+
/**
* Serialize an HTML DOM document.
*/
@@ -1284,9 +1319,19 @@
chunkCBWrapper( '', body );
if (state.hasIndentPreNowikis) {
+ // FIXME: Perhaps this can be done on a per-line basis
+ // rather than do one post-pass on the entire document.
+ //
// Strip excess/useless nowikis
out = stripUnnecessaryIndentPreNowikis(out);
}
+ if (state.hasQuoteNowikis) {
+ // FIXME: Perhaps this can be done on a per-line basis
+ // rather than do one post-pass on the entire document.
+ //
+ // Strip excess/useless nowikis
+ out = stripUnnecessaryQuoteNowikis(out);
+ }
if (chunkCB) {
// Pass entire output in one big chunk
diff --git a/lib/wts.SerializerState.js b/lib/wts.SerializerState.js
index f65167d..7ec2337 100644
--- a/lib/wts.SerializerState.js
+++ b/lib/wts.SerializerState.js
@@ -38,6 +38,10 @@
* Did we introduce nowikis for indent-pre protection?
* If yes, we might run a post-pass to strip useless ones.
*
+ * hasQuoteNowikis
+ * Did we introduce nowikis to preserve quote semantics?
+ * If yes, we might run a post-pass to strip useless ones.
+ *
* wikiTableNesting
* Records the nesting level of wikitext tables
*
@@ -66,6 +70,7 @@
inIndentPre: false,
inPHPBlock: false,
hasIndentPreNowikis: false,
+ hasQuoteNowikis: false,
wikiTableNesting: 0,
wteHandlerStack: [],
// XXX: replace with output buffering per line
diff --git a/lib/wts.escapeWikitext.js b/lib/wts.escapeWikitext.js
index f90a155..4388515 100644
--- a/lib/wts.escapeWikitext.js
+++ b/lib/wts.escapeWikitext.js
@@ -109,7 +109,7 @@
// wrapper since there are on other quote chars on the line.
//
// This is checking text-node siblings of i/b tags.
-function escapedIBSiblingNodeText(text, opts) {
+function escapedIBSiblingNodeText(state, text, opts) {
// For a sequence of 2+ quote chars, we have to
// fully wrap the sequence in <nowiki>...</nowiki>
// <nowiki/> at the start and end doesn't work.
@@ -129,6 +129,7 @@
// Check whether the head and/or tail of the text needs <nowiki/>
protection.
var out = '';
if (hasTrailingEscapableQuoteChar(text, opts)) {
+ state.hasQuoteNowikis = true;
out = text + "<nowiki/>";
}
@@ -548,7 +549,7 @@
state.env.log("trace/wt-escape", "---quotes: full
nowiki wrap---");
return this.escapedText(state, false, text, true);
} else {
- var quoteEscapedText = escapedIBSiblingNodeText(text,
opts);
+ var quoteEscapedText = escapedIBSiblingNodeText(state,
text, opts);
if (quoteEscapedText) {
state.env.log("trace/wt-escape", "---sibling of
i/b tag---");
return quoteEscapedText;
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 2e459c4..b199a28 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -417,7 +417,6 @@
// Blacklist for wt2wt
-add("wt2wt", "Italics and bold", "* plain\n* plain''italic''plain\n*
plain''italic''plain''italic''plain\n* plain'''bold'''plain\n*
plain'''bold'''plain'''bold'''plain\n* plain''italic''plain'''bold'''plain\n*
plain'''bold'''plain''italic''plain\n*
plain''italic'''bold-italic'''italic''plain\n*
plain'''bold''bold-italic''bold'''plain\n*
plain'''''bold-italic'''italic''plain\n* plain'''''bold-italic''bold'''plain\n*
plain''italic'''bold-italic'''''plain\n* plain'''bold''bold-italic'''''plain\n*
plain l'<nowiki/>''italic''plain\n* plain l'<nowiki/>'''bold''' plain");
add("wt2wt", "Italics and possessives (1)", "obtained by ''[[Lunar
Prospector]]'<nowiki/>''s gamma-ray spectrometer\n");
add("wt2wt", "Italics and possessives (2)", "'''''Flaming Pie''''' is ...
released in 1997. In ''Flaming Pie'<nowiki/>''s liner notes\n");
add("wt2wt", "Italics and possessives (3)", "The first monolingual dictionary
written in a Romance language was ''Sebastián Covarrubias'<nowiki/>'' ''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''.\n");
@@ -507,7 +506,6 @@
add("wt2wt", "ISBN code coverage", "ISBN 978-0-1234-56 789\n");
add("wt2wt", "RFC code coverage", "RFC 983 987\n");
add("wt2wt", "Image with page parameter", "[[File:LoremIpsum.djvu]]\n");
-add("wt2wt", "Another italics / bold test", " '<nowiki/>'' ''x'\n");
add("wt2wt", "Don't fall for the self-closing div", "<div>hello world</div>");
add("wt2wt", "Parsing of overlapping (improperly nested) inline html tags",
"<span><s>x</span>\n");
add("wt2wt", "Don't break table handling if language converter markup is in
the cell.", "{|\n|-\n| -{R |B}-\n|}");
@@ -929,7 +927,6 @@
add("html2wt", "Extra newlines followed by heading", "a\n\n\n\n= <span
class=\"mw-headline\" id=\"b\">b</span><span class=\"mw-editsection\"><span
class=\"mw-editsection-bracket\">[</span>[/index.php?title=Parser_test&action=edit§ion=1
edit]<span class=\"mw-editsection-bracket\">]</span></span>
=\n[/index.php?title=A&action=edit&redlink=1 a]\n\n\n\n= <span
class=\"mw-headline\" id=\"b_2\">b</span><span class=\"mw-editsection\"><span
class=\"mw-editsection-bracket\">[</span>[/index.php?title=Parser_test&action=edit§ion=2
edit]<span class=\"mw-editsection-bracket\">]</span></span> =\n");
add("html2wt", "Extra newlines between heading and content are swallowed", "=
<span class=\"mw-headline\" id=\"b\">b</span><span
class=\"mw-editsection\"><span
class=\"mw-editsection-bracket\">[</span>[/index.php?title=Parser_test&action=edit§ion=1
edit]<span class=\"mw-editsection-bracket\">]</span></span>
=\n[/index.php?title=A&action=edit&redlink=1 a]\n");
add("html2wt", "Parsing an URL", "[[:fr:🍺|http://fr.wikipedia.org/wiki/🍺]]\n");
-add("html2wt", "Italics and bold", "* plain\n* plain''italic''plain\n*
plain''italic''plain''italic''plain\n* plain'''bold'''plain\n*
plain'''bold'''plain'''bold'''plain\n* plain''italic''plain'''bold'''plain\n*
plain'''bold'''plain''italic''plain\n*
plain''italic'''bold-italic'''italic''plain\n*
plain'''bold''bold-italic''bold'''plain\n*
plain'''''bold-italic'''italic''plain\n* plain'''''bold-italic''bold'''plain\n*
plain''italic'''bold-italic'''''plain\n* plain'''bold''bold-italic'''''plain\n*
plain l'<nowiki/>''italic''plain\n* plain l'<nowiki/>'''bold''' plain\n");
add("html2wt", "Italics and possessives (1)", "obtained by
''[/index.php?title=Lunar_Prospector&action=edit&redlink=1 Lunar
Prospector]'<nowiki/>''s gamma-ray spectrometer\n");
add("html2wt", "Italics and possessives (2)", "'''''Flaming Pie''''' is ...
released in 1997. In ''Flaming Pie'<nowiki/>''s liner notes\n");
add("html2wt", "Italics and possessives (3)", "The first monolingual
dictionary written in a Romance language was ''Sebastián
Covarrubias'<nowiki/>'' ''Tesoro de la lengua castellana o española'',
published in 1611 in Madrid. In 1612 the first edition of the ''Vocabolario
dell'[/index.php?title=Accademia_della_Crusca&action=edit&redlink=1 Accademia
della Crusca]'', for Italian, was published. In 1690 in Rotterdam was
published, posthumously, the ''Dictionnaire Universel''.\n");
@@ -1584,7 +1581,6 @@
add("html2wt", "Width-sized image (using px, with following whitespace - test
regression from r39467)",
"http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg\n");
add("html2wt", "Width-sized image (using px, with preceding whitespace - test
regression from r39467)",
"http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg\n");
add("html2wt", "Image with page parameter", "[[File:LoremIpsum.djvu]]\n");
-add("html2wt", "Another italics / bold test", " '<nowiki/>'' ''x'\n");
add("html2wt", "HTML with raw HTML ($wgRawHtml==true)",
"<script>alert(1);</script>\n");
add("html2wt", "Parents of subpages, one level up",
"[/index.php?title=Subpage_test/L1/L2&action=edit&redlink=1 L2]\n");
add("html2wt", "Parents of subpages, one level up, not named",
"[/index.php?title=Subpage_test/L1/L2&action=edit&redlink=1 Subpage
test/L1/L2]\n");
@@ -1784,15 +1780,6 @@
// Blacklist for selser
add("selser", "Extra newlines followed by heading [1,2,1,3,0,4,0,4,1,3,4]",
"a\n\n40z1qdji2lfskyb9\n\n\n\n=b=\n9h4x5nzjh28rggb9\n\n[[a]]\n\nkup4bo01iztzkt9\n\n\n\nzlbbwe36wkrcnmi\n");
add("selser", "Parsing an URL [[[2]],2,0]",
"[[:fr:🍺|blv27e9oigmpwrk9http://fr.wikipedia.org/wiki/🍺]]\n\n7vcz2sjoo733ow29\n<!--
EasterEgg we love beer, better be able be able to link to it -->");
-add("selser", "Italics and bold
[[2,0,1,4,2,0,[0,4,3],4,2,0,1,4,[3,3,0,0,3],4,[2,1,4],2,4,3,3,0,[2,[1,4],0],0,[0,[0,4],3],0,[4,4,2],0,2,4,4]]",
"* 92awlfbvoaqt1emi\n* plain\n* plain''italic''plain\n* tzqk4ze94m1xxbt9\n*
hmxyyiqext7qfr\n* plain''italic''plain''italic''plain\n*
plainaicn17mno9w6zuxr\n* 9n92jx2qgxjbrzfr\n* lf3v28rzrwak0529\n*
plain'''bold'''plain'''bold'''plain\n* plain''italic''plain'''bold'''plain\n*
jnr3bxlmuyhc9pb9\n*plain''italic''\n* pki0oc5neix561or\n*zb180qkk1fc4n29
plain''italic'''bold-italic'''italic''9ixh0wal7e0o1or\n* uez0fys5vit6s9k9\n*
9dgctszk476kzkt9\n*x2s6ymczn2ricnmi
plain'''''bold-italic''yw3edm8ezlac3di'''plain\n*
plain''italicj044e3ftfsd4e7b9''\n*ttfpp85fgwx9a4in0m0ktpjgz7u8frdkjetyqfpsr1kyb9plain\n*
jehgmssphdvd9529\n* plain l'''italic''plain\n* x5z3u99daw8tcsor\n*
q37ithocvs5x9a4i");
-add("selser", "Italics and bold [1]", "* plain\n* plain''italic''plain\n*
plain''italic''plain''italic''plain\n* plain'''bold'''plain\n*
plain'''bold'''plain'''bold'''plain\n* plain''italic''plain'''bold'''plain\n*
plain'''bold'''plain''italic''plain\n*
plain''italic'''bold-italic'''italic''plain\n*
plain'''bold''bold-italic''bold'''plain\n*
plain'''''bold-italic'''italic''plain\n* plain'''''bold-italic''bold'''plain\n*
plain''italic'''bold-italic'''''plain\n* plain'''bold''bold-italic'''''plain\n*
plain l'''italic''plain\n* plain l''''bold''' plain");
-add("selser", "Italics and bold
[[0,0,4,0,2,4,3,0,1,0,[0,2,0,4,0],0,2,4,1,3,3,4,[0,[2,0],4],4,3,4,[0,1,0],3,[0,[0,2],2],3,[0,4,3],0,2]]",
"* plain\n* 3qd5ecz2rxu323xr\n* 7rrfjapjh5mi\n*
plain''italic''plain''italic''plain\n* 01lwx6ppy4on7b9\n*
plain'''bold'''plain'''bold'''plain\n*
plain6k86lwz49n7sc3di''italic''plaindb2wxbpcjhvyrpb9plain\n*
3eiiceiaz2fvquxr\n* plain'''bold'''plain''italic''plain\n* rb4de2m24oswcdi\n*
plain''italic'''bold-italic'''italic''plain\n* x4bcv1s7anabgldi\n*
plain''cx889k7btyg8ehfr'''bold-italic'''italic''t47wx2z2hb0529\n*
l3gwv9s5accmobt9\n* 9o8l7kk9b9996bt9\n*
plain''italic'''bold-italic'''''plain\n*
plain'''boldqi72ahjz2z3q5mi''bold-italic'''''v8rciq15r2mon7b9plain\n* plain
l'ogyi8toz2y7ousor\n* do5wuz56u5wmi\n* plain l''''bold''' plain");
-add("selser", "Italics and bold [2]", "n3n7kyw7g8ehfr\n* plain\n*
plain''italic''plain\n* plain''italic''plain''italic''plain\n*
plain'''bold'''plain\n* plain'''bold'''plain'''bold'''plain\n*
plain''italic''plain'''bold'''plain\n* plain'''bold'''plain''italic''plain\n*
plain''italic'''bold-italic'''italic''plain\n*
plain'''bold''bold-italic''bold'''plain\n*
plain'''''bold-italic'''italic''plain\n* plain'''''bold-italic''bold'''plain\n*
plain''italic'''bold-italic'''''plain\n* plain'''bold''bold-italic'''''plain\n*
plain l'''italic''plain\n* plain l''''bold''' plain");
-add("selser", "Italics and bold
[[0,2,[0,2,0],0,[4,3,0,2,0],2,3,2,1,2,[0,3,4,0,0],0,1,0,[4,2,0],2,[3,4,0],3,[0,3,0],0,[0,4,0],2,1,0,[0,4,0],2,2,3,2]]",
"* plain\n* 1k80lhdq68qwipb9\n*
plainfnbeuycxl9d7k3xr''italic''plain\n*65kmi4q53wg0hpviplainurum4xhrqwqj8aor''italic''plain\n*
17j317faz4kro1or\n* qo04okj5jn4mfgvi\n* plain'''bold'''plain'''bold'''plain\n*
31ygva63uqyta9k9\n* plain1x7mjt0n1dobt9'''bold'''plain\n*
plain'''bold'''plain''italic''plain\n*flh72jal5aqestt9b4s4bmku1qrm5cdi''italic'''bold-italic'''italic''plain\n*
ouhe868qehyyzaor\n*hcpnhwe91542huxrplain\n* plainplain\n*
plain8vjijuiqj96q1tt9plain\n* exwenszxljotuik9\n*
plain''italic'''bold-italic'''''plain\n* plain1q86fxxl4ttq33diplain\n*
cfwx96qeuc9v0a4i\n* u25kg3e57qqfflxr\n* plain l'''italic''plain\n*
nd7ihze27j51xlxr\n* plain l''''bold''' plain");
-add("selser", "Italics and bold
[[1,2,[2,0,2],3,[0,[3],4,0,2],0,1,4,1,2,[0,0,0,[2],0],3,1,4,[0,[0,3,0],0],2,1,0,1,4,[2,0,2],2,[2,[0,[4]],2],3,[0,[3,0],3],0,2,2,[3,0,4]]]",
"* plain\n* am7lsb22hgvkuik9\n*1jg3h3cq6gxmvx6r
plain''italic''twze5xeocdw8kt9plain\n*
plain''<nowiki/>''zzai5tipgl7syvi''italic''62kwzafufs84zpviplain\n*
plain'''bold'''plain\n* 0btdgwsvsxidlsor\n*
plain'''bold'''plain'''bold'''plain\n* b969qi661eylow29\n*
plain''italic''plain'''zfuvm4wbjqe3766rbold'''plain\n*
plain'''bold'''plain''italic''plain\n* ar0zbxl71ik65hfr\n*
plain''italicitalic''plain\n* 05kh7k7wm00vbo6r\n*
plain'''bold''bold-italic''bold'''plain\n*
plain'''''bold-italic'''italic''plain\n* nch3nvatyq0ssjor\n*8oosec291k29y66r
plain'''''bold-italic''bold'''l88qbwikrv5z5miplain\n*
muoa89fh27vf5hfr\n*16spkzienhf1dcxr
plain''italic'''jgchi8ozpibv5cdi'''''35yc01t6uhni2j4iplain\n*
plain'''''bold-italic'''''\n* q5jw9mggbqmbcsor\n* plain l'''italic''plain\n*
27fh9zfzwrf9lik9\n*'''bold'''1pggkiuvpjf0qkt9");
-add("selser", "Italics and bold
[[[3],3,3,0,1,0,4,3,3,4,4,4,[0,2,3,2,0],0,4,0,1,0,[0,[[2],0],2],0,[0,4,2],0,4,0,[0,4,0],0,2,0,3]]",
"*\n* plain''italic''plain''italic''plain\n* geud3znuhu34ygb9\n*
sxyoxgs79kucv7vi\n* 30j87r49e87zxgvi\n* gip7m3gjy2b7qfr\n*
plainymi3okmk6me4gqfr'''bold'''9s141y1a68aj1yvi''italic''plain\n*
4t5t87c9eof20529\n* plain'''bold''bold-italic''bold'''plain\n*
plain'''''d0kyk2167rb2o6rbold-italic'''italic''jc10yzin2miy66rplain\n*
plaingn9d6onl2lwvobt9qmfw2es4umwvcxrplain\n* nhsrfnqbbkq5xw29\n*
plaindbq47jmpumobt9plain\n* s80okdkcdfbw3ik9\n* plain l'''italic''plain\n");
-add("selser", "Italics and bold
[[1,4,3,0,3,0,[2,2,0],0,4,0,3,2,[2,[3],3,1,2],0,2,4,[0,1,3],0,[4,[1,0],3],0,4,0,2,3,[0,[3,0],2],0,2,2,[0,2,0]]]",
"* plain\n* h451b6u04sglow29\n*z11dbmy3l4sra4i
plainljef3t6ofen1xlxr'''bold'''plain\n* vpayofqkqkw3ik9\n*
9b1qqexypyhhyqfr\n*noej7k884gupiudi
plain'''<nowiki/>'''''italic''zcr012hb8y7xecdiplain\n* j2sr6z256if11yvi\n*
plain''italic'''bold-italic'''italic''plain\n* 9682hptrmo14te29\n*
plain'''bold''bold-italic''bold'''\n*k1eu2mlms3ys0pb9'''''bold-italic'''italic''\n*
xnr0a5mpybmiy66r\n* o5t4b7n1wupfzuxr\n*
plain''italic'''bold-italic'''''plain\n*
plain'''''bold-italic'''''z2c787by3f2yb9plain\n* odl0d8o05nyojemi\n* plain
l'''italic''plain\n* 2dc7n2i5gz74lsor\n* plain l'q8mvog5g8q1wnrk9'''bold'''
plain");
-add("selser", "Italics and bold
[[[3],2,[4,3,0],4,[2,1,2,2,2],0,[2,[2],0],2,2,4,[0,2,3,3,0],0,[0,2,3,0,3],4,[4,[3,4,0],2],3,3,2,2,2,4,0,1,0,[2,2,0],0,[0,4,3],0,0]]",
"*\n* og94p844x0vk7qfr\n*0x413w4l4m67p66rplain\n*
rc24dab0cprdx6r\n*1ci2gkijfy0q9f6r
plain''italic''dphvr4in04tpgb9plain4untz0ciop6i529''italic''q7d84hib6jjlwhfrplain\n*q8zmw5j9i2ievcxr
plain'''ccbtmnitz1ev1jorbold'''plain\n* irnc2svu5ykz9f6r\n*
462xafzz3x3i8uxr\n* plain'''bold'''plain'''bold'''plain\n* 2flronf6ki4wjyvi\n*
plaingusjnx8gsibmlsor''italic''plain\n*
plainys21v0vmdf6wp14i'''bold'''''italic''\n*
voqyi9ajl0g4x6r\n*ntc83dxwjnb138fr''jn8l6n1km7k3xritalic''7wjxpbwer0o7ds4iplain\n*
mbrg4u45eqe8w7b9\n* r02d9136she61or\n*
plain'''''bold-italic'''italic''plain\n* r3umj0ov4qu84cxr\n*
h1x3k48p57bymn29\n* plain''italic'''bold-italic'''''plain\n*zsuatdr2jnpzaor
plain6yvw7l3y7n2q33di'''bold''bold-italic'''''plain\n* plain
l'na6fevjlpxyzm2t9\n* plain l''''bold''' plain");
add("selser", "Italics and possessives (1) [1]", "obtained by ''[[Lunar
Prospector]]'''s gamma-ray spectrometer");
add("selser", "Italics and possessives (1) [[4,[1,0],4]]",
"djoseugy5fvibe29''[[Lunar Prospector]]'''x311gyuas8twqaor");
add("selser", "Italics and possessives (1) [2]", "mylboba6mj3v7vi\n\nobtained
by ''[[Lunar Prospector]]'''s gamma-ray spectrometer");
@@ -2620,7 +2607,6 @@
add("selser", "RFC code coverage [[2,0,2]]", "8rmi32979htfn7b9RFC
983 4i0lf243q1j4te29987");
add("selser", "Image with page parameter [2]",
"t1gktsrwi7iizfr\n\n[[File:LoremIpsum.djvu|page=2]]");
add("selser", "Image with page parameter [1]",
"[[File:LoremIpsum.djvu|page=2]]");
-add("selser", "Another italics / bold test [2]", "kzib9uzhe4su4n29\n '''
''x'");
add("selser", "dt/dd/dl test [[1]]", ";;;::");
add("selser", "dt/dd/dl test [[[1]]]", ";;;::");
add("selser", "dt/dd/dl test [[[[[1]]]]]", ";;::");
@@ -2816,11 +2802,12 @@
add("selser", "Entities in ref name [1]", "<ref name=\"test &
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>
[[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,0,0,1]]",
"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\na|!*#-:;+-~[]{}b'<nowiki/>''x''");
-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,2,0,4]]",
"''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''wglst0tvcv2w3ik9\na|!*#-:;+-~[]{}b'<nowiki/>i9b91kkaoiggb9");
-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,4,0,2]]",
"\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>''4prh3f1lk2j7cik9<nowiki/>wyd9n604zjafko6r''x''");
-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],0,4,0]]",
"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>''\na|!*#-:;+-~[]{}b'j80zfyt47psyvi''x''");
-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],4,0,3]]",
"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''8qfgpvlpg7v9ggb9<nowiki/>\n");
+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,[3],0,0,4,0,0,2,3,3,[2],3,4,3,0,0,3,4,3,3,0,2,0,[4]]]",
"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/>''\n''foo''myh73q54kveljtt9'\n'<nowiki/>c10qrc4l4kkjra4i''foo'''''c9meu8765gjpp66rfoo'''1wwik15k156x0f6r'\n'<nowiki/>8qu5jiqalmvg3nmi\n191wmp849f7gmn29''<span>fool</span>'s
errand''\na|!*#-:;+-~[]{}b'''6zhdeznwfwxko6r''");
+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,3,0,0,0,0,4,[3],2,[3],0,2,0,2,4,2,[3,1],4,1,2,[4]]]",
"''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''foo''<nowiki/>'\n'<nowiki/>''foo''<nowiki/>tvi87wnpldblc8fr'''<nowiki/>'''mans72mc33csdcxr\n'''<nowiki/>'''<nowiki/>dnvvbq5ayqc6usor'\n'<nowiki/>3mtgpe7obxirudi'''foo'''9293k6dvvmoq1tt9zs5z7v3q0qaug14i'\n''<span
data-foobar=\"deu4ioyka97fogvi\">
errand</span>''i2578yu6svt5ipb9''<span>fool</span>'s
errand''icug3imme9mjkyb9\na|!*#-:;+-~[]{}b'''ir49227rhe4mfgvi''");
+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,[4],4,0,3,0,0,2,0,0,0,3,3,0,4,0,2,0,3,3,0,2,3,[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/>''dj4fdj44116ecdi''qxeb9eikbg3krzfr''foo''<nowiki/>'\n'<nowiki/>pnvdzbfba10pb9''foo''<nowiki/>'\n''''foo'''<nowiki/>0kybjloy4qf9wwmi<nowiki/>5h2hbokwkouyds4i'''foo'''<nowiki/>\ne7bgdd2wwqy6i529''<span>fool</span>'s
errand0h73fkwca49ggb9x''\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,[2],2,0,0,3,0,[4],0,0,3,0,1,2,4,3,4,0,0,4,2,3,2,2]]",
"\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'''f7lfw6f9p9442t9foo''l8ur9en9wqe8w7b9\n''foo''<nowiki/><nowiki/>''upyarw5tif1rlik9''<nowiki/>'\n'\n'''foo'''zeaqonfmvysexw29<nowiki/>5dvwath003dqjjorq5arckx2cdk4vx6r<nowiki/>'\nbofwi490po8q6w29cnmgvy3btmcjif6r\n4prh3f1lk2j7cik9\na|!*#-:;+-~[]{}b'wyd9n604zjafko6r''x''");
+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,2,0,0,1,0,0,4,4,3,0,0,4,[2],0,4,4,3,[4,4],4,0]]",
"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'''foo''n0so9m9gubthjjor\n''foo''5mx7467s2pe6d2t9<nowiki/>'\n'<nowiki/>''foo''<nowiki/>'\n'enwlc3t7myt4kj4ix6ngpya7ros10pb9<nowiki/>'\n'pil88s26p0mp9zfr'''guy0jrmki6v18aorfoo'''<nowiki/>79cji1kde00jxlxrce9yefc1ixp3nmi''udh3zchhff94fgvi41nysayj1hsemi''6nuqrvo7e9qtcsor''x''");
+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,[2],2,0,4,1,3,3,1,0,0,0,0,3,1,3,0,0,0,[2,3],0,[3]]]",
"''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''foo''\n''1ki5kz2uf4wsif6rfoo''00lf2pwa757v6lxr<nowiki/>'\n'uoebnwplbpxecdi''foo'''''foo'''\n'''foo'''<nowiki/>'\n''''foo'''<nowiki/>'\n''fools'<span>
errand</span>''\n''gzrgk0lm4e7b9<span>fool</span>''\na|!*#-:;+-~[]{}b'<nowiki/>''<nowiki/>''");
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>");
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index 18fdb70..fb105be 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -615,21 +615,9 @@
!! test
Italics and bold: 3-quote opening sequence: (3,2)
-!! options
-parsoid=wt2html
!! wikitext
'''foo''
!! html/*
-<p>'<i>foo</i>
-</p>
-!!end
-
-# same html as previous, but wikitext adjusted to match parsoid html2wt
-!! test
-Italics and bold: 3-quote opening sequence: (3,2) w/ nowiki
-!! wikitext
-'<nowiki/>''foo''
-!! html
<p>'<i>foo</i>
</p>
!!end
@@ -720,21 +708,9 @@
!! test
Italics and bold: 4-quote opening sequence: (4,3)
-!! options
-parsoid=wt2html
!! wikitext
''''foo'''
!! html/*
-<p>'<b>foo</b>
-</p>
-!!end
-
-# same html as previous, but wikitext adjusted to match parsoid html2wt
-!! test
-Italics and bold: 4-quote opening sequence: (4,3) w/ nowiki
-!! wikitext
-'<nowiki/>'''foo'''
-!! html
<p>'<b>foo</b>
</p>
!!end
@@ -1047,22 +1023,9 @@
!! test
Italics and bold: other quote tests: (3,2,3,3)
-!! options
-parsoid=wt2html
!! wikitext
'''this is about ''foo'''s family'''
!! html/*
-<p>'<i>this is about </i>foo<b>s family</b>
-</p>
-!!end
-
-
-# same html as previous, but wikitext adjusted to match parsoid html2wt
-!! test
-Italics and bold: other quote tests: (3,2,3,3) w/ nowiki
-!! wikitext
-'<nowiki/>''this is about ''foo'''s family'''
-!! html
<p>'<i>this is about </i>foo<b>s family</b>
</p>
!!end
@@ -20799,15 +20762,15 @@
'''<nowiki>'''foo'''</nowiki>'''
'''foo'<nowiki/>''bar'<nowiki/>''baz'''
'''foo'''<nowiki/>'s
-'<nowiki/>''foo''
+'''foo''
''foo''<nowiki/>'
'<nowiki/>''foo''<nowiki/>'
-'<nowiki/>'''foo'''
+''''foo'''
'''foo'''<nowiki/>'
'<nowiki/>'''foo'''<nowiki/>'
''fools'<span> errand</span>''
''<span>fool</span>'s errand''
-a|!*#-:;+-~[]{}b'<nowiki/>''x''
+a|!*#-:;+-~[]{}b'''x''
!! html/*
<p><i>'foo'</i>
<i>''foo''</i>
--
To view, visit https://gerrit.wikimedia.org/r/179917
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I81d15ecce888f6e0104fb089329a9db77828d86c
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: Arlolra <[email protected]>
Gerrit-Reviewer: Cscott <[email protected]>
Gerrit-Reviewer: Marcoil <[email protected]>
Gerrit-Reviewer: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits