From a8a1d9483b36ceed3715d23c55836a88aae4672b Mon Sep 17 00:00:00 2001 From: Julian Viereck Date: Sat, 19 Mar 2011 00:54:35 +0100 Subject: [PATCH] Moving replacing of spaces into big replace function to avoid replacements of tab --- lib/ace/layer/text.js | 48 ++++++++++++------------------------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/lib/ace/layer/text.js b/lib/ace/layer/text.js index 7c22548f..7d4f845b 100644 --- a/lib/ace/layer/text.js +++ b/lib/ace/layer/text.js @@ -280,58 +280,36 @@ var Text = function(parentEl) { }; this.$renderLine = function(stringBuilder, row, tokens) { - if (this.showInvisibles) { - var self = this; - var spaceRe = /( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])/g; - var spaceReplace = function(space) { - if (space.charCodeAt(0) == 32) - return new Array(space.length+1).join(" "); - else { - var space = new Array(space.length+1).join(self.SPACE_CHAR); - return "" + space + ""; - } - - }; - } - else { - var spaceRe = /[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/g; - var spaceReplace = " "; - } - var _self = this, characterWidth = this.config.characterWidth, screenColumn = 0; function addToken(token, value) { var output = value - .replace(/\t|&|<|[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF]/g, function(c, idx) { - if (c == "\t") { + .replace(/\t|&|<|( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])|[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF]/g, function(c, a, b, tabIdx, idx4) { + if (c.charCodeAt(0) == 32) { + return new Array(c.length+1).join(" "); + } else if (c == "\t") { var tabSize = _self.session. - getScreenTabSize(screenColumn + idx); + getScreenTabSize(screenColumn + tabIdx); screenColumn += tabSize - 1; return _self.$tabStrings[tabSize]; } else if (c == "&") { return "&"; } else if (c == "<") { return "<"; + } else if (c.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)) { + if (this.showInvisibles) { + var space = new Array(c.length+1).join(self.SPACE_CHAR); + return "" + space + ""; + } else { + return " " + } } else { screenColumn += 1; return "" + c + "" } - }) -// .replace(/\t/g, function(c, idx) { -// idx += screenColumnOld; -// var tabSize = _self.session.getScreenTabSize(idx); -// screenColumn += tabSize - 1; -// return _self.$tabStrings[tabSize]; -// }) -// .replace(/&/g, "&") -// .replace(/" + c + "" -// }); + }); screenColumn += value.length; if (!_self.$textToken[token.type]) {