https://www.mediawiki.org/wiki/Special:Code/MediaWiki/113366

Revision: 113366
Author:   gwicke
Date:     2012-03-08 14:24:04 +0000 (Thu, 08 Mar 2012)
Log Message:
-----------
Temporary fix for template tokenization, especially needed for 
[[Template:Cite core]].

Modified Paths:
--------------
    trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.environment.js
    trunk/extensions/VisualEditor/modules/parser/mediawiki.tokenizer.peg.js
    trunk/extensions/VisualEditor/modules/parser/pegTokenizer.pegjs.txt

Modified: 
trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.environment.js
===================================================================
--- 
trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.environment.js    
    2012-03-08 13:57:39 UTC (rev 113365)
+++ 
trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.environment.js    
    2012-03-08 14:24:04 UTC (rev 113366)
@@ -244,7 +244,7 @@
                        this.dp ( 'MWParserEnvironment.tokensToString, non-text 
token: ' + 
                                        tstring + JSON.stringify( tokens, null, 
2 ) );
                        //console.trace();
-                       out.push( tstring );
+                       //out.push( tstring );
                }
        }
        //console.warn( 'MWParserEnvironment.tokensToString result: ' + 
out.join('') );

Modified: 
trunk/extensions/VisualEditor/modules/parser/mediawiki.tokenizer.peg.js
===================================================================
--- trunk/extensions/VisualEditor/modules/parser/mediawiki.tokenizer.peg.js     
2012-03-08 13:57:39 UTC (rev 113365)
+++ trunk/extensions/VisualEditor/modules/parser/mediawiki.tokenizer.peg.js     
2012-03-08 14:24:04 UTC (rev 113366)
@@ -106,7 +106,10 @@
 PegTokenizer.prototype.inline_breaks = function (input, pos, syntaxFlags ) {
        switch( input[pos] ) {
                case '=':
-                       return syntaxFlags.equal ||
+                       return ( syntaxFlags.equalAttrib && 
+                                       (syntaxFlags.equalTemplate || ! 
syntaxFlags.template ) ) ||
+                               (syntaxFlags.equalTemplate && 
+                                (syntaxFlags.equalAttrib || 
syntaxFlags.template)) ||
                                ( syntaxFlags.h &&
                                  input.substr( pos + 1, 200)
                                  .match(/[ \t]*[\r\n]/) !== null ) || null;

Modified: trunk/extensions/VisualEditor/modules/parser/pegTokenizer.pegjs.txt
===================================================================
--- trunk/extensions/VisualEditor/modules/parser/pegTokenizer.pegjs.txt 
2012-03-08 13:57:39 UTC (rev 113365)
+++ trunk/extensions/VisualEditor/modules/parser/pegTokenizer.pegjs.txt 
2012-03-08 14:24:04 UTC (rev 113366)
@@ -669,8 +669,12 @@
 tplarg_or_template = & '{{{{{' template / tplarg / template
 
 template
-  = "{{" target:template_param_text
-    params:(newline? "|" newline? p:template_param { return p })* 
+  = "{{" (newline / space)* target:template_param_text
+    params:(( newline / space )* "|"
+                r:( &"|" { return new KV( '', '') } // empty argument
+                    / newline? p:template_param { return p } 
+                  ) { return r } 
+            )* 
     "}}" {
       // Insert target as first positional attribute, so that it can be
       // generically expanded. The TemplateHandler then needs to shift it out
@@ -720,15 +724,15 @@
 
 // FIXME: handle template args and templates in key! (or even parser 
functions?)
 template_param_name
-  = & { return setFlag( 'equal' ) }
+  = & { return setFlag( 'equalTemplate' ) }
     tpt:template_param_text
     {
-        clearFlag( 'equal' );
+        clearFlag( 'equalTemplate' );
         //console.warn( 'template param name matched: ' + pp( tpt ) );
         return tpt;
     }
 
-  / & { return clearFlag( 'equal' ) }
+  / & { return clearFlag( 'equalTemplate' ) }
   //= h:( !"}}" x:([^=|\n]) { return x } )* { return h.join(''); }
 
 template_param_text
@@ -740,6 +744,7 @@
     }
   / & { return clearFlag('template'); }
 
+
 // TODO: handle link prefixes as in al[[Razi]]
 wikilink
   = & { return posStack.push('wikilink' , pos); }
@@ -1101,6 +1106,7 @@
     value:(( space / newline )*
           v:generic_attribute_newline_value { return v })?
 {
+    //console.warn('generic_newline_attribute: ' + pp( name ))
     if ( value !== '' ) {
         return new KV( name, value );
     } else {
@@ -1134,15 +1140,15 @@
 //  }
 
 generic_attribute_name
-  = & { return setFlag( 'equal' ) }
+  = & { return setFlag( 'equalAttrib' ) }
   ! '/>'
   name:attribute_preprocessor_text_line
     {
-        clearFlag( 'equal' );
+        clearFlag( 'equalAttrib' );
         //console.warn( 'generic attribute name: ' + pp( name ) );
         return name;
     }
-  / & { return clearFlag( 'equal' ) }
+  / & { return clearFlag( 'equalAttrib' ) }
 
 // A generic attribute, possibly spanning multiple lines.
 generic_attribute_newline_value


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

Reply via email to