var RTL$ = require("RTL$.js").RTL$; var JsString = require("JsString.js"); var Type = RTL$.extend({ init: function Type(){ this.s = null; this.pos = 0; } }); function make(text/*Type*/){ var result = null; result = new Type(); result.s = text; return result; } function eof(self/*Type*/){ return self.pos == JsString.len(self.s); } function pos(self/*Type*/){ return self.pos; } function setPos(self/*Type*/, pos/*INTEGER*/){ RTL$.assert(pos <= JsString.len(self.s)); self.pos = pos; } function next(self/*Type*/, n/*INTEGER*/){ RTL$.assert((self.pos + n | 0) <= JsString.len(self.s)); self.pos = self.pos + n | 0; } function peekChar(self/*Type*/){ RTL$.assert(!eof(self)); return JsString.at(self.s, self.pos); } function getChar(self/*Type*/){ var result = 0; RTL$.assert(!eof(self)); result = JsString.at(self.s, self.pos); ++self.pos; return result; } function peekStr(self/*Type*/, len/*INTEGER*/){ var max = 0; max = JsString.len(self.s) - self.pos | 0; if (len > max){ len = max; } return JsString.substr(self.s, self.pos, len); } function read(self/*Type*/, f/*ReaderProc*/){ while (true){ if (!eof(self) && f(peekChar(self))){ next(self, 1); } else break; } return !eof(self); } function lineNumber(self/*Type*/){ var line = 0; var lastPos = 0; lastPos = JsString.indexOf(self.s, 13); while (true){ if (lastPos != -1 && lastPos < self.pos){ ++line; lastPos = JsString.indexOfFrom(self.s, 13, lastPos + 1 | 0); } else break; } return line + 1 | 0; } exports.make = make; exports.eof = eof; exports.pos = pos; exports.setPos = setPos; exports.next = next; exports.peekChar = peekChar; exports.getChar = getChar; exports.peekStr = peekStr; exports.read = read; exports.lineNumber = lineNumber;