diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 86630d9e..7552a17a 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -2000,24 +2000,157 @@ 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 = prevToken; - 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) + if (!token) + token = iterator.stepForward(); + + if (!token) + return; + + //get next closing tag or bracket + var matchType; + var found = false; + var depth = {}; + var i = cursor.column - token.start; + var bracketType; + var brackets = { + ")": "(", + "(": "(", + "]": "[", + "[": "[", + "{": "{", + "}": "{" + }; + + do { + if (token.value.match(/[{}()\[\]]/g)) { + for (; i