Clean up transform callback interface

This commit is contained in:
Gabriel Wicke 2012-02-07 11:53:29 +00:00
parent 1f6db903e9
commit b4892102a4
Notes: Gabriel Wicke 2012-02-27 16:40:01 +00:00
5 changed files with 27 additions and 29 deletions

View file

@ -31,7 +31,7 @@ PostExpandParagraphHandler.prototype.register = function ( dispatcher ) {
this.newlineRank, 'end' );
};
PostExpandParagraphHandler.prototype.reset = function ( token, cb, frame, prevToken ) {
PostExpandParagraphHandler.prototype.reset = function ( token, frame, cb ) {
//console.log( 'PostExpandParagraphHandler.reset ' + JSON.stringify( this.tokens ) );
if ( this.newLines ) {
return { tokens: this._finish() };
@ -55,7 +55,7 @@ PostExpandParagraphHandler.prototype._finish = function ( ) {
// Handle NEWLINE tokens, which trigger the actual quote analysis on the
// collected quote tokens so far.
PostExpandParagraphHandler.prototype.onNewLine = function ( token, cb, frame, prevToken ) {
PostExpandParagraphHandler.prototype.onNewLine = function ( token, frame, cb ) {
//console.log( 'PostExpandParagraphHandler.onNewLine: ' + JSON.stringify( token, null , 2 ) );
var res;
this.tokens.push( token );
@ -70,7 +70,7 @@ PostExpandParagraphHandler.prototype.onNewLine = function ( token, cb, frame, p
};
PostExpandParagraphHandler.prototype.onAny = function ( token, cb, frame, prevToken ) {
PostExpandParagraphHandler.prototype.onAny = function ( token, frame, cb ) {
//console.log( 'PostExpandParagraphHandler.onAny' );
this.tokens.push( token );
if ( token.type === 'COMMENT' ||

View file

@ -54,17 +54,15 @@ QuoteTransformer.prototype._startNewChunk = function ( ) {
// the length of quote string. Actual analysis and conversion to the
// appropriate tag tokens is deferred until the next NEWLINE token triggers
// onNewLine.
QuoteTransformer.prototype.onQuote = function ( token, cb, frame, prevToken ) {
QuoteTransformer.prototype.onQuote = function ( token, frame, prevToken ) {
var qlen = token.value.length,
tokens = [], // output tokens
ctx = {
token: token,
cb: cb,
frame: frame,
prevToken: prevToken
},
ctx2 = {
cb: cb,
frame: frame,
prevToken: prevToken
};
@ -122,7 +120,7 @@ QuoteTransformer.prototype.onQuote = function ( token, cb, frame, prevToken ) {
return {};
};
QuoteTransformer.prototype.onAny = function ( token, cb, frame, prevToken ) {
QuoteTransformer.prototype.onAny = function ( token, frame, prevToken ) {
//console.log('qt onAny: ' + JSON.stringify(token, null, 2));
this.currentChunk.push( token );
return {};
@ -130,7 +128,7 @@ QuoteTransformer.prototype.onAny = function ( token, cb, frame, prevToken ) {
// Handle NEWLINE tokens, which trigger the actual quote analysis on the
// collected quote tokens so far.
QuoteTransformer.prototype.onNewLine = function ( token, cb, frame, prevToken ) {
QuoteTransformer.prototype.onNewLine = function ( token, frame, prevToken ) {
var res;
if( ! this.isActive ) {

View file

@ -53,7 +53,7 @@ TemplateHandler.prototype.register = function ( manager ) {
* calls or sets up the callback to _expandTemplate, which then fetches and
* processes the template.
*/
TemplateHandler.prototype.onTemplate = function ( token, cb ) {
TemplateHandler.prototype.onTemplate = function ( token, frame, cb ) {
//console.log('onTemplate! ' + JSON.stringify( token, null, 2 ) +
// ' args: ' + JSON.stringify( this.manager.args ));
@ -353,7 +353,7 @@ TemplateHandler.prototype._fetchTemplateAndTitle = function ( title, callback, t
/**
* Expand template arguments with tokens from the containing frame.
*/
TemplateHandler.prototype.onTemplateArg = function ( token, cb, frame ) {
TemplateHandler.prototype.onTemplateArg = function ( token, frame, cb ) {
var attributes = [{k: token.argname, v: token.defaultvalue}];

View file

@ -50,7 +50,7 @@ TokenCollector.prototype._anyDelta = 0.00001;
* Handle the delimiter token.
* XXX: Adjust to sync phase callback when that is modified!
*/
TokenCollector.prototype._onDelimiterToken = function ( token, cb, frame ) {
TokenCollector.prototype._onDelimiterToken = function ( token, frame, cb ) {
var res;
if ( this.isActive ) {
// finish processing
@ -93,7 +93,7 @@ TokenCollector.prototype._onDelimiterToken = function ( token, cb, frame ) {
* encountering the delimiter token, and collects all tokens until the end
* token is reached.
*/
TokenCollector.prototype._onAnyToken = function ( token, cb, frame ) {
TokenCollector.prototype._onAnyToken = function ( token, frame, cb ) {
// Simply collect anything ordinary in between
this.tokens.push( token );
return { };

View file

@ -199,7 +199,7 @@ TokenTransformManager.prototype._cmpTransformations = function ( a, b ) {
* processed tokens.
* @returns {Object} Token(s) and async indication.
*/
TokenTransformManager.prototype._transformTagToken = function ( token, cb, phaseEndRank ) {
TokenTransformManager.prototype._transformTagToken = function ( token, phaseEndRank, cbOrPrevToken ) {
// prepend 'any' transformers
var ts = this.transformers.any,
res = { token: token },
@ -225,7 +225,7 @@ TokenTransformManager.prototype._transformTagToken = function ( token, cb, phase
continue;
}
// Transform token with side effects
res = transformer.transform( res.token, cb, this, this.prevToken );
res = transformer.transform( res.token, this, cbOrPrevToken );
// XXX: Sync transform:
// res = transformer.transform( res.token, this, this.prevToken );
// XXX: Async transform:
@ -269,7 +269,7 @@ TokenTransformManager.prototype._transformTagToken = function ( token, cb, phase
* @param {Array} ts List of token transformers for this token type.
* @returns {Object} Token(s) and async indication.
*/
TokenTransformManager.prototype._transformToken = function ( token, cb, phaseEndRank, ts ) {
TokenTransformManager.prototype._transformToken = function ( token, phaseEndRank, ts, cbOrPrevToken ) {
// prepend 'any' transformers
var anyTrans = this.transformers.any;
if ( anyTrans.length ) {
@ -290,7 +290,7 @@ TokenTransformManager.prototype._transformToken = function ( token, cb, phaseEnd
// XXX: consider moving the rank out of the token itself to avoid
// transformations messing with it in broken ways. Not sure if
// some transformations need to manipulate it though. gwicke
res = transformer.transform( res.token, cb, this, this.prevToken );
res = transformer.transform( res.token, this, cbOrPrevToken );
if ( !res.token ||
res.token.type !== token.type ) {
this._resetTokenRank ( res, transformer );
@ -489,26 +489,26 @@ AsyncTokenTransformManager.prototype.transformTokens = function ( tokens, parent
switch ( token.constructor ) {
case String:
res = this._transformToken( token, cb, phaseEndRank, ts.text );
res = this._transformToken( token, phaseEndRank, ts.text, cb );
break;
case NlTk:
res = this._transformToken( token, cb, phaseEndRank, ts.newline );
res = this._transformToken( token, phaseEndRank, ts.newline, cb );
break;
case TagTk:
case EndTagTk:
case SelfclosingTagTk:
res = this._transformTagToken( token, cb, phaseEndRank );
res = this._transformTagToken( token, phaseEndRank, cb );
break;
default:
switch( token.type ) {
case 'COMMENT':
res = this._transformToken( token, cb, phaseEndRank, ts.comment);
res = this._transformToken( token, phaseEndRank, ts.comment, cb );
break;
case 'END':
res = this._transformToken( token, cb, phaseEndRank, ts.end );
res = this._transformToken( token, phaseEndRank, ts.end, cb );
break;
default:
res = this._transformToken( token, cb, phaseEndRank, ts.martian );
res = this._transformToken( token, phaseEndRank, ts.martian, cb );
break;
}
break;
@ -670,27 +670,27 @@ SyncTokenTransformManager.prototype.onChunk = function ( tokens ) {
switch( token.constructor ) {
case String:
res = this._transformToken( token, cb, this.phaseEndRank,
ts.text );
res = this._transformToken( token, this.phaseEndRank,
ts.text, this.prevToken );
break;
case NlTk:
res = this._transformToken( token, cb, this.phaseEndRank, ts.newline );
res = this._transformToken( token, this.phaseEndRank, ts.newline, this.prevToken );
break;
case TagTk:
case EndTagTk:
case SelfclosingTagTk:
res = this._transformTagToken( token, cb, this.phaseEndRank );
res = this._transformTagToken( token, this.phaseEndRank, this.prevToken );
break;
default:
switch( token.type ) {
case 'COMMENT':
res = this._transformToken( token, cb, this.phaseEndRank, ts.comment );
res = this._transformToken( token, this.phaseEndRank, ts.comment, this.prevToken );
break;
case 'END':
res = this._transformToken( token, cb, this.phaseEndRank, ts.end );
res = this._transformToken( token, this.phaseEndRank, ts.end, this.prevToken );
break;
default:
res = this._transformToken( token, cb, this.phaseEndRank, ts.martian );
res = this._transformToken( token, this.phaseEndRank, ts.martian, this.prevToken );
break;
}
}