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.
		
		
		
		
		
			
		
			
				
					
					
						
							63 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							63 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;
 |