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 8274x 8274x 8274x 8274x 1x 1x 867866x 33366x 33366x 33366x 867866x 867866x 8274x 8274x 8274x 859592x 859592x 859592x 859592x 859592x 859592x 1x 1x 163306x 163306x 1x 1x 163306x 163306x 1x 1x 1967x 1967x 1967x 1x 1x 12x 12x 12x 1x 1x 1735732x 16548x 1735732x 16548x 16548x 1702636x 1702636x 1x 1x 1055960x 41077x 41077x 1014883x 1014883x 1x 1x 867866x 24788x 24788x 843078x 843078x 1x 1x 157555x 157555x 1x 1x 320861x 320861x 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; } } |