Merge remote-tracking branch 'remotes/pull/1995'
This commit is contained in:
commit
511faeeaae
1 changed files with 84 additions and 0 deletions
|
|
@ -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.
|
||||
|
|
@ -534,6 +535,88 @@ var Editor = function(renderer, session) {
|
|||
self.session.$bracketHighlight = self.session.addMarker(range, "ace_bracket", "text");
|
||||
}, 50);
|
||||
};
|
||||
|
||||
this.$highlightTags = function() {
|
||||
var session = this.session;
|
||||
|
||||
if (this.$highlightTagPending) {
|
||||
return;
|
||||
}
|
||||
|
||||
// perform highlight async to not block the browser during navigation
|
||||
var self = this;
|
||||
this.$highlightTagPending = true;
|
||||
setTimeout(function() {
|
||||
self.$highlightTagPending = false;
|
||||
|
||||
var pos = self.getCursorPosition();
|
||||
var iterator = new TokenIterator(self.session, pos.row, pos.column);
|
||||
var token = iterator.getCurrentToken();
|
||||
|
||||
if (!token || token.type.indexOf('tag-name') === -1) {
|
||||
session.removeMarker(session.$tagHighlight);
|
||||
session.$tagHighlight = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var tag = token.value;
|
||||
var depth = 0;
|
||||
var prevToken = iterator.stepBackward();
|
||||
|
||||
if (prevToken.value == '<'){
|
||||
//find closing tag
|
||||
do {
|
||||
prevToken = token;
|
||||
token = iterator.stepForward();
|
||||
|
||||
if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {
|
||||
if (prevToken.value==='<'){
|
||||
depth++;
|
||||
} else if (prevToken.value==='</'){
|
||||
depth--;
|
||||
}
|
||||
}
|
||||
|
||||
} while (token && depth>=0);
|
||||
}else{
|
||||
//find opening tag
|
||||
do {
|
||||
token = prevToken;
|
||||
prevToken = iterator.stepBackward();
|
||||
|
||||
if(token && token.value === tag && token.type.indexOf('tag-name') !== -1) {
|
||||
if (prevToken.value==='<') {
|
||||
depth++;
|
||||
} else if( prevToken.value==='</') {
|
||||
depth--;
|
||||
}
|
||||
}
|
||||
} while (prevToken && depth<=0);
|
||||
|
||||
//select tag again
|
||||
iterator.stepForward();
|
||||
}
|
||||
|
||||
if (!token) {
|
||||
session.removeMarker(session.$tagHighlight);
|
||||
session.$tagHighlight = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var row = iterator.getCurrentTokenRow();
|
||||
var column = iterator.getCurrentTokenColumn();
|
||||
var range = new Range(row, column, row, column+token.value.length);
|
||||
|
||||
//remove range if different
|
||||
if (session.$tagHighlight && range.compareRange(session.$backMarkers[session.$tagHighlight].range)!==0) {
|
||||
session.removeMarker(session.$tagHighlight);
|
||||
session.$tagHighlight = null;
|
||||
}
|
||||
|
||||
if (range && !session.$tagHighlight)
|
||||
session.$tagHighlight = session.addMarker(range, "ace_bracket", "text");
|
||||
}, 50);
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -651,6 +734,7 @@ var Editor = function(renderer, session) {
|
|||
}
|
||||
|
||||
this.$highlightBrackets();
|
||||
this.$highlightTags();
|
||||
this.$updateHighlightActiveLine();
|
||||
this._signal("changeSelection");
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue