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 8610x 8610x 8610x 8610x 1x 1x 910293x 34939x 34939x 34939x 910293x 910293x 8610x 8610x 8610x 901683x 901683x 901683x 901683x 901683x 901683x 1x 1x 170921x 170921x 1x 1x 170921x 170921x 1x 1x 2045x 2045x 2045x 1x 1x 12x 12x 12x 1x 1x 1820586x 17220x 1820586x 17220x 17220x 1786146x 1786146x 1x 1x 1107010x 42778x 42778x 1064232x 1064232x 1x 1x 910293x 25796x 25796x 884497x 884497x 1x 1x 165003x 165003x 1x 1x 335924x 335924x 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;
}
}
|