fix jumping to brackets in strings
This commit is contained in:
parent
d7c7cb1b4d
commit
e92b709eb2
1 changed files with 47 additions and 40 deletions
|
|
@ -1923,12 +1923,9 @@ var Editor = function(renderer, session) {
|
||||||
var cursor = this.getCursorPosition();
|
var cursor = this.getCursorPosition();
|
||||||
var iterator = new TokenIterator(this.session, cursor.row, cursor.column);
|
var iterator = new TokenIterator(this.session, cursor.row, cursor.column);
|
||||||
var prevToken = iterator.getCurrentToken();
|
var prevToken = iterator.getCurrentToken();
|
||||||
var token;
|
var token = prevToken;
|
||||||
|
|
||||||
//handle bracket as first char on line
|
if (!token)
|
||||||
if (prevToken && prevToken.index===0)
|
|
||||||
token = prevToken;
|
|
||||||
else
|
|
||||||
token = iterator.stepForward();
|
token = iterator.stepForward();
|
||||||
|
|
||||||
if (!token)
|
if (!token)
|
||||||
|
|
@ -1937,34 +1934,43 @@ var Editor = function(renderer, session) {
|
||||||
//get next closing tag or bracket
|
//get next closing tag or bracket
|
||||||
var matchType;
|
var matchType;
|
||||||
var found = false;
|
var found = false;
|
||||||
var inverse;
|
|
||||||
var depth = {};
|
var depth = {};
|
||||||
|
var i = cursor.column - token.start;
|
||||||
|
var bracketType;
|
||||||
|
var brackets = {
|
||||||
|
")": "(",
|
||||||
|
"(": "(",
|
||||||
|
"]": "[",
|
||||||
|
"[": "[",
|
||||||
|
"{": "{",
|
||||||
|
"}": "{"
|
||||||
|
};
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (token.value.match(/[{}()\[\]]/g)) {
|
if (token.value.match(/[{}()\[\]]/g)) {
|
||||||
for (var i=0; i<token.value.length; i++) {
|
for (; i<token.value.length && !found; i++) {
|
||||||
|
if (!brackets[token.value[i]]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bracketType = brackets[token.value[i]]+'.'+token.type.replace("rparen", "lparen");
|
||||||
|
|
||||||
|
if (isNaN(depth[bracketType])) {
|
||||||
|
depth[bracketType] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
switch (token.value[i]) {
|
switch (token.value[i]) {
|
||||||
case '(':
|
case '(':
|
||||||
case '[':
|
case '[':
|
||||||
case '{':
|
case '{':
|
||||||
if (isNaN(depth[token.value[i]])) {
|
depth[bracketType]++;
|
||||||
depth[token.value] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
depth[token.value[i]]++;
|
|
||||||
break;
|
break;
|
||||||
case ')':
|
case ')':
|
||||||
case ']':
|
case ']':
|
||||||
case '}':
|
case '}':
|
||||||
inverse = this.session.$brackets[token.value[i]];
|
depth[bracketType]--;
|
||||||
|
|
||||||
if (isNaN(depth[inverse])) {
|
if (depth[bracketType]===-1) {
|
||||||
depth[inverse] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
depth[inverse]--;
|
|
||||||
|
|
||||||
if (depth[inverse]===-1) {
|
|
||||||
matchType = 'bracket';
|
matchType = 'bracket';
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
|
|
@ -1988,11 +1994,12 @@ var Editor = function(renderer, session) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found===false) {
|
if (!found) {
|
||||||
prevToken = token;
|
prevToken = token;
|
||||||
token = iterator.stepForward();
|
token = iterator.stepForward();
|
||||||
|
i = 0;
|
||||||
}
|
}
|
||||||
} while (token && found===false);
|
} while (token && !found);
|
||||||
|
|
||||||
//no match found
|
//no match found
|
||||||
if (!matchType) {
|
if (!matchType) {
|
||||||
|
|
@ -2005,9 +2012,9 @@ var Editor = function(renderer, session) {
|
||||||
if (!range) {
|
if (!range) {
|
||||||
range = new Range(
|
range = new Range(
|
||||||
iterator.getCurrentTokenRow(),
|
iterator.getCurrentTokenRow(),
|
||||||
iterator.getCurrentTokenColumn(),
|
iterator.getCurrentTokenColumn()+i-1,
|
||||||
iterator.getCurrentTokenRow(),
|
iterator.getCurrentTokenRow(),
|
||||||
iterator.getCurrentTokenColumn()
|
iterator.getCurrentTokenColumn()+i-1
|
||||||
);
|
);
|
||||||
if (!range)
|
if (!range)
|
||||||
return;
|
return;
|
||||||
|
|
@ -2051,7 +2058,7 @@ var Editor = function(renderer, session) {
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (prevToken && found===false);
|
} while (prevToken && !found);
|
||||||
}
|
}
|
||||||
|
|
||||||
//we found it
|
//we found it
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue