improve comment folding

This commit is contained in:
nightwing 2012-10-14 01:45:15 +04:00
commit ebd4b5bfaa
2 changed files with 20 additions and 21 deletions

View file

@ -585,30 +585,34 @@ function Folding() {
this.addFold(placeholder, range); this.addFold(placeholder, range);
}; };
this.getCommentFoldRange = function(row, column) { this.getCommentFoldRange = function(row, column, dir) {
var iterator = new TokenIterator(this, row, column); var iterator = new TokenIterator(this, row, column);
var token = iterator.getCurrentToken(); var token = iterator.getCurrentToken();
if (token && /^comment|string/.test(token.type)) { if (token && /^comment|string/.test(token.type)) {
var range = new Range(); var range = new Range();
var re = new RegExp(token.type.replace(/\..*/, "\\.")); var re = new RegExp(token.type.replace(/\..*/, "\\."));
do { if (dir != 1) {
token = iterator.stepBackward(); do {
} while(token && re.test(token.type)); token = iterator.stepBackward();
} while(token && re.test(token.type));
iterator.stepForward();
}
iterator.stepForward();
range.start.row = iterator.getCurrentTokenRow(); range.start.row = iterator.getCurrentTokenRow();
range.start.column = iterator.getCurrentTokenColumn() + 2; range.start.column = iterator.getCurrentTokenColumn() + 2;
iterator = new TokenIterator(this, row, column); iterator = new TokenIterator(this, row, column);
do { if (dir != -1) {
token = iterator.stepForward(); do {
} while(token && re.test(token.type)); token = iterator.stepForward();
} while(token && re.test(token.type));
token = iterator.stepBackward(); token = iterator.stepBackward();
} else
token = iterator.getCurrentToken();
range.end.row = iterator.getCurrentTokenRow(); range.end.row = iterator.getCurrentTokenRow();
range.end.column = iterator.getCurrentTokenColumn() + token.value.length; range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;
return range; return range;
} }
}; };

View file

@ -52,9 +52,7 @@ oop.inherits(FoldMode, BaseFoldMode);
if (match[1]) if (match[1])
return this.openingBracketBlock(session, match[1], row, i); return this.openingBracketBlock(session, match[1], row, i);
var range = session.getCommentFoldRange(row, i + match[0].length); return session.getCommentFoldRange(row, i + match[0].length, 1);
range.end.column -= 2;
return range;
} }
if (foldStyle !== "markbeginend") if (foldStyle !== "markbeginend")
@ -64,13 +62,10 @@ oop.inherits(FoldMode, BaseFoldMode);
if (match) { if (match) {
var i = match.index + match[0].length; var i = match.index + match[0].length;
if (match[2]) { if (match[1])
var range = session.getCommentFoldRange(row, i); return this.closingBracketBlock(session, match[1], row, i);
range.end.column -= 2;
return range;
}
return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1);
} }
}; };