diff --git a/lib/ace/layer/text.js b/lib/ace/layer/text.js index 812dd066..a54f9250 100644 --- a/lib/ace/layer/text.js +++ b/lib/ace/layer/text.js @@ -223,23 +223,25 @@ var Text = function(parentEl) { if (this.showInvisibles) { tabStr.push("" + this.TAB_CHAR - + Array(i).join(" ") + + lang.stringRepeat("\xa0", i - 1) + ""); } else { - tabStr.push(new Array(i+1).join(" ")); + tabStr.push(lang.stringRepeat("\xa0", i)); } } if (this.displayIndentGuides) { this.$indentGuideRe = /\s\S| \t|\t |\s$/; var className = "ace_indent-guide"; - var content = Array(this.tabSize + 1).join(" "); - var tabContent = content; if (this.showInvisibles) { className += " ace_invisible"; - tabContent = this.TAB_CHAR + content.substr(6); + var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); + var tabContent = this.TAB_CHAR + lang.stringRepeat("\xa0", this.tabSize - 1); + } else{ + var spaceContent = lang.stringRepeat("\xa0", this.tabSize); + var tabContent = spaceContent; } - this.$tabStrings[" "] = "" + content + ""; + this.$tabStrings[" "] = "" + spaceContent + ""; this.$tabStrings["\t"] = "" + tabContent + ""; } }; @@ -411,7 +413,9 @@ var Text = function(parentEl) { var replaceReg = /\t|&|<|( +)|([\x00-\x1f\x80-\xa0\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\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 (a) { - return new Array(c.length+1).join(" "); + return self.showInvisibles ? + "" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "" : + lang.stringRepeat("\xa0", c.length); } else if (c == "&") { return "&"; } else if (c == "<") { @@ -459,10 +463,10 @@ var Text = function(parentEl) { return value; if (value[0] == " ") { cols -= cols % this.tabSize; - stringBuilder.push(Array(cols/this.tabSize + 1).join(this.$tabStrings[" "])); + stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize)); return value.substr(cols); } else if (value[0] == "\t") { - stringBuilder.push(Array(cols + 1).join(this.$tabStrings["\t"])); + stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols)); return value.substr(cols); } return value; diff --git a/lib/ace/lib/lang.js b/lib/ace/lib/lang.js index 4f81c842..4e6ebf2c 100644 --- a/lib/ace/lib/lang.js +++ b/lib/ace/lib/lang.js @@ -36,7 +36,15 @@ exports.stringReverse = function(string) { }; exports.stringRepeat = function (string, count) { - return new Array(count + 1).join(string); + var result = ''; + while (count > 0) { + if (count & 1) + result += string; + + if (count >>= 1) + string += string; + } + return result; }; var trimBeginRegexp = /^\s\s*/; diff --git a/lib/ace/multi_select.js b/lib/ace/multi_select.js index 4de4d446..469052c1 100644 --- a/lib/ace/multi_select.js +++ b/lib/ace/multi_select.js @@ -780,23 +780,23 @@ var Editor = require("./editor").Editor; return m; }).map(isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); - function strRepeat(n, ch) { - return Array(n + 1).join(ch) + function spaces(n) { + return lang.stringRepeat(" ", n); } function alignLeft(m) { - return !m[2] ? m[0] : strRepeat(startW, " ") + m[2] - + strRepeat(textW - m[2].length + endW, " ") + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\s+/, "$1 ") } function alignRight(m) { - return !m[2] ? m[0] : strRepeat(startW + textW - m[2].length, " ") + m[2] - + strRepeat(endW, " ") + return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + + spaces(endW, " ") + m[4].replace(/^([=:])\s+/, "$1 ") } function unAlign(m) { - return !m[2] ? m[0] : strRepeat(startW, " ") + m[2] - + strRepeat(endW, " ") + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(endW) + m[4].replace(/^([=:])\s+/, "$1 ") } }