63 lines
1.3 KiB
JavaScript
63 lines
1.3 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
class Range {
|
|
static copy(orig) {
|
|
return new Range(orig.start, orig.end);
|
|
}
|
|
|
|
constructor(start, end) {
|
|
this.start = start;
|
|
this.end = end || start;
|
|
}
|
|
|
|
isEmpty() {
|
|
return typeof this.start !== 'number' || !this.end || this.end <= this.start;
|
|
}
|
|
/**
|
|
* Set `origStart` and `origEnd` to point to the original source range for
|
|
* this node, which may differ due to dropped CR characters.
|
|
*
|
|
* @param {number[]} cr - Positions of dropped CR characters
|
|
* @param {number} offset - Starting index of `cr` from the last call
|
|
* @returns {number} - The next offset, matching the one found for `origStart`
|
|
*/
|
|
|
|
|
|
setOrigRange(cr, offset) {
|
|
const {
|
|
start,
|
|
end
|
|
} = this;
|
|
|
|
if (cr.length === 0 || end <= cr[0]) {
|
|
this.origStart = start;
|
|
this.origEnd = end;
|
|
return offset;
|
|
}
|
|
|
|
let i = offset;
|
|
|
|
while (i < cr.length) {
|
|
if (cr[i] > start) break;else ++i;
|
|
}
|
|
|
|
this.origStart = start + i;
|
|
const nextOffset = i;
|
|
|
|
while (i < cr.length) {
|
|
// if end was at \n, it should now be at \r
|
|
if (cr[i] >= end) break;else ++i;
|
|
}
|
|
|
|
this.origEnd = end + i;
|
|
return nextOffset;
|
|
}
|
|
|
|
}
|
|
|
|
exports.default = Range; |