boundary.
Fixed by keeping a readahead buffer containing the next line.
XXX We have no test suite for this. Maybe the new email package will
help?
self.stack = [] # Grows down
self.level = 0
self.last = 0
+ self.readahead = ""
if seekable:
self.seekable = 1
self.start = self.fp.tell()
def tell(self):
if self.level > 0:
return self.lastpos
- return self.fp.tell() - self.start
+ return self.fp.tell() - len(self.readahead) - self.start
def seek(self, pos, whence=0):
here = self.tell()
self.fp.seek(pos + self.start)
self.level = 0
self.last = 0
+ self.readahead = ""
def readline(self):
+ if not self.readahead:
+ self.readahead = self._readline()
+ line = self.readahead
+ if line:
+ self.readahead = self._readline()
+ if not self.readahead and line[-1:] == "\n":
+ line = line[:-1]
+ return line
+
+ def _readline(self):
if self.level > 0:
return ''
line = self.fp.readline()