Merge remote branch 'upstream/master'
This commit is contained in:
commit
dc84eac595
5 changed files with 88 additions and 85 deletions
|
|
@ -20,7 +20,7 @@
|
|||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Fabian Jakobs <fabian AT ajax DOT org>
|
||||
* Fabian Jakobs <fabian AT ajax DOT org>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
|
|
@ -42,35 +42,35 @@ var TokenIterator = require("ace/token_iterator").TokenIterator;
|
|||
|
||||
function BracketMatch() {
|
||||
|
||||
this.findMatchingBracket = function(position) {
|
||||
if (position.column == 0) return null;
|
||||
this.findMatchingBracket = function(position) {
|
||||
if (position.column == 0) return null;
|
||||
|
||||
var charBeforeCursor = this.getLine(position.row).charAt(position.column-1);
|
||||
if (charBeforeCursor == "") return null;
|
||||
var charBeforeCursor = this.getLine(position.row).charAt(position.column-1);
|
||||
if (charBeforeCursor == "") return null;
|
||||
|
||||
var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/);
|
||||
if (!match) {
|
||||
return null;
|
||||
}
|
||||
var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/);
|
||||
if (!match) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (match[1]) {
|
||||
return this.$findClosingBracket(match[1], position);
|
||||
} else {
|
||||
return this.$findOpeningBracket(match[2], position);
|
||||
}
|
||||
};
|
||||
if (match[1]) {
|
||||
return this.$findClosingBracket(match[1], position);
|
||||
} else {
|
||||
return this.$findOpeningBracket(match[2], position);
|
||||
}
|
||||
};
|
||||
|
||||
this.$brackets = {
|
||||
")": "(",
|
||||
"(": ")",
|
||||
"]": "[",
|
||||
"[": "]",
|
||||
"{": "}",
|
||||
"}": "{"
|
||||
};
|
||||
this.$brackets = {
|
||||
")": "(",
|
||||
"(": ")",
|
||||
"]": "[",
|
||||
"[": "]",
|
||||
"{": "}",
|
||||
"}": "{"
|
||||
};
|
||||
|
||||
this.$findOpeningBracket = function(bracket, position) {
|
||||
var openBracket = this.$brackets[bracket];
|
||||
this.$findOpeningBracket = function(bracket, position) {
|
||||
var openBracket = this.$brackets[bracket];
|
||||
var depth = 1;
|
||||
|
||||
var iterator = new TokenIterator(this, position.row, position.column);
|
||||
|
|
@ -91,14 +91,14 @@ function BracketMatch() {
|
|||
while (vIndex >= 0) {
|
||||
var char = value.charAt(vIndex);
|
||||
if (char == openBracket) {
|
||||
depth -= 1;
|
||||
if (depth == 0) {
|
||||
return {row: iterator.getCurrentTokenRow(),
|
||||
column: vIndex + iterator.getCurrentTokenColumn()};
|
||||
}
|
||||
depth -= 1;
|
||||
if (depth == 0) {
|
||||
return {row: iterator.getCurrentTokenRow(),
|
||||
column: vIndex + iterator.getCurrentTokenColumn()};
|
||||
}
|
||||
}
|
||||
else if (char == bracket) {
|
||||
depth += 1;
|
||||
depth += 1;
|
||||
}
|
||||
vIndex -= 1;
|
||||
}
|
||||
|
|
@ -115,41 +115,41 @@ function BracketMatch() {
|
|||
value = token.value;
|
||||
vIndex = token.value.length - 1;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
this.$findClosingBracket = function(bracket, position) {
|
||||
var closingBracket = this.$brackets[bracket];
|
||||
this.$findClosingBracket = function(bracket, position) {
|
||||
var closingBracket = this.$brackets[bracket];
|
||||
var depth = 1;
|
||||
|
||||
var iterator = new TokenIterator(this, position.row, position.column);
|
||||
var token = iterator.getCurrentToken();
|
||||
if (!token) return null;
|
||||
|
||||
|
||||
// Create a pattern that matches any token with the same type as token.type.
|
||||
// Exception: if token.type includes "lparen", then also match "rparen".
|
||||
var typeRe = new RegExp("(\\.?[" +
|
||||
token.type.replace(".", "|").replace("lparen", "lparen|rparen") + "])+");
|
||||
|
||||
|
||||
// Start searching in token, after after the character at position.column
|
||||
var vIndex = position.column - iterator.getCurrentTokenColumn();
|
||||
|
||||
|
||||
while (true) {
|
||||
|
||||
|
||||
var value = token.value;
|
||||
var valueLength = value.length;
|
||||
while (vIndex < valueLength) {
|
||||
var char = value.charAt(vIndex);
|
||||
if (char == closingBracket) {
|
||||
depth -= 1;
|
||||
if (depth == 0) {
|
||||
return {row: iterator.getCurrentTokenRow(),
|
||||
column: vIndex + iterator.getCurrentTokenColumn()};
|
||||
}
|
||||
depth -= 1;
|
||||
if (depth == 0) {
|
||||
return {row: iterator.getCurrentTokenRow(),
|
||||
column: vIndex + iterator.getCurrentTokenColumn()};
|
||||
}
|
||||
}
|
||||
else if (char == bracket) {
|
||||
depth += 1;
|
||||
depth += 1;
|
||||
}
|
||||
vIndex += 1;
|
||||
}
|
||||
|
|
@ -162,12 +162,12 @@ function BracketMatch() {
|
|||
|
||||
if (token == null)
|
||||
break;
|
||||
|
||||
|
||||
vIndex = 0;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
return null;
|
||||
};
|
||||
}
|
||||
exports.BracketMatch = BracketMatch;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue