home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 January / maximum-cd-2011-01.iso / DiscContents / calibre-0.7.26.msi / file_2382 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-10-31  |  2.5 KB  |  67 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import re
  5.  
  6. class EndOfText(RuntimeError):
  7.     pass
  8.  
  9.  
  10. class Scanner(object):
  11.     
  12.     def __init__(self, text, flags = 0):
  13.         self.data = text
  14.         self.data_length = len(text)
  15.         self.start_pos = 0
  16.         self.pos = 0
  17.         self.flags = flags
  18.         self.last = None
  19.         self.match = None
  20.         self._re_cache = { }
  21.  
  22.     
  23.     def eos(self):
  24.         return self.pos >= self.data_length
  25.  
  26.     eos = property(eos, eos.__doc__)
  27.     
  28.     def check(self, pattern):
  29.         if self.eos:
  30.             raise EndOfText()
  31.         self.eos
  32.         if pattern not in self._re_cache:
  33.             self._re_cache[pattern] = re.compile(pattern, self.flags)
  34.         
  35.         return self._re_cache[pattern].match(self.data, self.pos)
  36.  
  37.     
  38.     def test(self, pattern):
  39.         return self.check(pattern) is not None
  40.  
  41.     
  42.     def scan(self, pattern):
  43.         if self.eos:
  44.             raise EndOfText()
  45.         self.eos
  46.         if pattern not in self._re_cache:
  47.             self._re_cache[pattern] = re.compile(pattern, self.flags)
  48.         
  49.         self.last = self.match
  50.         m = self._re_cache[pattern].match(self.data, self.pos)
  51.         if m is None:
  52.             return False
  53.         self.start_pos = m.start()
  54.         self.pos = m.end()
  55.         self.match = m.group()
  56.         return True
  57.  
  58.     
  59.     def get_char(self):
  60.         self.scan('.')
  61.  
  62.     
  63.     def __repr__(self):
  64.         return '<%s %d/%d>' % (self.__class__.__name__, self.pos, self.data_length)
  65.  
  66.  
  67.