diff --git a/lib/ace/mode/c_cpp.js b/lib/ace/mode/c_cpp.js index 986afbad..7b8f44fa 100644 --- a/lib/ace/mode/c_cpp.js +++ b/lib/ace/mode/c_cpp.js @@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode); var deleteRange = new Range(0, 0, 0, 0); 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.end.row = i; - deleteRange.end.column = line.length + 2; - doc.replace(deleteRange, line); + deleteRange.end.column = m[0].length; + doc.replace(deleteRange, m[1]); } - return -2; } else { - return doc.indentRows(startRow, endRow, "//"); + doc.indentRows(startRow, endRow, "//"); } }; diff --git a/lib/ace/mode/coffee.js b/lib/ace/mode/coffee.js index 32c692b4..d3bf0ac5 100644 --- a/lib/ace/mode/coffee.js +++ b/lib/ace/mode/coffee.js @@ -37,52 +37,63 @@ define(function(require, exports, module) { -var Tokenizer = require("ace/tokenizer").Tokenizer - , Rules = require("ace/mode/coffee_highlight_rules").CoffeeHighlightRules - , Outdent = require("ace/mode/matching_brace_outdent").MatchingBraceOutdent - , Range = require("ace/range").Range -; -require("pilot/oop").inherits(CoffeeMode, require("ace/mode/text").Mode); +var Tokenizer = require("ace/tokenizer").Tokenizer; +var Rules = require("ace/mode/coffee_highlight_rules").CoffeeHighlightRules; +var Outdent = require("ace/mode/matching_brace_outdent").MatchingBraceOutdent; +var Range = require("ace/range").Range; +var TextMode = require("ace/mode/text").Mode; +var oop = require("pilot/oop") function CoffeeMode() { this.$tokenizer = new Tokenizer(new Rules().getRules()); 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*$/ - , commentLine = /^(\s*)#/ - , hereComment = /^\s*###(?!#)/ - , indentation = /^\s*/ -; -proto.getNextLineIndent = function(state, line, tab){ - var indent = this.$getIndent(line) - , tokens = this.$tokenizer.getLineTokens(line, state).tokens - ; +}; + +oop.inherits(CoffeeMode, TextMode); + +var proto = CoffeeMode.prototype; +var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/; +var commentLine = /^(\s*)#/; +var hereComment = /^\s*###(?!#)/; +var indentation = /^\s*/; + +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') && state === 'start' && indenter.test(line)) indent += tab; return indent; }; + 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) { var line = doc.getLine(i); - if (hereComment.test(line)) continue; - line = (out = commentLine.test(line)) - ? line.replace(commentLine, '$1') - : line.replace(indentation, '$&#'); + if (hereComment.test(line)) + continue; + + if (commentLine.test(line)) + line = line.replace(commentLine, '$1'); + else + line = line.replace(indentation, '$&#'); + range.end.row = range.start.row = i; range.end.column = line.length + 1; doc.replace(range, line); } - return 1 - out * 2; }; + proto.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; + proto.autoOutdent = function(state, doc, row) { return this.$outdent.autoOutdent(doc, row); }; exports.Mode = CoffeeMode; -}); + +}); \ No newline at end of file diff --git a/lib/ace/mode/html.js b/lib/ace/mode/html.js index ec2a521c..ca3121ac 100644 --- a/lib/ace/mode/html.js +++ b/lib/ace/mode/html.js @@ -55,7 +55,7 @@ oop.inherits(Mode, TextMode); (function() { this.toggleCommentLines = function(state, doc, startRow, endRow) { - return this.$delegate("toggleCommentLines", arguments, function() { + this.$delegate("toggleCommentLines", arguments, function() { return 0; }); }; diff --git a/lib/ace/mode/javascript.js b/lib/ace/mode/javascript.js index 2179edc3..8df9d802 100644 --- a/lib/ace/mode/javascript.js +++ b/lib/ace/mode/javascript.js @@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode); var deleteRange = new Range(0, 0, 0, 0); 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.end.row = i; - deleteRange.end.column = line.length + 2; - doc.replace(deleteRange, line); + deleteRange.end.column = m[0].length; + doc.replace(deleteRange, m[1]); } - return -2; } else { - return doc.indentRows(startRow, endRow, "//"); + doc.indentRows(startRow, endRow, "//"); } }; diff --git a/lib/ace/mode/php.js b/lib/ace/mode/php.js index 843d324d..58440d3f 100644 --- a/lib/ace/mode/php.js +++ b/lib/ace/mode/php.js @@ -68,16 +68,16 @@ oop.inherits(Mode, TextMode); var deleteRange = new Range(0, 0, 0, 0); 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.end.row = i; - deleteRange.end.column = line.length + 2; - doc.replace(deleteRange, line); + deleteRange.end.column = m[0].length; + doc.replace(deleteRange, m[1]); } - return -2; } else { - return doc.indentRows(startRow, endRow, "#"); + doc.indentRows(startRow, endRow, "#"); } }; diff --git a/lib/ace/mode/python.js b/lib/ace/mode/python.js index dbc74389..a0d2a9de 100644 --- a/lib/ace/mode/python.js +++ b/lib/ace/mode/python.js @@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode); var deleteRange = new Range(0, 0, 0, 0); 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.end.row = i; - deleteRange.end.column = line.length + 2; - doc.replace(deleteRange, line); + deleteRange.end.column = m[0].length; + doc.replace(deleteRange, m[1]); } - return -2; } else { - return doc.indentRows(startRow, endRow, "#"); + doc.indentRows(startRow, endRow, "#"); } }; diff --git a/lib/ace/mode/ruby.js b/lib/ace/mode/ruby.js index b6944ef2..7e400c7e 100644 --- a/lib/ace/mode/ruby.js +++ b/lib/ace/mode/ruby.js @@ -69,16 +69,16 @@ oop.inherits(Mode, TextMode); var deleteRange = new Range(0, 0, 0, 0); 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.end.row = i; - deleteRange.end.column = line.length + 2; - doc.replace(deleteRange, line); + deleteRange.end.column = m[0].length; + doc.replace(deleteRange, m[1]); } - return -2; } else { - return doc.indentRows(startRow, endRow, "#"); + doc.indentRows(startRow, endRow, "#"); } }; diff --git a/lib/ace/mode/text.js b/lib/ace/mode/text.js index 7a400ef9..fe1c9f17 100644 --- a/lib/ace/mode/text.js +++ b/lib/ace/mode/text.js @@ -51,7 +51,6 @@ var Mode = function() { }; this.toggleCommentLines = function(state, doc, startRow, endRow) { - return 0; }; this.getNextLineIndent = function(state, line, tab) {