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