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 8410x 8410x 8410x 8410x 1x 1x 883980x 34020x 34020x 34020x 883980x 883980x 8410x 8410x 8410x 875570x 875570x 875570x 875570x 875570x 875570x 1x 1x 166308x 166308x 1x 1x 166308x 166308x 1x 1x 2004x 2004x 2004x 1x 1x 12x 12x 12x 1x 1x 1767960x 16820x 1767960x 16820x 16820x 1734320x 1734320x 1x 1x 1075484x 41749x 41749x 1033735x 1033735x 1x 1x 883980x 25196x 25196x 858784x 858784x 1x 1x 160481x 160481x 1x 1x 326789x 326789x 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; } } |