From 2424261f7a3054cbe27fbc5897e485b07d72ba36 Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 28 Nov 2011 00:53:42 +0400 Subject: [PATCH] use tokenIterator to find comment range --- lib/ace/edit_session/folding.js | 37 ++++++++++++++++++--------------- lib/ace/virtual_renderer.js | 4 ++-- 2 files changed, 22 insertions(+), 19 deletions(-) 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 }); };