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

Change subject: Handle entities properly while escaping template args
......................................................................


Handle entities properly while escaping template args

* {{echo|–}} was serializing back to {{echo|–}} because
  the content in mw:Entity span is the decoded entity rather
  than original source.

* Added a parsoid-specific test to catch regressions.

Change-Id: I6063e93aebfe656641c714939a5962f2004cc346
---
M js/lib/mediawiki.WikitextSerializer.js
M js/lib/pegTokenizer.pegjs.txt
M js/tests/parserTests.txt
3 files changed, 23 insertions(+), 2 deletions(-)

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



diff --git a/js/lib/mediawiki.WikitextSerializer.js 
b/js/lib/mediawiki.WikitextSerializer.js
index 80d220f..b917851 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -789,6 +789,17 @@
        var buf = [];
        for (var i = 0, n = tokens.length; i < n; i++) {
                var t = tokens[i], da = t.dataAttribs;
+
+               // For mw:Entity spans, the opening and closing tags have 0 
width
+               // and the enclosed content is the decoded entity. Hence the
+               // special case to serialize back the entity's source.
+               if (t.constructor === pd.TagTk && t.getAttribute("typeof") === 
"mw:Entity") {
+                       i += 2;
+                       var endTag = tokens[i];
+                       buf.push(arg.substring(da.tsr[0], 
endTag.dataAttribs.tsr[1]));
+                       continue;
+               }
+
                switch (t.constructor) {
                        case pd.TagTk:
                        case pd.EndTagTk:
diff --git a/js/lib/pegTokenizer.pegjs.txt b/js/lib/pegTokenizer.pegjs.txt
index 7a1f6c3..1c93a2b 100644
--- a/js/lib/pegTokenizer.pegjs.txt
+++ b/js/lib/pegTokenizer.pegjs.txt
@@ -2131,7 +2131,7 @@
               return [
                   new TagTk( 'span', [ new KV( 'typeof', 'mw:Placeholder' ) ], 
{ src: ' ', tsr: [pos0, pos0] } ),
                   "\u00a0",
-                  new EndTagTk( 'span', [], { src: ' ', tsr: [pos, pos] } )
+                  new EndTagTk( 'span', [], { tsr: [pos, pos] } )
               ];
           }
           / t:text_char )+
diff --git a/js/tests/parserTests.txt b/js/tests/parserTests.txt
index 2f3cb53..3741e91 100644
--- a/js/tests/parserTests.txt
+++ b/js/tests/parserTests.txt
@@ -898,6 +898,16 @@
 </p>
 !! end
 
+!! test
+Entities inside template parameters
+!! options
+parsoid
+!! input
+{{echo|&ndash;}}
+!! result
+<p><span typeof="mw:Transclusion mw:Entity" 
data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}'>&ndash;</span>
+</p>
+!! end
 
 ###
 ### Comments
@@ -15901,7 +15911,7 @@
 !!end
 
 !! test
-Image: Modyfing size of an imge
+Image: Modifying size of an imge
 !! options
 parsoid=html2wt
 !! input

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I6063e93aebfe656641c714939a5962f2004cc346
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: GWicke <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to