use general toggleCommentLines for all modes

This commit is contained in:
nightwing 2013-02-18 12:02:19 +04:00
commit e71fd47153
42 changed files with 321 additions and 680 deletions

View file

@ -50,33 +50,8 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "//";
var outdent = true; this.blockComment = {start: "/*", end: "*/"};
var re = /^(\s*)\/\//;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "//");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -46,33 +46,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = ";";
var outdent = true;
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, ";");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -19,6 +19,9 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "//";
this.blockComment = {start: "/*", end: "*/"};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -51,6 +51,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.foldingRules = "cStyle"; this.foldingRules = "cStyle";
this.blockComment = {start: "/*", end: "*/"};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -56,6 +56,8 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here. // Extra logic goes here.
this.lineCommentStart = "//";
this.blockComment = {start: "/*", end: "*/"};
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -18,33 +18,8 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = ["//", "#"];
var outdent = true; this.blockComment = {start: "/*", end: "*/"};
var re = /^(\s*)\/\//;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "//");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -17,33 +17,8 @@ define(function(require, exports, module) {
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "//";
var outdent = true; this.blockComment = {start: "/*", end: "*/"};
var re = /^(\s*)\/\//;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "//");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -55,7 +55,8 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here. this.lineCommentStart = ["//", "#"];
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -18,6 +18,8 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "//";
this.blockComment = {start: "/*", end: "*/"};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -57,10 +57,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.blockComment = {start: "<!--", end: "-->"};
this.toggleCommentLines = function(state, doc, startRow, endRow) {
return 0;
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
return this.$getIndent(line); return this.$getIndent(line);

View file

@ -52,6 +52,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here. // Extra logic goes here.
this.lineCommentStart = "//";
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -32,7 +32,6 @@ define(function(require, exports, module) {
"use strict"; "use strict";
var oop = require("../lib/oop"); var oop = require("../lib/oop");
var lang = require("ace/lib/lang");
var TextMode = require("./text").Mode; var TextMode = require("./text").Mode;
var Tokenizer = require("../tokenizer").Tokenizer; var Tokenizer = require("../tokenizer").Tokenizer;
var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
@ -53,42 +52,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "//"; this.lineCommentStart = "//";
this.toggleCommentLines = function(state, session, startRow, endRow) { this.blockComment = {start: "/*", end: "*/"};
var doc = session.doc;
var str = this.lineCommentStart;
var regexpStart = new RegExp("^\\s*"+lang.escapeRegExp(str) + " ?");
function isCommented(str) {
return regexpStart.test(str);
}
var removeComment = true;
var minSpace = Infinity;
var indentations = [];
for (var i = startRow; i <= endRow; i++) {
var line = doc.getLine(i);
var indent = line.search(/\S|$/);
indentations[i] = indent;
if (indent < minSpace)
minSpace = indent;
if (removeComment && !isCommented(line))
removeComment = false;
}
if (removeComment) {
for (var i = startRow; i <= endRow; i++) {
var line = doc.getLine(i);
var m = line.match(regexpStart);
doc.removeInLine(i, indentations[i], m[0].length);
}
} else {
str += " ";
for (var i = startRow; i <= endRow; i++) {
doc.insertInLine({row: i, column: minSpace}, str);
}
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -19,6 +19,9 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "//";
this.blockComment = {start: "/*", end: "*/"};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -15,41 +15,7 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "%";
// This code is adapted from ruby.js
var outdent = true;
// LaTeX comments begin with % and go to the end of the line
var commentRegEx = /^(\s*)\%/;
for (var i = startRow; i <= endRow; i++) {
if (!commentRegEx.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i = startRow; i <= endRow; i++) {
var line = doc.getLine(i);
var m = line.match(commentRegEx);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "%");
}
};
// There is no universally accepted way of indenting a tex document
// so just maintain the indentation of the previous line
this.getNextLineIndent = function(state, line, tab) {
return this.$getIndent(line);
};
}).call(Mode.prototype); }).call(Mode.prototype);

View file

