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 8371x 8371x 8371x 8371x 1x 1x 879728x 33841x 33841x 33841x 879728x 879728x 8371x 8371x 8371x 871357x 871357x 871357x 871357x 871357x 871357x 1x 1x 165376x 165376x 1x 1x 165376x 165376x 1x 1x 1995x 1995x 1995x 1x 1x 12x 12x 12x 1x 1x 1759456x 16742x 1759456x 16742x 16742x 1725972x 1725972x 1x 1x 1070183x 41554x 41554x 1028629x 1028629x 1x 1x 879728x 25079x 25079x 854649x 854649x 1x 1x 159573x 159573x 1x 1x 324949x 324949x 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; } } |