From 55e0f8ceff87e4c05ea3ab27d52f6a765be3ab3b Mon Sep 17 00:00:00 2001 From: Julian Viereck Date: Tue, 17 May 2011 16:16:28 +0200 Subject: [PATCH] Fix calculation of EditSession.getScreenLength. --- demo/demo.js | 2 ++ lib/ace/edit_session.js | 36 ++++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/demo/demo.js b/demo/demo.js index 31bde34d..58234d3a 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -155,6 +155,8 @@ exports.launch = function(env) { var container = document.getElementById("editor"); var cockpitInput = document.getElementById("cockpitInput"); env.editor = new Editor(new Renderer(container, theme)); + window.env = env; + window.ace = env.editor; var modes = { text: new TextMode(), diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 98125892..f9994c52 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -463,7 +463,7 @@ var EditSession = function(text, mode) { this.$stopWorker(); - if (this.$useWorker) + if (this.$useWorker) this.$startWorker(); var tokenizer = mode.getTokenizer(); @@ -492,10 +492,10 @@ var EditSession = function(text, mode) { this.$stopWorker = function() { if (this.$worker) this.$worker.terminate(); - + this.$worker = null; }; - + this.$startWorker = function() { if (typeof Worker !== "undefined" && !require.noWorker) { try { @@ -503,7 +503,7 @@ var EditSession = function(text, mode) { } catch (e) { console.log("Could not load worker"); console.log(e); - this.$worker = null; + this.$worker = null; } } else @@ -1418,7 +1418,7 @@ var EditSession = function(text, mode) { } } var docRowCacheLast = docRow; - // clamp row before clamping column, for selection on last line + // clamp row before clamping column, for selection on last line var maxRow = this.getLength() - 1; var foldLine = this.getNextFold(docRow); @@ -1449,7 +1449,7 @@ var EditSession = function(text, mode) { if (foldLine && foldLine.start.row <= docRow) line = this.getFoldDisplayLine(foldLine); - else { + else { line = this.getLine(docRow); foldLine = null; } @@ -1596,21 +1596,29 @@ var EditSession = function(text, mode) { }; this.getScreenLength = function() { - var length = this.getLength(); var screenRows = 0; + var lastFoldLine = null; + var foldLine = null; if (!this.$useWrapMode) { - screenRows = length; + screenRows = this.getLength(); + + // Remove the folded lines again. + var foldData = this.$foldData; + for (var i = 0; i < foldData.length; i++) { + foldLine = foldData[i]; + screenRows -= foldLine.end.row - foldLine.start.row; + } } else { for (var row = 0; row < this.$wrapData.length; row++) { - screenRows += this.$wrapData[row].length + 1; + if (foldLine = this.getFoldLine(row, lastFoldLine)) { + row = foldLine.end.row; + screenRows += 1; + } else { + screenRows += this.$wrapData[row].length + 1; + } } } - var foldData = this.$foldData; - for (var i = 0; i < foldData.length; i++) { - var foldLine = foldData[i]; - screenRows -= foldLine.end.row - foldLine.start.row; - } return screenRows; }