You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.0 KiB
62 lines
2.0 KiB
"use strict"; |
|
exports.__esModule = true; |
|
exports.LinesAndColumns = void 0; |
|
var LF = '\n'; |
|
var CR = '\r'; |
|
var LinesAndColumns = /** @class */ (function () { |
|
function LinesAndColumns(string) { |
|
this.string = string; |
|
var offsets = [0]; |
|
for (var offset = 0; offset < string.length;) { |
|
switch (string[offset]) { |
|
case LF: |
|
offset += LF.length; |
|
offsets.push(offset); |
|
break; |
|
case CR: |
|
offset += CR.length; |
|
if (string[offset] === LF) { |
|
offset += LF.length; |
|
} |
|
offsets.push(offset); |
|
break; |
|
default: |
|
offset++; |
|
break; |
|
} |
|
} |
|
this.offsets = offsets; |
|
} |
|
LinesAndColumns.prototype.locationForIndex = function (index) { |
|
if (index < 0 || index > this.string.length) { |
|
return null; |
|
} |
|
var line = 0; |
|
var offsets = this.offsets; |
|
while (offsets[line + 1] <= index) { |
|
line++; |
|
} |
|
var column = index - offsets[line]; |
|
return { line: line, column: column }; |
|
}; |
|
LinesAndColumns.prototype.indexForLocation = function (location) { |
|
var line = location.line, column = location.column; |
|
if (line < 0 || line >= this.offsets.length) { |
|
return null; |
|
} |
|
if (column < 0 || column > this.lengthOfLine(line)) { |
|
return null; |
|
} |
|
return this.offsets[line] + column; |
|
}; |
|
LinesAndColumns.prototype.lengthOfLine = function (line) { |
|
var offset = this.offsets[line]; |
|
var nextOffset = line === this.offsets.length - 1 |
|
? this.string.length |
|
: this.offsets[line + 1]; |
|
return nextOffset - offset; |
|
}; |
|
return LinesAndColumns; |
|
}()); |
|
exports.LinesAndColumns = LinesAndColumns; |
|
exports["default"] = LinesAndColumns;
|
|
|