UNPKG

bitbox-compiler

Version:

bitbox /unbox

46 lines (41 loc) 4.34 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = pair; /** Pair matched brakets ( left: string, right: string, input: string ) */ function pair(a, b, str) { var bal = 0; var m = {}; var ended = false; for (var i = 0; i < str.length; i++) { if (a == str.substr(i, a.length)) { if (!('start' in m)) m.start = i; bal++; } else if (b == str.substr(i, b.length) && 'start' in m) { ended = true; bal--; if (!bal) { m.end = i; m.pre = str.substr(0, m.start); m.body = m.end - m.start > 1 ? str.substring(m.start + a.length, m.end) : ''; m.post = str.slice(m.end + b.length); return m; } } } // if we opened more than we closed, find the one we closed if (bal && ended) { var start = m.start + a.length; m = pair(a, b, str.substr(start)); if (m) { m.start += start; m.end += start; m.pre = str.slice(0, start) + m.pre; } return m; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWlyL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O2tCQUl3QixJQUFJOzs7OztBQUFiLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFOztBQUV2QyxLQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDWixLQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDWCxLQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7O0FBRWxCLE1BQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BDLE1BQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNqQyxPQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQSxBQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDakMsTUFBRyxFQUFFLENBQUM7R0FDTixNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ3hELFFBQUssR0FBRyxJQUFJLENBQUM7QUFDYixNQUFHLEVBQUUsQ0FBQztBQUNOLE9BQUksQ0FBQyxHQUFHLEVBQUU7QUFDVCxLQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNWLEtBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEtBQUMsQ0FBQyxJQUFJLEdBQUcsQUFBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0UsS0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLFdBQU8sQ0FBQyxDQUFDO0lBQ1Q7R0FDRDtFQUNEOzs7QUFBQSxBQUdELEtBQUksR0FBRyxJQUFJLEtBQUssRUFBRTtBQUNqQixNQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDL0IsR0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFJLENBQUMsRUFBRTtBQUNOLElBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ2pCLElBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2YsSUFBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0dBQ3BDO0FBQ0QsU0FBTyxDQUFDLENBQUM7RUFDVDtDQUNEIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFBhaXIgbWF0Y2hlZCBicmFrZXRzXG5cdCggbGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nLCBpbnB1dDogc3RyaW5nIClcblx0Ki9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFpcihhLCBiLCBzdHIpIHtcblxuXHR2YXIgYmFsID0gMDtcblx0dmFyIG0gPSB7fTtcblx0dmFyIGVuZGVkID0gZmFsc2U7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoYSA9PSBzdHIuc3Vic3RyKGksIGEubGVuZ3RoKSkge1xuXHRcdFx0aWYgKCEoJ3N0YXJ0JyBpbiBtKSkgbS5zdGFydCA9IGk7XG5cdFx0XHRiYWwrKztcblx0XHR9IGVsc2UgaWYgKGIgPT0gc3RyLnN1YnN0cihpLCBiLmxlbmd0aCkgJiYgJ3N0YXJ0JyBpbiBtKSB7XG5cdFx0XHRlbmRlZCA9IHRydWU7XG5cdFx0XHRiYWwtLTtcblx0XHRcdGlmICghYmFsKSB7XG5cdFx0XHRcdG0uZW5kID0gaTtcblx0XHRcdFx0bS5wcmUgPSBzdHIuc3Vic3RyKDAsIG0uc3RhcnQpO1xuXHRcdFx0XHRtLmJvZHkgPSAobS5lbmQgLSBtLnN0YXJ0ID4gMSkgPyBzdHIuc3Vic3RyaW5nKG0uc3RhcnQgKyBhLmxlbmd0aCwgbS5lbmQpIDogJyc7XG5cdFx0XHRcdG0ucG9zdCA9IHN0ci5zbGljZShtLmVuZCArIGIubGVuZ3RoKTtcblx0XHRcdFx0cmV0dXJuIG07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gaWYgd2Ugb3BlbmVkIG1vcmUgdGhhbiB3ZSBjbG9zZWQsIGZpbmQgdGhlIG9uZSB3ZSBjbG9zZWRcblx0aWYgKGJhbCAmJiBlbmRlZCkge1xuXHRcdHZhciBzdGFydCA9IG0uc3RhcnQgKyBhLmxlbmd0aDtcblx0XHRtID0gcGFpcihhLCBiLCBzdHIuc3Vic3RyKHN0YXJ0KSk7XG5cdFx0aWYgKG0pIHtcblx0XHRcdG0uc3RhcnQgKz0gc3RhcnQ7XG5cdFx0XHRtLmVuZCArPSBzdGFydDtcblx0XHRcdG0ucHJlID0gc3RyLnNsaWNlKDAsIHN0YXJ0KSArIG0ucHJlO1xuXHRcdH1cblx0XHRyZXR1cm4gbTtcblx0fVxufVxuIl19