diff --git a/node_modules/ace/lib/ace/ext/whitespace.js b/node_modules/ace/lib/ace/ext/whitespace.js index 27ee223e..eabefafb 100644 --- a/node_modules/ace/lib/ace/ext/whitespace.js +++ b/node_modules/ace/lib/ace/ext/whitespace.js @@ -46,19 +46,20 @@ exports.$detectIndentation = function(lines, fallback) { if (!/^\s*[^*+\-\s]/.test(line)) continue; - if (line[0] == "\t") + if (line[0] == "\t") { tabIndents++; - - var spaces = line.match(/^ */)[0].length; - if (spaces && line[spaces] != "\t") { - var diff = spaces - prevSpaces; - if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff)) - changes[diff] = (changes[diff] || 0) + 1; - - stats[spaces] = (stats[spaces] || 0) + 1; + prevSpaces = -Number.MAX_VALUE; + } else { + var spaces = line.match(/^ */)[0].length; + if (spaces && line[spaces] != "\t") { + var diff = spaces - prevSpaces; + if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff)) + changes[diff] = (changes[diff] || 0) + 1; + + stats[spaces] = (stats[spaces] || 0) + 1; + } + prevSpaces = spaces; } - prevSpaces = spaces; - // ignore lines ending with backslash while (i < max && line[line.length - 1] == "\\") line = lines[i++]; @@ -81,7 +82,7 @@ exports.$detectIndentation = function(lines, fallback) { spaceIndents = score; score = stats[1] ? 0.9 : 0.8; if (!stats.length) - score = 0 + score = 0; } else score /= spaceIndents; @@ -95,9 +96,11 @@ exports.$detectIndentation = function(lines, fallback) { if (first.score && first.score > 1.4) var tabLength = first.length; - if (tabIndents > spaceIndents + 1) + if (tabIndents > spaceIndents + 1) { + if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8) + tabLength = undefined; return {ch: "\t", length: tabLength}; - + } if (spaceIndents > tabIndents + 1) return {ch: " ", length: tabLength}; }; diff --git a/node_modules/ace/lib/ace/ext/whitespace_test.js b/node_modules/ace/lib/ace/ext/whitespace_test.js index be4f360f..6cc0c70e 100644 --- a/node_modules/ace/lib/ace/ext/whitespace_test.js +++ b/node_modules/ace/lib/ace/ext/whitespace_test.js @@ -29,7 +29,13 @@ module.exports = { assert.equal(indent.ch, "\t"); assert.equal(indent.length, undefined); - s.insert({row: 0, column: 0}, " "); + s.insert({row: 0, column: 0}, " "); + indent = whitespace.$detectIndentation(s.doc.$lines); + assert.equal(indent.ch, "\t"); + assert.equal(indent.length, undefined); + s.doc.removeInLine(0, 0, 1); + + s.insert({row: 0, column: 0}, "x\n y\n"); indent = whitespace.$detectIndentation(s.doc.$lines); assert.equal(indent.ch, "\t"); assert.equal(indent.length, 4);