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 8510x 8510x 8510x 8510x 1x 1x 897856x 34385x 34385x 34385x 897856x 897856x 8510x 8510x 8510x 889346x 889346x 889346x 889346x 889346x 889346x 1x 1x 168759x 168759x 1x 1x 168759x 168759x 1x 1x 2028x 2028x 2028x 1x 1x 12x 12x 12x 1x 1x 1795712x 17020x 1795712x 17020x 17020x 1761672x 1761672x 1x 1x 1092111x 42284x 42284x 1049827x 1049827x 1x 1x 897856x 25496x 25496x 872360x 872360x 1x 1x 162885x 162885x 1x 1x 331644x 331644x 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;
}
}
|