nehan
Version:
Html layout engine for paged-media written in Typescript
62 lines • 1.52 kB
JavaScript
export class Lexer {
constructor(src, args = {}) {
this.src = this.normalize(src, args);
this.buff = this.src;
this.pos = 0;
this.tokens = [];
this.setupTokens(args);
}
acceptTokenMapper(visitor) {
this.tokens = visitor.visit(this.tokens);
}
normalize(src, args = {}) {
return src;
}
stepBuff(count) {
this.buff = this.buff.substring(count);
}
getChar() {
let c1 = this.peekChar();
this.stepBuff(1);
return c1;
}
peekChar() {
return this.buff.substring(0, 1);
}
get progress() {
if (this.tokens.length === 0) {
return 1;
}
return this.pos / this.tokens.length;
}
hasNext() {
let has_next = this.pos < this.tokens.length;
return has_next;
}
getNext() {
let token = this.tokens[this.pos++];
return token;
}
setupTokens(args) {
while (this.hasNextBuff()) {
this.addToken(this.createToken(args));
}
return this.tokens;
}
addToken(token) {
this.tokens.push(token);
}
createToken(args) {
throw new Error("BufferedLexer.createToken must be overrided");
}
hasNextBuff() {
return this.buff !== "";
}
peek(offset = 0) {
return this.tokens[this.pos + offset];
}
pushBack(count) {
this.pos = Math.max(0, this.pos - Math.abs(count));
}
}
//# sourceMappingURL=lexer.js.map