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

Revision: 109633
Author:   gwicke
Date:     2012-01-20 18:47:17 +0000 (Fri, 20 Jan 2012)
Log Message:
-----------
Fix a bug in TokenCollector, and misc tweaks for template expansions.

Modified Paths:
--------------
    trunk/extensions/VisualEditor/modules/parser/ext.core.NoOnlyInclude.js
    trunk/extensions/VisualEditor/modules/parser/ext.core.TemplateHandler.js
    trunk/extensions/VisualEditor/modules/parser/ext.util.TokenCollector.js
    trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.js
    trunk/extensions/VisualEditor/modules/parser/parse.js
    trunk/extensions/VisualEditor/tests/parser/parserTests.js

Modified: trunk/extensions/VisualEditor/modules/parser/ext.core.NoOnlyInclude.js
===================================================================
--- trunk/extensions/VisualEditor/modules/parser/ext.core.NoOnlyInclude.js      
2012-01-20 18:39:59 UTC (rev 109632)
+++ trunk/extensions/VisualEditor/modules/parser/ext.core.NoOnlyInclude.js      
2012-01-20 18:47:17 UTC (rev 109633)
@@ -11,7 +11,7 @@
        new TokenCollector( 
                        manager,
                        function ( tokens ) { 
-                               //manager.env.dp( 'noinclude stripping', tokens 
);
+                               manager.env.dp( 'noinclude stripping', tokens );
                                return {};
                        }, // just strip it all..
                        true, // match the end-of-input if </noinclude> is 
missing

