From a23bdb49a2cacbb5456cf7ff8975c47a035eb12f Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 5 Apr 2013 12:45:06 +0400 Subject: [PATCH] workaround for chrome not displaying middle of very long lines --- lib/ace/tokenizer.js | 16 +++++++++++++--- lib/ace/tokenizer_dev.js | 6 ++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/ace/tokenizer.js b/lib/ace/tokenizer.js index 189b671b..8c6417fd 100644 --- a/lib/ace/tokenizer.js +++ b/lib/ace/tokenizer.js @@ -83,6 +83,7 @@ var Tokenizer = function(rules) { + (matchcount - 1) + "!=" + rule.token.length); } else { rule.tokenArray = rule.token; + rule.token = null; rule.onMatch = this.$arrayTokens; } } else if (typeof rule.token == "function" && !rule.onMatch) { @@ -271,7 +272,7 @@ var Tokenizer = function(rules) { if (value) { if (typeof type == "string") { - if ((!rule || rule.merge !== false) && token.type === type) { + if ((!rule || rule.merge) && token.type === type) { token.value += value; } else { if (token.type) @@ -293,8 +294,17 @@ var Tokenizer = function(rules) { lastIndex = index; if (tokens.length > MAX_TOKEN_COUNT) { - token.value += line.substr(lastIndex); - currentState = "start" + // chrome doens't show contents of text nodes with very long text + while (lastIndex < line.length) { + if (token.type) + tokens.push(token); + token = { + value: line.substring(lastIndex, lastIndex += 2000), + type: "overflow" + } + } + currentState = "start"; + stack = []; break; } } diff --git a/lib/ace/tokenizer_dev.js b/lib/ace/tokenizer_dev.js index 4321035c..61821f60 100644 --- a/lib/ace/tokenizer_dev.js +++ b/lib/ace/tokenizer_dev.js @@ -32,7 +32,7 @@ define(function(require, exports, module) { var BaseTokenizer = require("./tokenizer").Tokenizer; // tokenizing lines longer than this makes editor very slow -var MAX_TOKEN_COUNT = 1000; +var MAX_TOKEN_COUNT = 100000; /* * version of Tokenizer with additional logging * and infinite loop checks @@ -80,7 +80,7 @@ var Tokenizer = function(rules) { }; initState(); - var maxRecur = 10000; + var maxRecur = 100000; while (match = re.exec(line)) { var type = mapping.defaultToken; @@ -177,5 +177,7 @@ var Tokenizer = function(rules) { }; +Tokenizer.prototype = BaseTokenizer.prototype; + exports.Tokenizer = Tokenizer; });