diff --git a/demo/kitchen-sink/util.js b/demo/kitchen-sink/util.js index 13460257..28525e1a 100644 --- a/demo/kitchen-sink/util.js +++ b/demo/kitchen-sink/util.js @@ -40,6 +40,10 @@ var Renderer = require("ace/virtual_renderer").VirtualRenderer; var Editor = require("ace/editor").Editor; var MultiSelect = require("ace/multi_select").MultiSelect; +exports.createEditor = function(el) { + return new Editor(new Renderer(el)); +} + exports.createSplitEditor = function(el) { if (typeof(el) == "string") el = document.getElementById(el); @@ -54,8 +58,8 @@ exports.createSplitEditor = function(el) { el.style.position = "relative"; var split = {$container: el}; - split.editor0 = split[0] = new Editor(new Renderer(e0, require("ace/theme/textmate"))); - split.editor1 = split[1] = new Editor(new Renderer(e1, require("ace/theme/textmate"))); + split.editor0 = split[0] = new Editor(new Renderer(e0)); + split.editor1 = split[1] = new Editor(new Renderer(e1)); split.splitter = s; MultiSelect(split.editor0); diff --git a/lib/ace/tokenizer_dev.js b/lib/ace/tokenizer_dev.js index 2ec56692..5b5fa9de 100644 --- a/lib/ace/tokenizer_dev.js +++ b/lib/ace/tokenizer_dev.js @@ -30,13 +30,15 @@ define(function(require, exports, module) { +// tokenizing lines longer than this makes editor very slow +var MAX_TOKEN_COUNT = 1000; /* * version of Tokenizer with additional logging * and infinite loop checks * can be used for developing/testing new modes **/ -var Tokenizer = function(rules, flag) { - flag = flag ? "g" + flag : "g"; + +var Tokenizer = function(rules) { this.states = rules; this.regExps = {}; @@ -46,13 +48,17 @@ var Tokenizer = function(rules, flag) { var ruleRegExps = []; var matchTotal = 0; var mapping = this.matchMappings[key] = {defaultToken: "default.text"}; + var flag = "g"; for (var i = 0; i < state.length; i++) { var rule = state[i]; - if (rule.defaultToken) { + if (rule.defaultToken) mapping.defaultToken = rule.defaultToken; + if (rule.caseInsensitive) + flag = "gi"; + if (rule.regex == null) continue; - } + if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1); @@ -241,6 +247,12 @@ var Tokenizer = function(rules, flag) { break; lastIndex = index; + + if (tokens.length > MAX_TOKEN_COUNT) { + token.value += line.substr(lastIndex); + currentState = "start" + break; + } } if (token.type) diff --git a/tool/mode_creator.html b/tool/mode_creator.html index de459d66..e2db56af 100644 --- a/tool/mode_creator.html +++ b/tool/mode_creator.html @@ -19,7 +19,35 @@ border-bottom: solid 1px; } .separator-h { - padding: 0 20px; + padding: 0 20px; + } + #closeBtn { + background: rgba(245, 146, 146, 0.5); + border: 1px solid #F48A8A; + border-radius: 50%; + padding: 7px; + position: absolute; + right: -8px; + top: -8px; + z-index: 1000; + } + #closeBtn:hover { + background: rgba(245, 146, 146, 0.9); + } + #console{ + /border: 1px solid lightblue; + bottom: 0; + height: 80px; + margin: 0 4%; + position: absolute; + width: 92%; + z-index: 1000; + box-shadow: 0 0 1px 2px gray + } + #consoleEditor{ + height: 100%; + position: relative; + width: 100%; } @@ -29,14 +57,17 @@