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);
}
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);
startState = stack[0];
} else
var stack = []
var stack = [];
var currentState = startState || "start";
var state = this.rules[currentState];
@ -160,7 +159,16 @@ var Tokenizer = function(rules, flag) {
var type = "text";
var rule = null;
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++) {
if (match[i + 1] === undefined)
continue;
@ -182,9 +190,9 @@ var Tokenizer = function(rules, flag) {
state = this.rules[currentState];
}
mapping = this.matchMappings[currentState];
lastIndex = re.lastIndex;
lastIndex = index;
re = this.regExps[currentState];
re.lastIndex = lastIndex;
re.lastIndex = index;
}
break;
}
@ -210,7 +218,7 @@ var Tokenizer = function(rules, flag) {
if (lastIndex == line.length)
break;
lastIndex = re.lastIndex;
lastIndex = index;
}
if (token.type)