Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 1x 1x 1x 1x 1x 1x 1x 7868x 7868x 7868x 7868x 1x 1x 822098x 31662x 31662x 31662x 822098x 822098x 7868x 7868x 814230x 814230x 814230x 814230x 814230x 814230x 1x 1x 155052x 155052x 1x 1x 155052x 155052x 1x 1x 1876x 1876x 1876x 1x 1x 12x 12x 12x 1x 1x 1644196x 15736x 1644196x 15736x 15736x 1612724x 1612724x 1x 1x 1000720x 39061x 39061x 961659x 961659x 1x 1x 822098x 23570x 23570x 798528x 798528x 1x 1x 149608x 149608x 1x 1x 304660x 304660x 1x | export class LexerStream { private readonly raw: string; private offset = -1; private row: number; private col: number; public constructor(raw: string) { this.raw = raw; this.row = 0; this.col = 0; } public advance(): boolean { if (this.currentChar() === "\n") { this.col = 1; this.row = this.row + 1; } if (this.offset === this.raw.length) { return false; } this.col = this.col + 1; this.offset = this.offset + 1; return true; } public getCol(): number { return this.col; } public getRow(): number { return this.row; } public prevChar(): string { if (this.offset - 1 < 0) { return ""; } return this.raw.substr(this.offset - 1, 1); } public prevPrevChar(): string { if (this.offset - 2 < 0) { return ""; } return this.raw.substr(this.offset - 2, 2); } public currentChar(): string { if (this.offset < 0) { return "\n"; // simulate newline at start of file to handle star(*) comments } else if (this.offset >= this.raw.length) { return ""; } return this.raw.substr(this.offset, 1); } public nextChar(): string { if (this.offset + 2 > this.raw.length) { return ""; } return this.raw.substr(this.offset + 1, 1); } public nextNextChar(): string { if (this.offset + 3 > this.raw.length) { return this.nextChar(); } return this.raw.substr(this.offset + 1, 2); } public getRaw(): string { return this.raw; } public getOffset() { return this.offset; } } |