@ -49,6 +49,9 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "//";
this.blockComment = {start: "/*", end: "*/"};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -45,34 +45,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.blockComment = {start: "<!--", end: "-->"};
var outdent = true;
var outentedRows = [];
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "#");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -27,10 +27,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* *
* Contributor(s):
*
*
*
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
/* /*
@ -53,7 +49,9 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here.
this.lineCommentStart = ";";
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -45,6 +45,10 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "--";
this.blockComment = {start: "--[", end: "]--"};
var indentKeywords = { var indentKeywords = {
"function": 1, "function": 1,
"then": 1, "then": 1,

View file

@ -55,7 +55,8 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here.
this.lineCommentStart = "#";
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -56,6 +56,9 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = ">";
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
if (state == "listblock") { if (state == "listblock") {
var match = /^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(line); var match = /^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(line);

View file

@ -55,7 +55,8 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here. (see below) this.lineCommentStart = "//";
this.blockComment = {start: "/*", end: "*/"};
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -55,7 +55,13 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here.
this.lineCommentStart = ["--", "//"];
this.blockComment = [
{start: "(*", end: "*)"},
{start: "{", end: "}"}
];
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -60,8 +60,6 @@ var PascalHighlightRules = function() {
'storage.type.prototype.pascal', 'storage.type.prototype.pascal',
'entity.name.function.prototype.pascal' ], 'entity.name.function.prototype.pascal' ],
regex: '\\b(function|procedure)(\\s+)(\\w+)(\\.\\w+)?(?=(?:\\(.*?\\))?;\\s*(?:attribute|forward|external))' }, regex: '\\b(function|procedure)(\\s+)(\\w+)(\\.\\w+)?(?=(?:\\(.*?\\))?;\\s*(?:attribute|forward|external))' },
{ token: 'keyword.operator',
regex: '[+\\-;,/*%]|:=|=' },
{ caseInsensitive: true, { caseInsensitive: true,
token: token:
[ 'variable.pascal', "text", [ 'variable.pascal', "text",
@ -116,7 +114,9 @@ var PascalHighlightRules = function() {
{ token: 'punctuation.definition.string.end.pascal', { token: 'punctuation.definition.string.end.pascal',
regex: '\'', regex: '\'',
next: 'pop' }, next: 'pop' },
{ defaultToken: 'string.quoted.single.pascal' } ] } ] } { defaultToken: 'string.quoted.single.pascal' } ] },
{ token: 'keyword.operator',
regex: '[+\\-;,/*%]|:=|=' } ] }
this.normalizeRules(); this.normalizeRules();
}; };

View file

@ -48,33 +48,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "#";
var outdent = true;
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "#");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -42,36 +42,8 @@ define(function(require, exports, module) {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "--";
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.blockComment = {start: "/*", end: "*/"};
var outdent = true;
// var outentedRows = [];
var re = /^(\s*)--/;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "--");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
if (state == "start" || state == "keyword.statementEnd") { if (state == "start" || state == "keyword.statementEnd") {

View file

@ -69,33 +69,9 @@ oop.inherits(Mode, TextMode);
+ unicode.packages.Pc + "\_]|\s])+", "g" + unicode.packages.Pc + "\_]|\s])+", "g"
); );
this.toggleCommentLines = function(state, doc, startRow, endRow) {
var outdent = true;
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) { this.lineCommentStart = ["#", "//"];
if (!re.test(doc.getLine(i))) { this.blockComment = {start: "/*", end: "*/"};
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "#");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -19,6 +19,9 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "#";
this.blockComment = {start: "<#", end: "#>"};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -46,33 +46,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "#";
var outdent = true;
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "#");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -48,33 +48,8 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) {
var outdent = true;
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) { this.lineCommentStart = "#";
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "#");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -44,7 +44,7 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "//";
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -50,33 +50,8 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "//";
var outdent = true; this.blockComment = {start: "/*", end: "*/"};
var re = /^(\s*)\/\//;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "//");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -49,7 +49,9 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here.
this.lineCommentStart = ";";
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -49,6 +49,9 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "//";
this.blockComment = {start: "/*", end: "*/"};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -44,33 +44,8 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) {
var outdent = true;
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) { this.lineCommentStart = "#";
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "#");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -44,34 +44,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "--";
var outdent = true;
var outentedRows = [];
var re = /^(\s*)--/;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "--");
}
};
}).call(Mode.prototype); }).call(Mode.prototype);

