diff --git a/demo/kitchen-sink/demo.js b/demo/kitchen-sink/demo.js
index 88881724..bcd240ff 100644
--- a/demo/kitchen-sink/demo.js
+++ b/demo/kitchen-sink/demo.js
@@ -301,7 +301,8 @@ split.on("focus", function(editor) {
});
env.split = split;
window.env = env;
-window.ace = env.editor;
+window.editor = window.ace = env.editor;
+env.editor.setAnimatedScroll(true);
var docEl = document.getElementById("doc");
var modeEl = document.getElementById("mode");
@@ -395,13 +396,13 @@ function saveOption(el, val) {
}
}
-themeEl.addEventListener("mouseover", function(e){
+event.addListener(themeEl, "mouseover", function(e){
this.desiredValue = e.target.value;
if (!this.$timer)
this.$timer = setTimeout(this.updateTheme);
})
-themeEl.addEventListener("mouseout", function(e){
+event.addListener(themeEl, "mouseout", function(e){
this.desiredValue = null;
if (!this.$timer)
this.$timer = setTimeout(this.updateTheme, 20);
@@ -486,7 +487,6 @@ bindCheckbox("show_hscroll", function(checked) {
env.editor.renderer.setHScrollBarAlwaysVisible(checked);
});
-env.editor.setAnimatedScroll(true);
bindCheckbox("animate_scroll", function(checked) {
env.editor.setAnimatedScroll(checked);
});
diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js
index 79251504..2fe312a0 100644
--- a/lib/ace/edit_session.js
+++ b/lib/ace/edit_session.js
@@ -487,7 +487,7 @@ var EditSession = function(text, mode) {
this._loadMode = function(mode, callback) {
if (this.$modes[mode])
return callback(this.$modes[mode]);
-
+
var _self = this;
var module;
try {
@@ -495,15 +495,15 @@ var EditSession = function(text, mode) {
} catch (e) {};
if (module)
return done(module);
-
+
fetch(function() {
require([mode], done);
});
-
+
function done(module) {
if (_self.$modes[mode])
return callback(_self.$modes[mode]);
-
+
_self.$modes[mode] = new module.Mode();
_self.$modes[mode].$id = mode;
_self._emit("loadmode", {
@@ -516,7 +516,7 @@ var EditSession = function(text, mode) {
function fetch(callback) {
if (!config.get("packaged"))
return callback();
-
+
var base = mode.split("/").pop();
var filename = config.get("modePath") + "/mode-" + base + config.get("suffix");
net.loadScript(filename, callback);
@@ -524,30 +524,33 @@ var EditSession = function(text, mode) {
};
this.$mode = null;
- this.$origMode = null;
+ this.$modeId = null;
this.setMode = function(mode) {
// load on demand
if (typeof mode === "string") {
- this.$origMode = mode;
+ if (this.$modeId == mode)
+ return;
+
+ this.$modeId = mode;
var _self = this;
this._loadMode(mode, function(module) {
- if (_self.$origMode !== mode)
+ if (_self.$modeId !== mode)
return;
-
+
_self.setMode(module);
});
return;
} else if (mode == null) {
mode = "ace/mode/text"
- this.$origMode = mode;
+ this.$modeId = mode;
this.$modes[mode] = this.$modes[mode] || (new TextMode());
this.setMode(this.$modes[mode]);
return;
}
-
+
if (this.$mode === mode) return;
this.$mode = mode;
-
+ this.$modeId = mode.$id;
this.$stopWorker();
@@ -606,7 +609,7 @@ var EditSession = function(text, mode) {
this.getMode = function() {
return this.$mode;
};
-
+
this.$scrollTop = 0;
this.setScrollTop = function(scrollTop) {
scrollTop = Math.round(Math.max(0, scrollTop));
@@ -620,7 +623,7 @@ var EditSession = function(text, mode) {
this.getScrollTop = function() {
return this.$scrollTop;
};
-
+
this.$scrollLeft = 0;
this.setScrollLeft = function(scrollLeft) {
scrollLeft = Math.round(Math.max(0, scrollLeft));
@@ -758,7 +761,7 @@ var EditSession = function(text, mode) {
this.selection.setSelectionRange(lastUndoRange);
return lastUndoRange;
};
-
+
this.setUndoSelect = function(enable) {
this.$undoSelect = enable;
};
@@ -959,7 +962,7 @@ var EditSession = function(text, mode) {
range.start.column
);
}
-
+
var len = this.doc.getLength() - 1;
if (range.end.row > len) {
range.end.row = len;
diff --git a/lib/ace/layer/text.js b/lib/ace/layer/text.js
index d4d39bc0..e4069659 100644
--- a/lib/ace/layer/text.js
+++ b/lib/ace/layer/text.js
@@ -390,21 +390,18 @@ var Text = function(parentEl) {
this.$renderToken = function(stringBuilder, screenColumn, token, value) {
var self = this;
- var replaceReg = /\t|&|<|( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])|[\u1100-\u115F]|[\u11A3-\u11A7]|[\u11FA-\u11FF]|[\u2329-\u232A]|[\u2E80-\u2E99]|[\u2E9B-\u2EF3]|[\u2F00-\u2FD5]|[\u2FF0-\u2FFB]|[\u3000-\u303E]|[\u3041-\u3096]|[\u3099-\u30FF]|[\u3105-\u312D]|[\u3131-\u318E]|[\u3190-\u31BA]|[\u31C0-\u31E3]|[\u31F0-\u321E]|[\u3220-\u3247]|[\u3250-\u32FE]|[\u3300-\u4DBF]|[\u4E00-\uA48C]|[\uA490-\uA4C6]|[\uA960-\uA97C]|[\uAC00-\uD7A3]|[\uD7B0-\uD7C6]|[\uD7CB-\uD7FB]|[\uF900-\uFAFF]|[\uFE10-\uFE19]|[\uFE30-\uFE52]|[\uFE54-\uFE66]|[\uFE68-\uFE6B]|[\uFF01-\uFF60]|[\uFFE0-\uFFE6]/g;
+ var replaceReg = /\t|&|<|( +)|([\u0000-\u0019\u00a0\u2000-\u200b\u2028\u2029\u3000])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g;
var replaceFunc = function(c, a, b, tabIdx, idx4) {
- if (c.charCodeAt(0) == 32) {
+ if (a) {
return new Array(c.length+1).join(" ");
+ } else if (c == "&") {
+ return useragent.isOldGecko ? "&" : "&";
+ } else if (c == "<") {
+ return "<";
} else if (c == "\t") {
var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);
screenColumn += tabSize - 1;
return self.$tabStrings[tabSize];
- } else if (c == "&") {
- if (useragent.isOldGecko)
- return "&";
- else
- return "&";
- } else if (c == "<") {
- return "<";
} else if (c == "\u3000") {
// U+3000 is both invisible AND full-width, so must be handled uniquely
var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk";
@@ -413,13 +410,11 @@ var Text = function(parentEl) {
return "" + space + "";
- } else if (c.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)) {
- if (self.showInvisibles) {
- var space = new Array(c.length+1).join(self.SPACE_CHAR);
- return "" + space + "";
- } else {
+ } else if (b) {
+ if (self.showInvisibles)
+ return "" + self.SPACE_CHAR + "";
+ else
return " ";
- }
} else {
screenColumn += 1;
return "