Subramanya Sastry has uploaded a new change for review.
https://gerrit.wikimedia.org/r/76162
Change subject: (Bug 52103) <nowiki/> escape when single quotes wrap new i/b
tags
......................................................................
(Bug 52103) <nowiki/> escape when single quotes wrap new i/b tags
* Updated i/b dom handlers to recognize when the i/b tags
are preceded/followed by single-quote chars and hence require
<nowiki/> separation to prevent them being reparsed as
a different i/b tag than intended.
* The fix in this patchset also covers the scenario fixed in
git sha 04e52daa3 for bug 50179 and the fix from that patchset
has been removed.
* Updated html2wt escaping tests for quotes. In addition, converted
that test to html2wt mode only since html2html and wt2html causes
failures because our normalizer cannot strip mw:Placeholder
metas introduce for <nowiki/>.
* Regenerated selser.changes.json file. No change in blacklist.
Change-Id: I28f3cffa69be4e11462a68483cf3d3d85d380c85
---
M js/lib/mediawiki.WikitextSerializer.js
M js/tests/parserTests.txt
M js/tests/selser.changes.json
3 files changed, 82 insertions(+), 31 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid
refs/changes/62/76162/1
diff --git a/js/lib/mediawiki.WikitextSerializer.js
b/js/lib/mediawiki.WikitextSerializer.js
index f78e751..b1c6d0b 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -727,16 +727,6 @@
return this.escapedText(state, false, text, fullCheckNeeded);
}
- // Escape quotes that come after I/B nodes that can be reparsed
- // differently since quote-parsing is context-sensitive.
- if (text.match(/^'[^']/)) {
- var prev = opts.node && opts.node.previousSibling ?
opts.node.previousSibling.nodeName : '';
- if (prev === 'I' || prev === 'B') {
- // console.warn("---EWT:F3b---");
- return this.escapedText(state, false, text, true);
- }
- }
-
var sol = state.onSOL && !state.inIndentPre && !state.inPHPBlock,
hasNewlines = text.match(/\n./),
hasTildes = text.match(/~{3,5}/);
@@ -2005,14 +1995,13 @@
/**
- * Bold/italic helper: Determine if an element was preceded by a
- * bold/italic combination
+ * Bold/italic helper: Get a preceding quote/italic element or a '-char
*/
-WSP._hasPrecedingQuoteElements = function(node, state) {
+WSP._getPrecedingQuoteElement = function(node, state) {
if (!state.sep.lastSourceNode) {
// A separator was emitted before some other non-empty wikitext
// string, which means that we can't be directly preceded by
quotes.
- return false;
+ return null;
}
// Move up first until we have a sibling
while (node && !node.previousSibling) {
@@ -2021,23 +2010,51 @@
if (node) {
node = node.previousSibling;
}
+
+ if (node && DU.isText(node) && node.nodeValue.match(/'$/)) {
+ return node;
+ }
+
// Now move down the lastChilds to see if there are any italics / bolds
- while(node && node.nodeType === node.ELEMENT_NODE) {
- if (node.nodeName in {I:1, B:1} &&
- node.lastChild && node.lastChild.nodeName in
{I:1, B:1}) {
- if (state.sep.lastSourceNode === node) {
- return true;
- } else {
- return false;
+ while (node && DU.isElt(node)) {
+ if (node.nodeName in {I:1, B:1} && node.lastChild) {
+ if (node.lastChild.nodeName in {I:1, B:1} ||
+ DU.isText(node.lastChild) &&
node.lastChild.nodeValue.match(/'$/))
+ {
+ return state.sep.lastSourceNode === node ?
node.lastChild : null;
}
} else if (state.sep.lastSourceNode === node) {
// If a separator was already emitted, or an
outstanding separator
// starts at another node that produced output, we are
not
// directly preceded by quotes in the wikitext.
- return false;
+ return null;
}
node = node.lastChild;
}
+ return null;
+};
+
+WSP._quoteTextFollows = function(node, state) {
+ // Move up first until we have a sibling
+ while (node && !node.nextSibling) {
+ node = node.parentNode;
+ }
+ if (node) {
+ node = node.nextSibling;
+ }
+
+ if (node && DU.isText(node) && node.nodeValue[0] === "'") {
+ return true;
+ }
+
+ // Now move down the firstChilds
+ while (node && node.nodeName in {I:1, B:1} && node.firstChild) {
+ if (DU.isText(node.firstChild) &&
node.firstChild.nodeValue.match(/'$/)) {
+ return true;
+ }
+ node = node.firstChild;
+ }
+
return false;
};
@@ -2683,22 +2700,32 @@
},
b: {
handle: function(node, state, cb) {
- if (state.serializer._hasPrecedingQuoteElements(node,
state)) {
+ var q1 =
state.serializer._getPrecedingQuoteElement(node, state);
+ var q2 = state.serializer._quoteTextFollows(node,
state);
+ if (q1 && (q2 || DU.isElt(q1))) {
emitStartTag('<nowiki/>', node, state, cb);
}
emitStartTag("'''", node, state, cb);
state.serializeChildren(node, cb,
state.serializer.wteHandlers.quoteHandler);
emitEndTag("'''", node, state, cb);
+ if (q2) {
+ emitEndTag('<nowiki/>', node, state, cb);
+ }
}
},
i: {
handle: function(node, state, cb) {
- if (state.serializer._hasPrecedingQuoteElements(node,
state)) {
+ var q1 =
state.serializer._getPrecedingQuoteElement(node, state);
+ var q2 = state.serializer._quoteTextFollows(node,
state);
+ if (q1 && (q2 || DU.isElt(q1))) {
emitStartTag('<nowiki/>', node, state, cb);
}
emitStartTag("''", node, state, cb);
state.serializeChildren(node, cb,
state.serializer.wteHandlers.quoteHandler);
emitEndTag("''", node, state, cb);
+ if (q2) {
+ emitEndTag('<nowiki/>', node, state, cb);
+ }
}
},
a: {
diff --git a/js/tests/parserTests.txt b/js/tests/parserTests.txt
index 3084e95..97e7afc 100644
--- a/js/tests/parserTests.txt
+++ b/js/tests/parserTests.txt
@@ -15777,16 +15777,24 @@
#### --------------------------------------
!! test
1. Quotes inside <b> and <i>
+!! options
+parsoid=html2wt
!! input
''<nowiki>'foo'</nowiki>''
''<nowiki>''foo''</nowiki>''
''<nowiki>'''foo'''</nowiki>''
-''foo''<nowiki>'s</nowiki>
+''foo''<nowiki/>'s
'''<nowiki>'foo'</nowiki>'''
'''<nowiki>''foo''</nowiki>'''
'''<nowiki>'''foo'''</nowiki>'''
'''<nowiki>foo'</nowiki>''<nowiki>bar'</nowiki>''baz'''
-'''foo'''<nowiki>'s</nowiki>
+'''foo'''<nowiki/>'s
+'''foo''
+''foo''<nowiki/>'
+'<nowiki/>''foo''<nowiki/>'
+''''foo'''
+'''foo'''<nowiki/>'
+'<nowiki/>'''foo'''<nowiki/>'
!! result
<p><i>'foo'</i>
<i>''foo''</i>
@@ -15797,7 +15805,12 @@
<b>'''foo'''</b>
<b>foo'<i>bar'</i>baz</b>
<b>foo</b>'s
-</p>
+'<i>foo</i>
+<i>foo</i>'
+'<i>foo</i>'
+'<b>foo</b>
+<b>foo</b>'
+'<b>foo</b>'</p>
!! end
!! test
diff --git a/js/tests/selser.changes.json b/js/tests/selser.changes.json
index c40e0fc..d72b72d 100644
--- a/js/tests/selser.changes.json
+++ b/js/tests/selser.changes.json
@@ -171,6 +171,7 @@
"External links: protocol-relative URL in the middle of a word is left alone
(bug 30269)":[[[3]],0,[[4]],[3],[1],[[2]],[2],[4]],
"External
image":[[[2,4]],[4],0,[[3,1]],[2],[1],[[3,0]],[[2,0]],[3],[[0,2]],[[4,1]],[[2,2]],[[4,0]],[[0,3]],[[2,3]],[[3,4]],[[2,1]],[[3,2]],[[4,2]],[[0,4]]],
"External image from
https":[[3],[1],[[0,2]],[2],0,[[3,1]],[[3,2]],[[3,0]],[[0,1]],[[4,4]],[4],[[2,0]],[[0,3]],[[4,1]],[[3,3]],[[4,0]],[[2,2]],[[4,2]],[[4,3]],[[0,4]]],
+"External image (when not
allowed)":[[[2,2]],[[0,1]],[[3,[3]]],[2],[1],[3],[[3,3]],[4],[[2,1]],[[0,3]],[[2,4]],[[3,0]],[[0,[4]]],0,[[3,4]],[[4,[2]]],[[0,[3]]],[[4,0]],[[3,[4]]],[[0,2]]],
"Link to non-http image, no img
tag":[[2],[[3,0]],[3],[4],[[4,2]],[[4,3]],[[2,1]],[[0,1]],0,[[0,[2]]],[[0,4]],[[0,3]],[[2,[3]]],[1],[[3,[2]]],[[0,2]],[[4,0]],[[3,[4]]],[[2,0]],[[2,2]]],
"External links: terminating
separator":[[4],[3],[[0,0,4]],[[0,2,2]],[[3,0,2]],[2],[1],[[0,[3],0]],[[0,4,0]],[[4,[2],4]],[[3,[3],0]],[[0,2,4]],[[2,3,4]],0,[[0,[2],4]],[[0,3,0]],[[2,1,0]],[[4,3,4]],[[2,[2],2]],[[0,3,3]]],
"External links: intervening
separator":[0,[2],[[3,2]],[[4,3]],[3],[1],[[0,2]],[[0,[2]]],[4],[[3,[3]]],[[2,1]],[[2,0]],[[4,0]],[[4,[2]]],[[2,3]],[[3,1]],[[3,[2]]],[[0,3]],[[0,4]],[[2,2]]],
@@ -453,6 +454,7 @@
"Bug 6563: Edit link generation for section suppressed by
<includeonly>":[[4,0,3,1],[0,0,0,3],[1,0,3,[2]],[2,0,0,[2]],[2,0,4,4],[0,1,0,[3]],[2,0,3,3],[0,0,3,4],[0,2,0,0],[0,0,2,[3]],0,[3,0,0,0],[4,0,2,0],[4,2,0,1],[3,1,0,0],[2,3,2,0],[2,2,3,0],[0,0,2,1],[0,0,0,2],[3,1,0,3]],
"Bug 6563: Section extraction for section suppressed by
<includeonly>":[[4,4,0,[2]],[0,4,0,[3]],[3,0,0,[4]],[0,0,2,[4]],[0,0,4,[3]],[3,1,4,2],[4,2,0,2],[0,3,2,0],[2,3,0,3],[0,4,3,1],0,[3,0,2,3],[0,0,2,2],[3,4,2,4],[3,0,0,[2]],[0,0,0,2],[2,0,3,1],[0,3,3,2],[2,1,0,0],[3,0,0,2]],
"Un-closed <includeonly>":[0,[1],[4],[3],[2]],
+"Parsoid: DOM fragment reuse":[],
"0. includeonly around the entire attribute":[[1],0,[2],[3],[4]],
"1. includeonly in html attr key":[[2],0,[3],[1],[4]],
"2. includeonly in html attr
value":[0,[3],[4],[[0,0,3,0,0]],[[0,0,4,0,0]],[2],[[0,0,2,0,0]],[1]],
@@ -549,6 +551,10 @@
"pre-save transform: trim trailing empty
lines":[[2,0,2,2,4],[3,2,2,2,0],[2,2,0,0,0],[0,3,0,0,0],[4,4,1,4,0],[2,2,[3],0,0],[2,0,0,4,2],[[4],3,2,0,0],[1,0,3,0,4],[0,3,0,3,3],[0,3,4,3,0],[[2],0,0,0,4],[2,0,[4],2,0],[0,2,[2],2,0],[3,0,3,2,2],[0,0,[4],4,3],[[4],0,4,0,2],[4,4,0,0,0],[0,2,4,4,0],[1,3,0,0,0]],
"pre-save transform: Signature
expansion":[[2],[[4,2,4,0,3,4,[0,0,0,3]]],[[4,3,[3,3,0,4],4,4,0,2]],[1],[[1,4,[0,0,0,1],4,2,0,3]],[3],[4],[[2,4,3,0,0,0,4]],[[2,0,[3,0,4,2],2,[4,0,0],0,3]],[[3,0,2,3,3,0,[4,3,0,4]]],[[[2],2,[0,0,4,4],4,[0,3,0],2,2]],[[0,4,[0,0,3,0],4,[2,0,2],3,[0,2,0,1]]],[[[4],0,[3,3,4,1],0,[4,0,0],2,4]],[[[4],0,[4,2,0,4],3,[3,2,0],3,4]],[[2,0,1,0,2,0,[4,4,3,0]]],[[2,0,3,0,[2,0,0],0,[0,4,0,0]]],[[3,0,3,0,[3,1,4],0,3]],[[3,3,2,0,1,0,4]],[[0,3,3,0,[4,3,4],3,[3,4,0,1]]],[[1,3,[3,0,3,0],0,4,0,3]]],
"pre-save transform: Signature expansion in nowiki tags (bug
93)":[[0,0,2,0,0,0,2,[1,3,1],2,[0,0,1],0,4,0,3,0,4],[0,0,3,0,0,0,2,3,2,[1,[4],3],3,0,3,4,4,[2,1,0]],[2,2,3,4,4,0,2,4,3,[0,3,1],3,2,3,4,0,[0,0,3]],[0,0,[[2]],3,2,0,3,[0,[4],0],4,[0,0,4],0,3,4,[0,2,0,3,0,4,0,3],0,4],[2,2,[3],3,2,4,2,3,0,[4,[4],1],3,4,2,[4,0,0,3,0,0,0,0],0,[0,1,1]],[[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],[2,0,4,2,3,1,3,3,0,[0,[4],0],0,0,0,[0,2,0,1,2,0,0,0],0,0],[2,3,[2],0,0,1,0,[2,0,3],0,[0,1,0],0,0,0,[0,0,0,2,4,0,0,4],2,[0,4,0]],[0,0,3,0,0,0,0,3,0,[0,[4],1],3,4,0,[3,0,0,0,4,2,0,2],0,[0,1,3]],[0,0,[3],0,3,0,0,[0,2,1],0,[3,[4],0],2,0,0,[4,0,0,1,0,3,0,0],4,[3,2,3]],[0,3,1,0,3,2,2,[1,4,3],0,[4,[4],0],2,[0,3],3,4,4,2],[4,2,4,2,4,0,0,1,0,[0,1,1],0,[0,3],2,3,2,2],[1,3,3,3,0,0,0,[0,3,0],0,[0,2,0],0,2,2,2,4,4],[3,2,[[3]],0,4,0,2,2,4,2,3,0,2,3,3,[2,1,3]],[4,4,2,0,3,0,0,[1,[3],0],0,4,3,0,0,2,0,[2,2,0]],[4,0,[1],0,3,0,3,3,2,[4,2,3],2,1,0,[0,2,0,1,2,2,0,0],0,2],[3,4,4,0,0,3,0,[0,0,1],3,[3,[4],3],2,3,0,3,0,[3,4,0]],[1,3,[2],0,0,0,2,0,0,2,0,0,3,2,0,[0,2,2]],[[4],4,[[2]],2,1,3,4,[1,4,0],0,1,0,4,2,[0,4,0,0,0,0,0,2],2,[2,3,1]],[[4],3,4,3,2,0,0,2,0,3,2,[0,2],0,[0,0,0,0,0,3,0,0],0,[4,0,1]]],
+"Parsoid: Recognize nowiki with trailing space in tags":[],
+"Parsoid: Recognize nowiki with odd capitalization":[],
+"Parsoid: Escape nowiki with trailing space in tags":[],
+"Parsoid: Escape weird noWikI capitalizations":[],
"message transform: magic variables":[0,[2],[3],[1],[4]],
"message transform: should not transform wiki
markup":[[[[4]]],[1],[3],[4],[[4]],[2],[[[3]]],0,[[2]],[[3]],[[1]],[[[2]]]],
"message transform: <noinclude> in transcluded template (bug 4926)":[0],
@@ -687,6 +693,13 @@
"text with character entity:
eacute":[[[4,2,0]],[[4,0,0]],[[0,[4],2]],[3],[2],[1],[[0,4,0]],[4],[[0,[2],2]],[[0,2,2]],[[0,[4],3]],[[0,0,4]],[[2,[4],0]],[[3,2,0]],[[2,4,0]],[[4,2,4]],[[2,1,2]],[[3,4,0]],[[4,[3],4]],[[3,[3],0]]],
"text with entity-escaped character entity-like string:
eacute":[[4],[[2,3,0]],[2],[1],[[2,1,0]],[[0,3,0]],[[0,4,4]],[3],[[3,1,3]],[[4,[4],4]],0,[[3,[2],4]],[[3,[3],0]],[[0,[3],3]],[[3,3,2]],[[0,0,2]],[[0,1,3]],[[3,0,0]],[[4,2,0]],[[0,4,3]]],
"text with undefined character entity:
xacute":[[[3,4,4]],[3],[4],[2],[[0,1,4]],[[2,3,3]],[1],[[3,4,0]],[[0,0,2]],[[4,[3],3]],[[0,0,4]],[[4,[4],0]],[[2,[2],4]],[[0,1,0]],[[2,0,0]],[[3,1,2]],[[2,4,0]],[[2,1,0]],[[2,4,2]],[[0,[4],3]]],
+"Ensure that HTML adoption agency algorithm is properly
implemented.":[[2],[[[4,4,0]]],[4],[3],[[1]],[[[2,[4],0]]],[1],[[[0,1,0]]],[[[3,0,3]]],[[[0,[2],0]]],[[2]],[[[4,3,0]]],[[[3,4,0]]],[[[0,2,3]]],[[[0,[2],2]]],[[[3,0,4]]],[[[3,0,0]]],[[[0,3,0]]],[[3]],[[4]]],
+"Nesting of
<kbd>":[[4],[[[0,1,0]]],[1],[2],[[2]],[3],[[[3,[4],0]]],[[3]],[[4]],[[1]],[[[2,[4],0]]],[[[4,[3],0]]],[[[0,0,4]]],[[[2,2,0]]],[[[0,[3],3]]],[[[0,3,0]]],[[[0,[2],0]]],[[[4,3,4]]],[[[4,3,3]]],[[[2,3,0]]]],
+"Nesting of
<em>":[[1],[[[0,0,3]]],[[2]],[[4]],[3],0,[2],[[[3,4,4]]],[4],[[[3,0,0]]],[[[2,0,3]]],[[[0,1,0]]],[[3]],[[[0,4,0]]],[[[0,[2],3]]],[[[2,0,4]]],[[[0,[4],0]]],[[[0,4,2]]],[[[4,3,4]]],[[1]]],
+"Nesting of
<strong>":[[2],[4],[[[3,1,0]]],[1],[[3]],[[1]],[[[0,1,0]]],[[[0,[2],0]]],[3],[[[0,2,4]]],[[2]],[[[4,3,0]]],[[4]],[[[2,4,4]]],[[[0,4,0]]],[[[0,3,2]]],[[[0,[4],0]]],[[[4,2,4]]],[[[4,[3],4]]],[[[0,[4],3]]]],
+"Nesting of
<q>":[[[1]],[[[0,3,0]]],[[3]],[[2]],[[[2,0,0]]],[2],[[4]],[1],[3],[4],[[[4,4,0]]],[[[4,[4],0]]],[[[0,[4],0]]],[[[0,4,0]]],[[[0,3,4]]],[[[0,[2],4]]],[[[0,4,3]]],[[[0,[4],3]]],[[[0,0,2]]],[[[4,[4],4]]]],
+"Nesting of
<ruby>":[[4],[2],[[1]],[[[4,0,4]]],[[4]],[[[0,3,2]]],[3],[[[3,4,0]]],[[[2,1,4]]],[[3]],[1],0,[[[0,3,0]]],[[[0,[3],2]]],[[[0,2,2]]],[[2]],[[[2,1,2]]],[[[3,[3],0]]],[[[4,2,0]]],[[[0,1,4]]]],
+"Nesting of
<bdo>":[[4],[[3]],[1],[2],[[1]],[[2]],[[[2,1,0]]],[[[0,[3],2]]],[[[0,0,3]]],[[[2,4,0]]],[3],0,[[4]],[[[4,1,2]]],[[[2,2,0]]],[[[0,[3],3]]],[[[3,1,2]]],[[[3,0,4]]],[[[0,2,2]]],[[[2,[2],2]]]],
"Media
link":[[[2]],[[[3]]],[3],[2],[1],[[[2]]],[[[4]]],[[1]],0,[4],[[3]],[[4]]],
"Media link with
text":[[3],[[3]],[4],[2],[[4]],[[[4]]],[[1]],0,[1],[[2]],[[[2]]],[[[3]]]],
"Media link with nasty text\nfixme: doBlockLevels won't wrap this in a
paragraph because it contains a
div":[[4],[[0,2]],[2],[1],[[0,4]],0,[[4,0]],[[2,2]],[[4,1]],[[2,3]],[[0,[2]]],[3],[[4,2]],[[0,1]],[[3,4]],[[2,[3]]],[[0,3]],[[3,0]],[[2,[4]]],[[3,3]]],
@@ -1096,7 +1109,7 @@
"Links 3. WikiLinks: No escapes
needed":[[[[3],0,4]],[3],[4],[[[2],0,2]],[[4,4,[3]]],[1],[[0,3,4]],[[3,4,[2]]],[2],[[[2],0,3]],[[4,0,[3]]],[[3,0,2]],[[2,3,3]],[[[4],0,0]],[[0,2,2]],[[0,4,2]],[[[3],2,1]],[[0,4,1]],[[[3],4,0]],[[1,0,1]]],
"Links 4. ExtLinks: Escapes
needed":[[[0,3,2]],[[[1],0,[2]]],[[[1],2,[4]]],[[[[4]],0,3]],[4],[2],[1],[[4,0,[4]]],[[3,0,2]],[[[[2]],4,1]],[[0,4,1]],[[2,0,4]],[3],[[2,0,2]],[[[4],3,4]],[[4,4,[1]]],[[1,3,0]],[[3,2,1]],[[4,0,2]],[[2,0,1]]],
"Links 5. ExtLinks: No escapes
needed":[0,[[2]],[1],[[3]],[2],[3],[[4]],[[[4]]],[4],[[[2]]],[[1]],[[[3]]]],
-"1. Quotes inside <b> and
<i>":[[[3,2,1,3,0,3,4,[2],3,[1],4,1,3,[1],0,0,0,0,2]],[1],[[2,3,[1],4,0,0,[3],[2],3,[4],0,0,4,1,0,[0,[3],2],4,3,2]],[3],[[4,2,4,0,[[3]],3,0,3,3,[1],0,3,0,[3],4,[0,[[4]],4],0,2,1]],[[[[4]],0,3,2,2,2,1,1,0,2,3,[[4]],4,[[2]],0,3,3,3,[3]]],[[0,0,4,3,[4],4,2,[3],0,4,0,0,4,2,3,4,2,4,4]],[[[2],0,3,0,[[3]],4,4,1,0,2,4,0,3,1,3,[2,2,0],0,2,3]],[[3,0,[[3]],0,1,0,0,1,4,4,2,2,4,2,0,1,4,4,4]],[[3,0,[[4]],4,0,0,3,0,0,2,0,3,0,2,0,[4,0,0],2,2,3]],[[4,2,0,0,[2],0,1,[4],0,[[3]],2,0,2,[[3]],0,[[2],[3],0],0,[4],4]],[[1,2,2,3,0,0,0,0,4,3,0,1,4,2,2,2,0,0,1]],[[4,0,4,0,0,2,1,4,2,1,3,[3],3,[[2]],3,3,3,0,4]],[2],[[3,0,0,0,0,4,4,[3],2,3,0,[[3]],2,2,4,4,4,[3],4]],[[2,0,[4],0,[2],2,[2],3,0,1,3,1,0,1,0,[[3],[[4]],4],3,4,1]],[[[2],0,[1],0,[2],0,2,0,0,1,0,[2],0,4,0,4,0,0,1]],[4],[[[2],0,0,4,[4],0,2,0,4,1,0,4,2,0,0,4,0,0,[4]]],[[[1],0,4,2,4,0,0,[3],0,1,4,1,3,0,0,1,3,0,0]]],
+"1. Quotes inside <b> and <i>":[],
"2. Link fragments separated by <i> and <b>
tags":[[0,2,4],[3,0,[4,[3],0]],[[0,[4],2],0,[0,1,1]],[[4,[2],0],0,3],[[4,4,0],0,1],[2,0,[0,[4],4]],[4,2,1],[[3,3,2],2,1],[[0,2,2],3,[2,4,[2]]],[4,0,1],[[0,1,[2]],0,2],[2,2,2],[[2,0,1],2,2],[[3,3,[3]],4,2],[[4,1,[3]],0,2],[[0,2,0],0,2],[4,0,[4,[2],2]],[3,0,3],[[0,4,3],3,2],[[0,2,4],0,3]],
"2. Link fragments inside <i> and <b>\n(FIXME: Escaping one or both of[[and ]]
is also acceptable --\n this is one of the shortcomings of this
format)":[[3,3,4],[4,0,2],[1,0,2],[2,0,3],[4,4,1],[[2,1],4,[0,1]],[1,0,0],[4,0,1],[[1,4],3,1],[1,0,3],[[4,[2]],4,3],[4,3,3],[1,4,4],[[0,4],4,[1,[4]]],[[[2],1],4,[2,1]],[3,0,[4,2]],[[3,[4]],4,[4,0]],[[2,[3]],0,[4,[4]]],[1,2,[4,1]],[[0,2],2,1]],
"1. No unnecessary
escapes":[[[2,[2]],0,2,0,[3,4],0,[0,4],0,[0,3,1]],[2,0,1,0,[3,1],0,1,0,[2,[2],0]],[[4,3],0,2,2,2,0,[3,3],3,[0,2,0]],[2,0,1,4,1,2,2,0,[4,[3],0]],[[0,4],0,[3,4],4,[0,2],4,[2,0],0,[0,3,[3]]],[[0,4],0,[4,2],0,3,2,[2,4],2,[3,[2],4]],[0,0,[0,[2]],0,1,3,3,3,2],[1,4,[0,3],3,[0,2],2,1,0,3],[2,0,2,4,1,2,0,4,[0,4,0]],[1,0,[0,1],4,[3,[[4]]],0,[4,4],2,3],[[0,[2]],0,2,0,[0,[[4]]],4,2,4,[0,0,3]],[[0,[3]],0,[3,0],3,2,4,[2,[1]],2,3],[[4,1],0,[0,2],3,2,0,[3,4],0,4],[4,4,3,3,3,2,[0,[4]],0,[0,1,4]],[4,2,[4,0],4,[0,3],3,[0,4],0,[0,[2],0]],[3,3,[0,4],4,3,3,3,0,[0,2,0]],[2,0,4,2,[0,3],0,1,0,[0,4,[3]]],[1,0,[0,3],3,[0,[[4]]],0,3,2,[2,[3],4]],[3,2,[0,3],0,[3,[4]],2,4,0,4],[[3,4],0,[2,4],2,[4,[4]],3,[0,4],3,[3,3,[4]]]],
@@ -1132,7 +1145,5 @@
"Image: New block level image should have \\n before and after":[],
"Lists: Add space after bullets":[],
"Parsoid: Serialize positional parameters with = in them as named
parameter":[],
-"Ensure that HTML adoption agency algorithm is properly
implemented.":[[2],[[[4,4,0]]],[4],[3],[[1]],[[[2,[4],0]]],[1],[[[0,1,0]]],[[[3,0,3]]],[[[0,[2],0]]],[[2]],[[[4,3,0]]],[[[3,4,0]]],[[[0,2,3]]],[[[0,[2],2]]],[[[3,0,4]]],[[[3,0,0]]],[[[0,3,0]]],[[3]],[[4]]],
-"Document PHP parser behavior for HTML adoption agency test case.":[],
"_numchanges": 20
-}
\ No newline at end of file
+}
--
To view, visit https://gerrit.wikimedia.org/r/76162
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I28f3cffa69be4e11462a68483cf3d3d85d380c85
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