| 7170 | var TokenIterator = require("../token_iterator").TokenIterator; |
| 7171 | |
| 7172 | function Folding() { |
| 7173 | this.getFoldAt = function(row, column, side) { |
| 7174 | var foldLine = this.getFoldLine(row); |
| 7175 | if (!foldLine) |
| 7176 | return null; |
| 7177 | |
| 7178 | var folds = foldLine.folds; |
| 7179 | for (var i = 0; i < folds.length; i++) { |
| 7180 | var fold = folds[i]; |
| 7181 | if (fold.range.contains(row, column)) { |
| 7182 | if (side == 1 && fold.range.isEnd(row, column)) { |
| 7183 | continue; |
| 7184 | } else if (side == -1 && fold.range.isStart(row, column)) { |
| 7185 | continue; |
| 7186 | } |
| 7187 | return fold; |
| 7188 | } |
| 7189 | } |
| 7190 | }; |
| 7191 | this.getFoldsInRange = function(range) { |
| 7192 | var start = range.start; |
| 7193 | var end = range.end; |
| 7194 | var foldLines = this.$foldData; |
| 7195 | var foundFolds = []; |
| 7196 | |
| 7197 | start.column += 1; |
| 7198 | end.column -= 1; |
| 7199 | |
| 7200 | for (var i = 0; i < foldLines.length; i++) { |
| 7201 | var cmp = foldLines[i].range.compareRange(range); |
| 7202 | if (cmp == 2) { |
| 7203 | continue; |
| 7204 | } |
| 7205 | else if (cmp == -2) { |
| 7206 | break; |
| 7207 | } |
| 7208 | |
| 7209 | var folds = foldLines[i].folds; |
| 7210 | for (var j = 0; j < folds.length; j++) { |
| 7211 | var fold = folds[j]; |
| 7212 | cmp = fold.range.compareRange(range); |
| 7213 | if (cmp == -2) { |
| 7214 | break; |
| 7215 | } else if (cmp == 2) { |
| 7216 | continue; |
| 7217 | } else |
| 7218 | if (cmp == 42) { |
| 7219 | break; |
| 7220 | } |
| 7221 | foundFolds.push(fold); |
| 7222 | } |
| 7223 | } |
| 7224 | start.column -= 1; |
| 7225 | end.column += 1; |
| 7226 | |
| 7227 | return foundFolds; |
| 7228 | }; |
| 7229 | |