Modified: 
trunk/extensions/VisualEditor/modules/parser/ext.core.TemplateHandler.js
===================================================================
--- trunk/extensions/VisualEditor/modules/parser/ext.core.TemplateHandler.js    
2012-01-20 18:39:59 UTC (rev 109632)
+++ trunk/extensions/VisualEditor/modules/parser/ext.core.TemplateHandler.js    
2012-01-20 18:47:17 UTC (rev 109633)
@@ -291,15 +291,15 @@
 TemplateHandler.prototype._fetchTemplateAndTitle = function ( title, callback, 
tplExpandData ) {
        // @fixme normalize name?
        var self = this;
-       if (this.manager.env.pageCache[title]) {
-               // Unroll the stack here
+       if ( title in this.manager.env.pageCache ) {
+               // Unwind the stack
                process.nextTick(
                                function () {
                                        callback( 
self.manager.env.pageCache[title], title )
                                } 
                );
        } else if ( ! this.manager.env.fetchTemplates ) {
-               callback('Page/template fetching disabled, and no cache for ' + 
title);
+               callback( 'Page/template fetching disabled, and no cache for ' 
+ title, title );
        } else {
                
                // We are about to start an async request for a template, so 
mark this
@@ -406,11 +406,8 @@
                //console.log( 'response for ' + title + ' :' + body + ':' );
                if(error) {
                        manager.env.dp(error);  
-                       callback('Page/template fetch failure for title ' + 
title, title);
-                       return ;
-               }
-
-               if(response.statusCode ==  200) {
+                       self.emit('src', 'Page/template fetch failure for title 
' + title, title);
+               } else if(response.statusCode ==  200) {
                        var src = '';
                        try {
                                //console.log( 'body: ' + body );
@@ -438,9 +435,11 @@
                        manager.env.pageCache[title] = src;
                        manager.env.dp(data);
                        self.emit( 'src', src, title );
-                       // Remove self from request queue
-                       delete manager.env.requestQueue[title];
                }
+               // XXX: handle other status codes
+
+               // Remove self from request queue
+               delete manager.env.requestQueue[title];
        });
 }
 

Modified: 
trunk/extensions/VisualEditor/modules/parser/ext.util.TokenCollector.js
===================================================================
--- trunk/extensions/VisualEditor/modules/parser/ext.util.TokenCollector.js     
2012-01-20 18:39:59 UTC (rev 109632)
+++ trunk/extensions/VisualEditor/modules/parser/ext.util.TokenCollector.js     
2012-01-20 18:47:17 UTC (rev 109633)
@@ -51,28 +51,39 @@
  * XXX: Adjust to sync phase callback when that is modified!
  */
 TokenCollector.prototype._onDelimiterToken = function ( token, cb, frame ) {
-       this.manager.addTransform( this._onAnyToken.bind ( this ), 
-                       this.rank + this._anyDelta, 'any' );
-       this.tokens.push ( token );
-       if ( ! this.isActive ) {
-               this.isActive = true;
-               this.cb = cb;
-               return { async: true };
-       } else if ( token.type !== 'end' || this.toEnd ) {
-               // end token
-               var res = this.transformation ( this.tokens, this.cb, 
this.manager );
-               this.tokens = [];
+       var res;
+       if ( this.isActive ) {
+               // finish processing
+               this.tokens.push ( token );
+               this.isActive = false;
                this.manager.removeTransform( this.rank + this._anyDelta, 'any' 
);
-               this.isActive = false;
-               // Transformation can be either sync or async, but receives all 
collected
-               // tokens instead of a single token.
-               return res;
-               // XXX sync version: return tokens
-       } else if ( token.type === 'end' && ! this.toEnd ) {
+               if ( token.type !== 'END' || this.toEnd ) {
+                       // end token
+                       res = this.transformation ( this.tokens, this.cb, 
this.manager );
+                       this.tokens = [];
+                       // Transformation can be either sync or async, but 
receives all collected
+                       // tokens instead of a single token.
+                       return res;
+                       // XXX sync version: return tokens
+               } else {
+                       // just return collected tokens
+                       res = this.tokens;
+                       this.tokens = [];
+                       return { tokens: res };
+               }
+       } else if ( token.type !== 'END' ) {
+               this.manager.env.dp( 'starting collection on ', token );
+               // start collection
+               this.tokens.push ( token );
+               this.manager.addTransform( this._onAnyToken.bind ( this ), 
+                               this.rank + this._anyDelta, 'any' );
                // Did not encounter a matching end token before the end, and 
are not
                // supposed to collect to the end. So just return the tokens 
verbatim.
-               this.isActive = false;
-               return { tokens: this.tokens };
+               this.isActive = true;
+               return { };
+       } else {
+               // pass through end token
+               return { token: token };
        }
 };
 

Modified: trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.js
===================================================================
--- trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.js    
2012-01-20 18:39:59 UTC (rev 109632)
+++ trunk/extensions/VisualEditor/modules/parser/mediawiki.parser.js    
2012-01-20 18:47:17 UTC (rev 109633)
@@ -16,8 +16,9 @@
        PegTokenizer                = 
require('./mediawiki.tokenizer.peg.js').PegTokenizer,
        TokenTransformManager       = 
require('./mediawiki.TokenTransformManager.js'),
 
-       NoInclude                                       = 
require('./ext.core.NoOnlyInclude.js').NoInclude,
-       OnlyInclude                                     = 
require('./ext.core.NoOnlyInclude.js').OnlyInclude,
+       NoOnlyInclude                           = 
require('./ext.core.NoOnlyInclude.js'),
+       OnlyInclude                                     = 
NoOnlyInclude.OnlyInclude,
+       NoInclude                                       = 
NoOnlyInclude.NoInclude,
        QuoteTransformer            = 
require('./ext.core.QuoteTransformer.js').QuoteTransformer,
        PostExpandParagraphHandler  = 
require('./ext.core.PostExpandParagraphHandler.js')
                                                                                
                                                .PostExpandParagraphHandler,

Modified: trunk/extensions/VisualEditor/modules/parser/parse.js
===================================================================
--- trunk/extensions/VisualEditor/modules/parser/parse.js       2012-01-20 
18:39:59 UTC (rev 109632)
+++ trunk/extensions/VisualEditor/modules/parser/parse.js       2012-01-20 
18:47:17 UTC (rev 109633)
@@ -20,7 +20,7 @@
                                                wgScriptExtension: ".php",
                                                fetchTemplates: true,
                                                // enable/disable debug output 
using this switch        
-                                               debug: false
+                                               debug: true
                                        } ),
                parser = new ParserPipeline( env );
 

Modified: trunk/extensions/VisualEditor/tests/parser/parserTests.js
===================================================================
--- trunk/extensions/VisualEditor/tests/parser/parserTests.js   2012-01-20 
18:39:59 UTC (rev 109632)
+++ trunk/extensions/VisualEditor/tests/parser/parserTests.js   2012-01-20 
18:47:17 UTC (rev 109633)
@@ -183,7 +183,10 @@
        this.failOutputTests = 0;
 
        // Create a new parser environment
-       this.env = new MWParserEnvironment({ fetchTemplates: false });
+       this.env = new MWParserEnvironment({ 
+               fetchTemplates: false,
+               debug: false
+       });
 }
 
 


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

Reply via email to