Subramanya Sastry has uploaded a new change for review. https://gerrit.wikimedia.org/r/216136
Change subject: WIP: Suppress newlines before category links ...................................................................... WIP: Suppress newlines before category links * itwiki:Melampyrum now RTs without semantic errors because the duplicate args category links no longer ends up on a new line. * http://localhost:8000/enwiki/Taiko?oldid=665356368 now renders as expected as well. * enwiki:User:SSastry_%28WMF%29/Category_Test now renders more accurately than before. The list tests will not RT back the newlines because of newline suppression in list context -- RTing of that test case will not be supported. * We continue to treat category links as SOL-transparent, because that is their "true nature" in scenarios where newlines aren't stripped. * TODO: Need some sanity check. * TODO: Parser tests need updating. Change-Id: I507dcefcca5a4ee22fb9f9bf0cfe678f14d64991 --- M lib/ext.core.TokenStreamPatcher.js M tests/parserTests-blacklist.js 2 files changed, 36 insertions(+), 8 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid refs/changes/36/216136/1 diff --git a/lib/ext.core.TokenStreamPatcher.js b/lib/ext.core.TokenStreamPatcher.js index 626841e..d119728 100644 --- a/lib/ext.core.TokenStreamPatcher.js +++ b/lib/ext.core.TokenStreamPatcher.js @@ -18,6 +18,7 @@ // define some constructor shortcuts var CommentTk = defines.CommentTk; +var NlTk = defines.NlTk; var TagTk = defines.TagTk; var SelfclosingTagTk = defines.SelfclosingTagTk; var EndTagTk = defines.EndTagTk; @@ -34,8 +35,8 @@ // FIXME: At this point, it probably deserves a refactor. coreutil.inherits(TokenStreamPatcher, TemplateHandler); -TokenStreamPatcher.prototype.anyRank = 2.001; -TokenStreamPatcher.prototype.nlRank = 2.002; +TokenStreamPatcher.prototype.nlRank = 2.001; +TokenStreamPatcher.prototype.anyRank = 2.002; TokenStreamPatcher.prototype.endRank = 2.003; TokenStreamPatcher.prototype.register = function() { @@ -56,12 +57,15 @@ this.wikiTableNesting = 0; this.srcOffset = 0; this.sol = true; + this.nlBuffer = []; }; TokenStreamPatcher.prototype.onNewline = function(token) { + this.manager.env.log("trace/tsp", this.manager.pipelineId, function() { return JSON.stringify(token); } ); this.srcOffset = (token.dataAttribs.tsr || [null, null])[1]; this.sol = true; - return {tokens: [token]}; + this.nlBuffer.push(token); + return {tokens: []}; }; TokenStreamPatcher.prototype.onEnd = function(token) { @@ -166,6 +170,24 @@ case SelfclosingTagTk: if (token.name === "meta" && token.dataAttribs.stx !== "html") { this.srcOffset = (token.dataAttribs.tsr || [null, null])[1]; + } else if (token.name === 'link' && token.getAttribute('rel') === 'mw:PageProp/Category') { + // Replace buffered newlines with a placeholder for rt-ing + if (this.nlBuffer.length > 0) { + var firstNL = this.nlBuffer[0]; + var lastNL = this.nlBuffer.last(); + if (firstNL.dataAttribs.tsr && lastNL.dataAttribs.tsr) { + var tsr0 = firstNL.dataAttribs.tsr[0]; + var tsr1 = lastNL.dataAttribs.tsr[1]; + tokens.unshift(new SelfclosingTagTk('meta', + [new KV('typeof', 'mw:Placeholder')], + { + src: this.manager.env.page.src.substring(tsr0, tsr1), + tsr: [tsr0, tsr1] + })); + } + this.nlBuffer = []; + } + this.sol = false; } else { this.clearSOL(); } @@ -203,6 +225,11 @@ break; } + // Emit buffered newlines + if (this.nlBuffer.length > 0) { + tokens = this.nlBuffer.concat(tokens); + this.nlBuffer = []; + } return {tokens: tokens}; }; diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js index a00ea55..b10826a 100644 --- a/tests/parserTests-blacklist.js +++ b/tests/parserTests-blacklist.js @@ -44,6 +44,7 @@ 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-parsoid='{\"dsr\":[3,12,null,null],\"pi\":[[]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"blank\",\"href\":\"./Template:Blank\"},\"params\":{},\"i\":0}}]}'></span> <!----> \nb</p>"); add("wt2html", "Block tag on one line (<blockquote>)", "<p data-parsoid='{\"dsr\":[0,2,0,0]}'>a </p><blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[2,30,12,13]}'>foo</blockquote>\n\n<p data-parsoid='{\"dsr\":[32,33,0,0]}'>b</p>"); add("wt2html", "Block tag on both lines (<blockquote>)", "<p data-parsoid='{\"dsr\":[0,2,0,0]}'>a </p><blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[2,30,12,13]}'>foo</blockquote>\n\n<p data-parsoid='{\"dsr\":[32,34,0,0]}'>b </p><blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[34,62,12,13]}'>foo</blockquote>"); +add("wt2html", "1. P-wrapping should leave sol-transparent tags outside p-tags where possible", "<p data-parsoid='{\"dsr\":[0,2,0,0]}'>a </p><link rel=\"mw:PageProp/Category\" href=\"./Category:A1\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:A1\"},\"sa\":{\"href\":\"Category:A1\"},\"dsr\":[2,17,null,null]}'/> <link rel=\"mw:PageProp/Category\" href=\"./Category:A2\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:A2\"},\"sa\":{\"href\":\"Category:A2\"},\"dsr\":[18,33,null,null]}'/><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[33,34,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:A3\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:A3\"},\"sa\":{\"href\":\"Category:A3\"},\"dsr\":[34,49,null,null]}'/><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[49,50,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:A4\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:A4\"},\"sa\":{\"href\":\"Category:A4\"},\"dsr\":[50,65,null,null]}'/>"); add("wt2html", "<pre> with <nowiki> inside (compatibility with 1.6 and earlier)", "<pre data-parsoid='{\"stx\":\"html\",\"dsr\":[0,45,5,6]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[5,39,8,9]}'>\n<b>\n<cite>\n<em>\n</span></pre>"); 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", "Bug 15491: <ins>/<del> in blockquote (2)", "<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[0,64,12,13]}'>Foo <del data-parsoid='{\"stx\":\"html\",\"dsr\":[16,30,5,6]}'>bar</del> <ins data-parsoid='{\"stx\":\"html\",\"dsr\":[31,45,5,6]}'>baz</ins> quux\n</blockquote>"); @@ -186,7 +187,8 @@ add("wt2html", "Category with template", "<link typeof=\"mw:ExpandedAttrs\" about=\"#mwt2\" rel=\"mw:PageProp/Category\" href=\"./Category:Foo\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:{{echo|Foo}}\"},\"dsr\":[0,25,null,null]}' data-mw='{\"attribs\":[[{\"txt\":\"href\"},{\"html\":\"Category:<span about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" data-parsoid=\\\"{&quot;pi&quot;:[[{&quot;k&quot;:&quot;1&quot;,&quot;spc&quot;:[&quot;&quot;,&quot;&quot;,&quot;&quot;,&quot;&quot;]}]],&quot;dsr&quot;:[11,23,null,null]}\\\" data-mw=\\\"{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;Foo&quot;}},&quot;i&quot;:0}}]}\\\">Foo</span>\"}]]}'/>"); add("wt2html", "Category with template in sort key", "<link rel=\"mw:PageProp/Category\" href=\"./Category:Foo#Bar\" about=\"#mwt2\" typeof=\"mw:ExpandedAttrs\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[0,29,null,null]}' data-mw='{\"attribs\":[[{\"txt\":\"mw:sortKey\"},{\"html\":\"<span about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" data-parsoid=\\\"{&quot;pi&quot;:[[{&quot;k&quot;:&quot;1&quot;,&quot;spc&quot;:[&quot;&quot;,&quot;&quot;,&quot;&quot;,&quot;&quot;]}]],&quot;dsr&quot;:[15,27,null,null]}\\\" data-mw=\\\"{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;Bar&quot;}},&quot;i&quot;:0}}]}\\\">Bar</span>\"}]]}'/>"); add("wt2html", "Category with template in sort key and title", "<link typeof=\"mw:ExpandedAttrs\" about=\"#mwt4\" rel=\"mw:PageProp/Category\" href=\"./Category:Foo#Bar\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:{{echo|Foo}}\"},\"dsr\":[0,38,null,null]}' data-mw='{\"attribs\":[[{\"txt\":\"href\"},{\"html\":\"Category:<span about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" data-parsoid=\\\"{&quot;pi&quot;:[[{&quot;k&quot;:&quot;1&quot;,&quot;spc&quot;:[&quot;&quot;,&quot;&quot;,&quot;&quot;,&quot;&quot;]}]],&quot;dsr&quot;:[11,23,null,null]}\\\" data-mw=\\\"{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;Foo&quot;}},&quot;i&quot;:0}}]}\\\">Foo</span>\"}],[{\"txt\":\"mw:sortKey\"},{\"html\":\"<span about=\\\"#mwt2\\\" typeof=\\\"mw:Transclusion\\\" data-parsoid=\\\"{&quot;pi&quot;:[[{&quot;k&quot;:&quot;1&quot;,&quot;spc&quot;:[&quot;&quot;,&quot;&quot;,&quot;&quot;,&quot;&quot;]}]],&quot;dsr&quot;:[24,36,null,null]}\\\" data-mw=\\\"{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;Bar&quot;}},&quot;i&quot;:0}}]}\\\">Bar</span>\"}]]}'/>"); -add("wt2html", "Category / paragraph interactions", "<p data-parsoid='{\"dsr\":[0,24,0,0]}'>Foo <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[4,20,null,null]}'/> Bar</p>\n\n<p data-parsoid='{\"dsr\":[26,50,0,0]}'>Foo <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[30,46,null,null]}'/>\nBar</p>\n\n<p data-parsoid='{\"dsr\":[52,76,0,0]}'>Foo\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[56,72,null,null]}'/>\nBar</p>\n\n<p data-parsoid='{\"dsr\":[78,81,0,0]}'>Foo</p>\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[82,98,null,null]}'/><pre data-parsoid='{\"dsr\":[98,102,1,0]}'>Bar</pre>\n\n<p data-parsoid='{\"dsr\":[104,163,0,0]}'>Foo\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[108,124,null,null]}'/>\n <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[126,142,null,null]}'/>\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[143,159,null,null]}'/>\nBar</p>\n\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[165,181,null,null]}'/>\n <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[183,199,null,null]}'/>\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[200,216,null,null]}'/>\n\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[218,234,null,null]}'/>\n <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[236,261,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"[[Category:Baz]]\"}},\"i\":0}}]}'/>\n<link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[262,278,null,null]}'/>"); +add("wt2html", "Category / paragraph interactions", "<p data-parsoid='{\"dsr\":[0,24,0,0]}'>Foo <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[4,20,null,null]}'/> Bar</p>\n\n<p data-parsoid='{\"dsr\":[26,50,0,0]}'>Foo <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[30,46,null,null]}'/>\nBar</p>\n\n<p data-parsoid='{\"dsr\":[52,76,0,0]}'>Foo<meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[55,56,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[56,72,null,null]}'/>\nBar</p>\n\n<p data-parsoid='{\"dsr\":[78,102,0,0]}'>Foo<meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[81,82,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[82,98,null,null]}'/> Bar</p>\n\n<p data-parsoid='{\"dsr\":[104,261,0,0]}'>Foo<meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[107,108,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[108,124,null,null]}'/>\n <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[126,142,null,null]}'/><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[142,143,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[143,159,null,null]}'/>\nBar<meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\\n\",\"dsr\":[163,165,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[165,181,null,null]}'/>\n <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[183,199,null,null]}'/><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[199,200,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[200,216,null,null]}'/><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\\n\",\"dsr\":[216,218,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[218,234,null,null]}'/>\n <link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[236,261,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"[[Category:Baz]]\"}},\"i\":0}}]}'/></p><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[261,262,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Baz\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Baz\"},\"sa\":{\"href\":\"Category:Baz\"},\"dsr\":[262,278,null,null]}'/>"); +add("wt2html", "Parsoid: Serialize a genuine category link without colon escape", "<link rel=\"mw:PageProp/Category\" href=\"./Category:Foo\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[0,16,null,null]}'/><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[16,17,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Foo#Bar\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[17,37,null,null]}'/>"); add("wt2html", "Short headings with trailing space should match behavior of Parser::doHeadings (bug 19910)", "<p data-parsoid='{\"dsr\":[0,100,0,0]}'>=== \nThe line above must have a trailing space!\n=== <!--\n--> <!-- -->\nBut just in case it doesn't...</p>"); add("wt2html", "Header with space, plus and underscore as entity", "<p data-parsoid='{\"dsr\":[0,34,0,0]}'>Id should not contain + for spaces</p>\n\n<h2 data-parsoid='{\"dsr\":[36,60,2,2]}'> Space between Text </h2>\n<p data-parsoid='{\"dsr\":[61,70,0,0]}'>section 1</p>\n\n<h2 data-parsoid='{\"dsr\":[72,111,2,2]}'> Space-Entity<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#32;\",\"srcContent\":\" \",\"dsr\":[87,92,null,null]}'> </span>between<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#32;\",\"srcContent\":\" \",\"dsr\":[99,104,null,null]}'> </span>Text </h2>\n<p data-parsoid='{\"dsr\":[112,121,0,0]}'>section 2</p>\n\n<h2 data-parsoid='{\"dsr\":[123,146,2,2]}'> Plus+between+Text </h2>\n<p data-parsoid='{\"dsr\":[147,156,0,0]}'>section 3</p>\n\n<h2 data-parsoid='{\"dsr\":[158,196,2,2]}'> Plus-Entity<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#43;\",\"srcContent\":\"+\",\"dsr\":[172,177,null,null]}'>+</span>between<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#43;\",\"srcContent\":\"+\",\"dsr\":[184,189,null,null]}'>+</span>Text </h2>\n<p data-parsoid='{\"dsr\":[197,206,0,0]}'>section 4</p>\n\n<h2 data-parsoid='{\"dsr\":[208,237,2,2]}'> Underscore_between_Text </h2>\n<p data-parsoid='{\"dsr\":[238,247,0,0]}'>section 5</p>\n\n<h2 data-parsoid='{\"dsr\":[249,293,2,2]}'> Underscore-Entity<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#95;\",\"srcContent\":\"_\",\"dsr\":[269,274,null,null]}'>_</span>between<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#95;\",\"srcContent\":\"_\",\"dsr\":[281,286,null,null]}'>_</span>Text </h2>\n<p data-parsoid='{\"dsr\":[294,303,0,0]}'>section 6</p>\n\n<p data-parsoid='{\"dsr\":[305,501,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Main%20Page#Space_between_Text\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main%20Page#Space_between_Text\"},\"sa\":{\"href\":\"#Space between Text\"},\"dsr\":[305,328,2,2]}'>#Space between Text</a>\n<a rel=\"mw:WikiLink\" href=\"./Main%20Page#Space-Entity_between_Text\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main%20Page#Space-Entity_between_Text\"},\"sa\":{\"href\":\"#Space-Entity&#32;between&#32;Text\"},\"dsr\":[329,367,2,2]}'>#Space-Entity between Text</a>\n<a rel=\"mw:WikiLink\" href=\"./Main%20Page#Plus+between+Text\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main%20Page#Plus+between+Text\"},\"sa\":{\"href\":\"#Plus+between+Text\"},\"dsr\":[368,390,2,2]}'>#Plus+between+Text</a>\n<a rel=\"mw:WikiLink\" href=\"./Main%20Page#Plus-Entity+between+Text\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main%20Page#Plus-Entity+between+Text\"},\"sa\":{\"href\":\"#Plus-Entity&#43;between&#43;Text\"},\"dsr\":[391,428,2,2]}'>#Plus-Entity+between+Text</a>\n<a rel=\"mw:WikiLink\" href=\"./Main%20Page#Underscore_between_Text\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main%20Page#Underscore_between_Text\"},\"sa\":{\"href\":\"#Underscore_between_Text\"},\"dsr\":[429,457,2,2]}'>#Underscore_between_Text</a>\n<a rel=\"mw:WikiLink\" href=\"./Main%20Page#Underscore-Entity_between_Text\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main%20Page#Underscore-Entity_between_Text\"},\"sa\":{\"href\":\"#Underscore-Entity&#95;between&#95;Text\"},\"dsr\":[458,501,2,2]}'>#Underscore-Entity_between_Text</a></p>"); add("wt2html", "Single-line or multiline-comments can follow headings", "<h2 data-parsoid='{\"dsr\":[0,7,2,2]}'>foo</h2><!---->\n<h2 data-parsoid='{\"dsr\":[15,22,2,2]}'>bar</h2><!--c1-->\n<h2 data-parsoid='{\"dsr\":[32,39,2,2]}'>baz</h2><!--\nc2\nc3-->"); @@ -695,7 +697,8 @@ add("html2html", "Category with template", "<p data-parsoid='{\"dsr\":[0,42,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,42,8,9]}'>[[Category:{{echo|Foo}}]]</span></p>"); add("html2html", "Category with template in sort key", "<p data-parsoid='{\"dsr\":[0,46,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,46,8,9]}'>[[Category:Foo|{{echo|Bar}}]]</span></p>"); add("html2html", "Category with template in sort key and title", "<p data-parsoid='{\"dsr\":[0,55,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,55,8,9]}'>[[Category:{{echo|Foo}}|{{echo|Bar}}]]</span></p>"); -add("html2html", "Parsoid: Link prefix/suffixes aren't applied to category links", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'>x\n<link rel=\"mw:PageProp/Category\" href=\"./Flokkur:Foo\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Flokkur:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[2,18,null,null]}'/>\ny</p>\n"); +add("html2html", "Parsoid: Link prefix/suffixes aren't applied to category links", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'>x<meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[1,2,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Flokkur:Foo\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Flokkur:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[2,18,null,null]}'/>\ny</p>\n"); +add("html2html", "Parsoid: Serialize a genuine category link without colon escape", "<link rel=\"mw:PageProp/Category\" href=\"./Category:Foo\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[0,16,null,null]}'/><meta typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"\\n\",\"dsr\":[16,17,null,null]}'/><link rel=\"mw:PageProp/Category\" href=\"./Category:Foo#Bar\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[17,37,null,null]}'/>"); add("html2html", "Section headings with TOC", "<div id=\"toc\" class=\"toc\" data-parsoid='{\"stx\":\"html\",\"dsr\":[0,691,26,6]}'><div id=\"toctitle\" data-parsoid='{\"stx\":\"html\",\"dsr\":[26,67,19,6]}'>\n<h2 data-parsoid='{\"dsr\":[46,60,2,2]}'> Contents </h2>\n</div>\n\n<ul data-parsoid='{\"dsr\":[69,159,0,0]}'><li data-parsoid='{\"dsr\":[69,159,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Headline_1\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Headline_1\"},\"sa\":{\"href\":\"#Headline_1\"},\"dsr\":[71,159,14,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[85,117,24,7]}'>1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[118,157,22,7]}'>Headline 1</span></a></li></ul>\n\n<ul data-parsoid='{\"dsr\":[161,260,0,0]}'><li data-parsoid='{\"dsr\":[161,260,1,0]}'><ul data-parsoid='{\"dsr\":[162,260,0,0]}'><li data-parsoid='{\"dsr\":[162,260,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Subheadline_1\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Subheadline_1\"},\"sa\":{\"href\":\"#Subheadline_1\"},\"dsr\":[164,260,17,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[181,215,24,7]}'>1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[216,258,22,7]}'>Subheadline 1</span></a></li></ul></li></ul>\n\n<ul data-parsoid='{\"dsr\":[262,370,0,0]}'><li data-parsoid='{\"dsr\":[262,370,1,0]}'><ul data-parsoid='{\"dsr\":[263,370,0,0]}'><li data-parsoid='{\"dsr\":[263,370,1,0]}'><ul data-parsoid='{\"dsr\":[264,370,0,0]}'><li data-parsoid='{\"dsr\":[264,370,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Skipping_a_level\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Skipping_a_level\"},\"sa\":{\"href\":\"#Skipping_a_level\"},\"dsr\":[266,370,20,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[286,322,24,7]}'>1.1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[323,368,22,7]}'>Skipping a level</span></a></li></ul></li></ul></li></ul>\n\n<ul data-parsoid='{\"dsr\":[372,576,0,0]}'><li data-parsoid='{\"dsr\":[372,485,1,0]}'><ul data-parsoid='{\"dsr\":[373,485,0,0]}'><li data-parsoid='{\"dsr\":[373,485,1,0]}'><ul data-parsoid='{\"dsr\":[374,485,0,0]}'><li data-parsoid='{\"dsr\":[374,485,1,0]}'><ul data-parsoid='{\"dsr\":[375,485,0,0]}'><li data-parsoid='{\"dsr\":[375,485,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Skipping_a_level_2\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Skipping_a_level_2\"},\"sa\":{\"href\":\"#Skipping_a_level_2\"},\"dsr\":[377,485,22,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[399,437,24,7]}'>1.1.1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[438,483,22,7]}'>Skipping a level</span></a></li></ul></li></ul></li></ul></li>\n<li data-parsoid='{\"dsr\":[486,576,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Headline_2\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Headline_2\"},\"sa\":{\"href\":\"#Headline_2\"},\"dsr\":[488,576,14,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[502,534,24,7]}'>2</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[535,574,22,7]}'>Headline 2</span></a></li></ul>\n\n<ul data-parsoid='{\"dsr\":[578,683,0,0]}'><li data-parsoid='{\"dsr\":[578,683,1,0]}'><ul data-parsoid='{\"dsr\":[579,683,0,0]}'><li data-parsoid='{\"dsr\":[579,683,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Another_headline\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Another_headline\"},\"sa\":{\"href\":\"#Another_headline\"},\"dsr\":[581,683,20,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[601,635,24,7]}'>2.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[636,681,22,7]}'>Another headline</span></a></li></ul></li></ul>\n\n</div>\n\n<h2 data-parsoid='{\"dsr\":[693,709,2,2]}'> Headline 1 </h2>\n\n<h3 data-parsoid='{\"dsr\":[711,732,3,3]}'> Subheadline 1 </h3>\n\n<h5 data-parsoid='{\"dsr\":[734,762,5,5]}'> Skipping a level </h5>\n\n<h6 data-parsoid='{\"dsr\":[764,794,6,6]}'> Skipping a level </h6>\n\n<h2 data-parsoid='{\"dsr\":[796,812,2,2]}'> Headline 2 </h2>\n<p data-parsoid='{\"dsr\":[813,822,0,0]}'>Some text</p>\n\n<h3 data-parsoid='{\"dsr\":[824,848,3,3]}'> Another headline </h3>\n"); add("html2html", "TOC anchors don't collide", "<div id=\"toc\" class=\"toc\" data-parsoid='{\"stx\":\"html\",\"dsr\":[0,436,26,6]}'><div id=\"toctitle\" data-parsoid='{\"stx\":\"html\",\"dsr\":[26,67,19,6]}'>\n<h2 data-parsoid='{\"dsr\":[46,60,2,2]}'> Contents </h2>\n</div>\n\n<ul data-parsoid='{\"dsr\":[69,428,0,0]}'><li data-parsoid='{\"dsr\":[69,159,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Headline_2\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Headline_2\"},\"sa\":{\"href\":\"#Headline_2\"},\"dsr\":[71,159,14,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[85,117,24,7]}'>1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[118,157,22,7]}'>Headline 2</span></a></li>\n<li data-parsoid='{\"dsr\":[160,246,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Headline\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Headline\"},\"sa\":{\"href\":\"#Headline\"},\"dsr\":[162,246,12,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[174,206,24,7]}'>2</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[207,244,22,7]}'>Headline</span></a></li>\n<li data-parsoid='{\"dsr\":[247,339,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Headline_2_2\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Headline_2_2\"},\"sa\":{\"href\":\"#Headline_2_2\"},\"dsr\":[249,339,16,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[265,297,24,7]}'>3</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[298,337,22,7]}'>Headline 2</span></a></li>\n<li data-parsoid='{\"dsr\":[340,428,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Headline_3\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Headline_3\"},\"sa\":{\"href\":\"#Headline_3\"},\"dsr\":[342,428,14,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[356,388,24,7]}'>4</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[389,426,22,7]}'>Headline</span></a></li></ul>\n\n</div>\n\n<h2 data-parsoid='{\"dsr\":[438,454,2,2]}'> Headline 2 </h2>\n\n<h2 data-parsoid='{\"dsr\":[456,470,2,2]}'> Headline </h2>\n\n<h2 data-parsoid='{\"dsr\":[472,488,2,2]}'> Headline 2 </h2>\n\n<h2 data-parsoid='{\"dsr\":[490,504,2,2]}'> Headline </h2>\n"); add("html2html", "Handling of sections up to level 6 and beyond", "<div id=\"toc\" class=\"toc\" data-parsoid='{\"stx\":\"html\",\"dsr\":[0,1286,26,6]}'><div id=\"toctitle\" data-parsoid='{\"stx\":\"html\",\"dsr\":[26,67,19,6]}'>\n<h2 data-parsoid='{\"dsr\":[46,60,2,2]}'> Contents </h2>\n</div>\n\n<ul data-parsoid='{\"dsr\":[69,169,0,0]}'><li data-parsoid='{\"dsr\":[69,169,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Level_1_Heading\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Level_1_Heading\"},\"sa\":{\"href\":\"#Level_1_Heading\"},\"dsr\":[71,169,19,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[90,122,24,7]}'>1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[123,167,22,7]}'>Level 1 Heading</span></a></li></ul>\n\n<ul data-parsoid='{\"dsr\":[171,274,0,0]}'><li data-parsoid='{\"dsr\":[171,274,1,0]}'><ul data-parsoid='{\"dsr\":[172,274,0,0]}'><li data-parsoid='{\"dsr\":[172,274,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Level_2_Heading\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Level_2_Heading\"},\"sa\":{\"href\":\"#Level_2_Heading\"},\"dsr\":[174,274,19,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[193,227,24,7]}'>1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[228,272,22,7]}'>Level 2 Heading</span></a></li></ul></li></ul>\n\n<ul data-parsoid='{\"dsr\":[276,382,0,0]}'><li data-parsoid='{\"dsr\":[276,382,1,0]}'><ul data-parsoid='{\"dsr\":[277,382,0,0]}'><li data-parsoid='{\"dsr\":[277,382,1,0]}'><ul data-parsoid='{\"dsr\":[278,382,0,0]}'><li data-parsoid='{\"dsr\":[278,382,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Level_3_Heading\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Level_3_Heading\"},\"sa\":{\"href\":\"#Level_3_Heading\"},\"dsr\":[280,382,19,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[299,335,24,7]}'>1.1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[336,380,22,7]}'>Level 3 Heading</span></a></li></ul></li></ul></li></ul>\n\n<ul data-parsoid='{\"dsr\":[384,493,0,0]}'><li data-parsoid='{\"dsr\":[384,493,1,0]}'><ul data-parsoid='{\"dsr\":[385,493,0,0]}'><li data-parsoid='{\"dsr\":[385,493,1,0]}'><ul data-parsoid='{\"dsr\":[386,493,0,0]}'><li data-parsoid='{\"dsr\":[386,493,1,0]}'><ul data-parsoid='{\"dsr\":[387,493,0,0]}'><li data-parsoid='{\"dsr\":[387,493,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Level_4_Heading\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Level_4_Heading\"},\"sa\":{\"href\":\"#Level_4_Heading\"},\"dsr\":[389,493,19,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[408,446,24,7]}'>1.1.1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[447,491,22,7]}'>Level 4 Heading</span></a></li></ul></li></ul></li></ul></li></ul>\n\n<ul data-parsoid='{\"dsr\":[495,607,0,0]}'><li data-parsoid='{\"dsr\":[495,607,1,0]}'><ul data-parsoid='{\"dsr\":[496,607,0,0]}'><li data-parsoid='{\"dsr\":[496,607,1,0]}'><ul data-parsoid='{\"dsr\":[497,607,0,0]}'><li data-parsoid='{\"dsr\":[497,607,1,0]}'><ul data-parsoid='{\"dsr\":[498,607,0,0]}'><li data-parsoid='{\"dsr\":[498,607,1,0]}'><ul data-parsoid='{\"dsr\":[499,607,0,0]}'><li data-parsoid='{\"dsr\":[499,607,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Level_5_Heading\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Level_5_Heading\"},\"sa\":{\"href\":\"#Level_5_Heading\"},\"dsr\":[501,607,19,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[520,560,24,7]}'>1.1.1.1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[561,605,22,7]}'>Level 5 Heading</span></a></li></ul></li></ul></li></ul></li></ul></li></ul>\n\n<ul data-parsoid='{\"dsr\":[609,1278,0,0]}'><li data-parsoid='{\"dsr\":[609,1278,1,0]}'><ul data-parsoid='{\"dsr\":[610,1278,0,0]}'><li data-parsoid='{\"dsr\":[610,1278,1,0]}'><ul data-parsoid='{\"dsr\":[611,1278,0,0]}'><li data-parsoid='{\"dsr\":[611,1278,1,0]}'><ul data-parsoid='{\"dsr\":[612,1278,0,0]}'><li data-parsoid='{\"dsr\":[612,1278,1,0]}'><ul data-parsoid='{\"dsr\":[613,1278,0,0]}'><li data-parsoid='{\"dsr\":[613,1278,1,0]}'><ul data-parsoid='{\"dsr\":[614,1278,0,0]}'><li data-parsoid='{\"dsr\":[614,724,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#Level_6_Heading\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#Level_6_Heading\"},\"sa\":{\"href\":\"#Level_6_Heading\"},\"dsr\":[616,724,19,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[635,677,24,7]}'>1.1.1.1.1.1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[678,722,22,7]}'>Level 6 Heading</span></a></li>\n<li data-parsoid='{\"dsr\":[725,850,6,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#.3D_Level_7_Heading.3D\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#.3D_Level_7_Heading.3D\"},\"sa\":{\"href\":\"#.3D_Level_7_Heading.3D\"},\"dsr\":[732,850,26,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[758,800,24,7]}'>1.1.1.1.1.2</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[801,848,22,7]}'>= Level 7 Heading=</span></a></li>\n<li data-parsoid='{\"dsr\":[851,984,6,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#.3D.3D_Level_8_Heading.3D.3D\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#.3D.3D_Level_8_Heading.3D.3D\"},\"sa\":{\"href\":\"#.3D.3D_Level_8_Heading.3D.3D\"},\"dsr\":[858,984,32,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[890,932,24,7]}'>1.1.1.1.1.3</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[933,982,22,7]}'>== Level 8 Heading==</span></a></li>\n<li data-parsoid='{\"dsr\":[985,1126,6,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#.3D.3D.3D_Level_9_Heading.3D.3D.3D\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#.3D.3D.3D_Level_9_Heading.3D.3D.3D\"},\"sa\":{\"href\":\"#.3D.3D.3D_Level_9_Heading.3D.3D.3D\"},\"dsr\":[992,1126,38,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[1030,1072,24,7]}'>1.1.1.1.1.4</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[1073,1124,22,7]}'>=== Level 9 Heading===</span></a></li>\n<li data-parsoid='{\"dsr\":[1127,1278,6,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main%20Page#.3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main%20Page#.3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D\"},\"sa\":{\"href\":\"#.3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D\"},\"dsr\":[1134,1278,45,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[1179,1221,24,7]}'>1.1.1.1.1.5</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[1222,1276,22,7]}'>==== Level 10 Heading====</span></a></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul>\n\n</div>\n\n<h1 data-parsoid='{\"dsr\":[1288,1307,1,1]}'> Level 1 Heading </h1>\n\n<h2 data-parsoid='{\"dsr\":[1309,1330,2,2]}'> Level 2 Heading </h2>\n\n<h3 data-parsoid='{\"dsr\":[1332,1355,3,3]}'> Level 3 Heading </h3>\n\n<h4 data-parsoid='{\"dsr\":[1357,1382,4,4]}'> Level 4 Heading </h4>\n\n<h5 data-parsoid='{\"dsr\":[1384,1411,5,5]}'> Level 5 Heading </h5>\n\n<h6 data-parsoid='{\"dsr\":[1413,1442,6,6]}'> Level 6 Heading </h6>\n\n<h6 data-parsoid='{\"dsr\":[1444,1476,6,6]}'> = Level 7 Heading= </h6>\n\n<h6 data-parsoid='{\"dsr\":[1478,1512,6,6]}'> == Level 8 Heading== </h6>\n\n<h6 data-parsoid='{\"dsr\":[1514,1550,6,6]}'> === Level 9 Heading=== </h6>\n\n<h6 data-parsoid='{\"dsr\":[1552,1591,6,6]}'> ==== Level 10 Heading==== </h6>\n"); @@ -2227,9 +2230,7 @@ add("selser", "Render invalid page names as plain text (bug 51090) [2,4,3]", "x280lbt0x9smunmi\n\n[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\n9zekc2ruir0h33di\n"); add("selser", "Render invalid page names as plain text (bug 51090) [2,0,3]", "uy7lbslcu8mvaemi\n\n[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n"); add("selser", "Render invalid page names as plain text (bug 51090) [2,0,[2,0,0,0,4,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,3,0,2]]", "ixtw0uq17iqtcsor\n\n[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\ncjgyt6cnj124kj4i[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}4i3f1qev8b5u3di{{echo|foo/..}}t26yvjmagszl4n29{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}3vx6jfw5gbvs4i{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}{{echo|foo<bar}}<nowiki>3vz7g6pd5lzhncdi]]</nowiki>"); -add("selser", "Category / paragraph interactions [[0,3,2],0,2,4,[3,2,0],0,[2],3,0,[3],0,[3,3,4,1,4,2,3],0,3,4,0,4,3,0,0,2,0,0,0]", "Foo 83zrad4tpxxkcsor Bar\n\nysekf8brayr885mi\n\nFoo [[Category:Baz]]\nBar\n\nduknjpcnvnyzxgvi\n\nhroyapi5paqhncdi[[Category:Baz]]\nBar\n\nmsiv1cjc1q8e61orFoo\n[[Category:Baz]] \n\nljrvpzob03tedn29[[Category:Baz]]6bqrn9ug03npcik95jcarnywu55klnmi[[Category:Baz]]\n\nik3u2lqitfomkj4i[[Category:Baz]]\nn8wwykwa78f72e29\n\n[[Category:Baz]]\n9dl89xg0l57phkt9\n {{echo|[[Category:Baz]]}}\n[[Category:Baz]]"); -add("selser", "Category / paragraph interactions [4,0,0,0,[4,1,0],3,3,0,0,0,2,[2,0,0,1,3,0,0],0,1,3,0,2,0,2,0,0,0,4,2]", "y2ksxygpidn7y14i\n\nFoo [[Category:Baz]]\nBar\n\ntqcbbea7bmiy66r[[Category:Baz]]\nBar\n[[Category:Baz]] Bar\nc42dqedyb3u6usor\n\ndjmvd61k80kymn29Foo\n[[Category:Baz]]\n [[Category:Baz]][[Category:Baz]]\nBar\n\n[[Category:Baz]]\n [[Category:Baz]]\nvyv3u18bgs4z33di\n[[Category:Baz]]\ne98vfkx1eqld6lxr\n\n[[Category:Baz]]\n {{echo|[[Category:Baz]]}}\nviznyhgcd9muz0k9\n\nd830mwe1qg1oflxr[[Category:Baz]]"); -add("selser", "Category / paragraph interactions [1,0,1,0,1,0,1,0,0,0,2,[4,0,0,0,0,4,0],3,0,4,0,0,1,4,4,0,0,3,0]", "Foo [[Category:Baz]] Bar\n\nFoo [[Category:Baz]]\nBar\n\nFoo\n[[Category:Baz]]\nBar\n\nFoo\n[[Category:Baz]] Bar\nqyq2tw4tbcjfko6r\n\n8rsqjn6ahwoecdi[[Category:Baz]]\n [[Category:Baz]]\n7qub38k3od0od2t9\nBar\n\n[[Category:Baz]]\njml3cn3gxdt5ipb9[[Category:Baz]]\n[[Category:Baz]]\n7www48dkmtg74x6r\n\nfddlp7i37zwr8uxr\n {{echo|[[Category:Baz]]}}[[Category:Baz]]"); +add("selser", "Category / paragraph interactions [1,3,4,4,3,3,1,0,[0,3,0,0,2,2,0,0,0,3,0,0,4,0,0,1,2,0],0,0]", "Foo [[Category:Baz]] Bar\n\n10mwgehifibgwrk9\n\no0nac2tpantjfw29\n\nFoo\n[[Category:Baz]] Bar\n\nFoo[[Category:Baz]]\n<nowiki> </nowiki>s8xrvt11irn97ldi[[Category:Baz]]zhm5ka7id77am7vi\n[[Category:Baz]]\nBar\n\n\n<nowiki> </nowiki>[[Category:Baz]]zkdnn4uz7rqqia4i[[Category:Baz]]\n\n[[Category:Baz]]r29advfq52qsq0k9\n {{echo|[[Category:Baz]]}}\n[[Category:Baz]]"); add("selser", "Section headings with TOC [3,4,0,0,3,2,[3],3,0,4,3,3,0]", "px8b3ng5n4lpu8fr\n\n=== Subheadline 1 ===\np64mngpetwfm9529\n\n======<nowiki/>======\n\n== Headline 2 ==\nzvfwz386e7xbhuxr\n\n===Another headline==="); add("selser", "Handling of sections up to level 6 and beyond [1,2,1,2,1,0,[3],2,2,4,[2],4,0,0,1,0,0,3,1]", "= Level 1 Heading=\n7e043zzvvtzf47vi\n\n== Level 2 Heading==\n0pp0pcwrmkakyb9\n\n=== Level 3 Heading===\n====<nowiki/>====\n253vnq49otg9zfr\nmncpvxste96vquxr\n\n===== Level 5 Heading=====\n91qmbb1e2vlpu8fr\n\n======ohqkkrlkoqi79zfr Level 6 Heading======\n6hv8gbhdqngn9udi\n\n======= Level 7 Heading=======\n======<nowiki>== Level 8 Heading==</nowiki>======\n========= Level 9 Heading=========\n======<nowiki>==== Level 10 Heading====</nowiki>======"); add("selser", "Handling of sections up to level 6 and beyond [1,0,1,0,0,3,2,3,0,0,4,0,[4],0,1,0,0,4,0]", "= Level 1 Heading=\n== Level 2 Heading==\n=== Level 3 Heading===\n6fs6ykhv45nrk9\n\n==== Level 4 Heading====\n===== Level 5 Heading=====\njkvm1xjd1mw2vs4i\n\n======lrcthal0ujwnrk9======\n======<nowiki>== Level 8 Heading==</nowiki>======\n========= Level 9 Heading=========\n6uicqh73ey5bfbt9\n\n========== Level 10 Heading=========="); -- To view, visit https://gerrit.wikimedia.org/r/216136 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I507dcefcca5a4ee22fb9f9bf0cfe678f14d64991 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
