do not require highlighter to match every letter

This commit is contained in:
nightwing 2013-01-03 20:52:36 +04:00
commit 0e7a7b9ebe

View file

@ -106,9 +106,8 @@ var Tokenizer = function(rules, flag) {
ruleRegExps.push(adjustedregex); ruleRegExps.push(adjustedregex);
} }
console.log(key, ruleRegExps)
this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", flag); this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag);
} }
}; };
@ -143,7 +142,7 @@ var Tokenizer = function(rules, flag) {
var stack = startState.slice(0); var stack = startState.slice(0);
startState = stack[0]; startState = stack[0];
} else } else
var stack = [] var stack = [];
var currentState = startState || "start"; var currentState = startState || "start";
var state = this.rules[currentState]; var state = this.rules[currentState];
@ -160,7 +159,16 @@ var Tokenizer = function(rules, flag) {
var type = "text"; var type = "text";
var rule = null; var rule = null;
var value = match[0]; var value = match[0];
var index = re.lastIndex;
if (index - value.length > lastIndex) {
if (token.type)
tokens.push(token);
token = {
type: "regex",
value: line.substring(lastIndex, index - value.length)
};
}
for (var i = 0; i < match.length-2; i++) { for (var i = 0; i < match.length-2; i++) {
if (match[i + 1] === undefined) if (match[i + 1] === undefined)
continue; continue;
@ -182,9 +190,9 @@ var Tokenizer = function(rules, flag) {
state = this.rules[currentState]; state = this.rules[currentState];
} }
mapping = this.matchMappings[currentState]; mapping = this.matchMappings[currentState];
lastIndex = re.lastIndex; lastIndex = index;
re = this.regExps[currentState]; re = this.regExps[currentState];
re.lastIndex = lastIndex; re.lastIndex = index;
} }
break; break;
} }
@ -210,7 +218,7 @@ var Tokenizer = function(rules, flag) {
if (lastIndex == line.length) if (lastIndex == line.length)
break; break;
lastIndex = re.lastIndex; lastIndex = index;
} }
if (token.type) if (token.type)