diff --git a/demo/kitchen-sink/docs/css.css b/demo/kitchen-sink/docs/css.css index a4c3b4fd..0ebe5f2d 100644 --- a/demo/kitchen-sink/docs/css.css +++ b/demo/kitchen-sink/docs/css.css @@ -1,6 +1,6 @@ .text-layer { font-family: Monaco, "Courier New", monospace; - font-size: 12px; + font-size: 12pX; cursor: text; } diff --git a/lib/ace/mode/_test/tokens_css.json b/lib/ace/mode/_test/tokens_css.json index dec51e37..244f0a03 100644 --- a/lib/ace/mode/_test/tokens_css.json +++ b/lib/ace/mode/_test/tokens_css.json @@ -18,7 +18,7 @@ ["support.type","font-size"], ["text",": "], ["constant.numeric","12"], - ["keyword","px"], + ["keyword","pX"], ["text",";"] ],[ "ruleset", diff --git a/lib/ace/tokenizer.js b/lib/ace/tokenizer.js index 3b683fa5..c4c3a928 100644 --- a/lib/ace/tokenizer.js +++ b/lib/ace/tokenizer.js @@ -58,6 +58,7 @@ var Tokenizer = function(rules) { var mapping = this.matchMappings[key] = {defaultToken: "text"}; var flag = "g"; + var spliterRurles = []; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.defaultToken) @@ -104,7 +105,7 @@ var Tokenizer = function(rules) { adjustedregex = this.removeCapturingGroups(rule.regex); } if (!rule.splitRegex && typeof rule.token != "string") - rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); + spliterRurles.push(rule); // flag will be known only at the very end } mapping[matchTotal] = i; @@ -117,6 +118,10 @@ var Tokenizer = function(rules) { rule.onMatch = null; rule.__proto__ = null; } + + spliterRurles.forEach(function(rule) { + rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); + }, this); this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); } @@ -146,6 +151,8 @@ var Tokenizer = function(rules) { if (!str) return []; var values = this.splitRegex.exec(str); + if (!values) + return "text"; var tokens = []; var types = this.tokenArray; for (var i = 0, l = types.length; i < l; i++) {