diff --git a/lib/coffee-script/lexer.js b/lib/coffee-script/lexer.js index 5851e30f..ae99b9dd 100644 --- a/lib/coffee-script/lexer.js +++ b/lib/coffee-script/lexer.js @@ -40,7 +40,7 @@ }; Lexer.prototype.clean = function(code) { - var line, lines; + var line, lines, match; if (code.charCodeAt(0) === BOM) { code = code.slice(1); } @@ -55,8 +55,8 @@ _results = []; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { line = _ref2[_i]; - if (LITERATE.test(line)) { - _results.push(line.substr(4)); + if (match = LITERATE.exec(line)) { + _results.push(line.slice(match[0].length)); } else { _results.push('# ' + line); } diff --git a/src/lexer.coffee b/src/lexer.coffee index 1e229add..c232efc1 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -65,15 +65,15 @@ exports.Lexer = class Lexer # Preprocess the code to remove leading and trailing whitespace, carriage # returns, etc. If we're lexing literate CoffeeScript, strip external Markdown - # by removing all lines that aren't indented by at least four spaces. + # by removing all lines that aren't indented by at least four spaces or a tab. clean: (code) -> code = code.slice(1) if code.charCodeAt(0) is BOM code = "\n#{code}" if WHITESPACE.test code code = code.replace(/\r/g, '').replace TRAILING_SPACES, '' if @literate lines = for line in code.split('\n') - if LITERATE.test line - line.substr(4) + if match = LITERATE.exec line + line[match[0].length..] else '# ' + line code = lines.join '\n' diff --git a/test/literate.litcoffee b/test/literate.litcoffee index c5a2a30b..75f8b76f 100644 --- a/test/literate.litcoffee +++ b/test/literate.litcoffee @@ -40,4 +40,9 @@ and unordered lists, are fine: * A - * List \ No newline at end of file + * List + +Tabs work too: + + test "tabbed code", -> + ok yes