diff --git a/lib/ace/edit_session/folding.js b/lib/ace/edit_session/folding.js index dd942fcc..79a28786 100644 --- a/lib/ace/edit_session/folding.js +++ b/lib/ace/edit_session/folding.js @@ -41,6 +41,7 @@ define(function(require, exports, module) { var Range = require("../range").Range; var FoldLine = require("./fold_line").FoldLine; var Fold = require("./fold").Fold; +var TokenIterator = require("../token_iterator").TokenIterator; function Folding() { /** @@ -533,24 +534,26 @@ function Folding() { range.start.column++; } 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)) { - var startRow = cursor.row; - var endRow = cursor.row; - var t = token; - while ((t = this.getTokenAt(startRow - 1)) && t.type == token.type) { - startRow --; - token = t; - } - range.start.row = startRow; - range.start.column = token.start + 2; - - while ((t = this.getTokenAt(endRow + 1, 0)) && t.type == token.type) { - endRow ++; - token = t; - } - range.end.row = endRow; - range.end.column = token.start + token.value.length - 1; + do { + t = iterator.stepBackward(); + } while(t && t.type == token.type) + + iterator.stepForward(); + range.start.row = iterator.getCurrentTokenRow(); + range.start.column = iterator.getCurrentTokenColumn() + 2; + + var iterator = new TokenIterator(this, cursor.row, cursor.column); + + do { + t = iterator.stepForward(); + } while(t && t.type == token.type) + t = iterator.stepBackward(); + + range.end.row = iterator.getCurrentTokenRow(); + range.end.column = iterator.getCurrentTokenColumn() + t.value.length - 1; } } } else { diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index b491106a..b3ac15b3 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -264,11 +264,11 @@ var VirtualRenderer = function(container, theme) { }; this.$onGutterClick = function(e) { - var pageX = event.getDocumentX(e); var pageY = event.getDocumentY(e); + var row = this.screenToTextCoordinates(0, pageY).row; this._dispatchEvent("gutter" + e.type, { - row: this.screenToTextCoordinates(pageX, pageY).row, + row: row, htmlEvent: e }); };