use tokenIterator to find comment range

This commit is contained in:
nightwing 2011-11-28 00:53:42 +04:00
commit 2424261f7a
2 changed files with 22 additions and 19 deletions

View file

@ -41,6 +41,7 @@ define(function(require, exports, module) {
var Range = require("../range").Range; var Range = require("../range").Range;
var FoldLine = require("./fold_line").FoldLine; var FoldLine = require("./fold_line").FoldLine;
var Fold = require("./fold").Fold; var Fold = require("./fold").Fold;
var TokenIterator = require("../token_iterator").TokenIterator;
function Folding() { function Folding() {
/** /**
@ -533,24 +534,26 @@ function Folding() {
range.start.column++; range.start.column++;
} else { } else {
var token = this.getTokenAt(cursor.row, cursor.column); var iterator = new TokenIterator(this, cursor.row, cursor.column);
var token = iterator.getCurrentToken();
if (token && /^comment|string/.test(token.type)) { if (token && /^comment|string/.test(token.type)) {
var startRow = cursor.row; do {
var endRow = cursor.row; t = iterator.stepBackward();
var t = token; } while(t && t.type == token.type)
while ((t = this.getTokenAt(startRow - 1)) && t.type == token.type) {
startRow --; iterator.stepForward();
token = t; range.start.row = iterator.getCurrentTokenRow();
} range.start.column = iterator.getCurrentTokenColumn() + 2;
range.start.row = startRow;
range.start.column = token.start + 2; var iterator = new TokenIterator(this, cursor.row, cursor.column);
while ((t = this.getTokenAt(endRow + 1, 0)) && t.type == token.type) { do {
endRow ++; t = iterator.stepForward();
token = t; } while(t && t.type == token.type)
} t = iterator.stepBackward();
range.end.row = endRow;
range.end.column = token.start + token.value.length - 1; range.end.row = iterator.getCurrentTokenRow();
range.end.column = iterator.getCurrentTokenColumn() + t.value.length - 1;
} }
} }
} else { } else {

View file

@ -264,11 +264,11 @@ var VirtualRenderer = function(container, theme) {
}; };
this.$onGutterClick = function(e) { this.$onGutterClick = function(e) {
var pageX = event.getDocumentX(e);
var pageY = event.getDocumentY(e); var pageY = event.getDocumentY(e);
var row = this.screenToTextCoordinates(0, pageY).row;
this._dispatchEvent("gutter" + e.type, { this._dispatchEvent("gutter" + e.type, {
row: this.screenToTextCoordinates(pageX, pageY).row, row: row,
htmlEvent: e htmlEvent: e
}); });
}; };