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
			| 
											3 years ago
										 | "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; |