home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / multifile.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  4.0 KB  |  146 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  3.  
  4. from warnings import warn
  5. warn('the multifile module has been deprecated since Python 2.5', DeprecationWarning, stacklevel = 2)
  6. del warn
  7. __all__ = [
  8.     'MultiFile',
  9.     'Error']
  10.  
  11. class Error(Exception):
  12.     pass
  13.  
  14.  
  15. class MultiFile:
  16.     seekable = 0
  17.     
  18.     def __init__(self, fp, seekable = 1):
  19.         self.fp = fp
  20.         self.stack = []
  21.         self.level = 0
  22.         self.last = 0
  23.         if seekable:
  24.             self.seekable = 1
  25.             self.start = self.fp.tell()
  26.             self.posstack = []
  27.  
  28.     
  29.     def tell(self):
  30.         if self.level > 0:
  31.             return self.lastpos
  32.         return None.fp.tell() - self.start
  33.  
  34.     
  35.     def seek(self, pos, whence = 0):
  36.         here = self.tell()
  37.         if whence:
  38.             if whence == 1:
  39.                 pos = pos + here
  40.             elif whence == 2:
  41.                 if self.level > 0:
  42.                     pos = pos + self.lastpos
  43.                 else:
  44.                     raise Error, "can't use whence=2 yet"
  45.         if (not None if pos <= pos else pos <= here or self.level > 0) and pos > self.lastpos:
  46.             raise Error, 'bad MultiFile.seek() call'
  47.         self.fp.seek(pos + self.start)
  48.         self.level = 0
  49.         self.last = 0
  50.  
  51.     
  52.     def readline(self):
  53.         if self.level > 0:
  54.             return ''
  55.         line = None.fp.readline()
  56.         if not line:
  57.             self.level = len(self.stack)
  58.             self.last = self.level > 0
  59.             if self.last:
  60.                 raise Error, 'sudden EOF in MultiFile.readline()'
  61.             return ''
  62.         if None.is_data(line):
  63.             return line
  64.         marker = None.rstrip()
  65.         for i, sep in enumerate(reversed(self.stack)):
  66.             if marker == self.section_divider(sep):
  67.                 self.last = 0
  68.                 break
  69.                 continue
  70.             if marker == self.end_marker(sep):
  71.                 self.last = 1
  72.                 break
  73.                 continue
  74.             return line
  75.             if self.seekable:
  76.                 self.lastpos = self.tell() - len(line)
  77.             self.level = i + 1
  78.             if self.level > 1:
  79.                 raise Error, 'Missing endmarker in MultiFile.readline()'
  80.             return ''
  81.  
  82.     
  83.     def readlines(self):
  84.         list = []
  85.         while None:
  86.             line = self.readline()
  87.             if not line:
  88.                 break
  89.             continue
  90.             return list
  91.  
  92.     
  93.     def read(self):
  94.         return ''.join(self.readlines())
  95.  
  96.     
  97.     def next(self):
  98.         while self.readline():
  99.             pass
  100.         if self.level > 1 or self.last:
  101.             return 0
  102.         self.level = None
  103.         self.last = 0
  104.         if self.seekable:
  105.             self.start = self.fp.tell()
  106.         return 1
  107.  
  108.     
  109.     def push(self, sep):
  110.         if self.level > 0:
  111.             raise Error, 'bad MultiFile.push() call'
  112.         self.stack.append(sep)
  113.         if self.seekable:
  114.             self.posstack.append(self.start)
  115.             self.start = self.fp.tell()
  116.  
  117.     
  118.     def pop(self):
  119.         if self.stack == []:
  120.             raise Error, 'bad MultiFile.pop() call'
  121.         if self.level <= 1:
  122.             self.last = 0
  123.         else:
  124.             abslastpos = self.lastpos + self.start
  125.         self.level = max(0, self.level - 1)
  126.         self.stack.pop()
  127.         if self.seekable:
  128.             self.start = self.posstack.pop()
  129.             if self.level > 0:
  130.                 self.lastpos = abslastpos - self.start
  131.             
  132.  
  133.     
  134.     def is_data(self, line):
  135.         return line[:2] != '--'
  136.  
  137.     
  138.     def section_divider(self, str):
  139.         return '--' + str
  140.  
  141.     
  142.     def end_marker(self, str):
  143.         return '--' + str + '--'
  144.  
  145.  
  146.