jenkins-bot has submitted this change and it was merged. Change subject: Render paragraphs when indent-pre is suppressed in blocklevels ......................................................................
Render paragraphs when indent-pre is suppressed in blocklevels Bug: 51262 Change-Id: Ibd04a36d5f8e4a0432bd6eb22942af61c239fa3f --- M lib/dom.handlePres.js M tests/parserTests-blacklist.js M tests/parserTests.txt 3 files changed, 62 insertions(+), 34 deletions(-) Approvals: Subramanya Sastry: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/dom.handlePres.js b/lib/dom.handlePres.js index 9368e5b..998b7a1 100644 --- a/lib/dom.handlePres.js +++ b/lib/dom.handlePres.js @@ -3,6 +3,27 @@ var DU = require('./mediawiki.DOMUtils.js').DOMUtils, Util = require('./mediawiki.Util.js').Util; +function fixedIndentPreText(str, isLastChild) { + if (isLastChild) { + return str.replace(/\n(?!$)/g, "\n "); + } else { + return str.replace(/\n/g, "\n "); + } +} + +function reinsertLeadingSpace(elt, isLastChild) { + var children = elt.childNodes; + for (var i = 0, n = children.length; i < n; i++) { + var c = children[i]; + if (DU.isText(c)) { + c.data = fixedIndentPreText(c.data, isLastChild && i === n-1); + } else { + // recurse + reinsertLeadingSpace(c, isLastChild && i === n-1); + } + } +} + function handlePres(document, env) { /* -------------------------------------------------------------- * Block tags change the behaviour of indent-pres. This behaviour @@ -17,37 +38,17 @@ * Wherever such a block tag is found, any Parsoid-inserted * pre-tags are removed. * -------------------------------------------------------------- */ - function deleteIndentPreFromDOM(node) { - - function fixedIndentPreText(str, isLastChild) { - if (isLastChild) { - return str.replace(/\n(?!$)/g, "\n "); - } else { - return str.replace(/\n/g, "\n "); - } - } - - function reinsertLeadingSpace(elt, isLastChild) { - var children = elt.childNodes; - for (var i = 0, n = children.length; i < n; i++) { - var c = children[i]; - if (DU.isText(c)) { - c.data = fixedIndentPreText(c.data, isLastChild && i === n-1); - } else { - // recurse - reinsertLeadingSpace(c, isLastChild && i === n-1); - } - } - } - - var c = node.firstChild; + function deleteIndentPreFromDOM(node, blocklevel) { + var c = node.firstChild, p, f; while (c) { // get sibling before DOM is modified var c_sibling = c.nextSibling; if (DU.hasNodeName(c, "pre") && !DU.isLiteralHTMLNode(c)) { + f = document.createDocumentFragment(); + // space corresponding to the 'pre' - node.insertBefore(document.createTextNode(' '), c); + f.appendChild(document.createTextNode(' ')); // transfer children over var c_child = c.firstChild; @@ -61,14 +62,21 @@ // sure every new line gets a space char added back. reinsertLeadingSpace(c_child, next === null); } - node.insertBefore(c_child, c); + f.appendChild(c_child); c_child = next; } + if (blocklevel) { + p = document.createElement('p'); + p.appendChild(f); + f = p; + } + + node.insertBefore(f, c); // delete the pre DU.deleteNode(c); } else if (!Util.tagClosesBlockScope(c.nodeName.toLowerCase())) { - deleteIndentPreFromDOM(c); + deleteIndentPreFromDOM(c, blocklevel); } c = c_sibling; @@ -76,7 +84,7 @@ } function findAndHandlePres(doc, elt, indentPresHandled) { - var children = elt.childNodes, n; + var children = elt.childNodes, n, blocklevel = false; for (var i = 0; i < children.length; i++) { var processed = false; n = children[i]; @@ -84,7 +92,10 @@ if (DU.isElt(n)) { if (Util.tagOpensBlockScope(n.nodeName.toLowerCase())) { if (DU.isTplMetaType(n.getAttribute("typeof")) || DU.isLiteralHTMLNode(n)) { - deleteIndentPreFromDOM(n); + // FIXME: Investigate PHP parser to see + // where else this applies. + blocklevel = n.nodeName === "BLOCKQUOTE"; + deleteIndentPreFromDOM(n, blocklevel); processed = true; } } else if (n.getAttribute("typeof") === "mw:Extension/References") { @@ -93,7 +104,7 @@ // Verify and get rid of this special case. // // No pre-tags in references - deleteIndentPreFromDOM(n); + deleteIndentPreFromDOM(n, false); processed = true; } } diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js index 237a30c..3649312 100644 --- a/tests/parserTests-blacklist.js +++ b/tests/parserTests-blacklist.js @@ -44,7 +44,7 @@ add("wt2html", "Bare pipe character from a template (bug 52363)", "<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"pipe\",\"href\":\"./Template:Pipe\"},\"params\":{},\"i\":0}}]}' data-parsoid='{\"dsr\":[0,8,null,null],\"pi\":[[]]}'></span>"); add("wt2html", "Comment on its own line post-expand", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'>a\n<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"blank\",\"href\":\"./Template:Blank\"},\"params\":{},\"i\":0}}]}' data-parsoid='{\"dsr\":[2,11,null,null],\"pi\":[[]]}'></span><!---->\nb</p>"); add("wt2html", "Comment on its own line post-expand with non-significant whitespace", "<p data-parsoid='{\"dsr\":[0,23,0,0]}'>a\n <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"blank\",\"href\":\"./Template:Blank\"},\"params\":{},\"i\":0}}]}' data-parsoid='{\"dsr\":[3,12,null,null],\"pi\":[[]]}'></span> <!----> \nb</p>"); -add("wt2html", "Bug 52763: Preformatted in <blockquote>", "<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[0,74,12,13]}'>\n Blah\n<table data-parsoid='{\"dsr\":[19,60,2,2]}'>\n<tbody data-parsoid='{\"dsr\":[22,58,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[22,57,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[22,57,1,0]}'>\n<pre data-parsoid='{\"dsr\":[24,57,1,0]}'>indented cell (no pre-wrapping!)</pre></td></tr>\n</tbody></table>\n</blockquote>"); +add("wt2html", "Bug 52763: Preformatted in <blockquote>", "<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[0,74,12,13]}'>\n<p data-parsoid='{\"dsr\":[13,18,0,0]}'> Blah</p>\n<table data-parsoid='{\"dsr\":[19,60,2,2]}'>\n<tbody data-parsoid='{\"dsr\":[22,58,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[22,57,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[22,57,1,0]}'>\n<pre data-parsoid='{\"dsr\":[24,57,1,0]}'>indented cell (no pre-wrapping!)</pre></td></tr>\n</tbody></table>\n</blockquote>"); add("wt2html", "Templates: Indent-Pre: 1a. Templates that break a line should suppress <pre>", " <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"\"}},\"i\":0}}]}' data-parsoid='{\"dsr\":[1,10,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'></span>"); add("wt2html", "Templates: Indent-Pre: 1b. Templates that break a line should suppress <pre>", " <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"\\nfoo\"}},\"i\":0}}]}' data-parsoid='{\"dsr\":[1,14,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>\n</span><p about=\"#mwt1\" data-parsoid='{\"dsr\":[null,14,0,0]}'>foo</p>"); add("wt2html", "Templates: Indent-Pre: 1e. Wrapping should be based on expanded content", "<pre about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\" foo\"}},\"i\":0}}]}' data-parsoid='{\"dsr\":[0,13,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>foo</pre>\n\n<pre about=\"#mwt2\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\" foo\"}},\"i\":0}},{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\" bar\"}},\"i\":1}}]}' data-parsoid='{\"dsr\":[15,41,1,0],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}],[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>foo<span data-parsoid='{\"dsr\":[28,41,null,null],\"src\":\"{{echo| bar}}\"}'> bar</span></pre>\n\n<pre about=\"#mwt4\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\" foo\"}},\"i\":0}},\"\\n\",{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\" bar\"}},\"i\":1}}]}' data-parsoid='{\"dsr\":[43,70,1,0],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}],[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>foo\n<span data-parsoid='{\"dsr\":[57,70,null,null],\"src\":\"{{echo| bar}}\"}'>bar</span></pre>\n\n<span about=\"#mwt6\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"<!--cmt--> foo\"}},\"i\":0}}]}' data-parsoid='{\"dsr\":[72,95,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'><!--cmt--></span><pre about=\"#mwt6\" data-parsoid='{\"dsr\":[null,95,1,0]}'>foo</pre>\n\n<!--cmt--><pre about=\"#mwt7\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\" foo\"}},\"i\":0}}]}' data-parsoid='{\"dsr\":[107,120,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>foo</pre>\n\n<pre about=\"#mwt8\" typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"{{echo| }}bar\"}},\"i\":0}}]}' data-parsoid='{\"dsr\":[122,144,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>bar</pre>"); @@ -54,7 +54,6 @@ add("wt2html", "2a. Indent-Pre and tables", " <table data-parsoid='{\"dsr\":[1,31,2,2]}'>\n <tbody data-parsoid='{\"dsr\":[5,29,0,0]}'><tr data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[5,27,2,0]}'>\n <th data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[9,12,1,0]}'>h1</th><th data-parsoid='{\"stx_v\":\"row\",\"autoInsertedEnd\":true,\"dsr\":[12,16,2,0]}'>h2</th>\n <td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[18,22,1,0]}'>foo</td><td data-parsoid='{\"stx_v\":\"row\",\"autoInsertedEnd\":true,\"dsr\":[22,27,2,0]}'>bar</td></tr>\n </tbody></table>"); add("wt2html", "2b. Indent-Pre and tables", " <table data-parsoid='{\"dsr\":[2,16,2,2]}'>\n <tbody data-parsoid='{\"dsr\":[6,14,0,0]}'><tr data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[6,13,2,0]}'>\n<td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[9,13,1,0]}'>foo</td></tr>\n</tbody></table>"); add("wt2html", "2c. Indent-Pre and tables (bug 42252)", "<table data-parsoid='{\"dsr\":[0,23,2,2]}'>\n <caption data-parsoid='{\"dsr\":[4,10,2,null]}'> foo</caption>\n <tbody data-parsoid='{\"dsr\":[12,21,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[12,20,0,0]}'><th data-parsoid='{\"startTagSrc\":\"! \",\"attrSepSrc\":\"|\",\"autoInsertedEnd\":true,\"dsr\":[12,20,4,0]}'> bar</th></tr>\n</tbody></table>"); -add("wt2html", "3b. Indent-Pre and block tags (pre-content on separate line)", "<p data-parsoid='{\"stx\":\"html\",\"dsr\":[0,13,3,4]}'>\n foo\n</p>\n\n<div data-parsoid='{\"stx\":\"html\",\"dsr\":[15,32,5,6]}'>\n<pre data-parsoid='{\"dsr\":[21,25,1,0]}'>foo</pre>\n</div>\n\n<center data-parsoid='{\"stx\":\"html\",\"dsr\":[34,57,8,9]}'>\n<pre data-parsoid='{\"dsr\":[43,47,1,0]}'>foo</pre>\n</center>\n\n<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[59,90,12,13]}'>\n foo\n</blockquote>\n\n<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[92,135,12,13]}'>\n<pre data-parsoid='{\"stx\":\"html\",\"strippedNL\":\"\\n\",\"dsr\":[105,121,6,6]}'>\nfoo\n</pre>\n</blockquote>\n\n<table data-parsoid='{\"stx\":\"html\",\"dsr\":[137,176,7,8]}'><tbody data-parsoid='{\"dsr\":[144,168,0,0]}'><tr data-parsoid='{\"stx\":\"html\",\"dsr\":[144,168,4,5]}'><td data-parsoid='{\"stx\":\"html\",\"dsr\":[148,163,4,5]}'>\n<pre data-parsoid='{\"dsr\":[153,157,1,0]}'>foo</pre>\n</td></tr></tbody></table>\n\n<ul data-parsoid='{\"stx\":\"html\",\"dsr\":[178,203,4,5]}'><li data-parsoid='{\"stx\":\"html\",\"dsr\":[182,198,4,5]}'>\n foo\n</li></ul>\n"); add("wt2html", "4. Multiple spaces at start-of-line", " <p data-parsoid='{\"stx\":\"html\",\"dsr\":[4,16,3,4]}'> foo </p>\n<pre data-parsoid='{\"dsr\":[17,24,1,0]}'> foo</pre>\n\t<table data-parsoid='{\"dsr\":[26,36,2,2]}'>\n<tbody data-parsoid='{\"dsr\":[29,34,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[29,33,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[29,33,1,0]}'>foo</td></tr>\n</tbody></table>"); add("wt2html", "6. Pre-blocks should extend across lines with leading WS even when there is no wrappable content", "<pre data-parsoid='{\"dsr\":[0,26,1,0]}'>a\n\n <!-- continue -->\nb</pre>\n\n<pre data-parsoid='{\"dsr\":[28,30,1,0]}'>c</pre>\n \n<p data-parsoid='{\"dsr\":[33,34,0,0]}'>d</p>"); add("wt2html", "Definition Lists: Nesting: Multi-level (Parsoid only)", "<dl data-parsoid='{\"dsr\":[0,29,0,0]}'><dt data-parsoid='{\"dsr\":[0,4,1,0]}'>t1<span typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\" \",\"isDisplayHack\":true,\"dsr\":[3,4,null,0]}'> </span></dt><dd data-parsoid='{\"stx\":\"row\",\"dsr\":[4,7,1,0]}'>d1</dd>\n<dt data-parsoid='{\"dsr\":[8,29,1,0]}'><dl data-parsoid='{\"dsr\":[9,29,0,0]}'><dt data-parsoid='{\"dsr\":[9,13,1,0]}'>t2<span typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\" \",\"isDisplayHack\":true,\"dsr\":[12,13,null,0]}'> </span></dt><dd data-parsoid='{\"stx\":\"row\",\"dsr\":[13,17,1,0]}'>:d2</dd>\n<dt data-parsoid='{\"dsr\":[18,29,2,0]}'><dl data-parsoid='{\"dsr\":[20,29,0,0]}'><dt data-parsoid='{\"dsr\":[20,24,1,0]}'>t3<span typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\" \",\"isDisplayHack\":true,\"dsr\":[23,24,null,0]}'> </span></dt><dd data-parsoid='{\"stx\":\"row\",\"dsr\":[24,29,1,0]}'>::d3</dd></dl></dt></dl></dt></dl>"); @@ -714,7 +713,7 @@ add("html2html", "nowiki 3", "\n<dl data-parsoid='{\"dsr\":[1,42,0,0]}'><dd data-parsoid='{\"dsr\":[1,23,1,0]}'> There is not nowiki.</dd>\n<dd data-parsoid='{\"dsr\":[24,42,1,0]}'> There is nowiki.</dd></dl>\n\n<ol data-parsoid='{\"dsr\":[44,85,0,0]}'><li data-parsoid='{\"dsr\":[44,66,1,0]}'> There is not nowiki.</li>\n<li data-parsoid='{\"dsr\":[67,85,1,0]}'> There is nowiki.</li></ol>\n\n<ul data-parsoid='{\"dsr\":[87,128,0,0]}'><li data-parsoid='{\"dsr\":[87,109,1,0]}'> There is not nowiki.</li>\n<li data-parsoid='{\"dsr\":[110,128,1,0]}'> There is nowiki.</li></ul>\n"); add("html2html", "Preformatted text", "<pre data-parsoid='{\"dsr\":[0,125,1,0]}'>This is some\nPreformatted text\nWith <i data-parsoid='{\"dsr\":[39,49,2,2]}'>italic</i>\nAnd <b data-parsoid='{\"dsr\":[55,65,3,3]}'>bold</b>\nAnd a <a href=\"/wiki/Main_Page\" title=\"Main Page\">link</a></pre>\n"); add("html2html", "<pre> with <nowiki> inside (compatibility with 1.6 and earlier)", "<pre data-parsoid='{\"dsr\":[0,35,1,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[1,35,8,9]}'><b>\n <cite>\n <em></span></pre>\n"); -add("html2html", "Bug 52763: Preformatted in <blockquote>", "<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[0,77,12,13]}'>\n Blah\n\n<table data-parsoid='{\"dsr\":[20,63,2,2]}'>\n\n<tbody data-parsoid='{\"dsr\":[24,61,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[24,59,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[24,59,1,0]}'>\n<pre data-parsoid='{\"dsr\":[26,59,1,0]}'>indented cell (no pre-wrapping!)</pre></td></tr>\n\n</tbody></table>\n</blockquote>\n"); +add("html2html", "Bug 52763: Preformatted in <blockquote>", "<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[0,77,12,13]}'>\n<p data-parsoid='{\"dsr\":[13,18,0,0]}'> Blah</p>\n\n<table data-parsoid='{\"dsr\":[20,63,2,2]}'>\n\n<tbody data-parsoid='{\"dsr\":[24,61,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[24,59,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[24,59,1,0]}'>\n<pre data-parsoid='{\"dsr\":[26,59,1,0]}'>indented cell (no pre-wrapping!)</pre></td></tr>\n\n</tbody></table>\n</blockquote>\n"); add("html2html", "<pre> with attributes (bug 3202)", "<pre data-parsoid='{\"dsr\":[0,24,1,0]}'>Bluescreen of WikiDeath</pre>\n"); add("html2html", "<pre> with width attribute (bug 3202)", "<pre data-parsoid='{\"dsr\":[0,22,1,0]}'>Narrow screen goodies</pre>\n"); add("html2html", "<pre> with forbidden attribute (bug 3202)", "<pre data-parsoid='{\"dsr\":[0,22,1,0]}'>Narrow screen goodies</pre>\n"); @@ -722,7 +721,7 @@ add("html2html", "<nowiki> inside <pre> (bug 13238)", "<pre data-parsoid='{\"dsr\":[0,15,1,0]}'><span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&lt;\",\"srcContent\":\"<\",\"dsr\":[1,5,null,null]}'><</span>nowiki<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&gt;\",\"srcContent\":\">\",\"dsr\":[11,15,null,null]}'>></span></pre>\n\n <p data-parsoid='{\"dsr\":[18,18,0,0]}'><br data-parsoid='{\"dsr\":[18,18,0,0]}'/></p>\n\n<pre data-parsoid='{\"dsr\":[20,53,1,0]}'><span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&lt;\",\"srcContent\":\"<\",\"dsr\":[21,25,null,null]}'><</span>nowiki<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&gt;\",\"srcContent\":\">\",\"dsr\":[31,35,null,null]}'>></span>Foo<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&lt;\",\"srcContent\":\"<\",\"dsr\":[38,42,null,null]}'><</span>/nowiki<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&gt;\",\"srcContent\":\">\",\"dsr\":[49,53,null,null]}'>></span></pre>\n"); add("html2html", "Empty pre; pre inside other HTML tags (bug 54946)", "<p data-parsoid='{\"dsr\":[0,1,0,0]}'>a</p>\n\n<div data-parsoid='{\"stx\":\"html\",\"dsr\":[3,20,5,6]}'>\n<pre data-parsoid='{\"dsr\":[9,13,1,0]}'>foo</pre>\n</div>\n \n"); add("html2html", "3a. Indent-Pre and block tags (single-line html)", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,18,8,9]}'> </span>a </p>\n\n<p data-parsoid='{\"dsr\":[22,46,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[22,40,8,9]}'> </span>foo \n </p>b <div data-parsoid='{\"stx\":\"html\",\"dsr\":[48,64,5,6]}'> foo </div>\n c <blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[68,98,12,13]}'> foo </blockquote>\n<pre data-parsoid='{\"dsr\":[99,118,1,0]}'><span data-parsoid='{\"stx\":\"html\",\"dsr\":[100,118,6,7]}'> foo </span></pre>\n"); -add("html2html", "3b. Indent-Pre and block tags (pre-content on separate line)", "\n<p data-parsoid='{\"dsr\":[1,22,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[1,19,8,9]}'> </span>foo</p>\n\n<div data-parsoid='{\"stx\":\"html\",\"dsr\":[24,42,5,6]}'>\n<pre data-parsoid='{\"dsr\":[30,34,1,0]}'>foo</pre>\n\n</div>\n<center data-parsoid='{\"stx\":\"html\",\"dsr\":[43,67,8,9]}'>\n<pre data-parsoid='{\"dsr\":[52,56,1,0]}'>foo</pre>\n\n</center>\n<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[68,100,12,13]}'>\n foo\n\n</blockquote>\n<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[101,133,12,13]}'>\n foo\n\n</blockquote>\n<table data-parsoid='{\"dsr\":[134,147,2,2]}'>\n<tbody data-parsoid='{\"dsr\":[137,145,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[137,143,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[137,143,1,0]}'>\n<pre data-parsoid='{\"dsr\":[139,143,1,0]}'>foo</pre></td></tr>\n\n</tbody></table>\n<ul data-parsoid='{\"dsr\":[148,154,0,0]}'><li data-parsoid='{\"dsr\":[148,154,1,0]}'> foo</li></ul>\n"); +add("html2html", "3b. Indent-Pre and block tags (pre-content on separate line)", "\n<p data-parsoid='{\"dsr\":[1,22,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[1,19,8,9]}'> </span>foo</p>\n\n<div data-parsoid='{\"stx\":\"html\",\"dsr\":[24,42,5,6]}'>\n<pre data-parsoid='{\"dsr\":[30,34,1,0]}'>foo</pre>\n\n</div>\n<center data-parsoid='{\"stx\":\"html\",\"dsr\":[43,67,8,9]}'>\n<pre data-parsoid='{\"dsr\":[52,56,1,0]}'>foo</pre>\n\n</center>\n<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[68,100,12,13]}'>\n<p data-parsoid='{\"dsr\":[81,85,0,0]}'> foo</p>\n\n</blockquote>\n<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[101,133,12,13]}'>\n<p data-parsoid='{\"dsr\":[114,118,0,0]}'> foo</p>\n\n</blockquote>\n<table data-parsoid='{\"dsr\":[134,147,2,2]}'>\n<tbody data-parsoid='{\"dsr\":[137,145,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[137,143,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[137,143,1,0]}'>\n<pre data-parsoid='{\"dsr\":[139,143,1,0]}'>foo</pre></td></tr>\n\n</tbody></table>\n<ul data-parsoid='{\"dsr\":[148,154,0,0]}'><li data-parsoid='{\"dsr\":[148,154,1,0]}'> foo</li></ul>\n"); add("html2html", "4. Multiple spaces at start-of-line", "<p data-parsoid='{\"dsr\":[0,22,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,18,8,9]}'> </span>foo </p>\n<pre data-parsoid='{\"dsr\":[23,30,1,0]}'> foo</pre>\n\n<table data-parsoid='{\"dsr\":[32,43,2,2]}'>\n\n<tbody data-parsoid='{\"dsr\":[36,41,0,0]}'><tr data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[36,40,0,0]}'><td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[36,40,1,0]}'>foo</td></tr>\n</tbody></table>\n"); add("html2html", "HTML-pre: 1. embedded newlines", "<pre data-parsoid='{\"dsr\":[0,4,1,0]}'>foo</pre>\n\n<pre data-parsoid='{\"dsr\":[6,10,1,0]}'>foo</pre>\n\n <p data-parsoid='{\"dsr\":[13,13,0,0]}'><br data-parsoid='{\"dsr\":[13,13,0,0]}'/></p>\n<pre data-parsoid='{\"dsr\":[14,18,1,0]}'>foo</pre>\n\n <p data-parsoid='{\"dsr\":[21,21,0,0]}'><br data-parsoid='{\"dsr\":[21,21,0,0]}'/></p>\n \n<pre data-parsoid='{\"dsr\":[24,28,1,0]}'>foo</pre>\n"); add("html2html", "HTML-pre: 3: other wikitext", "<pre data-parsoid='{\"dsr\":[0,71,1,0]}'>* foo\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[8,71,8,9]}'># bar\n = no-h =\n '' no-italic ''\n [[ NoLink ]]</span></pre>\n"); @@ -1302,6 +1301,7 @@ add("html2wt", "3a. Indent-Pre and block tags (single-line html)", "<nowiki> </nowiki>a \n\n<nowiki> </nowiki>foo \n b <div> foo </div>\n c <blockquote> foo </blockquote>\n <span> foo </span>\n"); add("html2wt", "3c. Indent-Pre and block tags (multi-line html)", " a <span>foo</span>\n\n b <div> foo </div>\n"); add("html2wt", "3b. Indent-Pre and block tags (pre-content on separate line)", "\n<nowiki> </nowiki>foo\n\n<div>\n foo\n\n</div>\n<center>\n foo\n\n</center>\n<blockquote>\n foo\n\n</blockquote>\n<blockquote>\n foo\n\n</blockquote>\n{|\n|\n foo\n\n|}\n* foo\n"); +add("html2wt", "Render paragraphs when indent-pre is suppressed in blocklevels", "<blockquote>\n foo\n\n bar\n\n</blockquote>\n"); add("html2wt", "4. Multiple spaces at start-of-line", "<nowiki> </nowiki>foo \n foo\n\n{|\n\n|foo\n|}\n"); add("html2wt", "5a. White-space in indent-pre", " a<br>\n \n \n b\n"); add("html2wt", "6. Pre-blocks should extend across lines with leading WS even when there is no wrappable content", " a\n \n b\n\n c\n \n\nd\n"); diff --git a/tests/parserTests.txt b/tests/parserTests.txt index 6d02be9..c9003db 100644 --- a/tests/parserTests.txt +++ b/tests/parserTests.txt @@ -2232,6 +2232,23 @@ !!end !!test +Render paragraphs when indent-pre is suppressed in blocklevels +!!input +<blockquote> + foo + + bar +</blockquote> +!! result +<blockquote> +<p> foo +</p><p> bar +</p> +</blockquote> + +!!end + +!!test 4. Multiple spaces at start-of-line !!input <p> foo </p> -- To view, visit https://gerrit.wikimedia.org/r/110651 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ibd04a36d5f8e4a0432bd6eb22942af61c239fa3f Gerrit-PatchSet: 3 Gerrit-Project: mediawiki/services/parsoid Gerrit-Branch: master Gerrit-Owner: Arlolra <abrea...@wikimedia.org> Gerrit-Reviewer: Arlolra <abrea...@wikimedia.org> Gerrit-Reviewer: GWicke <gwi...@wikimedia.org> Gerrit-Reviewer: Subramanya Sastry <ssas...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits