Fix bug in semantic highlighting.

This commit is contained in:
William Candillon 2012-05-22 10:41:26 +02:00
commit 11e9267046
69 changed files with 47994 additions and 82 deletions

View file

@ -44,11 +44,12 @@ var TextMode = require("./text").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var XQueryHighlightRules = require("./xquery_highlight_rules").XQueryHighlightRules;
var XQueryBehaviour = require("./behaviour/xquery").XQueryBehaviour;
//var XQueryBackgroundHighlighter = require("./xquery_background_highlighter").XQueryBackgroundHighlighter;
var Range = require("../range").Range;
var Mode = function(parent) {
this.$tokenizer = new Tokenizer(new XQueryHighlightRules().getRules());
this.$behaviour = new XQueryBehaviour(parent);
this.$tokenizer = new Tokenizer(new XQueryHighlightRules().getRules());
this.$behaviour = new XQueryBehaviour(parent);
};
oop.inherits(Mode, TextMode);
@ -117,21 +118,20 @@ oop.inherits(Mode, TextMode);
}
};
this.deltas = [];
this.createWorker = function(session) {
this.$deltas = [];
var worker = new WorkerClient(["ace"], "worker-xquery.js", "ace/mode/xquery_worker", "XQueryWorker");
var that = this;
session.getDocument().on('change', function(evt){
that.deltas.push(evt.data);
that.$deltas.push(evt.data);
});
worker.attachToDocument(session.getDocument());
worker.on("start", function(e) {
console.log("start");
that.deltas = [];
that.$deltas = [];
});
worker.on("error", function(e) {
@ -148,13 +148,13 @@ oop.inherits(Mode, TextMode);
var lines = tokens.data;
for(var i in that.deltas)
for(var i=0; i < that.$deltas.length; i++)
{
var delta = that.deltas[i];
//console.log(delta);
var delta = that.$deltas[i];
if (delta.action === "insertLines")
{
var newLineCount = delta.range.end.row - delta.range.start.row;
var newLineCount = delta.lines.length;
for (var i = 0; i < newLineCount; i++) {
lines.splice(delta.range.start.row + i, 0, undefined);
}
@ -165,23 +165,29 @@ oop.inherits(Mode, TextMode);
{
lines.splice(delta.range.end.row, 0, undefined);
} else {
delete lines[delta.range.start.row];
lines[delta.range.start.row] = undefined;
}
} else if (delta.action === "removeLines") {
var oldLineCount = delta.range.end.row - delta.range.start.row;
for (var i = 0; i < newLineCount; i++) {
lines.splice(delta.range.start.row + i, 1);
}
var oldLineCount = delta.lines.length;
lines.splice(delta.range.start.row, oldLineCount);
} else if (delta.action === "removeText") {
if (session.getDocument().isNewLine(delta.text))
{
lines[delta.range.start.row] = undefined;
lines.splice(delta.range.end.row, 1);
} else {
lines[delta.range.start.row] = undefined;
}
delete lines[delta.range.start.row];
}
}
session.bgTokenizer.lines = lines;
//this.$highlighter = new XQueryBackgroundHighlighter(session);
//this.$highlighter.lines = lines;
//for(var i=0; i < that.$deltas.length; i++)
//{
// var delta = that.$deltas[i];
// this.$highlighter.processDelta(delta);
//}
session.bgTokenizer.lines = lines;// this.$highlighter.lines;
session.bgTokenizer.fireUpdateEvent(firstRow, lastRow);
});

View file

@ -33,7 +33,7 @@ var XQueryHighlightRules = function() {
"external|" +
"if|then|else|as|and|or|typeswitch|case|ascending|descending|empty|in|count|updating|insert|delete|replace|value|node|attribute|text|element|into|of|with|contains").split("|")
);
// regexp must not have capturing parentheses
// regexps are ordered -> the first match is used