1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- var LF = '\n';
- var CR = '\r';
- var LinesAndColumns = (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;
- }());
- export default LinesAndColumns;
|