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 8547x 8547x 8547x 8547x 1x 1x 903067x 34630x 34630x 34630x 903067x 903067x 8547x 8547x 8547x 894520x 894520x 894520x 894520x 894520x 894520x 1x 1x 169668x 169668x 1x 1x 169668x 169668x 1x 1x 2030x 2030x 2030x 1x 1x 12x 12x 12x 1x 1x 1806134x 17094x 1806134x 17094x 17094x 1771946x 1771946x 1x 1x 1098342x 42463x 42463x 1055879x 1055879x 1x 1x 903067x 25607x 25607x 877460x 877460x 1x 1x 163780x 163780x 1x 1x 333448x 333448x 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;
}
}
|