UNPKG

noon

Version:
373 lines (369 loc) 39.3 kB
// koffee 1.18.0 /* 00000000 0000000 00000000 0000000 00000000 000 000 000 000 000 000 000 000 00000000 000000000 0000000 0000000 0000000 000 000 000 000 000 000 000 000 000 000 000 000 0000000 00000000 */ var parse; parse = function(s) { var EMPTY, FLOAT, INT, NEWLINE, addLine, d, dd, dk, dv, e, i, indent, insert, inspect, isArray, j, k, key, l, last, leadingSpaces, len, line, lines, makeObject, p, r, ref, ref1, ref2, stack, ud, undense, v, value, values, vl; if (!s) { return ''; } if (s === '') { return ''; } EMPTY = /^\s*$/; NEWLINE = /\r?\n/; FLOAT = /^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/; INT = /^(\-|\+)?([0-9]+|Infinity)$/; last = function(a) { return a != null ? a[a.length - 1] : void 0; }; isArray = function(a) { return (a != null) && typeof a === 'object' && a.constructor.name === 'Array'; }; undense = function(d, s) { var esc, i, j, key, l, ld, p, pp, ref, sd, sl, t; sl = s.length; sd = d; p = 0; while (p < sl && s[p] === '.') { d += 1; p += 1; } while (p < sl && s[p] === ' ') { p += 1; } l = ''; key = true; esc = false; while (p < sl) { if (l !== '' && s[p] === ' ' && s[p + 1] === '.') { pp = p + 2; while (pp < sl && s[pp] === '.') { pp += 1; } if (s[pp] === ' ') { p += 1; break; } } esc |= s[p] === '|'; l += s[p]; if (!esc && key && s[p] === ' ') { if (p < sl + 1 && s[p + 1] !== ' ') { l += ' '; } key = false; } p += 1; esc ^= s[p] === '|'; } ld = ''; for (i = j = 0, ref = d; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { ld += ' '; } ld += l; if (p < sl) { t = undense(sd, s.substring(p)); t.unshift(ld); return t; } else { return [ld]; } }; leadingSpaces = 0; lines = s.split(NEWLINE).filter(function(l) { return !EMPTY.test(l); }); if (lines.length === 0) { return ''; } else if (lines.length === 1) { lines = [lines[0].trim()]; } else { while (lines[0][leadingSpaces] === ' ') { leadingSpaces += 1; } } stack = [ { o: [], d: leadingSpaces } ]; makeObject = function(t) { var b, i, j, len, o, ref; o = {}; ref = t.o; for (j = 0, len = ref.length; j < len; j++) { i = ref[j]; o[i] = null; } t.l = last(t.o); t.o = o; if (stack.length > 1) { b = stack[stack.length - 2]; if (isArray(b.o)) { b.o.pop(); b.o.push(o); } else { b.o[b.l] = o; } } return o; }; key = function(k) { if ((k != null ? k[0] : void 0) === '|') { if (k[k.length - 1] === '|') { return k.substr(1, k.length - 2); } return k.substr(1).trimRight(); } return k; }; values = { 'null': null, 'true': true, 'false': false }; value = function(v) { if (values[v] !== void 0) { return values[v]; } if ((v != null ? v[0] : void 0) === '|') { return key(v); } else if ((v != null ? v[v.length - 1] : void 0) === '|') { return v.substr(0, v.length - 1); } if (FLOAT.test(v)) { return parseFloat(v); } if (INT.test(v)) { return parseInt(v); } return v; }; insert = function(t, k, v) { if (isArray(t.o)) { if (v == null) { if ((last(t.o) === '.' && '.' === k)) { t.o.pop(); t.o.push([]); } return t.o.push(value(k)); } else { return makeObject(t)[key(k)] = value(v); } } else { t.o[key(k)] = value(v); return t.l = key(k); } }; indent = function(t, k, v) { var l, o; o = []; if (v != null) { o = {}; } if (isArray(t.o)) { if (last(t.o) === '.') { t.o.pop(); t.o.push(o); } else { l = last(t.o); makeObject(t); t.o[l] = o; } } else { t.o[t.l] = o; } if (v != null) { o[key(k)] = value(v); } else { o.push(value(k)); } return o; }; addLine = function(d, k, v) { var ref, t, undensed; if (k != null) { t = last(stack); ref = [t.undensed, false], undensed = ref[0], t.undensed = ref[1]; if (d > t.d && !undensed) { return stack.push({ o: indent(t, k, v), d: d }); } else if (d < t.d) { if (isArray(t.o) && last(t.o) === '.') { t.o.pop(); t.o.push([]); } while (t.d > d) { stack.pop(); t = last(stack); } return insert(t, k, v); } else { if (undensed) { t.d = d; } return insert(t, k, v); } } }; inspect = function(l) { var d, escl, escr, k, p, v; p = 0; while (l[p] === ' ') { p += 1; } if (l[p] == null) { return [0, null, null, false]; } d = p; k = ''; if (l[p] === '#') { return [0, null, null, false]; } escl = false; escr = false; if (l[p] === '|') { escl = true; k += '|'; p += 1; } while (l[p] != null) { if (l[p] === ' ' && l[p + 1] === ' ' && !escl) { break; } k += l[p]; p += 1; if (escl && l[p - 1] === '|') { break; } } if (!escl) { k = k.trimRight(); } while (l[p] === ' ') { p += 1; } v = ''; if (l[p] === '|') { escr = true; v += '|'; p += 1; } while (l[p] != null) { v += l[p]; p += 1; if (escr && l[p - 1] === '|' && l.trimRight().length === p) { break; } } if (l[p - 1] === ' ' && !escr) { if (v != null) { v = v.trimRight(); } } if (k === '') { k = null; } if (v === '') { v = null; } return [d, k, v, escl]; }; if (lines.length === 1) { if (0 < lines[0].indexOf(':: ')) { lines = lines[0].split(':: ').map(function(l) { var p; p = 0; while (l[p] === ' ') { p += 1; } while ((l[p] != null) && (l[p] !== ' ')) { p += 1; } if (l[p] === ' ') { return l.slice(0, p) + ' ' + l.slice(p); } else { return l; } }); } p = lines[0].indexOf(' . '); e = lines[0].indexOf('|'); if (p > 0 && (p === lines[0].indexOf(' ')) && (e < 0 || p < e)) { lines = [lines[0].slice(0, p) + ' ' + lines[0].slice(p)]; } } i = 0; while (i < lines.length) { line = lines[i]; ref = inspect(line), d = ref[0], k = ref[1], v = ref[2], e = ref[3]; if (k != null) { if ((v != null) && (!e) && (v.substr(0, 2) === '. ')) { addLine(d, k); ud = last(stack).d; ref1 = undense(d, v); for (j = 0, len = ref1.length; j < len; j++) { e = ref1[j]; ref2 = inspect(e), dd = ref2[0], dk = ref2[1], dv = ref2[2]; addLine(dd, dk, dv); } while (last(stack).d > ud + 1) { stack.pop(); } last(stack).undensed = true; } else { if (k === '...' && (v == null)) { i += 1; vl = []; while (lines[i].trimLeft().substr(0, 3) !== '...') { l = lines[i].trim(); if (l[0] === '|') { l = l.substr(1); } if (l[l.length - 1] === '|') { l = l.substr(0, l.length - 1); } vl.push(l); i += 1; } k = vl.join('\n'); r = lines[i].trimLeft().substr(3).trim(); if (r.length) { v = r; } } if (v === '...') { i += 1; vl = []; while (lines[i].trim() !== '...') { l = lines[i].trim(); if (l[0] === '|') { l = l.substr(1); } if (l[l.length - 1] === '|') { l = l.substr(0, l.length - 1); } vl.push(l); i += 1; } v = vl.join('\n'); } addLine(d, k, v); } } i += 1; } return stack[0].o; }; module.exports = parse; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiLi4vY29mZmVlIiwic291cmNlcyI6WyJwYXJzZS5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7OztBQUFBLElBQUE7O0FBUUEsS0FBQSxHQUFRLFNBQUMsQ0FBRDtBQUVKLFFBQUE7SUFBQSxJQUFhLENBQUksQ0FBakI7QUFBQSxlQUFPLEdBQVA7O0lBQ0EsSUFBYSxDQUFBLEtBQUssRUFBbEI7QUFBQSxlQUFPLEdBQVA7O0lBRUEsS0FBQSxHQUFVO0lBQ1YsT0FBQSxHQUFVO0lBQ1YsS0FBQSxHQUFVO0lBQ1YsR0FBQSxHQUFVO0lBRVYsSUFBQSxHQUFPLFNBQUMsQ0FBRDsyQkFBTyxDQUFHLENBQUEsQ0FBQyxDQUFDLE1BQUYsR0FBUyxDQUFUO0lBQVY7SUFDUCxPQUFBLEdBQVUsU0FBQyxDQUFEO2VBQU8sV0FBQSxJQUFPLE9BQU8sQ0FBUCxLQUFhLFFBQXBCLElBQWlDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBZCxLQUFzQjtJQUE5RDtJQVFWLE9BQUEsR0FBVSxTQUFDLENBQUQsRUFBSSxDQUFKO0FBRU4sWUFBQTtRQUFBLEVBQUEsR0FBSyxDQUFDLENBQUM7UUFDUCxFQUFBLEdBQUs7UUFFTCxDQUFBLEdBQUk7QUFDSixlQUFNLENBQUEsR0FBSSxFQUFKLElBQVcsQ0FBRSxDQUFBLENBQUEsQ0FBRixLQUFRLEdBQXpCO1lBQ0ksQ0FBQSxJQUFLO1lBQ0wsQ0FBQSxJQUFLO1FBRlQ7QUFJQSxlQUFNLENBQUEsR0FBSSxFQUFKLElBQVcsQ0FBRSxDQUFBLENBQUEsQ0FBRixLQUFRLEdBQXpCO1lBQ0ksQ0FBQSxJQUFLO1FBRFQ7UUFHQSxDQUFBLEdBQUk7UUFDSixHQUFBLEdBQU07UUFDTixHQUFBLEdBQU07QUFFTixlQUFNLENBQUEsR0FBSSxFQUFWO1lBQ0ksSUFBRyxDQUFBLEtBQUssRUFBTCxJQUFZLENBQUUsQ0FBQSxDQUFBLENBQUYsS0FBUSxHQUFwQixJQUE0QixDQUFFLENB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Q0FBQyxNQUFwQixDQUEyQixDQUEzQixDQUE2QixDQUFDLElBQTlCLENBQUE7b0JBQ0osSUFBRyxDQUFDLENBQUMsTUFBTDt3QkFDSSxDQUFBLEdBQUksRUFEUjtxQkFYSjs7Z0JBY0EsSUFBRyxDQUFBLEtBQUssS0FBUjtvQkFDSSxDQUFBLElBQUs7b0JBQ0wsRUFBQSxHQUFLO0FBQ0wsMkJBQU0sS0FBTSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQVQsQ0FBQSxDQUFBLEtBQW1CLEtBQXpCO3dCQUNJLENBQUEsR0FBSSxLQUFNLENBQUEsQ0FBQSxDQUFFLENBQUMsSUFBVCxDQUFBO3dCQUNKLElBQUcsQ0FBRSxDQUFBLENBQUEsQ0FBRixLQUFRLEdBQVg7NEJBQW9CLENBQUEsR0FBSSxDQUFDLENBQUMsTUFBRixDQUFTLENBQVQsRUFBeEI7O3dCQUNBLElBQUcsQ0FBRSxDQUFBLENBQUMsQ0FBQyxNQUFGLEdBQVMsQ0FBVCxDQUFGLEtBQWlCLEdBQXBCOzRCQUE2QixDQUFBLEdBQUksQ0FBQyxDQUFDLE1BQUYsQ0FBUyxDQUFULEVBQVksQ0FBQyxDQUFDLE1BQUYsR0FBUyxDQUFyQixFQUFqQzs7d0JBQ0EsRUFBRSxDQUFDLElBQUgsQ0FBUSxDQUFSO3dCQUNBLENBQUEsSUFBSztvQkFMVDtvQkFNQSxDQUFBLEdBQUksRUFBRSxDQUFDLElBQUgsQ0FBUSxJQUFSLEVBVFI7O2dCQVdBLE9BQUEsQ0FBUSxDQUFSLEVBQVcsQ0FBWCxFQUFjLENBQWQsRUF0Q0o7YUFESjs7UUF3Q0EsQ0FBQSxJQUFLO0lBOUNUO1dBZ0RBLEtBQU0sQ0FBQSxDQUFBLENBQUUsQ0FBQztBQW5XTDs7QUFxV1IsTUFBTSxDQUFDLE9BQVAsR0FBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIjIyNcbjAwMDAwMDAwICAgIDAwMDAwMDAgICAwMDAwMDAwMCAgICAwMDAwMDAwICAwMDAwMDAwMFxuMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMFxuMDAwMDAwMDAgICAwMDAwMDAwMDAgIDAwMDAwMDAgICAgMDAwMDAwMCAgIDAwMDAwMDBcbjAwMCAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgICAgMDAwICAwMDBcbjAwMCAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMDAwMDAgICAwMDAwMDAwMFxuIyMjXG5cbnBhcnNlID0gKHMpIC0+XG5cbiAgICByZXR1cm4gJycgaWYgbm90IHNcbiAgICByZXR1cm4gJycgaWYgcyA9PSAnJ1xuICAgIFxuICAgIEVNUFRZICAgPSAvXlxccyokL1xuICAgIE5FV0xJTkUgPSAvXFxyP1xcbi9cbiAgICBGTE9BVCAgID0gL14oXFwtfFxcKyk/KFswLTldKyhcXC5bMC05XSspP3xJbmZpbml0eSkkL1xuICAgIElOVCAgICAgPSAvXihcXC18XFwrKT8oWzAtOV0rfEluZmluaXR5KSQvXG5cbiAgICBsYXN0ID0gKGEpIC0+IGE/W2EubGVuZ3RoLTFdXG4gICAgaXNBcnJheSA9IChhKSAtPiBhPyBhbmQgdHlwZW9mKGEpID09ICdvYmplY3QnIGFuZCBhLmNvbnN0cnVjdG9yLm5hbWUgPT0gJ0FycmF5J1xuXG4gICAgIyAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMCAgICAwMDAwMDAwMCAgMDAwICAgMDAwICAgMDAwMDAwMCAgMDAwMDAwMDBcbiAgICAjIDAwMCAgIDAwMCAgMDAwMCAgMDAwICAwMDAgICAwMDAgIDAwMCAgICAgICAwMDAwICAwMDAgIDAwMCAgICAgICAwMDBcbiAgICAjIDAwMCAgIDAwMCAgMDAwIDAgMDAwICAwMDAgICAwMDAgIDAwMDAwMDAgICAwMDAgMCAwMDAgIDAwMDAwMDAgICAwMDAwMDAwXG4gICAgIyAwMDAgICAwMDAgIDAwMCAgMDAwMCAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAwMDAwICAgICAgIDAwMCAgMDAwXG4gICAgIyAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwMDAwMCAgICAwMDAwMDAwMCAgMDAwICAgMDAwICAwMDAwMDAwICAgMDAwMDAwMDBcblxuICAgIHVuZGVuc2UgPSAoZCwgcykgLT4gIyB1bmRlbnNlcyBzdHJpbmcgcyBhdCBkZXB0aCBkLiBSZXR1cm5zIGxpc3Qgb2YgcGFkZGVkIGxpbmVzXG4gICAgICAgIFxuICAgICAgICBzbCA9IHMubGVuZ3RoXG4gICAgICAgIHNkID0gZFxuXG4gICAgICAgIHAgPSAwXG4gICAgICAgIHdoaWxlIHAgPCBzbCBhbmQgc1twXSA9PSAnLicgIyBkZXB0aCBkb3RzXG4gICAgICAgICAgICBkICs9IDFcbiAgICAgICAgICAgIHAgKz0gMVxuXG4gICAgICAgIHdoaWxlIHAgPCBzbCBhbmQgc1twXSA9PSAnICcgIyBzcGFjZXMgYmVmb3JlIGtleS9pdGVtXG4gICAgICAgICAgICBwICs9IDFcblxuICAgICAgICBsID0gJydcbiAgICAgICAga2V5ID0gdHJ1ZVxuICAgICAgICBlc2MgPSBmYWxzZVxuXG4gICAgICAgIHdoaWxlIHAgPCBzbFxuICAgICAgICAgICAgaWYgbCAhPSAnJyBhbmQgc1twXSA9PSAnICcgYW5kIHNbcCsxXSA9PSAnLidcbiAgICAgICAgICAgICAgICBwcCA9IHArMlxuICAgICAgICAgICAgICAgIHdoaWxlIHBwIDwgc2wgYW5kIHNbcHBdID09ICcuJ1xuICAgICAgICAgICAgICAgICAgICBwcCArPSAxXG4gICAgICAgICAgICAgICAgaWYgc1twcF0gPT0gJyAnXG4gICAgICAgICAgICAgICAgICAgIHAgKz0gMVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgZXNjIHw9IHNbcF0gPT0gICd8J1xuICAgICAgICAgICAgbCArPSBzW3BdXG4gICAgICAgICAgICBpZiBub3QgZXNjIGFuZCBrZXkgYW5kIHNbcF0gPT0gJyAnXG4gICAgICAgICAgICAgICAgaWYgcCA8IHNsKzEgYW5kIHNbcCsxXSAhPSAnICdcbiAgICAgICAgICAgICAgICAgICAgbCArPSAnICdcbiAgICAgICAgICAgICAgICBrZXkgPSBmYWxzZVxuICAgICAgICAgICAgcCArPSAxXG4gICAgICAgICAgICBlc2MgXj0gc1twXSA9PSAgJ3wnXG5cbiAgICAgICAgbGQgPSAnJyAjIHBhZCBsaW5lIHdpdGggc3BhY2VzXG4gICAgICAgIGZvciBpIGluIFswLi4uZF1cbiAgICAgICAgICAgIGxkICs9ICcgJ1xuICAgICAgICBsZCArPSBsXG5cbiAgICAgICAgaWYgcCA8IHNsXG4gICAgICAgICAgICB0ID0gdW5kZW5zZSBzZCwgcy5zdWJzdHJpbmcgcFxuICAgICAgICAgICAgdC51bnNoaWZ0IGxkXG4gICAgICAgICAgICB0XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIFtsZF1cblxuICAgICMgIDAwMDAwMDAgIDAwMDAwMDAwICAgMDAwICAgICAgMDAwICAwMDAwMDAwMDBcbiAgICAjIDAwMCAgICAgICAwMDAgICAwMDAgIDAwMCAgICAgIDAwMCAgICAgMDAwXG4gICAgIyAwMDAwMDAwICAgMDAwMDAwMDAgICAwMDAgICAgICAwMDAgICAgIDAwMFxuICAgICMgICAgICAwMDAgIDAwMCAgICAgICAgMDAwICAgICAgMDAwICAgICAwMDBcbiAgICAjIDAwMDAwMDAgICAwMDAgICAgICAgIDAwMDAwMDAgIDAwMCAgICAgMDAwXG5cbiAgICBsZWFkaW5nU3BhY2VzID0gMFxuXG4gICAgbGluZXMgPSBzLnNwbGl0KE5FV0xJTkUpLmZpbHRlciAobCkgLT4gbm90IEVNUFRZLnRlc3QgbFxuXG4gICAgaWYgbGluZXMubGVuZ3RoID09IDBcbiAgICAgICAgcmV0dXJuICcnXG4gICAgZWxzZSBpZiBsaW5lcy5sZW5ndGggPT0gMVxuICAgICAgICBsaW5lcyA9IFtsaW5lc1swXS50cmltKCldXG4gICAgZWxzZVxuICAgICAgICB3aGlsZSBsaW5lc1swXVtsZWFkaW5nU3BhY2VzXSA9PSAnICdcbiAgICAgICAgICAgIGxlYWRpbmdTcGFjZXMgKz0gMVxuICAgICAgICAgICAgXG4gICAgc3RhY2sgPSBbXG4gICAgICAgIG86IFtdXG4gICAgICAgIGQ6IGxlYWRpbmdTcGFjZXNcbiAgICBdXG5cbiAgICAjIDAwICAgICAwMCAgIDAwMDAwMDAgICAwMDAgICAwMDAgIDAwMDAwMDAwICAgICAgICAgMDAwMDAwMCAgIDAwMDAwMDAgICAgICAgICAgMDAwXG4gICAgIyAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAwMDAgICAwMDAgICAgICAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgICAgIDAwMFxuICAgICMgMDAwMDAwMDAwICAwMDAwMDAwMDAgIDAwMDAwMDAgICAgMDAwMDAwMCAgICAgICAgIDAwMCAgIDAwMCAgMDAwMDAwMCAgICAgICAgICAwMDBcbiAgICAjIDAwMCAwIDAwMCAgMDAwICAgMDAwICAwMDAgIDAwMCAgIDAwMCAgICAgICAgICAgICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwXG4gICAgIyAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAwMDAwMCAgICAgICAgIDAwMDAwMDAgICAwMDAwMDAwICAgICAwMDAwMDAwXG5cbiAgICBtYWtlT2JqZWN0ID0gKHQpIC0+XG4gICAgICAgIG8gPSB7fVxuICAgICAgICBmb3IgaSBpbiB0Lm9cbiAgICAgICAgICAgIG9baV0gPSBudWxsXG4gICAgICAgIHQubCA9IGxhc3QgdC5vXG4gICAgICAgIHQubyA9IG9cbiAgICAgICAgaWYgc3RhY2subGVuZ3RoID4gMVxuICAgICAgICAgICAgYiA9IHN0YWNrW3N0YWNrLmxlbmd0aC0yXVxuICAgICAgICAgICAgaWYgaXNBcnJheSBiLm9cbiAgICAgICAgICAgICAgICBiLm8ucG9wKClcbiAgICAgICAgICAgICAgICBiLm8ucHVzaCBvXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYi5vW2IubF0gPSBvXG4gICAgICAgIG9cblxuICAgICMgMDAwICAgMDAwICAwMDAwMDAwMCAgMDAwICAgMDAwXG4gICAgIyAwMDAgIDAwMCAgIDAwMCAgICAgICAgMDAwIDAwMFxuICAgICMgMDAwMDAwMCAgICAwMDAwMDAwICAgICAwMDAwMFxuICAgICMgMDAwICAwMDAgICAwMDAgICAgICAgICAgMDAwXG4gICAgIyAwMDAgICAwMDAgIDAwMDAwMDAwICAgICAwMDBcblxuICAgIGtleSA9IChrKSAtPlxuICAgICAgICBpZiBrP1swXSA9PSAnfCdcbiAgICAgICAgICAgIGlmIGtbay5sZW5ndGgtMV0gPT0gJ3wnXG4gICAgICAgICAgICAgICAgcmV0dXJuIGsuc3Vic3RyKDEsIGsubGVuZ3RoLTIpXG4gICAgICAgICAgICByZXR1cm4gay5zdWJzdHIoMSkudHJpbVJpZ2h0KClcbiAgICAgICAga1xuXG4gICAgIyAwMDAgICAwMDAgICAwMDAwMDAwICAgMDAwICAgICAgMDAwICAgMDAwICAwMDAwMDAwMCAgIDAwMDAwMDBcbiAgICAjIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAgICAwMDAgICAwMDAgIDAwMCAgICAgICAwMDBcbiAgICAjICAwMDAgMDAwICAgMDAwMDAwMDAwICAwMDAgICAgICAwMDAgICAwMDAgIDAwMDAwMDAgICAwMDAwMDAwXG4gICAgIyAgICAwMDAgICAgIDAwMCAgIDAwMCAgMDAwICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgICAgICAwMDBcbiAgICAjICAgICAwICAgICAgMDAwICAgMDAwICAwMDAwMDAwICAgMDAwMDAwMCAgIDAwMDAwMDAwICAwMDAwMDAwXG5cbiAgICB2YWx1ZXMgPVxuICAgICAgICAnbnVsbCc6IG51bGxcbiAgICAgICAgJ3RydWUnOiB0cnVlXG4gICAgICAgICdmYWxzZSc6IGZhbHNlXG5cbiAgICB2YWx1ZSA9ICh2KSAtPlxuICAgICAgICBpZiB2YWx1ZXNbdl0gIT0gdW5kZWZpbmVkICB0aGVuIHJldHVybiB2YWx1ZXNbdl1cbiAgICAgICAgaWYgdj9bMF0gPT0gJ3wnIHRoZW4gcmV0dXJuIGtleSB2XG4gICAgICAgIGVsc2UgaWYgdj9bdi5sZW5ndGgtMV0gPT0gJ3wnXG4gICAgICAgICAgICByZXR1cm4gdi5zdWJzdHIoMCwgdi5sZW5ndGgtMSlcbiAgICAgICAgaWYgRkxPQVQudGVzdCh2KSB0aGVuIHJldHVybiBwYXJzZUZsb2F0IHZcbiAgICAgICAgaWYgSU5ULnRlc3QodikgICB0aGVuIHJldHVybiBwYXJzZUludCAgIHZcbiAgICAgICAgdlxuXG4gICAgIyAwMDAgIDAwMCAgIDAwMCAgIDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgIDAwMDAwMDAwMFxuICAgICMgMDAwICAwMDAwICAwMDAgIDAwMCAgICAgICAwMDAgICAgICAgMDAwICAgMDAwICAgICAwMDBcbiAgICAjIDAwMCAgMDAwIDAgMDAwICAwMDAwMDAwICAgMDAwMDAwMCAgIDAwMDAwMDAgICAgICAgMDAwXG4gICAgIyAwMDAgIDAwMCAgMDAwMCAgICAgICAwMDAgIDAwMCAgICAgICAwMDAgICAwMDAgICAgIDAwMFxuICAgICMgMDAwICAwMDAgICAwMDAgIDAwMDAwMDAgICAwMDAwMDAwMCAgMDAwICAgMDAwICAgICAwMDBcblxuICAgIGluc2VydCA9ICh0LCBrLCB2KSAtPlxuICAgICAgICBpZiBpc0FycmF5IHQub1xuICAgICAgICAgICAgaWYgbm90IHY/XG4gICAgICAgICAgICAgICAgaWYgbGFzdCh0Lm8pID09ICcuJyA9PSBrXG4gICAgICAgICAgICAgICAgICAgIHQuby5wb3AoKVxuICAgICAgICAgICAgICAgICAgICB0Lm8ucHVzaCBbXVxuICAgICAgICAgICAgICAgIHQuby5wdXNoIHZhbHVlIGtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtYWtlT2JqZWN0KHQpW2tleSBrXSA9IHZhbHVlIHZcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdC5vW2tleSBrXSA9IHZhbHVlIHZcbiAgICAgICAgICAgIHQubCA9IGtleSBrXG5cbiAgICAjIDAwMCAgMDAwICAgMDAwICAwMDAwMDAwICAgIDAwMDAwMDAwICAwMDAgICAwMDAgIDAwMDAwMDAwMFxuICAgICMgMDAwICAwMDAwICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMDAgIDAwMCAgICAgMDAwXG4gICAgIyAwMDAgIDAwMCAwIDAwMCAgMDAwICAgMDAwICAwMDAwMDAwICAgMDAwIDAgMDAwICAgICAwMDBcbiAgICAjIDAwMCAgMDAwICAwMDAwICAwMDAgICAwMDAgIDAwMCAgICAgICAwMDAgIDAwMDAgICAgIDAwMFxuICAgICMgMDAwICAwMDAgICAwMDAgIDAwMDAwMDAgICAgMDAwMDAwMDAgIDAwMCAgIDAwMCAgICAgMDAwXG5cbiAgICBpbmRlbnQgPSAodCwgaywgdikgLT5cbiAgICAgICAgbyA9IFtdXG4gICAgICAgIG8gPSB7fSBpZiB2P1xuXG4gICAgICAgIGlmIGlzQXJyYXkgdC5vXG4gICAgICAgICAgICBpZiBsYXN0KHQubykgPT0gJy4nXG4gICAgICAgICAgICAgICAgdC5vLnBvcCgpXG4gICAgICAgICAgICAgICAgdC5vLnB1c2ggb1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGwgPSBsYXN0IHQub1xuICAgICAgICAgICAgICAgIG1ha2VPYmplY3QodClcbiAgICAgICAgICAgICAgICB0Lm9bbF0gPSBvXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHQub1t0LmxdID0gb1xuXG4gICAgICAgIGlmIHY/XG4gICAgICAgICAgICBvW2tleSBrXSA9IHZhbHVlIHZcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgby5wdXNoIHZhbHVlIGtcbiAgICAgICAgb1xuXG4gICAgIyAgMDAwMDAwMCAgIDAwMDAwMDAgICAgMDAwMDAwMCAgICAwMDAgICAgICAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMDBcbiAgICAjIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgICAgIDAwMCAgMDAwMCAgMDAwICAwMDBcbiAgICAjIDAwMDAwMDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgICAgIDAwMCAgMDAwIDAgMDAwICAwMDAwMDAwXG4gICAgIyAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAgICAwMDAgIDAwMCAgMDAwMCAgMDAwXG4gICAgIyAwMDAgICAwMDAgIDAwMDAwMDAgICAgMDAwMDAwMCAgICAwMDAwMDAwICAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMDBcblxuICAgIGFkZExpbmUgPSAoZCxrLHYpIC0+XG4gICAgICAgIGlmIGs/XG4gICAgICAgICAgICB0ID0gbGFzdCBzdGFja1xuICAgICAgICAgICAgW3VuZGVuc2VkLCB0LnVuZGVuc2VkXSA9IFt0LnVuZGVuc2VkLCBmYWxzZV1cbiAgICAgICAgICAgIGlmIGQgPiB0LmQgYW5kIG5vdCB1bmRlbnNlZFxuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2hcbiAgICAgICAgICAgICAgICAgICAgbzogaW5kZW50IHQsIGssIHZcbiAgICAgICAgICAgICAgICAgICAgZDogZFxuICAgICAgICAgICAgZWxzZSBpZiBkIDwgdC5kXG4gICAgICAgICAgICAgICAgaWYgaXNBcnJheSh0Lm8pIGFuZCBsYXN0KHQubykgPT0gJy4nXG4gICAgICAgICAgICAgICAgICAgIHQuby5wb3AoKVxuICAgICAgICAgICAgICAgICAgICB0Lm8ucHVzaCBbXVxuICAgICAgICAgICAgICAgIHdoaWxlIHQuZCA+IGRcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKClcbiAgICAgICAgICAgICAgICAgICAgdCA9IGxhc3Qgc3RhY2tcbiAgICAgICAgICAgICAgICBpbnNlcnQgdCwgaywgdlxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGlmIHVuZGVuc2VkXG4gICAgICAgICAgICAgICAgICAgIHQuZCA9IGRcbiAgICAgICAgICAgICAgICBpbnNlcnQgdCwgaywgdlxuXG4gICAgIyAwMDAgIDAwMCAgIDAwMCAgIDAwMDAwMDAgIDAwMDAwMDAwICAgMDAwMDAwMDAgICAwMDAwMDAwICAwMDAwMDAwMDBcbiAgICAjIDAwMCAgMDAwMCAgMDAwICAwMDAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgICAgICAgIDAwMFxuICAgICMgMDAwICAwMDAgMCAwMDAgIDAwMDAwMDAgICAwMDAwMDAwMCAgIDAwMDAwMDAgICAwMDAgICAgICAgICAgMDAwXG4gICAgIyAwMDAgIDAwMCAgMDAwMCAgICAgICAwMDAgIDAwMCAgICAgICAgMDAwICAgICAgIDAwMCAgICAgICAgICAwMDBcbiAgICAjIDAwMCAgMDAwICAgMDAwICAwMDAwMDAwICAgMDAwICAgICAgICAwMDAwMDAwMCAgIDAwMDAwMDAgICAgIDAwMFxuXG4gICAgaW5zcGVjdCA9IChsKSAtPlxuXG4gICAgICAgIHAgPSAwXG5cbiAgICAgICAgd2hpbGUgbFtwXSA9PSAnICcgIyBwcmVjZWVkaW5nIHNwYWNlc1xuICAgICAgICAgICAgcCArPSAxXG5cbiAgICAgICAgaWYgbm90IGxbcF0/IHRoZW4gcmV0dXJuIFswLCBudWxsLCBudWxsLCBmYWxzZV0gIyBvbmx5IHNwYWNlcyBpbiBsaW5lXG5cbiAgICAgICAgZCA9IHBcbiAgICAgICAgayA9ICcnXG5cbiAgICAgICAgaWYgbFtwXSA9PSAnIycgdGhlbiByZXR1cm4gWzAsIG51bGwsIG51bGwsIGZhbHNlXSAjIGNvbW1lbnQgbGluZVxuXG4gICAgICAgIGVzY2wgPSBmYWxzZVxuICAgICAgICBlc2NyID0gZmFsc2VcbiAgICAgICAgaWYgbFtwXSA9PSAnfCdcbiAgICAgICAgICAgIGVzY2wgPSB0cnVlXG4gICAgICAgICAgICBrICs9ICd8J1xuICAgICAgICAgICAgcCArPSAxXG5cbiAgICAgICAgd2hpbGUgbFtwXT9cbiAgICAgICAgICAgIGlmIGxbcF0gPT0gJyAnIGFuZCBsW3ArMV0gPT0gJyAnIGFuZCBub3QgZXNjbFxuICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGsgKz0gbFtwXVxuICAgICAgICAgICAgcCArPSAxXG4gICAgICAgICAgICBpZiBlc2NsIGFuZCBsW3AtMV0gPT0gJ3wnXG4gICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICBpZiBub3QgZXNjbFxuICAgICAgICAgICAgayA9IGsudHJpbVJpZ2h0KClcblxuICAgICAgICB3aGlsZSBsW3BdID09ICcgJyAjIHdoaXRlc3BhY2UgYmV0d2VlbiBrZXkgYW5kIHZhbHVlXG4gICAgICAgICAgICBwICs9IDFcblxuICAgICAgICB2ID0gJydcblxuICAgICAgICBpZiBsW3BdID09ICd8J1xuICAgICAgICAgICAgZXNjciA9IHRydWVcbiAgICAgICAgICAgIHYgKz0gJ3wnXG4gICAgICAgICAgICBwICs9IDFcblxuICAgICAgICB3aGlsZSBsW3BdP1xuICAgICAgICAgICAgdiArPSBsW3BdXG4gICAgICAgICAgICBwICs9IDFcbiAgICAgICAgICAgIGlmIGVzY3IgYW5kIGxbcC0xXSA9PSAnfCcgYW5kIGwudHJpbVJpZ2h0KCkubGVuZ3RoID09IHBcbiAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgIGlmIGxbcC0xXSA9PSAnICcgYW5kIG5vdCBlc2NyXG4gICAgICAgICAgICB2ID0gdi50cmltUmlnaHQoKSBpZiB2P1xuXG4gICAgICAgIGsgPSBudWxsIGlmIGsgPT0gJydcbiAgICAgICAgdiA9IG51bGwgaWYgdiA9PSAnJ1xuICAgICAgICBbZCwgaywgdiwgZXNjbF1cblxuICAgICMgIDAwMDAwMDAgICAwMDAgICAwMDAgIDAwMDAwMDAwICAgICAgICAwMDAgICAgICAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMDBcbiAgICAjIDAwMCAgIDAwMCAgMDAwMCAgMDAwICAwMDAgICAgICAgICAgICAgMDAwICAgICAgMDAwICAwMDAwICAwMDAgIDAwMFxuICAgICMgMDAwICAgMDAwICAwMDAgMCAwMDAgIDAwMDAwMDAgICAgICAgICAwMDAgICAgICAwMDAgIDAwMCAwIDAwMCAgMDAwMDAwMFxuICAgICMgMDAwICAgMDAwICAwMDAgIDAwMDAgIDAwMCAgICAgICAgICAgICAwMDAgICAgICAwMDAgIDAwMCAgMDAwMCAgMDAwXG4gICAgIyAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwMDAwMDAgICAgICAgIDAwMDAwMDAgIDAwMCAgMDAwICAgMDAwICAwMDAwMDAwMFxuXG4gICAgaWYgbGluZXMubGVuZ3RoID09IDFcbiAgICAgICAgaWYgMCA8IGxpbmVzWzBdLmluZGV4T2YgJzo6ICdcbiAgICAgICAgICAgIGxpbmVzID0gbGluZXNbMF0uc3BsaXQoJzo6ICcpLm1hcCAobCkgLT5cbiAgICAgICAgICAgICAgICBwID0gMFxuICAgICAgICAgICAgICAgIHdoaWxlIGxbcF0gPT0gJyAnXG4gICAgICAgICAgICAgICAgICAgIHAgKz0gMVxuICAgICAgICAgICAgICAgIHdoaWxlIGxbcF0/IGFuZCAobFtwXSAhPSAnICcpXG4gICAgICAgICAgICAgICAgICAgIHAgKz0gMVxuICAgICAgICAgICAgICAgIGlmIGxbcF0gPT0gJyAnXG4gICAgICAgICAgICAgICAgICAgIGwuc2xpY2UoMCwgcCkgKyAnICcgKyBsLnNsaWNlKHApXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBsXG4gICAgICAgIHAgPSBsaW5lc1swXS5pbmRleE9mICcgLiAnXG4gICAgICAgIGUgPSBsaW5lc1swXS5pbmRleE9mICd8J1xuICAgICAgICBpZiBwID4gMCBhbmQgKHAgPT0gbGluZXNbMF0uaW5kZXhPZiAnICcpIGFuZCAoZSA8IDAgb3IgcCA8IGUpXG4gICAgICAgICAgICBsaW5lcyA9IFtsaW5lc1swXS5zbGljZSgwLHApICsgJyAnICsgbGluZXNbMF0uc2xpY2UocCldXG5cbiAgICAjIDAwMDAwMDAwICAgMDAwMDAwMCAgICAwMDAwMDAwICAwMDAgICAwMDAgICAgICAgIDAwMCAgICAgIDAwMCAgMDAwICAgMDAwICAwMDAwMDAwMFxuICAgICMgMDAwICAgICAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMCAgICAgICAgMDAwICAgICAgMDAwICAwMDAwICAwMDAgIDAwMFxuICAgICMgMDAwMDAwMCAgIDAwMDAwMDAwMCAgMDAwICAgICAgIDAwMDAwMDAwMCAgICAgICAgMDAwICAgICAgMDAwICAwMDAgMCAwMDAgIDAwMDAwMDBcbiAgICAjIDAwMCAgICAgICAwMDAgICAwMDAgIDAwMCAgICAgICAwMDAgICAwMDAgICAgICAgIDAwMCAgICAgIDAwMCAgMDAwICAwMDAwICAwMDBcbiAgICAjIDAwMDAwMDAwICAwMDAgICAwMDAgICAwMDAwMDAwICAwMDAgICAwMDAgICAgICAgIDAwMDAwMDAgIDAwMCAgMDAwICAgMDAwICAwMDAwMDAwMFxuXG4gICAgaSA9IDBcbiAgICB3aGlsZSBpIDwgbGluZXMubGVuZ3RoXG5cbiAgICAgICAgbGluZSA9IGxpbmVzW2ldXG5cbiAgICAgICAgW2QsIGssIHYsIGVdID0gaW5zcGVjdCBsaW5lXG5cbiAgICAgICAgaWYgaz9cbiAgICAgICAgICAgIGlmIHY/IGFuZCAobm90IGUpIGFuZCAodi5zdWJzdHIoMCwyKSA9PSAnLiAnKSAjIGRlbnNlIHZhbHVlXG4gICAgICAgICAgICAgICAgYWRkTGluZSBkLCBrXG5cbiAgICAgICAgICAgICAgICB1ZCA9IGxhc3Qoc3RhY2spLmRcblxuICAgICAgICAgICAgICAgIGZvciBlIGluIHVuZGVuc2UgZCwgdlxuICAgICAgICAgICAgICAgICAgICBbZGQsZGssZHZdID0gaW5zcGVjdCBlXG4gICAgICAgICAgICAgICAgICAgIGFkZExpbmUgZGQsIGRrLCBkdlxuXG4gICAgICAgICAgICAgICAgd2hpbGUgbGFzdChzdGFjaykuZCA+IHVkKzFcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKClcbiAgICAgICAgICAgICAgICBsYXN0KHN0YWNrKS51bmRlbnNlZCA9IHRydWVcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBpZiBrID09ICcuLi4nIGFuZCBub3Qgdj9cbiAgICAgICAgICAgICAgICAgICAgaSArPSAxXG4gICAgICAgICAgICAgICAgICAgIHZsID0gW11cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGluZXNbaV0udHJpbUxlZnQoKS5zdWJzdHIoMCwzKSAhPSAnLi4uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGxpbmVzW2ldLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgbFswXSA9PSAnfCcgdGhlbiBsID0gbC5zdWJzdHIgMVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgbFtsLmxlbmd0aC0xXSA9PSAnfCcgdGhlbiBsID0gbC5zdWJzdHIgMCwgbC5sZW5ndGgtMVxuICAgICAgICAgICAgICAgICAgICAgICAgdmwucHVzaCBsXG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDFcbiAgICAgICAgICAgICAgICAgICAgayA9IHZsLmpvaW4gJ1xcbidcbiAgICAgICAgICAgICAgICAgICAgciA9IGxpbmVzW2ldLnRyaW1MZWZ0KCkuc3Vic3RyKDMpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICBpZiByLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHJcblxuICAgICAgICAgICAgICAgIGlmIHYgPT0gJy4uLidcbiAgICAgICAgICAgICAgICAgICAgaSArPSAxXG4gICAgICAgICAgICAgICAgICAgIHZsID0gW11cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGluZXNbaV0udHJpbSgpICE9ICcuLi4nXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gbGluZXNbaV0udHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBsWzBdID09ICd8JyB0aGVuIGwgPSBsLnN1YnN0ciAxXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBsW2wubGVuZ3RoLTFdID09ICd8JyB0aGVuIGwgPSBsLnN1YnN0ciAwLCBsLmxlbmd0aC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB2bC5wdXNoIGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMVxuICAgICAgICAgICAgICAgICAgICB2ID0gdmwuam9pbiAnXFxuJ1xuXG4gICAgICAgICAgICAgICAgYWRkTGluZSBkLCBrLCB2XG4gICAgICAgIGkgKz0gMVxuXG4gICAgc3RhY2tbMF0ub1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlXG4iXX0= //# sourceURL=../coffee/parse.coffee