From 831ef0745ac1726a7046f7eb1b1cd98b2b463a1b Mon Sep 17 00:00:00 2001 From: Joe Cheng Date: Thu, 17 Feb 2011 01:33:20 -0500 Subject: [PATCH] Simplify document.insert --- lib/ace/document.js | 41 ++++++++----------------------- lib/ace/test/edit_session_test.js | 14 +++++++++++ 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/lib/ace/document.js b/lib/ace/document.js index 490ee225..491cdd51 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -174,39 +174,18 @@ var Document = function(text) { if (this.getLength() <= 1) this.$detectNewLine(text); - var newLines = this.$split(text); + var lines = this.$split(text); + var firstLine = lines.splice(0, 1)[0]; + var lastLine = lines.length == 0 ? null + : lines.splice(lines.length - 1, 1)[0]; - if (this.isNewLine(text)) { - var end = this.insertNewLine(position); + position = this.insertInLine(position, firstLine); + if (lastLine !== null) { + position = this.insertNewLine(position); // terminate first line + position = this.insertLines(position.row, lines); + position = this.insertInLine(position, lastLine || ""); } - else if (newLines.length == 1) { - var end = this.insertInLine(position, text); - } - else { - if (newLines[0].length > 0) { - var end = this.insertInLine(position, newLines[0]); - this.insertNewLine(end); - } - // If we are inserting at the end of the document, we don't need to - // use insertInLine (concorde depends on this optimization!) - if (position.row + 1 == this.getLength()) { - this.insertLines(position.row + 1, - newLines.slice(1, newLines.length)); - var end = { - row: position.row + newLines.length - 1, - column: position.column + newLines[newLines.length - 1].length - }; - } else { - if (newLines.length > 2) - this.insertLines(position.row + 1, - newLines.slice(1, newLines.length - 1)); - var end = this.insertInLine({ - row: position.row + newLines.length - 1, - column: 0 - }, newLines[newLines.length - 1]); - } - } - return end; + return position; }; this.insertLines = function(row, lines) { diff --git a/lib/ace/test/edit_session_test.js b/lib/ace/test/edit_session_test.js index f5b72140..3cb061bb 100644 --- a/lib/ace/test/edit_session_test.js +++ b/lib/ace/test/edit_session_test.js @@ -325,6 +325,20 @@ var Test = { assert.equal(session.$wrapData.length, 2); assert.equal(session.$wrapData[0].length, 1); assert.equal(session.$wrapData[1].length, 1); + }, + + "test first line blank with wrap": function() { + var session = new EditSession("\nfoo"); + session.setUseWrapMode(true); + assert.equal(session.doc.getValue(), ["", "foo"].join("\n")); + }, + + "test first line blank with wrap 2" : function() { + var session = new EditSession(""); + session.setUseWrapMode(true); + session.setValue("\nfoo"); + + assert.equal(session.doc.getValue(), ["", "foo"].join("\n")); } };