mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-30 12:24:16 -05:00
271 lines
No EOL
7.8 KiB
JavaScript
Executable file
271 lines
No EOL
7.8 KiB
JavaScript
Executable file
/**
|
|
* Copyright (c) 2009-2013 Jeremy Ashkenas
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person
|
|
* obtaining a copy of this software and associated documentation
|
|
* files (the "Software"), to deal in the Software without
|
|
* restriction, including without limitation the rights to use,
|
|
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following
|
|
* conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be
|
|
* included in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*/
|
|
|
|
define(function(require, exports, module) {
|
|
// Generated by CoffeeScript 1.6.3
|
|
|
|
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) {
|
|
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;
|
|
if (location.last_line == null) {
|
|
location.last_line = location.first_line;
|
|
}
|
|
if (location.last_column == null) {
|
|
location.last_column = location.first_column;
|
|
}
|
|
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 = repeat(' ', start) + 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;
|
|
};
|
|
|
|
|
|
}); |