GWicke has submitted this change and it was merged.

Change subject: Used config to identify valid exts; Made pre & nowiki case 
insensitive
......................................................................


Used config to identify valid exts; Made pre & nowiki case insensitive

* Used config information to identify valid extensions and removed
  temporary hack.

* Made nowiki and pre tag matching case-insensitive.
  - RTing of these in original case is not yet done -- this seems
    a little bit messy and will require fixing any tag-comparison
        that doesn't do normalized case comparison.  Will also require
        fixes to serializer.  Can be done post ongoing refactoring.

* 1 wt2wt test worse off -- this is because of RTing in normalized
  lower-case of nowiki tags.

Change-Id: Ie727b76926247d65abf4b9c3fe79afc32eb03827
---
M js/lib/mediawiki.Util.js
M js/lib/pegTokenizer.pegjs.txt
2 files changed, 27 insertions(+), 33 deletions(-)

Approvals:
  GWicke: Verified; Looks good to me, approved



diff --git a/js/lib/mediawiki.Util.js b/js/lib/mediawiki.Util.js
index 028bba6..74a451b 100644
--- a/js/lib/mediawiki.Util.js
+++ b/js/lib/mediawiki.Util.js
@@ -803,25 +803,6 @@
                }
                console.error(out.join(arguments[1]));
        },
-
-       // SSS FIXME: This should probably come from some config/api?
-       // This is just a temporary hack for this patch
-       installedExts: null,
-
-       extensionInstalled: function(env, name) {
-               // SSS FIXME: This is just a temporary hack for this patch.
-               //
-               // Once this info is available in the config, we should check
-               // env.conf.wiki.extensionTags instead.
-
-               if (!this.installedExts) {
-                       this.installedExts = this.arrayToHash([
-                               'categorytree', 'charinsert', 'gallery', 
'hiero', 'imagemap',
-                               'inputbox', 'math', 'poem', 'syntaxhighlight', 
'tag', 'timeline'
-                       ]);
-               }
-               return this.installedExts[name] === true;
-       }
 };
 
 /**
diff --git a/js/lib/pegTokenizer.pegjs.txt b/js/lib/pegTokenizer.pegjs.txt
index fbeae09..3559e17 100644
--- a/js/lib/pegTokenizer.pegjs.txt
+++ b/js/lib/pegTokenizer.pegjs.txt
@@ -1251,6 +1251,12 @@
       return [l].concat(ls);
   }
 
+pre_tag_name =
+  tag:[prePRE]+ {
+      tag = tag.join('');
+      return tag.toLowerCase() === "pre" ? tag : null;
+  }
+
 // An indented pre block that is surrounded with pre tags. The pre tags are
 // used directly.
 // XXX gwicke: check if the first line is not indented, and round-trip spaces;
@@ -1259,12 +1265,12 @@
 pre_indent_in_tags
   = & { return stops.inc('pre'); }
        space+ // XXX: capture space for round-tripping
-    "<pre"
+    "<" pre_tag_name
     attribs:generic_attribute*
     ">"
     l:inlineline
     ls:(sol pre_indent_line)*
-    "</pre>"
+    "</" pre_tag_name ">"
   {
     stops.dec('pre');
     var ret = [ new TagTk( 'pre', attribs, { tsr: [pos0, pos0] } ) ];
@@ -1288,7 +1294,7 @@
  */
 pre
   = & { return stops.inc('pre'); }
-    "<pre"
+    "<" pre_tag_name
     attribs:generic_attribute*
     endpos:(">" { return pos })
     // MediaWiki <pre> is special in that it converts all pre content to plain
@@ -1296,14 +1302,14 @@
     ts:(    newlineToken
                 / (htmlentity / [^&<]+)+
                 / nowiki
-                / !"</pre>" t2:(htmlentity / .) { return t2 })+
-    ("</pre>" / eof) {
+                / !("</" pre_tag_name ">") t2:(htmlentity / .) { return t2 })+
+    ("</" pre_tag_name ">" / eof) {
         stops.dec('pre');
         // return nowiki tags as well?
         return [ new TagTk( 'pre', attribs, { stx: 'html', tsr: [pos0, endpos] 
} ) ]
                     .concat(flatten_stringlist(ts), [ new EndTagTk( 'pre', [], 
{ tsr: [pos - 6, pos] } ) ]);
     }
-  / "</pre>" { stops.dec('pre'); return "</pre>"; }
+  / "</" pre_tag_name ">" { stops.dec('pre'); return "</pre>"; }
   / & { return stops.dec('pre'); }
 
 /* -----------------------------------------------------------------------
@@ -1325,7 +1331,7 @@
         var tagName = t.name.toLowerCase(),
             dp = t.dataAttribs,
             isHtmlTag = html5_tag_names[tagName] === true || 
html_old_names[tagName] === true,
-            isInstalledExt = Util.extensionInstalled(pegArgs.env, tagName),
+            isInstalledExt = pegArgs.env.conf.wiki.isExtensionTag(tagName),
             supportedTag = nativeParsoidExts[tagName] === true;
 
         if (!isHtmlTag && !isInstalledExt && !supportedTag) {
@@ -1464,9 +1470,16 @@
  * pre blocks would still remain in the grammar though, so overall handling it
  * all here is cleaner.
  */
+
+nowiki_tag_name =
+  tag:[nowikNOWIK]+ {
+      tag = tag.join('');
+      return tag.toLowerCase() === "nowiki" ? tag : null;
+  }
+
 nowiki
-  = "<nowiki>" nc:nowiki_content "</nowiki>" {
-        //console.warn( 'full nowiki return: ' + pp(nc));
+  = "<" nowiki_tag_name ">" nc:nowiki_content "</" nowiki_tag_name ">" {
+        // console.warn( 'full nowiki return: ' + pp(nc));
         return [
             new TagTk( 'span',
                     [
@@ -1483,8 +1496,8 @@
     }
   // nowiki fallback: source-based round-tripping of <nowiki />.
   / nw0:({return pos})
-    "<nowiki" [ ]* "/>" {
-      //console.warn('<nowiki/>');
+    "<" nowiki_tag_name [ ]* "/>" {
+      // console.warn('<nowiki/>');
       return [
           new SelfclosingTagTk('meta',
                   [new KV('typeof', 'mw:Placeholder')],
@@ -1498,8 +1511,8 @@
   // of unbalanced nowiki tags that are treated as text.
   / ! { return stops.counters.pre > 0; }
     nw0:({return pos})
-    "<" "/"? "nowiki" [ ]* "/"? ">" {
-      //console.warn('nowiki text');
+    "<" "/"? nowiki_tag_name [ ]* "/"? ">" {
+      // console.warn('nowiki text');
       var nowiki = input.substring(nw0, pos);
       return [
             new TagTk( 'span', [
@@ -1528,7 +1541,7 @@
                  //console.warn('nested pre in nowiki');
                  return ["<pre"].concat(p0, p1, [">"], p2, 
["</pre>"]).join('');
                }
-           / (!pre_break !"</nowiki>" c:(htmlentity / .) {
+           / (!pre_break !("</" nowiki_tag_name ">") c:(htmlentity / .) {
                //console.warn('nowiki: single char' + c);
                return c;
            })

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie727b76926247d65abf4b9c3fe79afc32eb03827
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: GWicke <gwi...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to