From d7c7cb1b4da143632017788267f7e61ee42107e8 Mon Sep 17 00:00:00 2001 From: Adam Jimenez Date: Mon, 9 Jun 2014 17:09:31 +0100 Subject: [PATCH] add html tag support to jumpToMatching --- lib/ace/editor.js | 153 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 140 insertions(+), 13 deletions(-) diff --git a/lib/ace/editor.js b/lib/ace/editor.js index ef2d9f1a..f57bdc70 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -48,6 +48,7 @@ var EventEmitter = require("./lib/event_emitter").EventEmitter; var CommandManager = require("./commands/command_manager").CommandManager; var defaultCommands = require("./commands/default_commands").commands; var config = require("./config"); +var TokenIterator = require("./token_iterator").TokenIterator; /** * The main entry point into the Ace functionality. @@ -1915,26 +1916,152 @@ var Editor = function(renderer, session) { }; /** - * Moves the cursor's row and column to the next matching bracket. + * Moves the cursor's row and column to the next matching bracket or HTML tag. * **/ this.jumpToMatching = function(select) { var cursor = this.getCursorPosition(); + var iterator = new TokenIterator(this.session, cursor.row, cursor.column); + var prevToken = iterator.getCurrentToken(); + var token; - var range = this.session.getBracketRange(cursor); - if (!range) { - range = this.find({ - needle: /[{}()\[\]]/g, - preventScroll:true, - start: {row: cursor.row, column: cursor.column - 1} - }); - if (!range) - return; - var pos = range.start; - if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2) - range = this.session.getBracketRange(pos); + //handle bracket as first char on line + if (prevToken && prevToken.index===0) + token = prevToken; + else + token = iterator.stepForward(); + + if (!token) + return; + + //get next closing tag or bracket + var matchType; + var found = false; + var inverse; + var depth = {}; + + do { + if (token.value.match(/[{}()\[\]]/g)) { + for (var i=0; i