123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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;
|