diff --git a/lib/ace/tokenizer.js b/lib/ace/tokenizer.js index af476878..d78058d8 100644 --- a/lib/ace/tokenizer.js +++ b/lib/ace/tokenizer.js @@ -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)