diff --git a/lib/ace/background_tokenizer.js b/lib/ace/background_tokenizer.js index 8f936d1a..2fe9dceb 100644 --- a/lib/ace/background_tokenizer.js +++ b/lib/ace/background_tokenizer.js @@ -68,29 +68,37 @@ var BackgroundTokenizer = function(tokenizer, editor) { if (!self.running) { return; } var workerStart = new Date(); - var startLine = self.currentLine; + var currentLine = self.currentLine; + var endLine = -1; var doc = self.doc; - var processedLines = 0; + while (self.lines[currentLine]) + currentLine++; + + var startLine = currentLine; var len = doc.getLength(); - while (self.currentLine < len) { - self.$tokenizeRow(self.currentLine); - while (self.lines[self.currentLine]) - self.currentLine++; + var processedLines = 0; + self.running = false; + while (currentLine < len) { + self.$tokenizeRow(currentLine); + endLine = currentLine; + do { + currentLine++; + } while (self.lines[currentLine]); // only check every 5 lines processedLines ++; - if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { - self.fireUpdateEvent(startLine, self.currentLine-1); + if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { self.running = setTimeout(self.$worker, 20); + self.currentLine = currentLine; return; } } - - self.running = false; - - self.fireUpdateEvent(startLine, len - 1); + self.currentLine = currentLine; + + if (startLine <= endLine) + self.fireUpdateEvent(startLine, endLine); }; };