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 8778x 8778x 8778x 8778x 1x 1x 938741x 36186x 36186x 36186x 938741x 938741x 8778x 8778x 8778x 929963x 929963x 929963x 929963x 929963x 929963x 1x 1x 175523x 175523x 1x 1x 175523x 175523x 1x 1x 2064x 2064x 2064x 1x 1x 12x 12x 12x 1x 1x 1877482x 17556x 1877482x 17556x 17556x 1842370x 1842370x 1x 1x 1140564x 43615x 43615x 1096949x 1096949x 1x 1x 938741x 26300x 26300x 912441x 912441x 1x 1x 169517x 169517x 1x 1x 345040x 345040x 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;
}
}
|