jenkins-bot has submitted this change and it was merged.

Change subject: Revert "T86271: Serialize <link>s on own line always" 
......................................................................


Revert "T86271: Serialize <link>s on own line always" 

We opened a can of works with rtl and ltr bidi chars on some wikis.
There is more work to be done. Meanwhile, reverting this to deploy master.

This reverts commit 0337bb3bf52fb469e078a24369d361f55131c597.

Change-Id: Ib7f60c79fee50d349becd1006313a91888342d06
---
M lib/mediawiki.DOMUtils.js
M lib/wts.TagHandlers.js
M lib/wts.separators.js
M tests/mocha/jsapi.js
M tests/parserTests-blacklist.js
M tests/parserTests.txt
6 files changed, 67 insertions(+), 101 deletions(-)

Approvals:
  Arlolra: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/mediawiki.DOMUtils.js b/lib/mediawiki.DOMUtils.js
index 67cdd4b..0654fab 100644
--- a/lib/mediawiki.DOMUtils.js
+++ b/lib/mediawiki.DOMUtils.js
@@ -1008,7 +1008,7 @@
         * @param {MWParserEnvironment} env
         */
        hasDiffMarkers: function(node, env) {
-               return this.currentDiffMark(node, env) !== null || 
this.isDiffMarker(node);
+               return this.currentDiffMark(node, env) !== null;
        },
 
        hasDiffMark: function(node, env, mark) {
diff --git a/lib/wts.TagHandlers.js b/lib/wts.TagHandlers.js
index 0f42bd4..6f1158c 100644
--- a/lib/wts.TagHandlers.js
+++ b/lib/wts.TagHandlers.js
@@ -1170,16 +1170,20 @@
                },
                sepnls: {
                        before: function(node, otherNode) {
-                               // sol-transparent link nodes are the only 
thing on their line
-                               if (DU.isSolTransparentLink(node) && 
!DU.isBody(otherNode)) {
+                               if (DU.isSolTransparentLink(node) &&
+                                       ((DU.isNewElt(node) && 
!DU.isBody(otherNode)) ||
+                                       DU.isDocumentFragment(node.parentNode))
+                               ) { // Fresh category link: Serialize on its 
own line
                                        return { min: 1 };
                                } else {
                                        return {};
                                }
                        },
-                       after: function(node, otherNode, state) {
-                               // sol-transparent link nodes are the only 
thing on their line
-                               if (DU.isSolTransparentLink(node) && 
!DU.isBody(otherNode)) {
+                       after: function(node, otherNode) {
+                               if (DU.isSolTransparentLink(node) &&
+                                       ((DU.isNewElt(node) && 
!DU.isBody(otherNode)) ||
+                                       DU.isDocumentFragment(node.parentNode))
+                               ) { // Fresh category link: Serialize on its 
own line
                                        return { min: 1 };
                                } else {
                                        return {};
diff --git a/lib/wts.separators.js b/lib/wts.separators.js
index 75fe35d..31353cf 100644
--- a/lib/wts.separators.js
+++ b/lib/wts.separators.js
@@ -75,8 +75,18 @@
  * min, max structure.
  */
 function getSepNlConstraints(state, nodeA, sepNlsHandlerA, nodeB, 
sepNlsHandlerB) {
-       var env = state.env;
        var nlConstraints = { a: {}, b: {} };
+
+       // Leave constraints unchanged when:
+       // * both nodes are element nodes
+       // * both nodes were present in original wikitext
+       // * either one of them is sol-transparent
+       if (DU.isElt(nodeA) && DU.isElt(nodeB)
+               && !DU.isNewElt(nodeA) && !DU.isNewElt(nodeB)
+               && (DU.emitsSolTransparentSingleLineWT(state.env, nodeA)
+                       || DU.emitsSolTransparentSingleLineWT(state.env, 
nodeB))) {
+               return nlConstraints;
+       }
 
        if (sepNlsHandlerA) {
                nlConstraints.a = sepNlsHandlerA(nodeA, nodeB, state);
@@ -92,7 +102,7 @@
                if (cb.min !== undefined) {
                        if (nlConstraints.max !== undefined && 
nlConstraints.max < cb.min) {
                                // Conflict, warn and let nodeB win.
-                               env.log("warning", "Incompatible constraints 
1:", nodeA.nodeName,
+                               state.env.log("warning", "Incompatible 
constraints 1:", nodeA.nodeName,
                                                nodeB.nodeName, 
loggableConstraints(nlConstraints));
                                nlConstraints.min = cb.min;
                                nlConstraints.max = cb.min;
@@ -104,7 +114,7 @@
                if (cb.max !== undefined) {
                        if (nlConstraints.min !== undefined && 
nlConstraints.min > cb.max) {
                                // Conflict, warn and let nodeB win.
-                               env.log("warning", "Incompatible constraints 
2:", nodeA.nodeName,
+                               state.env.log("warning", "Incompatible 
constraints 2:", nodeA.nodeName,
                                                nodeB.nodeName, 
loggableConstraints(nlConstraints));
                                nlConstraints.min = cb.max;
                                nlConstraints.max = cb.max;
diff --git a/tests/mocha/jsapi.js b/tests/mocha/jsapi.js
index 8acad1b..c777365 100644
--- a/tests/mocha/jsapi.js
+++ b/tests/mocha/jsapi.js
@@ -87,7 +87,7 @@
                                        template.name = 'bar-stub';
                                }
                        });
-                       String(pdoc).should.equal("{{cleanup|date = July 2012}} 
'''Foo''' is a [[bar]]. {{bar-stub}}\n");
+                       String(pdoc).should.equal("{{cleanup|date = July 2012}} 
'''Foo''' is a [[bar]]. {{bar-stub}}");
                });
        });
 });
@@ -105,7 +105,7 @@
                                        template.add('test2', 
Parsoid.PNodeList.fromHTML(pdoc, "I'm so <b>bold</b>!"));
                                }
                        });
-                       String(pdoc).should.equal("{{echo|{{cleanup|date = July 
2012|test1 = <nowiki>{{foo}}</nowiki>&bar{{!}}bat<nowiki><p></nowiki>|test2 = 
I'm so '''bold'''!}} '''Foo''' is a [[bar]].}} {{uncategorized}}\n");
+                       String(pdoc).should.equal("{{echo|{{cleanup|date = July 
2012|test1 = <nowiki>{{foo}}</nowiki>&bar{{!}}bat<nowiki><p></nowiki>|test2 = 
I'm so '''bold'''!}} '''Foo''' is a [[bar]].}} {{uncategorized}}");
                });
        });
        it('is safe to mutate template arguments', function() {
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 6aebadf..2fee96d 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -147,9 +147,11 @@
 add("wt2html", "Category with identical sort key", "<link 
rel=\"mw:PageProp/Category\" 
href=\"./Category:MediaWiki_User's_Guide#MediaWiki%20User's%20Guide\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Category:MediaWiki_User&#39;s_Guide\"},\"sa\":{\"href\":\"Category:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,58,null,null]}'/>");
 add("wt2html", "Category with empty sort key", "<link 
rel=\"mw:PageProp/Category\" 
href=\"./Category:MediaWiki_User's_Guide#MediaWiki%20User's%20Guide\" 
data-parsoid='{\"pipetrick\":true,\"stx\":\"simple\",\"a\":{\"href\":\"./Category:MediaWiki_User&#39;s_Guide\"},\"sa\":{\"href\":\"Category:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,36,null,null]}'/>");
 add("wt2html", "Category with empty sort key and parentheses", "<link 
rel=\"mw:PageProp/Category\" href=\"./Category:Foo_(bar)#Foo\" 
data-parsoid='{\"pipetrick\":true,\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Foo_(bar)\"},\"sa\":{\"href\":\"Category:Foo
 (bar)\"},\"dsr\":[0,23,null,null]}'/>");
+add("wt2html", "Category with link tail", "<p 
data-parsoid='{\"dsr\":[0,22,0,0]}'>123<link rel=\"mw:PageProp/Category\" 
href=\"./Category:Foo\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:Foo\"},\"sa\":{\"href\":\"Category:Foo\"},\"dsr\":[3,19,null,null]}'/>456</p>");
 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:&lt;span 
about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" 
data-parsoid=\\\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[11,23,null,null]}\\\"
 
data-mw=\\\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;Foo&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\\\">Foo&lt;/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\":\"&lt;span 
about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" 
data-parsoid=\\\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[15,27,null,null]}\\\"
 
data-mw=\\\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;Bar&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\\\">Bar&lt;/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:&lt;span 
about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" 
data-parsoid=\\\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[11,23,null,null]}\\\"
 
data-mw=\\\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;Foo&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\\\">Foo&lt;/span>\"}],[{\"txt\":\"mw:sortKey\"},{\"html\":\"&lt;span
 about=\\\"#mwt2\\\" typeof=\\\"mw:Transclusion\\\" 
data-parsoid=\\\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,36,null,null]}\\\"
 
data-mw=\\\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;Bar&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\\\">Bar&lt;/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,102,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\":[82,98,null,null]}'/>
 Bar</p>\n\n<p data-parsoid='{\"dsr\":[104,261,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\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}}]}'/></p>\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", "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\":\"&amp;#32;\",\"srcContent\":\" 
\",\"dsr\":[87,92,null,null]}'> </span>between<span typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#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\":\"&amp;#43;\",\"srcContent\":\"+\",\"dsr\":[172,177,null,null]}'>+</span>between<span
 typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#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\":\"&amp;#95;\",\"srcContent\":\"_\",\"dsr\":[269,274,null,null]}'>_</span>between<span
 typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#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&amp;#32;between&amp;#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&amp;#43;between&amp;#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&amp;#95;between&amp;#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-->");
@@ -222,6 +224,7 @@
 add("wt2html", "Template with explicit namespace in language variants", "<p 
data-parsoid='{\"dsr\":[0,17,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,17,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"Template:тест\",\"href\":\"./Template:Тест\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for Template:Тест</span></p>");
 add("wt2html", "Basic test for template parameter in language variants", "<p 
data-parsoid='{\"dsr\":[0,23,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,23,null,null],\"pi\":[[{\"k\":\"param\",\"named\":true,\"spc\":[\"\",\"\",\"\",\"\"]}]]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"парамтест\",\"href\":\"./Шаблон:парамтест\"},\"params\":{\"param\":{\"wt\":\"foo\"}},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Шаблон:парамтест</span></p>");
 add("wt2html", "Simple category in language variants", "<link 
rel=\"mw:PageProp/Category\" href=\"./Категорија:МедиаWики_Усер'с_Гуиде\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Категорија:МедиаWики_Усер&#39;с_Гуиде\"},\"sa\":{\"href\":\"Category:МедиаWики
 Усер&#39;с Гуиде\"},\"dsr\":[0,35,null,null]}'/>");
+add("wt2html", "Don't convert blue categorylinks to another variant (bug 
33210)", "<p data-parsoid='{\"dsr\":[0,5,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./A\" title=\"A\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./A\"},\"sa\":{\"href\":\"A\"},\"dsr\":[0,5,2,2]}'>A</a></p><link
 rel=\"mw:PageProp/Category\" href=\"./Category:分类\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Category:分类\"},\"sa\":{\"href\":\"Category:分类\"},\"dsr\":[5,20,null,null]}'/>");
 add("wt2html", "Stripping -{}- tags (language variants)", "<p 
data-parsoid='{\"dsr\":[0,36,0,0]}'>Latin proverb: -{Ne nuntium necare}-</p>");
 add("wt2html", "Prevent conversion with -{}- tags (language variants)", "<p 
data-parsoid='{\"dsr\":[0,31,0,0]}'>Latinski: -{Ne nuntium necare}-</p>");
 add("wt2html", "Prevent conversion of text with -{}- tags (language 
variants)", "<p data-parsoid='{\"dsr\":[0,31,0,0]}'>Latinski: -{Ne nuntium 
necare}-</p>");
@@ -313,6 +316,7 @@
 add("wt2wt", "Templates: Indent-Pre: 1f: Wrapping should be based on expanded 
content", "{{echo| }}a\n\n{{echo|\n }}a\n\n{{echo|\n b}}\n\n{{echo|a\n 
}}b\n\n{{echo|a\n}}\n b\n");
 add("wt2wt", "Templates: Handle comments in the target", "{{echo\n<!-- should 
be ignored -->\n|foo}}\n\n{{echo<!-- should be ignored 
-->\n|foo}}\n\n{{echo<!-- should be ignored -->|foo}}\n\n{{echo|foo}}");
 add("wt2wt", "4. Indent-Pre and extension tags", " a <gallery>\n 
File:foobar.jpg\n </gallery>\n");
+add("wt2wt", "7b. Indent-pre and category links", " [[Category:foo]] a\n  
[[Category:foo]] {{echo|b}}\n");
 add("wt2wt", "Definition lists: self-closed tag", ";one<br />two : two-line 
fun");
 add("wt2wt", "Definition Lists: colons occurring in tags", 
";a:b\n;'''a:b'''\n;<i>a:b</i>\n;<span>a:b</span>\n;<div>a:b</div>\n;<div>a\n:b\n;{{echo|a:b}}\n;{{echo|''a:b''}}\n;;;''a:b''\n");
 add("wt2wt", "BUG 289: \">\"-token in bracketed URL", 
"[http://www.example.com/ <hello> stuff]\n");
@@ -351,7 +355,7 @@
 add("wt2wt", "Templates: HTML Tag: 2. Generation of HTML attr. value", "<div 
style=\"{{echo|'color:red;'}}\">foo</div>");
 add("wt2wt", "Templates: HTML Tag: 3. Generation of HTML attr key and value", 
"<div {{echo|style}}=\"{{echo|'color:red;'}}\">foo</div>");
 add("wt2wt", "Templates: HTML Tag: 9. Multiple template-generated attributes", 
"<div {{echo|1=id=\"v1\" title=\"foo\"}} title=\"foo\">bar</div>");
-add("wt2wt", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside", "[[Category:foo1]]\n<table><tr><td>foo</td></tr></table>\n<!--Two 
categories (Bug 
50330)-->\n[[Category:bar1]]\n[[Category:bar2]]\n<table><tr><td>foo</td></tr></table>");
+add("wt2wt", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside", "[[Category:foo1]]<table><tr><td>foo</td></tr></table>\n<!--Two 
categories (Bug 
50330)-->\n[[Category:bar1]][[Category:bar2]]<table><tr><td>foo</td></tr></table>");
 add("wt2wt", "Allow empty links in image captions (Bug 60753)", 
"[[File:Foobar.jpg|thumb|Caption 
[[Link1]]\n<nowiki>[[]]</nowiki>\n[[Link2]]\n]]");
 add("wt2wt", "Image with multiple widths -- use last", 
"[[File:Foobar.jpg|300px|caption]]\n");
 add("wt2wt", "Render invalid page names as plain text (bug 51090)", 
"[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n<nowiki>[[foo~~~bar]]</nowiki>\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]\n");
@@ -535,6 +539,7 @@
 add("html2html", "Category with identical sort key", "<p 
data-parsoid='{\"dsr\":[0,63,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Category:MediaWiki_User's_Guide\" title=\"Wiki/Category:MediaWiki 
User's Guide\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Category:MediaWiki_User&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,63,39,2]}'>MediaWiki User's Guide</a></p>");
 add("html2html", "Category with empty sort key", "<p 
data-parsoid='{\"dsr\":[0,75,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[0,75,8,9]}'>[[Category:MediaWiki User's Guide|MediaWiki 
User's Guide]]</span></p>");
 add("html2html", "Category with empty sort key and parentheses", "<p 
data-parsoid='{\"dsr\":[0,43,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[0,43,8,9]}'>[[Category:Foo (bar)|Foo]]</span></p>");
+add("html2html", "Category with link tail", "<p 
data-parsoid='{\"dsr\":[0,39,0,0]}'>123<span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[3,36,8,9]}'>[[Category:Foo]]</span>456</p>");
 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>");
@@ -608,6 +613,7 @@
 add("html2html", "Link to pages in language variants", "<p 
data-parsoid='{\"dsr\":[0,56,0,0]}'>Main Page can be written as <a 
rel=\"mw:WikiLink\" href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[28,56,17,2]}'>Маин Паге</a></p>\n");
 add("html2html", "Multiple links to pages in language variants", "<p 
data-parsoid='{\"dsr\":[0,113,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[0,28,17,2]}'>Main Page</a> can be written as <a 
rel=\"mw:WikiLink\" href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[47,75,17,2]}'>Маин Паге</a> same as <a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[84,112,17,2]}'>Маин Паге</a>.</p>\n");
 add("html2html", "Simple category in language variants", "<p 
data-parsoid='{\"dsr\":[0,65,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Категорија:MediaWiki_User's_Guide\" 
title=\"Wiki/Категорија:MediaWiki User's Guide\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Категорија:MediaWiki_User&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Категорија:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,65,41,2]}'>MediaWiki User's Guide</a></p>");
+add("html2html", "Don't convert blue categorylinks to another variant (bug 
33210)", "<p data-parsoid='{\"dsr\":[0,23,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Category:分类\" title=\"Wiki/Category:分类\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Category:分类\"},\"sa\":{\"href\":\"wiki/Category:分类\"},\"dsr\":[0,23,19,2]}'>分类</a></p>");
 add("html2html", "Prevent conversion of links with -{}- tags (language 
variants)", "<p data-parsoid='{\"dsr\":[0,28,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[0,28,17,2]}'>Main Page</a></p>\n");
 add("html2html", "Adding explicit conversion rule for title (T flag)", "<p 
data-parsoid='{\"dsr\":[0,6,0,0]}'>Taiwan</p>\n\n<p 
data-parsoid='{\"dsr\":[8,27,0,0]}'>Should be stripped!</p>\n");
 add("html2html", "Testing that changing the language variant here in the tests 
actually works", "<p data-parsoid='{\"dsr\":[0,5,0,0]}'>China</p>\n\n<p 
data-parsoid='{\"dsr\":[7,26,0,0]}'>Should be stripped!</p>\n");
@@ -991,6 +997,7 @@
 add("html2wt", "Bug 6563: Edit link generation for section suppressed by 
<includeonly>", "== Section 1 ==\n");
 add("html2wt", "Bug 6563: Section extraction for section suppressed by 
<includeonly>", "<nowiki>==Section 1==</nowiki>");
 add("html2wt", "Un-closed <includeonly>", "");
+add("html2wt", "Includes and comments at SOL", "<!-- comment 
--><noinclude><!-- comment --></noinclude><!-- comment -->\n\n== hu 
==\n\n<noinclude>\nsome\n</noinclude>\n* stuff\n* here\n\n<includeonly>can have 
stuff</includeonly>\n\n=== here ===\n");
 add("html2wt", "0. includeonly around the entire attribute", "<span 
id=\"v2\">bar</span>\n");
 add("html2wt", "1. includeonly in html attr key", "<span 
id=\"foo\">bar</span>\n");
 add("html2wt", "2. includeonly in html attr value", "<span 
id=\"v1\">bar</span>\n<span id=\"v1\">bar</span>\n");
@@ -1087,9 +1094,11 @@
 add("html2wt", "Category with identical sort key", "[[wiki/Category:MediaWiki 
User's Guide|MediaWiki User's Guide]]");
 add("html2wt", "Category with empty sort key", "<nowiki>[[Category:MediaWiki 
User's Guide|MediaWiki User's Guide]]</nowiki>");
 add("html2wt", "Category with empty sort key and parentheses", 
"<nowiki>[[Category:Foo (bar)|Foo]]</nowiki>");
+add("html2wt", "Category with link tail", 
"123<nowiki>[[Category:Foo]]</nowiki>456");
 add("html2wt", "Category with template", 
"<nowiki>[[Category:{{echo|Foo}}]]</nowiki>");
 add("html2wt", "Category with template in sort key", 
"<nowiki>[[Category:Foo|{{echo|Bar}}]]</nowiki>");
 add("html2wt", "Category with template in sort key and title", 
"<nowiki>[[Category:{{echo|Foo}}|{{echo|Bar}}]]</nowiki>");
+add("html2wt", "Category / paragraph interactions", "Foo 
Bar\n\nFoo\nBar\n\nFoo\nBar\n\nFoo Bar\n\nFoo\nBar\n");
 add("html2wt", "Basic section headings", "== Headline 1 ==\nSome text\n\n== 
Headline 2 ==\nMore\n\n=== Smaller headline ===\nBlah blah\n");
 add("html2wt", "Section headings with TOC", "<div id=\"toc\" 
class=\"toc\"><div id=\"toctitle\">\n== Contents ==\n</div>\n\n* 
[[#Headline_1|<span class=\"tocnumber\">1</span> <span 
class=\"toctext\">Headline 1</span>]]\n\n** [[#Subheadline_1|<span 
class=\"tocnumber\">1.1</span> <span class=\"toctext\">Subheadline 
1</span>]]\n\n*** [[#Skipping_a_level|<span class=\"tocnumber\">1.1.1</span> 
<span class=\"toctext\">Skipping a level</span>]]\n\n**** 
[[#Skipping_a_level_2|<span class=\"tocnumber\">1.1.1.1</span> <span 
class=\"toctext\">Skipping a level</span>]]\n* [[#Headline_2|<span 
class=\"tocnumber\">2</span> <span class=\"toctext\">Headline 2</span>]]\n\n** 
[[#Another_headline|<span class=\"tocnumber\">2.1</span> <span 
class=\"toctext\">Another headline</span>]]\n\n</div>\n\n== Headline 1 
==\n\n=== Subheadline 1 ===\n\n===== Skipping a level =====\n\n====== Skipping 
a level ======\n\n== Headline 2 ==\nSome text\n\n=== Another headline ===\n");
 add("html2wt", "Handling of sections up to level 6 and beyond", "<div 
id=\"toc\" class=\"toc\"><div id=\"toctitle\">\n== Contents ==\n</div>\n\n* 
[[#Level_1_Heading|<span class=\"tocnumber\">1</span> <span 
class=\"toctext\">Level 1 Heading</span>]]\n\n** [[#Level_2_Heading|<span 
class=\"tocnumber\">1.1</span> <span class=\"toctext\">Level 2 
Heading</span>]]\n\n*** [[#Level_3_Heading|<span 
class=\"tocnumber\">1.1.1</span> <span class=\"toctext\">Level 3 
Heading</span>]]\n\n**** [[#Level_4_Heading|<span 
class=\"tocnumber\">1.1.1.1</span> <span class=\"toctext\">Level 4 
Heading</span>]]\n\n***** [[#Level_5_Heading|<span 
class=\"tocnumber\">1.1.1.1.1</span> <span class=\"toctext\">Level 5 
Heading</span>]]\n\n****** [[#Level_6_Heading|<span 
class=\"tocnumber\">1.1.1.1.1.1</span> <span class=\"toctext\">Level 6 
Heading</span>]]\n****** [[#.3D_Level_7_Heading.3D|<span 
class=\"tocnumber\">1.1.1.1.1.2</span> <span class=\"toctext\">= Level 7 
Heading=</span>]]\n****** [[#.3D.3D_Level_8_Heading.3D.3D|<span 
class=\"tocnumber\">1.1.1.1.1.3</span> <span class=\"toctext\">== Level 8 
Heading==</span>]]\n****** [[#.3D.3D.3D_Level_9_Heading.3D.3D.3D|<span 
class=\"tocnumber\">1.1.1.1.1.4</span> <span class=\"toctext\">=== Level 9 
Heading===</span>]]\n****** [[#.3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D|<span 
class=\"tocnumber\">1.1.1.1.1.5</span> <span class=\"toctext\">==== Level 10 
Heading====</span>]]\n\n</div>\n\n= Level 1 Heading =\n\n== Level 2 Heading 
==\n\n=== Level 3 Heading ===\n\n==== Level 4 Heading ====\n\n===== Level 5 
Heading =====\n\n====== Level 6 Heading ======\n\n====== = Level 7 Heading= 
======\n\n====== == Level 8 Heading== ======\n\n====== === Level 9 Heading=== 
======\n\n====== ==== Level 10 Heading==== ======\n");
@@ -1242,6 +1251,7 @@
 add("html2wt", "Template with explicit namespace in language variants", "This 
is a test template\n");
 add("html2wt", "Basic test for template parameter in language variants", "This 
is a test template with parameter foo\n");
 add("html2wt", "Simple category in language variants", 
"[[wiki/Категорија:MediaWiki User's Guide|MediaWiki User's Guide]]");
+add("html2wt", "Don't convert blue categorylinks to another variant (bug 
33210)", "[[wiki/Category:分类|分类]]");
 add("html2wt", "Stripping -{}- tags (language variants)", "Latin proverb: Ne 
nuntium necare\n");
 add("html2wt", "Prevent conversion with -{}- tags (language variants)", 
"Латински: Ne nuntium necare\n");
 add("html2wt", "Prevent conversion of text with -{}- tags (language 
variants)", "Латински: Ne nuntium necare\n");
@@ -1467,6 +1477,7 @@
 add("selser", "5a. White-space in indent-pre [[2,0,4]]", " d3ppdqvqzdxi529a<br 
/>\n 82567nb6q9hbmx6r");
 add("selser", "5a. White-space in indent-pre [[2,0,0]]", " 9blj98gpz0py14ia<br 
/>\n \n \n b");
 add("selser", "5a. White-space in indent-pre [[0,2,0]]", " 
am3m3vd8oxzu84cxr<br />\n \n \n b");
+add("selser", "7b. Indent-pre and category links [2]", "yml0m6jz2j32qpvi\n 
[[Category:foo]] a\n [[Category:foo]] {{echo|b}}");
 add("selser", "Definition lists: self-closed tag [2]", 
"x14l42v2vh392j4i\n;one<br/>two : two-line fun");
 add("selser", "Definition lists: self-closed tag [1]", ";one<br/>two : 
two-line fun");
 add("selser", "Definition lists: self-closed tag [[[4,2,4,0],[2]]]", 
";hfmudey4je6u5wmi18aco6b1yahy3nmi<br/>199ekjza5e7phkt9 :b3ubf9dln2x7ds4i 
two-line fun");
@@ -1808,26 +1819,26 @@
 add("selser", "1. Table tag in SOL posn. should get reparsed correctly with 
valid TSR [0,[0,[4,0]]]", "{{echo|}}{| width = 
'100%'\n<!--u3at1qt3epfd2t9-->\n|}");
 add("selser", "1. Table tag in SOL posn. should get reparsed correctly with 
valid TSR [0,[3,[1,0]]]", "{{echo|}}{| width = '100%'\n|foo\n|}");
 add("selser", "1. Table tag in SOL posn. should get reparsed correctly with 
valid TSR [0,[0,[[1],4]]]", "{{echo|}}{| width = '100%'\n| 
data-foobar=\"pnyys77mkaxrms4i\" |foo<!--kok37wstwgbvs4i-->\n|}");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,4,3,3,0,0,3,1]", "\n00y7omltvljfko6r\n\n<table 
data-foobar=\"jmfnmukwsfko6r\">[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,4,3,3,0,0,3,1]", "\n00y7omltvljfko6r\n<table 
data-foobar=\"jmfnmukwsfko6r\">[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,[3],0,0,3,0,4,2]", "<table></table>\n<!--Two categories (Bug 
50330)-->\naa9zlufnr5nlv7vi\n\nq2pyl7rcb4e4gqfr<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [4,1,3,2,2,2,0,2]", "ixen0t4bgr8xs9k9<table 
data-foobar=\"srvdo6x0y0bb7qfr\"><tr><td>foo</td></tr></table>uzdg6q9o13xcrf6r<!--Two
 categories (Bug 
50330)-->4qtzlqvafwyaatt9\nxof76nvw8xmkj4i\n\nmjznl60h5moenrk9<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [4,1,3,2,2,2,0,2]", "ixen0t4bgr8xs9k9<table 
data-foobar=\"srvdo6x0y0bb7qfr\"><tr><td>foo</td></tr></table>uzdg6q9o13xcrf6r<!--Two
 categories (Bug 
50330)-->4qtzlqvafwyaatt9\nxof76nvw8xmkj4i\nmjznl60h5moenrk9<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,4,2,4,2,1,0,1]", 
"\nfvxtgp3ng3c8fr\n\nndpvbu6qrq2awcdi\n\nxvl7qedcdte29\n\nut1kj4t41ud6lxr\n[[Category:bar1]]<table
 
data-foobar=\"bl3hi9ypv5d34n29\">[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [3,[[3]],3,2,0,4,0,4]", "<table></table>ix0vd82hs81fko6r<!--Two 
categories (Bug 50330)-->\nk15lw873lct2zkt9\n\n3jhgi813c6av2t9\n");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [3,[[3]],3,2,0,4,0,4]", "<table></table>ix0vd82hs81fko6r<!--Two 
categories (Bug 50330)-->\nk15lw873lct2zkt9\n3jhgi813c6av2t9\n");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [1,3,0,4,0,0,0,[[[[3]]]]]", 
"[[Category:foo1]]\n6jn116sfnaozjjor\n<table><tr><td></td></tr></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [3,2,3,2,2,0,0,[[[[2]]]]]", 
"isfe9nts88woecdi<table>[[Category:foo1]]<tr><td>foo</td></tr></table>qvw89yxvkoab57b9<!--Two
 categories (Bug 
50330)-->u9lqrotjvqb0529\n<table><tr><td>gsvn66t5or5p14ifoo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [1,2,0,0,4,0,0,1]", 
"[[Category:foo1]]\n19pn73ihhorms4i<table>[[Category:foo1]]<tr><td>foo</td></tr></table>\n<!--Two
 categories (Bug 50330)-->uqp2nnbb6ueg66r\n<table 
data-foobar=\"dzahg5avpeyu8fr\">[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [1,2,0,0,4,0,0,1]", 
"[[Category:foo1]]\n19pn73ihhorms4i<table>[[Category:foo1]]<tr><td>foo</td></tr></table>\n<!--Two
 categories (Bug 50330)-->uqp2nnbb6ueg66r<table 
data-foobar=\"dzahg5avpeyu8fr\">[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,1,4,0,0,0,1,[1]]", "<table 
data-foobar=\"0zy0k38eyyv0wwmi\">[[Category:foo1]]<tr><td>foo</td></tr></table>13pnkfecgawwb3xr<!--Two
 categories (Bug 
50330)-->\n[[Category:bar2]]<table><tr><td>foo</td></tr></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [4,3,0,2,2,0,0,[2]]", "m9y118hycf6iggb9\n\nxvms1aht5ut0529<!--Two 
categories (Bug 
50330)-->\n\nj909rng3dfopf1or\n<table><!--ndktasffvlcba9k9-->[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [2,3,4,2,3,0,0,0]", 
"pus64uq6ej4z33di\n\ng560va5z5cw0cnmi\n\nyykoaqbw7kbro1or<!--Two categories 
(Bug 
50330)-->\n<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [2,3,4,2,3,0,0,0]", 
"pus64uq6ej4z33di\ng560va5z5cw0cnmi\n\nyykoaqbw7kbro1or<!--Two categories (Bug 
50330)--><table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [4,1,0,2,0,0,3,2]", "jeue60f2n8eel8fr<table 
data-foobar=\"uib4z52061hmpldi\"><tr><td>foo</td></tr></table>\numehhf7e7cbfyldi<!--Two
 categories (Bug 
50330)-->\n\n0v6iqx906hv3g14i<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,3,2,4,3,3,0,4]", 
"\nhdu8b5un73rw9udi\n\naxxk36cxrg0newmi\n\nl6db7w99encm1jor\n");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,2,4,4,4,4,2,0]", 
"\n3p6ds2cdy5geqaor<table>[[Category:foo1]]<tr><td>foo</td></tr></table>nf31cc8xo4leg66r\n\nirxbftzactprpb9\n\ndd21qg54ruw0cnmi\n\nv7gjnsdqspnqxgvi\n\nzg2izvkgtlu15rk9\n<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,3,2,0,2,4,0,2]", "\n5hat330odnmw8kt9\n<!--Two categories (Bug 
50330)-->\n6ssl3a5gpeqaor\n\novgd20ux77722o6r\n\nkjuzhgsj82blz0k9<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [2,3,2,2,0,0,0,[[4]]]", 
"pr6u7tvu4zccjtt9\n\nbzwx5yz7n0y0hpvi\n\nsqg8knvzd26gvi<!--Two categories (Bug 
50330)-->\n<table><!--igfmiz8r7rykfbt9--></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,3,2,4,3,3,0,4]", 
"\nhdu8b5un73rw9udi\n\naxxk36cxrg0newmi\nl6db7w99encm1jor\n");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,2,4,4,4,4,2,0]", 
"\n3p6ds2cdy5geqaor<table>[[Category:foo1]]<tr><td>foo</td></tr></table>nf31cc8xo4leg66r\n\nirxbftzactprpb9\n\ndd21qg54ruw0cnmi\n\nv7gjnsdqspnqxgvi\n\nzg2izvkgtlu15rk9<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,3,2,0,2,4,0,2]", "\n5hat330odnmw8kt9\n<!--Two categories (Bug 
50330)-->\n6ssl3a5gpeqaor\n\novgd20ux77722o6r\nkjuzhgsj82blz0k9<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [2,3,2,2,0,0,0,[[4]]]", 
"pr6u7tvu4zccjtt9\nbzwx5yz7n0y0hpvi\n\nsqg8knvzd26gvi<!--Two categories (Bug 
50330)-->\n<table><!--igfmiz8r7rykfbt9--></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,1,4,0,0,0,1,[2]]", "<table 
data-foobar=\"16hnpb0od17l23xr\">[[Category:foo1]]<tr><td>foo</td></tr></table>p0tte61pcmh7iudi<!--Two
 categories (Bug 
50330)-->\n[[Category:bar2]]<table><!--8rm0h9nhoqkc5wmi-->[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>");
 add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,[2],0,2,2,0,0,[1]]", 
"<table><!--c0u2c9uer91cerk9-->[[Category:foo1]]<tr><td>foo</td></tr></table>\n8hyzimw3d00vbo6r<!--Two
 categories (Bug 
50330)-->\n\n12c9zldofglj714i\n<table><tr><td>foo</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,[[3]],2,0,0,4,0,[[[4]]]]", "<table></table>frdce0reto2h85mi\n<!--Two 
categories (Bug 
50330)-->\n3lz5b6rsfydjkyb9\n<table><tr><td>6xqvzsggdh392j4i</td></tr></table>");
-add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,4,4,0,0,3,2,[3]]", "\n4izrbq79n79442t9\n\nnmwv8fylt48fflxr<!--Two 
categories (Bug 50330)-->\n\nzjdiwp9jubejc3di\n<table></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,[[3]],2,0,0,4,0,[[[4]]]]", "<table></table>frdce0reto2h85mi\n<!--Two 
categories (Bug 
50330)-->\n3lz5b6rsfydjkyb9<table><tr><td>6xqvzsggdh392j4i</td></tr></table>");
+add("selser", "Templates: HTML Tables: 5. Proper fostering of categories from 
inside [0,4,4,0,0,3,2,[3]]", "\n4izrbq79n79442t9\n\nnmwv8fylt48fflxr<!--Two 
categories (Bug 50330)-->\n\nzjdiwp9jubejc3di<table></table>");
 add("selser", "Image with multiple widths -- use last [2]", 
"tyg28ph5bf5el8fr\n\n[[File:Foobar.jpg|200px|300px|caption]]");
 add("selser", "Image with multiple widths -- use last [1]", 
"[[File:Foobar.jpg|200px|300px|caption]]");
 add("selser", "Image with width attribute at different positions 
[0,2,[0,1],3,0]", 
"[[File:Foobar.jpg|200px|right|Caption]]xmu7d955jxmndn29\n[[File:Foobar.jpg|right|200px|Caption]]\n[[File:Foobar.jpg|right|Caption|200px]]");
@@ -1844,6 +1855,8 @@
 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 [3,2,1,3,0,4,1,2,1,3,0]", 
"x7ixp2jr6ir4quxr\n\nFoo 
[[Category:Baz]]\nBar\n\nFoo\n[[Category:Baz]]\nBar\n\nwvsxizohr6hia4i\n\nFoo\n[[Category:Baz]]
 Bar\n\nykmlq9svazzd7vi\n\nFoo\n[[Category:Baz]]\n 
[[Category:Baz]]\n[[Category:Baz]]\nBar\n\n[[Category:Baz]]\n 
[[Category:Baz]]\n[[Category:Baz]]\n\n[[Category:Baz]]\n 
{{echo|[[Category:Baz]]}}\n[[Category:Baz]]");
+add("selser", "4. Categories and newlines: newline suppression for last list 
item should RT properly [1,3,0]", "* a\n**** b[[Category:Foo]]");
 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==========");
@@ -1864,6 +1877,7 @@
 add("selser", "Header with special characters (bug 25462) 
[1,2,2,0,3,4,0,4,[2],3,0,0,1,0,[3],0,0,2,4,0,1]", "The tooltips shall not show 
entities to the user (ie. be double 
escaped)\n\n8z7x1wcux3v26gvi\n\ns1o423l9ajg7gb9\n\n== text > text 
==\n2whgc18x6v3d6lxr\n\n== text < text 
==\nt5l87q61pf0z4cxr\n\n92ysy522qy28d7visection 2\n\n== text & text ==\nsection 
3\n\n==<nowiki/>==\nsection 
4\n\nozk2j78opgajdcxr\n\nw7mpykjqlaowp14i\n\nsection 5");
 add("selser", "Header with space, plus and underscore as entity 
[0,2,2,0,0,0,0,0,[4],0,4,4,1,0,[2,0,2,0,0],3,[3],2,4,4,1,0,3,0,3,4,[2,0,3,0,[3],0,2,0,[2],2,3]]",
 "Id should not contain + for 
spaces\n\n1s8n9ebujmoyldi\n\nx2dm134ehi2akyb9\n\n== Space between Text 
==\nsection 1\n\n== Space-Entity&#32;between&#32;Text 
==\nctsg93fg7nfjemi\n\nfii5im4snhyyzaor\n\ntr1uqz2py5koi529\n\nsection 
3\n\n==mdub6jo1drcqh0k9 Plus-Entitycp7nt180xjxuhaorbetweenText 
==\n\n93x8kyc14qpycik9\n\nmy6t4zb9wnq4zpvi\n\nfsqir1dx869a4i\n\nsection 
5\n\ncnlyy146abofajor\n\nxv9ysrtv3ni885mi[[#Space between 
Text]]\n\n[[#Plus+between+Text|<nowiki/>]]\n8xc1shdmq3pfzuxr[[#Plus-Entity&#43;between&#43;Text]]\n[[#Underscore_between_Text|3v175tm601nstt9#Underscore_between_Text]]1y56jaqn4d6ajor\n");
 add("selser", "Header with space, plus and underscore as entity 
[0,0,0,0,[4],4,4,0,[3],4,2,0,2,2,[0,0,0,0,4],3,[4],3,0,3,2,0,3,0,0,3,[3,0,0,0,[3],4,2,0,4,0,0]]",
 "Id should not contain + for spaces\n\n== Space between Text 
==\n8xyfc0i8t2h2gldi\n\nzb4aaqq1s96q1tt9\n\n15bmoldrhl2i6bt9\n\ncfupe02lilhumcxr\n\n6a9prcw3fzcfecdi\n\n==
 Plus+between+Text ==\n2gbrll83w49m5cdi\n\nsection 3\n\nc17wpd542d1xxbt9\n\n== 
Plus-Entity&#43;between&#43;8yfotmkftysc3di==\ndrq2cqynku0rizfr\n\n== 
Underscore_between_Text ==\ngp6czug4zgfx0f6r\n\nsection 5\n\nsection 
6\n\n[[#Space-Entity&#32;between&#32;Text]]\n[[#Plus+between+Text|<nowiki/>]]<nowiki/>agpzebxg8xvtpgb9fopm0ncoqgf7ds4i[[#Plus-Entity&#43;between&#43;Text]]\nh7rvv79vf6qadcxr\n[[#Underscore-Entity&#95;between&#95;Text]]");
+add("selser", "HTML headers vs TOC (bug 23393)\n(__NOEDITSECTION__ for clearer 
output, doesn't matter here) [2,0,0,2,[2],4,3,0,4,0,[3],3,0]", 
"kaoj7bu25l0ltyb9<h1>Header 1</h1>\n== Header 1.1 
==\ne5g847xtle6x0f6r\n\n==3mr50w0hhtkmlsor Header 1.2 
==\npt2id6sh7rdx6r\n61937q06gu95dn29\n\n==<nowiki/>==\n__NOEDITSECTION__");
 add("selser", "Single-line or multiline-comments can follow headings 
[2,4,3,1,0,4,[2],3]", 
"u9j9ywtzcjbawcdi\n\n==foo==\ndrrd423rrk1vpldi\n\n==bar==<!--c1-->\nz66d0aderf9lik9\n\n==nxo7we9vvk70t3xrbaz==<!--\nc2\nc3-->");
 add("selser", "div with single-quoted attribute [2]", "qu686umowmw8kt9<div 
id='rock'>HTML rocks</div>");
 add("selser", "div with single-quoted attribute [[4]]", "<div 
id='rock'>i9n8e3v5czxb6gvi</div>");
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index ea86169..f3fe806 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -14,7 +14,6 @@
 # Plus any combination of these:
 #
 # cat           add category links
-#               (ignored by Parsoid, since it emits <link>s)
 # ill           add inter-language links
 #               (ignored by Parsoid, since it emits <link>s)
 # subpage       enable subpages (disabled by default)
@@ -3330,18 +3329,14 @@
 <span about="#mwt1" typeof="mw:Transclusion" 
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"
 [[Category:foo]]"}},"i":0}}]}'> </span><link rel="mw:PageProp/Category" 
href="./Category:Foo" about="#mwt1"> <!-- No pre&#x2D;wrapping -->
 !! end
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize all categories to serialize on their own line.
-## This wikitext usage is going to be fairly uncommon in production and
-## selser will take care of preserving formatting in those scenarios.
 !! test
 7b. Indent-pre and category links
 !! options
-parsoid=wt2html
+parsoid=wt2html,wt2wt
 !! wikitext
  [[Category:foo]] a
  [[Category:foo]] {{echo|b}}
-!! html/parsoid
+!! html
 <pre><link rel="mw:PageProp/Category" href="./Category:Foo"> a
  <link rel="mw:PageProp/Category" href="./Category:Foo"> <span about="#mwt1" 
typeof="mw:Transclusion" 
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
 !! end
@@ -10865,14 +10860,8 @@
 !! html
 !! end
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize the include directives to serialize on their own line.
-## Selser will take care of preserving formatting in scenarios where they
-## intermingled with other wikitext.
 !! test
 Includes and comments at SOL
-!! options
-parsoid=wt2html,html2html
 !! wikitext
 <!-- comment --><noinclude><!-- comment --></noinclude><!-- comment -->== hu ==
 
@@ -11053,14 +11042,10 @@
 </tbody></table>
 !!end
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize the include directives to serialize on their own line.
-## Selser will take care of preserving formatting in scenarios where they
-## intermingled with other wikitext.
 !!test
 2. Table tag in SOL posn. should get reparsed correctly with valid TSR
 !!options
-parsoid=wt2html
+parsoid=wt2html,wt2wt
 !!wikitext
 <includeonly>a</includeonly>{| {{{b}}}
 |c
@@ -14275,22 +14260,15 @@
 [[Category:Foo (bar)|Foo]]
 !! end
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize all categories to serialize on their own line.
-## This wikitext usage is going to be fairly uncommon in production and
-## selser will take care of preserving formatting in those scenarios.
 !! test
 Category with link tail
 !! options
 cat
 pst
-parsoid=wt2html
 !! wikitext
 123[[Category:Foo]]456
-!! html/php
+!! html
 123[[Category:Foo]]456
-!! html/parsoid
-<p>123<link rel="mw:PageProp/Category" href="Category:Foo"/>456</p>
 !! end
 
 !! test
@@ -14326,14 +14304,8 @@
 [[Category:{{echo|Foo}}|{{echo|Bar}}]]
 !! end
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize all categories to serialize on their own line.
-## This wikitext usage is going to be fairly uncommon in production and
-## selser will take care of preserving formatting in those scenarios.
 !! test
 Category / paragraph interactions
-!! options
-parsoid=wt2html
 !! wikitext
 Foo [[Category:Baz]] Bar
 
@@ -14360,7 +14332,7 @@
 [[Category:Baz]]
  {{echo|[[Category:Baz]]}}
 [[Category:Baz]]
-!! html/php
+!! html
 <p>Foo Bar
 </p><p>Foo
 Bar
@@ -14370,32 +14342,20 @@
 </p><p>Foo
 Bar
 </p>
-!! html/parsoid
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> <link 
rel="mw:PageProp/Category" href="Category:Baz"/> <link 
rel="mw:PageProp/Category" href="Category:Baz"/> Bar <link 
rel="mw:PageProp/Category" href="Category:Baz"/> <link 
rel="mw:PageProp/Category" href="Category:Baz"/> <link 
rel="mw:PageProp/Category" href="Category:Baz"/> <link 
rel="mw:PageProp/Category" href="Category:Baz"/> <link 
rel="mw:PageProp/Category" href="Category:Baz" typeof="mw:Transclusion" 
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Baz]]"}},"i":0}}]}'/></p>
-<link rel="mw:PageProp/Category" href="Category:Baz"/>
 !! end
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize all categories to serialize on their own line.
-## This wikitext usage is going to be fairly uncommon in production and
-## selser will take care of preserving formatting in those scenarios.
-##
 ## The whitespace on the empty line is part of the test. Please do not delete
 !! test
 1. Categories and newlines: All preceding newlines should be suppressed 
(courtesy bug 87)
 !! options
-parsoid=wt2html
+parsoid=wt2html,wt2wt
 !! wikitext
 This
    
 [[Category:Foo]] and this should be part of same paragraph (not an indent-pre)
    
 {{echo|[[Category:Foo]] and so should this!}}
-!! html/php
+!! html
 <p>This and this should be part of same paragraph (not an indent-pre) and so 
should this!
 </p>
 !! html/parsoid
@@ -14493,14 +14453,8 @@
 <link rel="mw:PageProp/Category" href="./Category:Foo" 
data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
 !! end
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize all categories to serialize on their own line.
-## This wikitext usage is going to be fairly uncommon in production and
-## selser will take care of preserving formatting in those scenarios.
 !! test
 6. Categories and newlines: migrateTrailingCategories dom pass should not 
migrate categories not preceded by newlines
-!! options
-parsoid=wt2html
 !! wikitext
 * a [[Category:Foo]]
 !! html/parsoid
@@ -14551,20 +14505,13 @@
 </p>
 !! end
 
-# We used to, but no longer wt2wt this test since the default serializer
-# will normalize all categories to serialize on their own line.
-# This wikitext usage is going to be fairly uncommon in production and
-# selser will take care of preventing whitespace insertion if this
-# occurs in an article.
-#
-# html2html disabled for the same reason (whitespace insertion between
-# x and y).
-#
-# html2wt disabled because it localizes the "Category" namespace.
+# html2wt localizes the "Category" namespace.
+# XXX the <link> element needs an empty data-parsoid attribute, or
+# else the html2html test fails because spaces are inserted.
 !! test
 Link prefix/suffixes aren't applied to category links
 !! options
-parsoid=wt2html
+parsoid=wt2html,wt2wt,html2html
 language=is
 !! wikitext
 x[[Category:Foo]]y
@@ -19264,24 +19211,16 @@
 blah
 !! endarticle
 
-## We used to, but no longer wt2wt this test since the default serializer
-## will normalize all categories to serialize on their own line.
-## This wikitext usage is going to be fairly uncommon in production and
-## selser will take care of preserving formatting in those scenarios.
 !! test
 Don't convert blue categorylinks to another variant (bug 33210)
 !! options
-cat
-language=zh
-parsoid=wt2html
+language=zh cat
 !! wikitext
 [[A]][[Category:分类]]
-!! html/php
+!! html
 <a href="/wiki/Category:%E5%88%86%E7%B1%BB" title="Category:分类">分类</a>
-!! html/parsoid
-<p><a rel="mw:WikiLink" href="A" title="A">A</a></p>
-<link rel="mw:PageProp/Category" href="Category:分类"/>
 !! end
+
 
 !! test
 Stripping -{}- tags (language variants)
@@ -23626,8 +23565,7 @@
 
  __TOC__ foo
 
-__TOC__
- bar
+__TOC__ bar
 !! end
 
 #### --------------- HTML tags ---------------
@@ -24937,7 +24875,7 @@
 !! html/parsoid
 <h2><span about="#mwt1" typeof="mw:Transclusion" data-parsoid="{}" 
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo
 [[Category:Foo]]"}},"i":0}}]}'>foo </span><link rel="mw:PageProp/Category" 
href="./Category:Foo" about="#mwt1" data-parsoid="{}" /></h2>
 !! wikitext
-== {{echo|foo [[Category:Foo]]}}  ==
+== {{echo|foo [[Category:Foo]]}} ==
 !! end
 
 !! test

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib7f60c79fee50d349becd1006313a91888342d06
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: Arlolra <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to