UNPKG

nehan

Version:

Html layout engine for paged-media written in Typescript

62 lines 1.52 kB
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