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