View file

@ -48,33 +48,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.lineCommentStart = "#";
var outdent = true;
var re = /^(\s*)#/;
for (var i=startRow; i<= endRow; i++) {
if (!re.test(doc.getLine(i))) {
outdent = false;
break;
}
}
if (outdent) {
var deleteRange = new Range(0, 0, 0, 0);
for (var i=startRow; i<= endRow; i++)
{
var line = doc.getLine(i);
var m = line.match(re);
deleteRange.start.row = i;
deleteRange.end.row = i;
deleteRange.end.column = m[0].length;
doc.replace(deleteRange, m[1]);
}
}
else {
doc.indentRows(startRow, endRow, "#");
}
};
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);

View file

@ -35,6 +35,7 @@ var Tokenizer = require("../tokenizer").Tokenizer;
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var Behaviour = require("./behaviour").Behaviour; var Behaviour = require("./behaviour").Behaviour;
var unicode = require("../unicode"); var unicode = require("../unicode");
var lang = require("../lib/lang");
var Mode = function() { var Mode = function() {
this.$tokenizer = new Tokenizer(new TextHighlightRules().getRules()); this.$tokenizer = new Tokenizer(new TextHighlightRules().getRules());
@ -61,7 +62,46 @@ var Mode = function() {
return this.$tokenizer; return this.$tokenizer;
}; };
this.toggleCommentLines = function(state, doc, startRow, endRow) { this.toggleCommentLines = function(state, session, startRow, endRow) {
var doc = session.doc;
var regexpStart, lineCommentStart;
if (!this.lineCommentStart) {
return false
} else if (Array.isArray(this.lineCommentStart)) {
regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|");
lineCommentStart = this.lineCommentStart[0];
} else {
regexpStart = lang.escapeRegExp(this.lineCommentStart);
lineCommentStart = this.lineCommentStart;
}
regexpStart = new RegExp("^\\s*(?:" + regexpStart + ") ?");
var removeComment = true;
var minSpace = Infinity;
var indentations = [];
for (var i = startRow; i <= endRow; i++) {
var line = doc.getLine(i);
var indent = line.search(/\S|$/);
indentations[i] = indent;
if (indent < minSpace)
minSpace = indent;
if (removeComment && !regexpStart.test(line))
removeComment = false;
}
if (removeComment) {
for (var i = startRow; i <= endRow; i++) {
var line = doc.getLine(i);
var m = line.match(regexpStart);
doc.removeInLine(i, indentations[i], m[0].length);
}
} else {
lineCommentStart += " ";
for (var i = startRow; i <= endRow; i++) {
doc.insertInLine({row: i, column: minSpace}, lineCommentStart);
}
}
}; };
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {

View file

@ -26,11 +26,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
*
* Contributor(s):
*
*
*
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
/* /*

View file

@ -53,7 +53,9 @@ var Mode = function() {
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);
(function() { (function() {
// Extra logic goes here.
this.lineCommentStart = ["'", "REM"];
}).call(Mode.prototype); }).call(Mode.prototype);
exports.Mode = Mode; exports.Mode = Mode;

View file

@ -48,9 +48,7 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.getNextLineIndent = function(state, line, tab) { this.blockComment = {start: "<!--", end: "-->"};
return this.$getIndent(line);
};
}).call(Mode.prototype); }).call(Mode.prototype);

View file

@ -47,6 +47,8 @@ oop.inherits(Mode, TextMode);
(function() { (function() {
this.lineCommentStart = "#";
this.getNextLineIndent = function(state, line, tab) { this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line); var indent = this.$getIndent(line);