| // Generated by CoffeeScript 1.8.0 |
| (function() { |
| var buildLocationData, extend, flatten, last, repeat, syntaxErrorToString, _ref; |
| |
| exports.starts = function(string, literal, start) { |
| return literal === string.substr(start, literal.length); |
| }; |
| |
| exports.ends = function(string, literal, back) { |
| var len; |
| len = literal.length; |
| return literal === string.substr(string.length - len - (back || 0), len); |
| }; |
| |
| exports.repeat = repeat = function(str, n) { |
| var res; |
| res = ''; |
| while (n > 0) { |
| if (n & 1) { |
| res += str; |
| } |
| n >>>= 1; |
| str += str; |
| } |
| return res; |
| }; |
| |
| exports.compact = function(array) { |
| var item, _i, _len, _results; |
| _results = []; |
| for (_i = 0, _len = array.length; _i < _len; _i++) { |
| item = array[_i]; |
| if (item) { |
| _results.push(item); |
| } |
| } |
| return _results; |
| }; |
| |
| exports.count = function(string, substr) { |
| var num, pos; |
| num = pos = 0; |
| if (!substr.length) { |
| return 1 / 0; |
| } |
| while (pos = 1 + string.indexOf(substr, pos)) { |
| num++; |
| } |
| return num; |
| }; |
| |
| exports.merge = function(options, overrides) { |
| return extend(extend({}, options), overrides); |
| }; |
| |
| extend = exports.extend = function(object, properties) { |
| var key, val; |
| for (key in properties) { |
| val = properties[key]; |
| object[key] = val; |
| } |
| return object; |
| }; |
| |
| exports.flatten = flatten = function(array) { |
| var element, flattened, _i, _len; |
| flattened = []; |
| for (_i = 0, _len = array.length; _i < _len; _i++) { |
| element = array[_i]; |
| if (element instanceof Array) { |
| flattened = flattened.concat(flatten(element)); |
| } else { |
| flattened.push(element); |
| } |
| } |
| return flattened; |
| }; |
| |
| exports.del = function(obj, key) { |
| var val; |
| val = obj[key]; |
| delete obj[key]; |
| return val; |
| }; |
| |
| exports.last = last = function(array, back) { |
| return array[array.length - (back || 0) - 1]; |
| }; |
| |
| exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) { |
| var e, _i, _len; |
| for (_i = 0, _len = this.length; _i < _len; _i++) { |
| e = this[_i]; |
| if (fn(e)) { |
| return true; |
| } |
| } |
| return false; |
| }; |
| |
| exports.invertLiterate = function(code) { |
| var line, lines, maybe_code; |
| maybe_code = true; |
| lines = (function() { |
| var _i, _len, _ref1, _results; |
| _ref1 = code.split('\n'); |
| _results = []; |
| for (_i = 0, _len = _ref1.length; _i < _len; _i++) { |
| line = _ref1[_i]; |
| if (maybe_code && /^([ ]{4}|[ ]{0,3}\t)/.test(line)) { |
| _results.push(line); |
| } else if (maybe_code = /^\s*$/.test(line)) { |
| _results.push(line); |
| } else { |
| _results.push('# ' + line); |
| } |
| } |
| return _results; |
| })(); |
| return lines.join('\n'); |
| }; |
| |
| buildLocationData = function(first, last) { |
| if (!last) { |
| return first; |
| } else { |
| return { |
| first_line: first.first_line, |
| first_column: first.first_column, |
| last_line: last.last_line, |
| last_column: last.last_column |
| }; |
| } |
| }; |
| |
| exports.addLocationDataFn = function(first, last) { |
| return function(obj) { |
| if (((typeof obj) === 'object') && (!!obj['updateLocationDataIfMissing'])) { |
| obj.updateLocationDataIfMissing(buildLocationData(first, last)); |
| } |
| return obj; |
| }; |
| }; |
| |
| exports.locationDataToString = function(obj) { |
| var locationData; |
| if (("2" in obj) && ("first_line" in obj[2])) { |
| locationData = obj[2]; |
| } else if ("first_line" in obj) { |
| locationData = obj; |
| } |
| if (locationData) { |
| return ("" + (locationData.first_line + 1) + ":" + (locationData.first_column + 1) + "-") + ("" + (locationData.last_line + 1) + ":" + (locationData.last_column + 1)); |
| } else { |
| return "No location data"; |
| } |
| }; |
| |
| exports.baseFileName = function(file, stripExt, useWinPathSep) { |
| var parts, pathSep; |
| if (stripExt == null) { |
| stripExt = false; |
| } |
| if (useWinPathSep == null) { |
| useWinPathSep = false; |
| } |
| pathSep = useWinPathSep ? /\\|\// : /\//; |
| parts = file.split(pathSep); |
| file = parts[parts.length - 1]; |
| if (!(stripExt && file.indexOf('.') >= 0)) { |
| return file; |
| } |
| parts = file.split('.'); |
| parts.pop(); |
| if (parts[parts.length - 1] === 'coffee' && parts.length > 1) { |
| parts.pop(); |
| } |
| return parts.join('.'); |
| }; |
| |
| exports.isCoffee = function(file) { |
| return /\.((lit)?coffee|coffee\.md)$/.test(file); |
| }; |
| |
| exports.isLiterate = function(file) { |
| return /\.(litcoffee|coffee\.md)$/.test(file); |
| }; |
| |
| exports.throwSyntaxError = function(message, location) { |
| var error; |
| error = new SyntaxError(message); |
| error.location = location; |
| error.toString = syntaxErrorToString; |
| error.stack = error.toString(); |
| throw error; |
| }; |
| |
| exports.updateSyntaxError = function(error, code, filename) { |
| if (error.toString === syntaxErrorToString) { |
| error.code || (error.code = code); |
| error.filename || (error.filename = filename); |
| error.stack = error.toString(); |
| } |
| return error; |
| }; |
| |
| syntaxErrorToString = function() { |
| var codeLine, colorize, colorsEnabled, end, filename, first_column, first_line, last_column, last_line, marker, start, _ref1, _ref2; |
| if (!(this.code && this.location)) { |
| return Error.prototype.toString.call(this); |
| } |
| _ref1 = this.location, first_line = _ref1.first_line, first_column = _ref1.first_column, last_line = _ref1.last_line, last_column = _ref1.last_column; |
| if (last_line == null) { |
| last_line = first_line; |
| } |
| if (last_column == null) { |
| last_column = first_column; |
| } |
| filename = this.filename || '[stdin]'; |
| codeLine = this.code.split('\n')[first_line]; |
| start = first_column; |
| end = first_line === last_line ? last_column + 1 : codeLine.length; |
| marker = codeLine.slice(0, start).replace(/[^\s]/g, ' ') + repeat('^', end - start); |
| if (typeof process !== "undefined" && process !== null) { |
| colorsEnabled = process.stdout.isTTY && !process.env.NODE_DISABLE_COLORS; |
| } |
| if ((_ref2 = this.colorful) != null ? _ref2 : colorsEnabled) { |
| colorize = function(str) { |
| return "\x1B[1;31m" + str + "\x1B[0m"; |
| }; |
| codeLine = codeLine.slice(0, start) + colorize(codeLine.slice(start, end)) + codeLine.slice(end); |
| marker = colorize(marker); |
| } |
| return "" + filename + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + this.message + "\n" + codeLine + "\n" + marker; |
| }; |
| |
| exports.nameWhitespaceCharacter = function(string) { |
| switch (string) { |
| case ' ': |
| return 'space'; |
| case '\n': |
| return 'newline'; |
| case '\r': |
| return 'carriage return'; |
| case '\t': |
| return 'tab'; |
| default: |
| return string; |
| } |
| }; |
| |
| }).call(this); |