58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
|
define(function(require, exports, module) {
|
||
|
"use strict";
|
||
|
|
||
|
var oop = require("../../lib/oop");
|
||
|
var CStyleFoldMode = require("./cstyle").FoldMode;
|
||
|
var Range = require("../../range").Range;
|
||
|
|
||
|
var FoldMode = exports.FoldMode = function() {};
|
||
|
oop.inherits(FoldMode, CStyleFoldMode);
|
||
|
|
||
|
(function() {
|
||
|
this.importRegex = /^import /;
|
||
|
this.getCStyleFoldWidget = this.getFoldWidget;
|
||
|
this.getFoldWidget = function(session, foldStyle, row) {
|
||
|
if (foldStyle === "markbegin") {
|
||
|
var line = session.getLine(row);
|
||
|
if (this.importRegex.test(line)) {
|
||
|
if (row == 0 || !this.importRegex.test(session.getLine(row - 1)))
|
||
|
return "start";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return this.getCStyleFoldWidget(session, foldStyle, row);
|
||
|
};
|
||
|
|
||
|
this.getCstyleFoldWidgetRange = this.getFoldWidgetRange;
|
||
|
this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
|
||
|
var line = session.getLine(row);
|
||
|
var match = line.match(this.importRegex);
|
||
|
if (!match || foldStyle !== "markbegin")
|
||
|
return this.getCstyleFoldWidgetRange(session, foldStyle, row, forceMultiline);
|
||
|
|
||
|
var startColumn = match[0].length;
|
||
|
var maxRow = session.getLength();
|
||
|
var startRow = row;
|
||
|
var endRow = row;
|
||
|
|
||
|
while (++row < maxRow) {
|
||
|
var line = session.getLine(row);
|
||
|
if (line.match(/^\s*$/))
|
||
|
continue;
|
||
|
|
||
|
if (!line.match(this.importRegex))
|
||
|
break;
|
||
|
|
||
|
endRow = row;
|
||
|
}
|
||
|
|
||
|
if (endRow > startRow) {
|
||
|
var endColumn = session.getLine(endRow).length;
|
||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
}).call(FoldMode.prototype);
|
||
|
|
||
|
});
|