diff --git a/lib/coffee-script/command.js b/lib/coffee-script/command.js index 1970bbc4..96b3007d 100644 --- a/lib/coffee-script/command.js +++ b/lib/coffee-script/command.js @@ -1,6 +1,6 @@ // Generated by CoffeeScript 1.6.1 (function() { - var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, lint, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref; + var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, lint, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, rewriteLiterate, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref; fs = require('fs'); @@ -12,6 +12,8 @@ CoffeeScript = require('./coffee-script'); + rewriteLiterate = require('./lexer').rewriteLiterate; + _ref = require('child_process'), spawn = _ref.spawn, exec = _ref.exec; EventEmitter = require('events').EventEmitter; @@ -165,7 +167,7 @@ } else if (o.run) { return CoffeeScript.run(t.input, t.options); } else if (o.join && t.file !== o.join) { - sourceCode[sources.indexOf(t.file)] = t.input; + sourceCode[sources.indexOf(t.file)] = helpers.isLiterate(file) ? rewriteLiterate(t.input) : t.input; return compileJoin(); } else { compiled = CoffeeScript.compile(t.input, t.options); diff --git a/lib/coffee-script/lexer.js b/lib/coffee-script/lexer.js index acc7721b..020d2e32 100644 --- a/lib/coffee-script/lexer.js +++ b/lib/coffee-script/lexer.js @@ -1,12 +1,31 @@ // Generated by CoffeeScript 1.6.1 (function() { - var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LITERATE, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, locationDataToString, starts, _ref, _ref1, + var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LITERATE, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, locationDataToString, rewriteLiterate, starts, _ref, _ref1, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES; _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, locationDataToString = _ref1.locationDataToString; + exports.rewriteLiterate = rewriteLiterate = function(code) { + var line, lines, match; + lines = (function() { + var _i, _len, _ref2, _results; + _ref2 = code.split('\n'); + _results = []; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + line = _ref2[_i]; + if (match = LITERATE.exec(line)) { + _results.push(line.slice(match[0].length)); + } else { + _results.push('# ' + line); + } + } + return _results; + })(); + return lines.join('\n'); + }; + exports.Lexer = Lexer = (function() { function Lexer() {} @@ -43,7 +62,6 @@ }; Lexer.prototype.clean = function(code) { - var line, lines, match; if (code.charCodeAt(0) === BOM) { code = code.slice(1); } @@ -53,21 +71,7 @@ this.chunkLine--; } if (this.literate) { - lines = (function() { - var _i, _len, _ref2, _results; - _ref2 = code.split('\n'); - _results = []; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - line = _ref2[_i]; - if (match = LITERATE.exec(line)) { - _results.push(line.slice(match[0].length)); - } else { - _results.push('# ' + line); - } - } - return _results; - })(); - code = lines.join('\n'); + code = rewriteLiterate(code); } return code; }; diff --git a/src/command.coffee b/src/command.coffee index cbfd2ef7..d493ed0f 100644 --- a/src/command.coffee +++ b/src/command.coffee @@ -5,13 +5,14 @@ # interactive REPL. # External dependencies. -fs = require 'fs' -path = require 'path' -helpers = require './helpers' -optparse = require './optparse' -CoffeeScript = require './coffee-script' -{spawn, exec} = require 'child_process' -{EventEmitter} = require 'events' +fs = require 'fs' +path = require 'path' +helpers = require './helpers' +optparse = require './optparse' +CoffeeScript = require './coffee-script' +{rewriteLiterate} = require './lexer' +{spawn, exec} = require 'child_process' +{EventEmitter} = require 'events' exists = fs.exists or path.exists @@ -122,7 +123,7 @@ compileScript = (file, input, base) -> else if o.nodes then printLine CoffeeScript.nodes(t.input, t.options).toString().trim() else if o.run then CoffeeScript.run t.input, t.options else if o.join and t.file isnt o.join - sourceCode[sources.indexOf(t.file)] = t.input + sourceCode[sources.indexOf(t.file)] = if helpers.isLiterate file then rewriteLiterate t.input else t.input compileJoin() else compiled = CoffeeScript.compile t.input, t.options diff --git a/src/lexer.coffee b/src/lexer.coffee index 452f4b60..310f7364 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -14,6 +14,15 @@ # Import the helpers we need. {count, starts, compact, last, locationDataToString} = require './helpers' +# Rewrite literate CoffeeScript code, converting Markdown text into inline comments. +exports.rewriteLiterate = rewriteLiterate = (code) -> + lines = for line in code.split('\n') + if match = LITERATE.exec line + line[match[0].length..] + else + '# ' + line + lines.join '\n' + # The Lexer Class # --------------- @@ -84,13 +93,7 @@ exports.Lexer = class Lexer if WHITESPACE.test code code = "\n#{code}" @chunkLine-- - if @literate - lines = for line in code.split('\n') - if match = LITERATE.exec line - line[match[0].length..] - else - '# ' + line - code = lines.join '\n' + code = rewriteLiterate code if @literate code # Tokenizers