Subramanya Sastry has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/334756 )

Change subject: Fix to resolveTemplateTarget to better handle magic word aliases
......................................................................

Fix to resolveTemplateTarget to better handle magic word aliases

* Magic word aliases sometimes have a ":" for their suffix and
  trying to resolve a string to a potential magicword alias has
  to search with this suffix as well.

  Aside: I don't yet know the rationale behind the ":" suffix in
  aliases.

* This patch fixes a longstanding parser test failure.

* In addition, this patch lets us fix an oddity in our native
  parser-functions implementation which had a special case for
  the language core parser function. It was recorded as pf_#language
  instead of pf_language.

* This fixes the regression seen during rt-testing on hewiki:אשר_כנפו

Change-Id: I4eb22cbb05ef5d1a97f6224833d18da6047c41fe
---
M lib/wt2html/tt/ParserFunctions.js
M lib/wt2html/tt/TemplateHandler.js
M tests/parserTests-blacklist.js
3 files changed, 7 insertions(+), 3 deletions(-)


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

diff --git a/lib/wt2html/tt/ParserFunctions.js 
b/lib/wt2html/tt/ParserFunctions.js
index 38342d9..54d70b7 100644
--- a/lib/wt2html/tt/ParserFunctions.js
+++ b/lib/wt2html/tt/ParserFunctions.js
@@ -806,7 +806,7 @@
 ParserFunctions.prototype.pf_numberofarticles = function(token, frame, cb, 
args) {
        cb({ tokens: ["1"] });
 };
-ParserFunctions.prototype['pf_#language'] = function(token, frame, cb, args) {
+ParserFunctions.prototype.pf_language = function(token, frame, cb, args) {
        var target = args[0].k;
        cb({ tokens: [target] });
 };
diff --git a/lib/wt2html/tt/TemplateHandler.js 
b/lib/wt2html/tt/TemplateHandler.js
index cab64ea..84e5bbb 100644
--- a/lib/wt2html/tt/TemplateHandler.js
+++ b/lib/wt2html/tt/TemplateHandler.js
@@ -427,6 +427,11 @@
        // Check if we have a parser function.
        // Unalias to canonical form and look in config.functionHooks
        var magicWordAlias = wiki.magicWords[prefix] || 
wiki.magicWords[lowerPrefix];
+
+       // Retry by adding a ":" to prefix if necessary
+       if (!magicWordAlias && pieces.length > 1) {
+               magicWordAlias = wiki.magicWords[prefix + ':'] || 
wiki.magicWords[lowerPrefix + ':'];
+       }
        var translatedPrefix = magicWordAlias || lowerPrefix || '';
 
        // The check for pieces.length > 1 is require to distinguish between
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 5e63865..4931d87 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -229,7 +229,6 @@
 add("wt2html", "T153140: Don't break table handling if language converter 
markup is in the cell.", "<table data-parsoid='{\"dsr\":[0,18,2,2]}'>\n<tbody 
data-parsoid='{\"dsr\":[3,16,0,0]}'><tr 
data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[3,15,2,0]}'>\n<td
 
data-parsoid='{\"a\":{\"-{R\":null},\"sa\":{\"-{R\":\"\"},\"autoInsertedEnd\":true,\"dsr\":[6,15,6,0]}'>B}-</td></tr>\n</tbody></table>");
 add("wt2html", "Bug 529: Uncovered bullet in parser function result", "<ul 
data-parsoid='{\"dsr\":[0,24,0,0]}'><li data-parsoid='{\"dsr\":[0,24,1,0]}'> 
Foo <span about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[6,24,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"lc:{{bullet}} 
\",\"function\":\"lc\"},\"params\":{},\"i\":0}}]}'> bar</span></li></ul>");
 add("wt2html", "Bug 5678: Double-parsed template invocation", "<p 
about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[0,42,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"lc:{{paramtest {{!}} 
param = hello }} \",\"function\":\"lc\"},\"params\":{},\"i\":0}}]}'>{{paramtest 
 param = hello }}</p>");
