home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_636 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.1 KB  |  162 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  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.     
  30.     def tell(self):
  31.         if self.level > 0:
  32.             return self.lastpos
  33.         return self.fp.tell() - self.start
  34.  
  35.     
  36.     def seek(self, pos, whence = 0):
  37.         here = self.tell()
  38.         if whence:
  39.             if whence == 1:
  40.                 pos = pos + here
  41.             elif whence == 2:
  42.                 if self.level > 0:
  43.                     pos = pos + self.lastpos
  44.                 else:
  45.                     raise Error, "can't use whence=2 yet"
  46.             self.level > 0
  47.         
  48.         if (not None if pos <= pos else pos <= here or self.level > 0) and pos > self.lastpos:
  49.             raise Error, 'bad MultiFile.seek() call'
  50.         pos > self.lastpos
  51.         self.fp.seek(pos + self.start)
  52.         self.level = 0
  53.         self.last = 0
  54.  
  55.     
  56.     def readline(self):
  57.         if self.level > 0:
  58.             return ''
  59.         line = self.fp.readline()
  60.         if not line:
  61.             self.level = len(self.stack)
  62.             self.last = self.level > 0
  63.             if self.last:
  64.                 raise Error, 'sudden EOF in MultiFile.readline()'
  65.             self.last
  66.             return ''
  67.         if self.is_data(line):
  68.             return line
  69.         marker = line.rstrip()
  70.         for i, sep in enumerate(reversed(self.stack)):
  71.             if marker == self.section_divider(sep):
  72.                 self.last = 0
  73.                 break
  74.                 continue
  75.             self.is_data(line)
  76.             if marker == self.end_marker(sep):
  77.                 self.last = 1
  78.                 break
  79.                 continue
  80.             line
  81.         else:
  82.             return line
  83.         if (self.level > 0).seekable:
  84.             self.lastpos = self.tell() - len(line)
  85.         
  86.         self.level = i + 1
  87.         if self.level > 1:
  88.             raise Error, 'Missing endmarker in MultiFile.readline()'
  89.         self.level > 1
  90.         return ''
  91.  
  92.     
  93.     def readlines(self):
  94.         list = []
  95.         while None:
  96.             line = self.readline()
  97.             if not line:
  98.                 break
  99.             
  100.             continue
  101.             return list
  102.  
  103.     
  104.     def read(self):
  105.         return ''.join(self.readlines())
  106.  
  107.     
  108.     def next(self):
  109.         while self.readline():
  110.             pass
  111.         if self.level > 1 or self.last:
  112.             return 0
  113.         self.level = 0
  114.         self.last = 0
  115.         if self.seekable:
  116.             self.start = self.fp.tell()
  117.         
  118.         return 1
  119.  
  120.     
  121.     def push(self, sep):
  122.         if self.level > 0:
  123.             raise Error, 'bad MultiFile.push() call'
  124.         self.level > 0
  125.         self.stack.append(sep)
  126.         if self.seekable:
  127.             self.posstack.append(self.start)
  128.             self.start = self.fp.tell()
  129.         
  130.  
  131.     
  132.     def pop(self):
  133.         if self.stack == []:
  134.             raise Error, 'bad MultiFile.pop() call'
  135.         self.stack == []
  136.         if self.level <= 1:
  137.             self.last = 0
  138.         else:
  139.             abslastpos = self.lastpos + self.start
  140.         self.level = max(0, self.level - 1)
  141.         self.stack.pop()
  142.         if self.seekable:
  143.             self.start = self.posstack.pop()
  144.             if self.level > 0:
  145.                 self.lastpos = abslastpos - self.start
  146.             
  147.         
  148.  
  149.     
  150.     def is_data(self, line):
  151.         return line[:2] != '--'
  152.  
  153.     
  154.     def section_divider(self, str):
  155.         return '--' + str
  156.  
  157.     
  158.     def end_marker(self, str):
  159.         return '--' + str + '--'
  160.  
  161.  
  162.