mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-25 14:56:20 +00:00
67 lines
1.4 KiB
JavaScript
67 lines
1.4 KiB
JavaScript
|
/*!
|
||
|
* VisualEditor MediaWiki UserInterface raster icon styles.
|
||
|
*
|
||
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
||
|
* @license The MIT License (MIT); see LICENSE.txt
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* MWSyntaxHighlight tokenizer
|
||
|
*
|
||
|
* @constructor
|
||
|
*/
|
||
|
ve.dm.MWSyntaxHighlightTokenizer = function VeDmMWSyntaxHighlightTokenizer() {
|
||
|
this.words = /([^\W0-9]+)/; // Test for words
|
||
|
this.num = /([0-9]+)/; //Test for numbers
|
||
|
this.tokenRegex = /(\W|[^\W0-9]+|[0-9]+)/g;
|
||
|
};
|
||
|
|
||
|
/* Methods */
|
||
|
|
||
|
/**
|
||
|
* Tokenize data string
|
||
|
*
|
||
|
* @method
|
||
|
* @param {string} data Model data string
|
||
|
* @returns {Array} Tokens with indices and styling slots
|
||
|
*/
|
||
|
ve.dm.MWSyntaxHighlightTokenizer.prototype.tokenize = function ( data ) {
|
||
|
var tokens = [],
|
||
|
match;
|
||
|
while ( (match = this.tokenRegex.exec( data )) !== null ){
|
||
|
if (this.words.test(match) || this.num.test(match)){
|
||
|
tokens.push({
|
||
|
'text' : match[1],
|
||
|
'index' : match.index,
|
||
|
'mark' : [],
|
||
|
'tip' : []
|
||
|
});
|
||
|
} else {
|
||
|
if (match[1] !== '\t'){
|
||
|
tokens.push({
|
||
|
'text' : match[1],
|
||
|
'index' : match.index,
|
||
|
'mark' : [],
|
||
|
'tip' : []
|
||
|
});
|
||
|
} else {
|
||
|
tokens.push({
|
||
|
'text' : match[1],
|
||
|
'index' : match.index,
|
||
|
'mark' : [],
|
||
|
'tip' : [],
|
||
|
'tab' : ''
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// Make a new char phantom
|
||
|
tokens.push({
|
||
|
'text' : ' ',
|
||
|
'index' : data.length,
|
||
|
'mark' : [],
|
||
|
'tip' : [],
|
||
|
'phantom' : ''
|
||
|
});
|
||
|
return tokens;
|
||
|
};
|