-add("wt2html", "Case insensitivity of parser functions for non-ASCII 
characters (bug 8143)", "<p data-parsoid='{\"dsr\":[0,135,0,0]}'><span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt1\" 
data-parsoid='{\"dsr\":[0,19,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PRVNÍVELKÉ:ěščř\",\"href\":\"./PRVNÍVELKÉ:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
PRVNÍVELKÉ:ěščř</span>\n<span typeof=\"mw:Transclusion mw:Placeholder\" 
about=\"#mwt2\" data-parsoid='{\"dsr\":[20,39,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"prvnívelké:ěščř\",\"href\":\"./Prvnívelké:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Prvnívelké:ěščř</span>\n<span typeof=\"mw:Transclusion mw:Placeholder\" 
about=\"#mwt3\" data-parsoid='{\"dsr\":[40,58,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PRVNÍMALÉ:ěščř\",\"href\":\"./PRVNÍMALÉ:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for PRVNÍMALÉ:ěščř</span>\n<span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt4\" 
data-parsoid='{\"dsr\":[59,77,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"prvnímalé:ěščř\",\"href\":\"./Prvnímalé:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for Prvnímalé:ěščř</span>\n<span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt5\" 
data-parsoid='{\"dsr\":[78,91,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"MALÁ:ěščř\",\"href\":\"./MALÁ:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for MALÁ:ěščř</span>\n<span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt6\" 
data-parsoid='{\"dsr\":[92,105,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"malá:ěščř\",\"href\":\"./Malá:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for Malá:ěščř</span>\n<span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt7\" 
data-parsoid='{\"dsr\":[106,120,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"VELKÁ:ěščř\",\"href\":\"./VELKÁ:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for VELKÁ:ěščř</span>\n<span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt8\" 
data-parsoid='{\"dsr\":[121,135,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"velká:ěščř\",\"href\":\"./Velká:ěščř\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for Velká:ěščř</span></p>");
 add("wt2html", "Nesting tags, paragraphs on lines which begin with <div>", 
"<div data-parsoid='{\"stx\":\"html\",\"dsr\":[0,11,5,6]}'></div><p 
data-parsoid='{\"dsr\":[11,20,0,0]}'><strong 
data-parsoid='{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[11,20,8,0]}'>A</strong></p>\n<p
 data-parsoid='{\"dsr\":[21,31,0,0]}'><strong 
data-parsoid='{\"stx\":\"html\",\"autoInsertedStart\":true,\"dsr\":[21,31,0,9]}'>B</strong></p>");
 add("wt2html", "Bug 6200: paragraphs inside blockquotes (no extra line 
breaks)", "<blockquote 
data-parsoid='{\"stx\":\"html\",\"dsr\":[0,43,12,13]}'>Line one\n\nLine 
two</blockquote>");
 add("wt2html", "Bug 6200: paragraphs inside blockquotes (extra line break on 
close)", "<blockquote 
data-parsoid='{\"stx\":\"html\",\"dsr\":[0,44,12,13]}'>Line one\n\n<p 
data-parsoid='{\"dsr\":[22,30,0,0]}'>Line two</p>\n</blockquote>");
@@ -257,7 +256,7 @@
 add("wt2html", "Wrong option for formatNum (bug 56199)", "<p 
data-parsoid='{\"dsr\":[0,126,0,0]}'><span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[0,29,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"formatnum:1,234.56\",\"function\":\"formatnum\"},\"params\":{\"1\":{\"wt\":\"Random\"}},\"i\":0}}]}'>1,234.56</span>\n<span
 about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[30,63,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"formatnum:1,234.56\",\"function\":\"formatnum\"},\"params\":{\"1\":{\"wt\":\"EVERYTHING\"}},\"i\":0}}]}'>1,234.56</span>\n<span
 about=\"#mwt3\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[64,126,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"formatnum:1234.56\",\"function\":\"formatnum\"},\"params\":{\"1\":{\"wt\":\"any
 argument that has the string 
&#39;NOSEP&#39;\"}},\"i\":0}}]}'>1234.56</span></p>");
 add("wt2html", "Strip marker in grammar", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[0,35,0,0],\"pi\":[[{\"k\":\"1\"}]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"grammar:elative\",\"function\":\"grammar\"},\"params\":{\"1\":{\"wt\":\"foo&lt;nowiki/>bar\"}},\"i\":0}}]}'>Parser
 function implementation for pf_grammar missing in Parsoid.</p>");
 add("wt2html", "Gallery override link with WikiLink (bug 34852)", "<ul 
class=\"gallery mw-gallery-traditional\" typeof=\"mw:Extension/gallery\" 
about=\"#mwt2\" data-parsoid='{\"dsr\":[0,78,2,2]}' 
data-mw='{\"name\":\"gallery\",\"attrs\":{},\"body\":{\"extsrc\":\"\\nFile:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink\\n\"}}'>\n<li
 class=\"gallerybox\" style=\"width: 155px;\"><div class=\"thumb\" 
style=\"width: 150px; height: 150px;\"><span style=\"display: inline-block; 
height: 100%; vertical-align: middle;\"></span><span typeof=\"mw:Image\" 
style=\"vertical-align: middle; display: inline-block;\"><a 
href=\"./InterWikiLink\"><img alt=\"galleryalt\" resource=\"./File:Foobar.jpg\" 
src=\"//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg\" 
data-file-width=\"1941\" data-file-height=\"220\" data-file-type=\"bitmap\" 
height=\"14\" width=\"120\"/></a></span></div><div 
class=\"gallerytext\">caption</div></li>\n</ul>");
-add("wt2html", "Language parser function", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,16,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#language:ar\",\"function\":\"#language\"},\"params\":{},\"i\":0}}]}'>ar</p>");
+add("wt2html", "Language parser function", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,16,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#language:ar\",\"function\":\"language\"},\"params\":{},\"i\":0}}]}'>ar</p>");
 add("wt2html", "Special parser function", "<p 
data-parsoid='{\"dsr\":[0,65,0,0]}'><span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[0,23,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#special:RandomPage\",\"function\":\"#special\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_#special missing in Parsoid.</span>\n<span 
about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[24,45,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#special:BaDtItLe\",\"function\":\"#special\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_#special missing in Parsoid.</span>\n<span 
about=\"#mwt3\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[46,65,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#special:Foobar\",\"function\":\"#special\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_#special missing in Parsoid.</span></p>");
 add("wt2html", "1. SOL-sensitive wikitext tokens as template-args", "<p 
data-parsoid='{\"dsr\":[0,35,0,0]}'><span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[0,11,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"*a\"}},\"i\":0}}]}'>*a</span>\n<span
 about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[12,23,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"#a\"}},\"i\":0}}]}'>#a</span>\n<span
 about=\"#mwt3\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[24,35,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\":a\"}},\"i\":0}}]}'>:a</span></p>");
 add("wt2html", "Empty table rows go away", "<table 
data-parsoid='{\"dsr\":[0,39,2,2]}'>\n<tbody 
data-parsoid='{\"dsr\":[3,37,0,0]}'><tr 
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[3,18,0,0]}'><td
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[3,10,1,0]}'> Hello</td>\n<td 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[11,18,1,0]}'> 
there</td></tr>\n<tr class=\"foo\" 
data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[19,33,14,0]}'></tr>\n<tr
 
data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[34,36,2,0]}'></tr>\n</tbody></table>");

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4eb22cbb05ef5d1a97f6224833d18da6047c41fe
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>

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

Reply via email to