toggleCommentLines and indentRows now take row

numbers instead of ranges as arguments
This commit is contained in:
Fabian Jakobs 2010-12-15 19:16:44 +01:00
commit aa594119b7
13 changed files with 64 additions and 47 deletions

View file

@ -622,12 +622,12 @@ var Document = function(text, mode) {
return end;
};
this.indentRows = function(range, indentString) {
this.indentRows = function(startRow, endRow, indentString) {
indentString = indentString.replace("\t", this.getTabString());
for (var row=range.start.row; row<=range.end.row; row++) {
for (var row=startRow; row<=endRow; row++) {
this.$insert({row: row, column:0}, indentString);
}
this.fireChangeEvent(range.start.row, range.end.row);
this.fireChangeEvent(startRow, endRow);
return indentString.length;
};

View file

@ -469,9 +469,7 @@ var Editor =function(renderer, doc) {
outdent -= 1;
_self.doc.replace(new Range(row, 0, row, line.length), line.substr(i));
}
end.column += _self.doc.indentRows(
new Range(cursor.row + 1, 0, end.row, end.column),
lineIndent);
end.column += _self.doc.indentRows(cursor.row + 1, end.row, lineIndent);
} else {
if (shouldOutdent) {
end.column += _self.mode.autoOutdent(lineState, _self.doc, cursor.row);
@ -606,9 +604,9 @@ var Editor =function(renderer, doc) {
var doc = this.doc,
range = this.getSelectionRange();
if (range.start.row < range.end.row ||
range.start.column < range.end.column) {
var count = doc.indentRows(this.getSelectionRange(), "\t");
if (range.start.row < range.end.row || range.start.column < range.end.column) {
var rows = this.$getSelectedRows();
var count = doc.indentRows(rows.first, rows.last, "\t");
this.selection.shiftSelection(count);
} else {
@ -642,12 +640,10 @@ var Editor =function(renderer, doc) {
if (this.$readOnly)
return;
var rows = this.$getSelectedRows();
var range = new Range(rows.first, 0, rows.last, 0);
var _self = this;
this.bgTokenizer.getState(this.getCursorPosition().row, function(state) {
var addedColumns = _self.mode.toggleCommentLines(state, _self.doc, range);
var rows = _self.$getSelectedRows()
var addedColumns = _self.mode.toggleCommentLines(state, _self.doc, rows.first, rows.last);
_self.selection.shiftSelection(addedColumns);
});
};

View file

@ -54,7 +54,7 @@ oop.inherits(Mode, TextMode);
(function() {
this.toggleCommentLines = function(state, doc, range) {
this.toggleCommentLines = function(state, doc, startRow, endRow) {
return this.$delegate("toggleCommentLines", arguments, function() {
return 0;
});

View file

@ -52,12 +52,12 @@ oop.inherits(Mode, TextMode);
(function() {
this.toggleCommentLines = function(state, doc, range) {
this.toggleCommentLines = function(state, doc, startRow, endRow) {
var outdent = true;
var outentedRows = [];
var re = /^(\s*)\/\//;
for (var i=range.start.row; i<= range.end.row; i++) {
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
@ -66,7 +66,7 @@ oop.inherits(Mode, TextMode);
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=range.start.row; i<= range.end.row; i++)
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i).replace(re, "$1");
deleteRange.start.row = i;
@ -77,7 +77,7 @@ oop.inherits(Mode, TextMode);
return -2;
}
else {
return doc.indentRows(range, "//");
return doc.indentRows(startRow, endRow, "//");
}
};

View file

@ -52,12 +52,12 @@ oop.inherits(Mode, TextMode);
(function() {
this.toggleCommentLines = function(state, doc, range) {
this.toggleCommentLines = function(state, doc, startRow, endRow) {
var outdent = true;
var outentedRows = [];
var re = /^(\s*)#/;
for (var i=range.start.row; i<= range.end.row; i++) {
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
@ -66,7 +66,7 @@ oop.inherits(Mode, TextMode);
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=range.start.row; i<= range.end.row; i++)
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i).replace(re, "$1");
deleteRange.start.row = i;
@ -77,7 +77,7 @@ oop.inherits(Mode, TextMode);
return -2;
}
else {
return doc.indentRows(range, "#");
return doc.indentRows(startRow, endRow, "#");
}
};

View file

@ -50,7 +50,7 @@ var Mode = function() {
return this.$tokenizer;
};
this.toggleCommentLines = function(state, doc, range) {
this.toggleCommentLines = function(state, doc, startRow, endRow) {
return 0;
};

View file

@ -138,7 +138,7 @@ var Range = function(startRow, startColumn, endRow, endColumn) {
return Range.fromPoints(this.start, this.end);
};
this.collapseLines = function() {
this.collapseRows = function() {
if (this.end.column == 0)
return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
else

View file

@ -38,7 +38,6 @@
define(function(require, exports, module) {
var Document = require("ace/document").Document;
var Range = require("ace/range").Range;
var Css = require("ace/mode/css").Mode;
var CssTest = new TestCase("mode.CssTest", {
@ -50,8 +49,7 @@ var CssTest = new TestCase("mode.CssTest", {
"test: toggle comment lines should not do anything" : function() {
var doc = new Document([" abc", "cde", "fg"].join("\n"));
var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
},

View file

@ -51,7 +51,7 @@ var HtmlTest = new TestCase("mode.HtmlTest", {
var doc = new Document([" abc", "cde", "fg"]);
var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
},

View file

@ -38,7 +38,6 @@
define(function(require, exports, module) {
var Document = require("ace/document").Document;
var Range = require("ace/range").Range;
var Tokenizer = require("ace/tokenizer").Tokenizer;
var JavaScript = require("ace/mode/javascript").Mode;
@ -60,32 +59,36 @@ var JavaScriptTest = new TestCase("mode.JavaScriptTest", {
"test: toggle comment lines should prepend '//' to each line" : function() {
var doc = new Document([" abc", "cde", "fg"]);
var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
assertEquals(["// abc", "//cde", "fg"].join("\n"), doc.toString());
},
"test: toggle comment on commented lines should remove leading '//' chars" : function() {
var doc = new Document(["// abc", "//cde", "fg"]);
var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
},
"test: toggle comment lines twice should return the original text" : function() {
var doc = new Document([" abc", "cde", "fg"]);
this.mode.toggleCommentLines("start", doc, 0, 2);
this.mode.toggleCommentLines("start", doc, 0, 2);
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
},
"test: toggle comment on multiple lines with one commented line prepend '//' to each line" : function() {
var doc = new Document(["// abc", "//cde", "fg"]);
var range = new Range(0, 3, 2, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 2);
assertEquals(["//// abc", "////cde", "//fg"].join("\n"), doc.toString());
},
"test: toggle comment on a comment line with leading white space": function() {
var doc = new Document(["//cde", " //fg"]);
var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
assertEquals(["cde", " fg"].join("\n"), doc.toString());
},

View file

@ -38,7 +38,6 @@
define(function(require, exports, module) {
var Document = require("ace/document").Document;
var Range = require("ace/range").Range;
var Text = require("ace/mode/text").Mode;
var TextTest = new TestCase("mode.TextTest", {
@ -50,8 +49,7 @@ var TextTest = new TestCase("mode.TextTest", {
"test: toggle comment lines should not do anything" : function() {
var doc = new Document([" abc", "cde", "fg"]);
var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
},

View file

@ -38,7 +38,6 @@
define(function(require, exports, module) {
var Document = require("ace/document").Document;
var Range = require("ace/range").Range;
var Tokenizer = require("ace/tokenizer").Tokenizer;
var Xml = require("ace/mode/xml").Mode;
@ -60,8 +59,7 @@ var XmlTest = new TestCase("mode.XmlTest", {
"test: toggle comment lines should not do anything" : function() {
var doc = new Document([" abc", "cde", "fg"]);
var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, range);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
},

View file

@ -114,8 +114,7 @@ var Test = {
editor.indent();
assert.equal(["a12345", " b12345", " c12345"].join("\n"),
doc.toString());
assert.equal(["a12345", " b12345", " c12345"].join("\n"), doc.toString());
assert.position(editor.getCursorPosition(), 2, 7);
@ -124,13 +123,24 @@ var Test = {
assert.position(range.end, 2, 7);
},
"test: indent selected lines" : function() {
var doc = new Document(["a12345", "b12345", "c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), doc);
editor.moveCursorTo(1, 0);
editor.getSelection().selectDown();
editor.indent();
assert.equal(["a12345", " b12345", "c12345"].join("\n"), doc.toString());
},
"test: outdent block" : function() {
var doc = new Document([" a12345", " b12345", " c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), doc);
editor.moveCursorTo(0, 5);
editor.getSelection().selectDown();
editor.getSelection().selectDown();
editor.getSelection().selectDown();
editor.blockOutdent();
assert.equal(doc.toString(), [" a12345", "b12345", " c12345"].join("\n"));
@ -166,7 +176,6 @@ var Test = {
editor.moveCursorTo(0, 2);
editor.getSelection().selectDown();
editor.toggleCommentLines();
assert.equal(["// abc", "//cde"].join("\n"), doc.toString());
@ -190,6 +199,21 @@ var Test = {
assert.equal([" abc", "cde"].join("\n"), doc.toString());
assert.range(editor.getSelectionRange(), 0, 0, 1, 1);
},
"test: toggle comment lines twice should return the original text" : function() {
var doc = new Document([" abc", "cde", "fg"], new JavaScriptMode());
var editor = new Editor(new MockRenderer(), doc);
editor.moveCursorTo(0, 0);
editor.getSelection().selectDown();
editor.getSelection().selectDown();
editor.toggleCommentLines();
editor.toggleCommentLines();
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString());
},
"test: comment lines - if the selection end is at the line start it should stay there": function() {
//select down