better folding for python and coffeeScript
This commit is contained in:
parent
55198434a4
commit
0a9a997883
5 changed files with 44 additions and 29 deletions
|
|
@ -40,6 +40,7 @@ define(function(require, exports, module) {
|
|||
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||
var Rules = require("./coffee_highlight_rules").CoffeeHighlightRules;
|
||||
var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||
var PythonFoldMode = require("./folding/pythonic").FoldMode;
|
||||
var Range = require("../range").Range;
|
||||
var TextMode = require("./text").Mode;
|
||||
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||
|
|
@ -48,6 +49,7 @@ var oop = require("../lib/oop");
|
|||
function Mode() {
|
||||
this.$tokenizer = new Tokenizer(new Rules().getRules());
|
||||
this.$outdent = new Outdent();
|
||||
this.foldingRules = new PythonFoldMode("\\[|=|(=>)|(->)");
|
||||
}
|
||||
|
||||
oop.inherits(Mode, TextMode);
|
||||
|
|
|
|||
|
|
@ -55,26 +55,12 @@ oop.inherits(FoldMode, BaseFoldMode);
|
|||
if (match) {
|
||||
var i = match.index;
|
||||
|
||||
if (match[2]) {
|
||||
var range = session.getCommentFoldRange(row, i + match[0].length);
|
||||
range.end.column -= 2;
|
||||
return range;
|
||||
}
|
||||
if (match[1])
|
||||
return this.openingBracketBlock(session, match[1], row, i);
|
||||
|
||||
var start = {row: row, column: i+1};
|
||||
var end = session.$findClosingBracket(match[1], start);
|
||||
if (!end)
|
||||
return;
|
||||
|
||||
var fw = session.foldWidgets[end.row];
|
||||
if (fw == null)
|
||||
fw = this.getFoldWidget(session, end.row);
|
||||
|
||||
if (fw == "start") {
|
||||
end.row --;
|
||||
end.column = session.getLine(end.row).length;
|
||||
}
|
||||
return Range.fromPoints(start, end);
|
||||
var range = session.getCommentFoldRange(row, i + match[0].length);
|
||||
range.end.column -= 2;
|
||||
return range;
|
||||
}
|
||||
|
||||
if (foldStyle !== "markbeginend")
|
||||
|
|
|
|||
|
|
@ -43,8 +43,6 @@ var FoldMode = exports.FoldMode = function() {};
|
|||
|
||||
(function() {
|
||||
|
||||
this.FOO = 12;
|
||||
|
||||
this.foldingStartMarker = null;
|
||||
this.foldingStopMarker = null;
|
||||
|
||||
|
|
@ -70,15 +68,17 @@ var FoldMode = exports.FoldMode = function() {};
|
|||
return null;
|
||||
};
|
||||
|
||||
this.indentationBlock = function(session, foldStyle, row) {
|
||||
this.indentationBlock = function(session, row) {
|
||||
var re = /^\s*/;
|
||||
var startRow = row;
|
||||
var endRow = row;
|
||||
var line = session.getLine(row);
|
||||
var startColumn = line.length - 1;
|
||||
var startLevel = line.match(re)[0].length;
|
||||
|
||||
while (line = session.getLine(++row)) {
|
||||
var maxRow = session.getLength()
|
||||
|
||||
while (++row < maxRow) {
|
||||
line = session.getLine(row);
|
||||
var level = line.match(re)[0].length;
|
||||
|
||||
if (level == line.length)
|
||||
|
|
@ -96,6 +96,23 @@ var FoldMode = exports.FoldMode = function() {};
|
|||
}
|
||||
};
|
||||
|
||||
this.openingBracketBlock = function(session, bracket, row, column) {
|
||||
var start = {row: row, column: column + 1};
|
||||
var end = session.$findClosingBracket(bracket, start);
|
||||
if (!end)
|
||||
return;
|
||||
|
||||
var fw = session.foldWidgets[end.row];
|
||||
if (fw == null)
|
||||
fw = this.getFoldWidget(session, end.row);
|
||||
|
||||
if (fw == "start") {
|
||||
end.row --;
|
||||
end.column = session.getLine(end.row).length;
|
||||
}
|
||||
return Range.fromPoints(start, end);
|
||||
};
|
||||
|
||||
this.$testStart = function(session, foldStyle, row) {
|
||||
if (this.foldingStartMarker.test(session.getLine(row)))
|
||||
return "start";
|
||||
|
|
|
|||
|
|
@ -40,13 +40,23 @@ define(function(require, exports, module) {
|
|||
var oop = require("../../lib/oop");
|
||||
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||
|
||||
var FoldMode = exports.FoldMode = function() {};
|
||||
var FoldMode = exports.FoldMode = function(markers) {
|
||||
this.foldingStartMarker = new RegExp("(?:(\\[)|" + markers + ")(?:\\s*)(?:#.*)?$");
|
||||
};
|
||||
oop.inherits(FoldMode, BaseFoldMode);
|
||||
|
||||
(function() {
|
||||
|
||||
this.foldingStartMarker = /\:(:?\s*)?(:?#.*)?$/;
|
||||
this.getFoldWidgetRange = BaseFoldMode.prototype.indentationBlock;
|
||||
this.getFoldWidgetRange = function(session, foldStyle, row) {
|
||||
var line = session.getLine(row);
|
||||
var match = line.match(this.foldingStartMarker);
|
||||
if (match) {
|
||||
if (match[1])
|
||||
return this.openingBracketBlock(session, match[1], row, match.index);
|
||||
|
||||
return this.indentationBlock(session, row)
|
||||
}
|
||||
}
|
||||
|
||||
}).call(FoldMode.prototype);
|
||||
|
||||
|
|
@ -42,12 +42,12 @@ var oop = require("../lib/oop");
|
|||
var TextMode = require("./text").Mode;
|
||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||
var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules;
|
||||
var PythonFoldMode = require("./folding/python").FoldMode;
|
||||
var PythonFoldMode = require("./folding/pythonic").FoldMode;
|
||||
var Range = require("../range").Range;
|
||||
|
||||
var Mode = function() {
|
||||
this.$tokenizer = new Tokenizer(new PythonHighlightRules().getRules());
|
||||
this.foldingRules = new PythonFoldMode();
|
||||
this.foldingRules = new PythonFoldMode("\\:");
|
||||
};
|
||||
oop.inherits(Mode, TextMode);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue