Arlolra has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/181680

Change subject: Stray </noinclude> should be parsed to meta
......................................................................

Stray </noinclude> should be parsed to meta

Bug: T57531
Change-Id: I8081364f97df7ffb5fa8e70a2c72b9a132364def
---
M lib/ext.core.NoIncludeOnly.js
M lib/ext.util.TokenCollector.js
M tests/parserTests-blacklist.js
3 files changed, 16 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/80/181680/1

diff --git a/lib/ext.core.NoIncludeOnly.js b/lib/ext.core.NoIncludeOnly.js
index fa6bc84..c91ac36 100644
--- a/lib/ext.core.NoIncludeOnly.js
+++ b/lib/ext.core.NoIncludeOnly.js
@@ -143,6 +143,12 @@
 function noIncludeHandler(manager, options, collection) {
        var start = collection.shift();
 
+       // A stray end tag.
+       if ( start.constructor === EndTagTk ) {
+               var meta = buildMetaToken( manager, 'mw:Includes/NoInclude', 
true, (start.dataAttribs || {}).tsr );
+               return { tokens: [ meta ] };
+       }
+
        // Handle self-closing tag case specially!
        if (start.constructor === SelfclosingTagTk) {
                return (options.isInclude) ?
@@ -186,7 +192,8 @@
                        true, // match the end-of-input if </noinclude> is 
missing
                        0.02, // very early in stage 1, to avoid any further 
processing.
                        'tag',
-                       'noinclude'
+                       'noinclude',
+                       true
                        );
 }
 
diff --git a/lib/ext.util.TokenCollector.js b/lib/ext.util.TokenCollector.js
index c2fc582..27ec0a9 100644
--- a/lib/ext.util.TokenCollector.js
+++ b/lib/ext.util.TokenCollector.js
@@ -30,13 +30,14 @@
  * @param {string} type Token type to register for ('tag', 'text' etc)
  * @param {string} name (optional, only for token type 'tag'): tag name.
  */
