[MediaWiki-commits] [Gerrit] Used config to identify valid exts; Made pre nowiki case i... - change (mediawiki...Parsoid)

2013-03-07 Thread Subramanya Sastry (Code Review)
Subramanya Sastry has uploaded a new change for review.

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


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(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid 
refs/changes/30/52630/1

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 

[MediaWiki-commits] [Gerrit] Used config to identify valid exts; Made pre nowiki case i... - change (mediawiki...Parsoid)

2013-03-07 Thread GWicke (Code Review)
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