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 83 | 1x 1x 1x 1x 1x 1x 1x 8312x 8312x 8312x 8312x 1x 1x 870560x 33477x 33477x 33477x 870560x 870560x 8312x 8312x 8312x 862248x 862248x 862248x 862248x 862248x 862248x 1x 1x 163848x 163848x 1x 1x 163848x 163848x 1x 1x 1977x 1977x 1977x 1x 1x 12x 12x 12x 1x 1x 1741120x 16624x 1741120x 16624x 16624x 1707872x 1707872x 1x 1x 1059310x 41266x 41266x 1018044x 1018044x 1x 1x 870560x 24902x 24902x 845658x 845658x 1x 1x 158070x 158070x 1x 1x 321918x 321918x 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) { this.col = this.col - 1; 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; } } |