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 8887x 8887x 8887x 8887x 1x 1x 954120x 36398x 36398x 36398x 954120x 954120x 8887x 8887x 8887x 945233x 945233x 945233x 945233x 945233x 945233x 1x 1x 179028x 179028x 1x 1x 179028x 179028x 1x 1x 2066x 2066x 2066x 1x 1x 12x 12x 12x 1x 1x 1908240x 17774x 1908240x 17774x 17774x 1872692x 1872692x 1x 1x 1159775x 44160x 44160x 1115615x 1115615x 1x 1x 954120x 26627x 26627x 927493x 927493x 1x 1x 172918x 172918x 1x 1x 351946x 351946x 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;
}
}
|