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