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); });