49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
|
define(function(require, exports, module) {
|
||
|
"use strict";
|
||
|
|
||
|
var oop = require("../../lib/oop");
|
||
|
var Range = require("../../range").Range;
|
||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||
|
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||
|
|
||
|
var FoldMode = exports.FoldMode = function() {};
|
||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||
|
|
||
|
(function() {
|
||
|
|
||
|
// regular expressions that identify starting and stopping points
|
||
|
this.foldingStartMarker = /\b(rule|declare|query|when|then)\b/;
|
||
|
this.foldingStopMarker = /\bend\b/;
|
||
|
|
||
|
this.getFoldWidgetRange = function(session, foldStyle, row) {
|
||
|
var line = session.getLine(row);
|
||
|
var match = line.match(this.foldingStartMarker);
|
||
|
if (match) {
|
||
|
var i = match.index;
|
||
|
|
||
|
if (match[1]) {
|
||
|
var position = {row: row, column: line.length};
|
||
|
var iterator = new TokenIterator(session, position.row, position.column);
|
||
|
var seek = "end";
|
||
|
var token = iterator.getCurrentToken();
|
||
|
if (token.value == "when") {
|
||
|
seek = "then";
|
||
|
}
|
||
|
while (token) {
|
||
|
if (token.value == seek) {
|
||
|
return Range.fromPoints(position ,{
|
||
|
row: iterator.getCurrentTokenRow(),
|
||
|
column: iterator.getCurrentTokenColumn()
|
||
|
});
|
||
|
}
|
||
|
token = iterator.stepForward();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
// test each line, and return a range of segments to collapse
|
||
|
};
|
||
|
|
||
|
}).call(FoldMode.prototype);
|
||
|
|
||
|
});
|