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.
		
		
		
		
		
			
		
			
				
					
					
						
							58 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							58 lines
						
					
					
						
							1.9 KiB
						
					
					
				"use strict"; | 
						|
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; | 
						|
}()); | 
						|
exports.__esModule = true; | 
						|
exports["default"] = LinesAndColumns;
 | 
						|
 |