-function TokenCollector ( manager, transformation, toEnd, rank, type, name ) {
+function TokenCollector( manager, transformation, toEnd, rank, type, name, 
ackEnd ) {
        this.transformation = transformation;
        this.manager = manager;
        this.rank = rank;
        this.type = type;
        this.name = name;
        this.toEnd = toEnd;
+       this.ackEnd = ackEnd;
        this.scopeStack = [];
        manager.addTransform( this._onDelimiterToken.bind( this ), 
"TokenCollector:_onDelimiterToken", rank, type, name );
 }
@@ -124,8 +125,12 @@
                }
        } else {
                // EOFTk or  EndTagTk
-               // EOFTk is okay, but EndTagTk is an error (ignoring error!)
-               return { tokens: [ token ] }; //this.transformation( [token, 
token] );
+               if ( this.ackEnd ) {
+                       return this.transformation([ token ]);
+               } else {
+                       // EOFTk is okay, but EndTagTk is an error (ignoring 
error!)
+                       return { tokens: [ token ] };
+               }
        }
 };
 
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 87f3206..7a707ab 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -115,7 +115,6 @@
 add("wt2html", "msgnw keyword", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'><span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,20,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"msgnw:MSGNW 
test\",\"href\":\"./Msgnw:MSGNW_test\"},\"params\":{},\"i\":0}}]}'>Warning: 
Page/template fetching disabled, and no cache for Msgnw:MSGNW_test</span></p>");
 add("wt2html", "int keyword", "<p about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[0,45,0,0],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"2\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"int:youhavenewmessages\",\"function\":\"int\"},\"params\":{\"1\":{\"wt\":\"lots
 of money\"},\"2\":{\"wt\":\"not!\"}},\"i\":0}}]}'>Parser function 
implementation for pf_int missing in Parsoid.</p>");
 add("wt2html", "Self-closed noinclude, includeonly, onlyinclude tags", "<meta 
typeof=\"mw:Includes/NoInclude\" data-parsoid='{\"src\":\"&lt;noinclude 
/>\",\"dsr\":[0,13,null,null]}'/>\n<meta typeof=\"mw:Includes/IncludeOnly\" 
data-parsoid='{\"src\":\"&lt;includeonly 
/>\",\"dsr\":[14,29,null,null]}'/>\n<meta typeof=\"mw:Includes/OnlyInclude\" 
data-parsoid='{\"src\":\"&lt;onlyinclude />\",\"dsr\":[30,45,null,null]}'/>");
-add("wt2html", "Unbalanced includeonly and noinclude tags", "<table 
data-parsoid='{\"dsr\":[0,107,2,2]}'>\n<tbody 
data-parsoid='{\"dsr\":[3,105,0,0]}'><tr 
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[3,104,0,0]}'><td
 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[3,17,1,0]}'>a&lt;/noinclude></td>\n<td
 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[18,44,1,0]}'>b&lt;/noinclude>&lt;/noinclude></td>\n<td
 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[45,73,1,0]}'>c&lt;/noinclude>&lt;/includeonly></td>\n<td
 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[74,104,1,0]}'>d&lt;/includeonly>&lt;/includeonly></td></tr>\n</tbody></table>");
 add("wt2html", "Bug 6563: Section extraction for section shown by 
<includeonly>", "<meta typeof=\"mw:Includes/IncludeOnly\" 
data-parsoid='{\"src\":\"&lt;includeonly>\\n==Includeonly 
section==\\n&lt;/includeonly>\",\"dsr\":[0,52,null,null]}'/><meta 
typeof=\"mw:Includes/IncludeOnly/End\" 
data-parsoid='{\"src\":\"\",\"dsr\":[52,52,null,null]}'/>\n<h2 
data-parsoid='{\"dsr\":[53,68,2,2]}'>Section T-2</h2>");
 add("wt2html", "Bug 6563: Section extraction for section suppressed by 
<includeonly>", "<meta typeof=\"mw:Includes/IncludeOnly\" 
data-parsoid='{\"src\":\"&lt;includeonly>\\n==Includeonly 
section==\\n&lt;/includeonly>\",\"dsr\":[0,52,null,null]}'/><meta 
typeof=\"mw:Includes/IncludeOnly/End\" 
data-parsoid='{\"src\":\"\",\"dsr\":[52,52,null,null]}'/>\n<h2 
data-parsoid='{\"dsr\":[53,66,2,2]}'>Section 1</h2>");
 add("wt2html", "2. includeonly in html attr value", "<p 
data-parsoid='{\"dsr\":[0,155,0,0]}'><span id=\"v1\" about=\"#mwt1\" 
typeof=\"mw:ExpandedAttrs\" 
data-parsoid='{\"stx\":\"html\",\"a\":{\"id\":\"v1\"},\"sa\":{\"id\":\"&lt;noinclude>v1&lt;/noinclude>&lt;includeonly>v2&lt;/includeonly>\"},\"dsr\":[0,76,66,7]}'
 data-mw='{\"attribs\":[[{\"txt\":\"id\"},{\"html\":\"&lt;meta 
typeof=\\\"mw:Includes/NoInclude\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&lt;noinclude>&amp;quot;,&amp;quot;dsr&amp;quot;:[10,21,null,null]}\\\">v1&lt;meta
 typeof=\\\"mw:Includes/NoInclude/End\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&lt;/noinclude>&amp;quot;,&amp;quot;dsr&amp;quot;:[23,35,null,null]}\\\">&lt;meta
 typeof=\\\"mw:Includes/IncludeOnly\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&lt;includeonly>v2&lt;/includeonly>&amp;quot;,&amp;quot;dsr&amp;quot;:[35,64,null,null]}\\\">&lt;meta
 typeof=\\\"mw:Includes/IncludeOnly/End\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;dsr&amp;quot;:[64,64,null,null]}\\\">\"}]]}'>bar</span>\n<span
 id='\"v1\"' about=\"#mwt2\" typeof=\"mw:ExpandedAttrs\" 
data-parsoid='{\"stx\":\"html\",\"a\":{\"id\":\"\\\"v1\\\"\"},\"sa\":{\"id\":\"&lt;noinclude>\\\"v1\\\"&lt;/noinclude>&lt;includeonly>\\\"v2\\\"&lt;/includeonly>\"},\"dsr\":[77,155,68,7]}'
 data-mw='{\"attribs\":[[{\"txt\":\"id\"},{\"html\":\"&lt;meta 
typeof=\\\"mw:Includes/NoInclude\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&lt;noinclude>&amp;quot;,&amp;quot;dsr&amp;quot;:[86,97,null,null]}\\\">\\\"v1\\\"&lt;meta
 typeof=\\\"mw:Includes/NoInclude/End\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&lt;/noinclude>&amp;quot;,&amp;quot;dsr&amp;quot;:[101,113,null,null]}\\\">&lt;meta
 typeof=\\\"mw:Includes/IncludeOnly\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&lt;includeonly>\\\\&amp;quot;v2\\\\&amp;quot;&lt;/includeonly>&amp;quot;,&amp;quot;dsr&amp;quot;:[113,144,null,null]}\\\">&lt;meta
 typeof=\\\"mw:Includes/IncludeOnly/End\\\" 
data-parsoid=\\\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;dsr&amp;quot;:[144,144,null,null]}\\\">\"}]]}'>bar</span></p>");

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8081364f97df7ffb5fa8e70a2c72b9a132364def
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <abrea...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to