toggleLineComment no longer has to return the remove characters

Also make the change as minimal as possible
This commit is contained in:
Fabian Jakobs 2011-02-11 11:34:21 +01:00
commit cfc553f66f
8 changed files with 61 additions and 51 deletions

View file

@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode);
var deleteRange = new Range(0, 0, 0, 0); var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++) for (var i=startRow; i<= endRow; i++)
{ {
var line = doc.getLine(i).replace(re, "$1"); var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i; deleteRange.start.row = i;
deleteRange.end.row = i; deleteRange.end.row = i;
deleteRange.end.column = line.length + 2; deleteRange.end.column = m[0].length;
doc.replace(deleteRange, line); doc.replace(deleteRange, m[1]);
} }
return -2;
} }
else { else {
return doc.indentRows(startRow, endRow, "//"); doc.indentRows(startRow, endRow, "//");
} }
}; };

View file

@ -37,52 +37,63 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Tokenizer = require("ace/tokenizer").Tokenizer var Tokenizer = require("ace/tokenizer").Tokenizer;
, Rules = require("ace/mode/coffee_highlight_rules").CoffeeHighlightRules var Rules = require("ace/mode/coffee_highlight_rules").CoffeeHighlightRules;
, Outdent = require("ace/mode/matching_brace_outdent").MatchingBraceOutdent var Outdent = require("ace/mode/matching_brace_outdent").MatchingBraceOutdent;
, Range = require("ace/range").Range var Range = require("ace/range").Range;
; var TextMode = require("ace/mode/text").Mode;
require("pilot/oop").inherits(CoffeeMode, require("ace/mode/text").Mode); var oop = require("pilot/oop")
function CoffeeMode() { function CoffeeMode() {
this.$tokenizer = new Tokenizer(new Rules().getRules()); this.$tokenizer = new Tokenizer(new Rules().getRules());
this.$outdent = new Outdent(); this.$outdent = new Outdent();
} };
var proto = CoffeeMode.prototype
, indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/ oop.inherits(CoffeeMode, TextMode);
, commentLine = /^(\s*)#/
, hereComment = /^\s*###(?!#)/ var proto = CoffeeMode.prototype;
, indentation = /^\s*/ var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/;
; var commentLine = /^(\s*)#/;
proto.getNextLineIndent = function(state, line, tab){ var hereComment = /^\s*###(?!#)/;
var indent = this.$getIndent(line) var indentation = /^\s*/;
, tokens = this.$tokenizer.getLineTokens(line, state).tokens
; proto.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line);
var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') && if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&
state === 'start' && indenter.test(line)) state === 'start' && indenter.test(line))
indent += tab; indent += tab;
return indent; return indent;
}; };
proto.toggleCommentLines = function(state, doc, startRow, endRow){ proto.toggleCommentLines = function(state, doc, startRow, endRow){
var out, range = new Range(0, 0, 0, 0); console.log("toggle");
var range = new Range(0, 0, 0, 0);
for (var i = startRow; i <= endRow; ++i) { for (var i = startRow; i <= endRow; ++i) {
var line = doc.getLine(i); var line = doc.getLine(i);
if (hereComment.test(line)) continue; if (hereComment.test(line))
line = (out = commentLine.test(line)) continue;
? line.replace(commentLine, '$1')
: line.replace(indentation, '$&#'); if (commentLine.test(line))
line = line.replace(commentLine, '$1');
else
line = line.replace(indentation, '$&#');
range.end.row = range.start.row = i; range.end.row = range.start.row = i;
range.end.column = line.length + 1; range.end.column = line.length + 1;
doc.replace(range, line); doc.replace(range, line);
} }
return 1 - out * 2;
}; };
proto.checkOutdent = function(state, line, input) { proto.checkOutdent = function(state, line, input) {
return this.$outdent.checkOutdent(line, input); return this.$outdent.checkOutdent(line, input);
}; };
proto.autoOutdent = function(state, doc, row) { proto.autoOutdent = function(state, doc, row) {
return this.$outdent.autoOutdent(doc, row); return this.$outdent.autoOutdent(doc, row);
}; };
exports.Mode = CoffeeMode; exports.Mode = CoffeeMode;
});
});

View file

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

View file

@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode);
var deleteRange = new Range(0, 0, 0, 0); var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++) for (var i=startRow; i<= endRow; i++)
{ {
var line = doc.getLine(i).replace(re, "$1"); var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i; deleteRange.start.row = i;
deleteRange.end.row = i; deleteRange.end.row = i;
deleteRange.end.column = line.length + 2; deleteRange.end.column = m[0].length;
doc.replace(deleteRange, line); doc.replace(deleteRange, m[1]);
} }
return -2;
} }
else { else {
return doc.indentRows(startRow, endRow, "//"); doc.indentRows(startRow, endRow, "//");
} }
}; };

View file

@ -68,16 +68,16 @@ oop.inherits(Mode, TextMode);
var deleteRange = new Range(0, 0, 0, 0); var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++) for (var i=startRow; i<= endRow; i++)
{ {
var line = doc.getLine(i).replace(re, "$1"); var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i; deleteRange.start.row = i;
deleteRange.end.row = i; deleteRange.end.row = i;
deleteRange.end.column = line.length + 2; deleteRange.end.column = m[0].length;
doc.replace(deleteRange, line); doc.replace(deleteRange, m[1]);
} }
return -2;
} }
else { else {
return doc.indentRows(startRow, endRow, "#"); doc.indentRows(startRow, endRow, "#");
} }
}; };

View file

@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode);
var deleteRange = new Range(0, 0, 0, 0); var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++) for (var i=startRow; i<= endRow; i++)
{ {
var line = doc.getLine(i).replace(re, "$1"); var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i; deleteRange.start.row = i;
deleteRange.end.row = i; deleteRange.end.row = i;
deleteRange.end.column = line.length + 2; deleteRange.end.column = m[0].length;
doc.replace(deleteRange, line); doc.replace(deleteRange, m[1]);
} }
return -2;
} }
else { else {
return doc.indentRows(startRow, endRow, "#"); doc.indentRows(startRow, endRow, "#");
} }
}; };

View file

@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode);
var deleteRange = new Range(0, 0, 0, 0); var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++) for (var i=startRow; i<= endRow; i++)
{ {
var line = doc.getLine(i).replace(re, "$1"); var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i; deleteRange.start.row = i;
deleteRange.end.row = i; deleteRange.end.row = i;
deleteRange.end.column = line.length + 2; deleteRange.end.column = m[0].length;
doc.replace(deleteRange, line); doc.replace(deleteRange, m[1]);
} }
return -2;
} }
else { else {
return doc.indentRows(startRow, endRow, "#"); doc.indentRows(startRow, endRow, "#");
} }
}; };

View file

@ -51,7 +51,6 @@ var Mode = function() {
}; };
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.toggleCommentLines = function(state, doc, startRow, endRow) {
return 0;
}; };
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {