58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
|
// Generated by CoffeeScript 1.3.3
|
||
|
(function() {
|
||
|
var scan;
|
||
|
|
||
|
scan = function(string, pattern, callback) {
|
||
|
var match, result;
|
||
|
result = "";
|
||
|
while (string.length > 0) {
|
||
|
match = string.match(pattern);
|
||
|
if (match) {
|
||
|
result += string.slice(0, match.index);
|
||
|
result += callback(match);
|
||
|
string = string.slice(match.index + match[0].length);
|
||
|
} else {
|
||
|
result += string;
|
||
|
string = "";
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
};
|
||
|
|
||
|
exports.split = function(line) {
|
||
|
var field, words;
|
||
|
if (line == null) {
|
||
|
line = "";
|
||
|
}
|
||
|
words = [];
|
||
|
field = "";
|
||
|
scan(line, /\s*(?:([^\s\\\'\"]+)|'((?:[^\'\\]|\\.)*)'|"((?:[^\"\\]|\\.)*)"|(\\.?)|(\S))(\s|$)?/, function(match) {
|
||
|
var dq, escape, garbage, raw, seperator, sq, word;
|
||
|
raw = match[0], word = match[1], sq = match[2], dq = match[3], escape = match[4], garbage = match[5], seperator = match[6];
|
||
|
if (garbage != null) {
|
||
|
throw new Error("Unmatched quote");
|
||
|
}
|
||
|
field += word || (sq || dq || escape).replace(/\\(?=.)/, "");
|
||
|
if (seperator != null) {
|
||
|
words.push(field);
|
||
|
return field = "";
|
||
|
}
|
||
|
});
|
||
|
if (field) {
|
||
|
words.push(field);
|
||
|
}
|
||
|
return words;
|
||
|
};
|
||
|
|
||
|
exports.escape = function(str) {
|
||
|
if (str == null) {
|
||
|
str = "";
|
||
|
}
|
||
|
if (str == null) {
|
||
|
return "''";
|
||
|
}
|
||
|
return str.replace(/([^A-Za-z0-9_\-.,:\/@\n])/g, "\\$1").replace(/\n/g, "'\n'");
|
||
|
};
|
||
|
|
||
|
}).call(this);
|