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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import exceptions
  5. import os
  6. import re
  7. import shlex
  8. import sys
  9. from IPython.PyColorize import Parser
  10. from IPython.genutils import marquee, file_read, file_readlines, Term
  11. __all__ = [
  12.     'Demo',
  13.     'IPythonDemo',
  14.     'LineDemo',
  15.     'IPythonLineDemo',
  16.     'DemoError']
  17.  
  18. class DemoError(exceptions.Exception):
  19.     pass
  20.  
  21.  
  22. def re_mark(mark):
  23.     return re.compile('^\\s*#\\s+<demo>\\s+%s\\s*$' % mark, re.MULTILINE)
  24.  
  25.  
  26. class Demo(object):
  27.     re_stop = re_mark('-*\\s?stop\\s?-*')
  28.     re_silent = re_mark('silent')
  29.     re_auto = re_mark('auto')
  30.     re_auto_all = re_mark('auto_all')
  31.     
  32.     def __init__(self, src, title = '', arg_str = '', auto_all = None):
  33.         if hasattr(src, 'read'):
  34.             self.fobj = src
  35.             self.fname = 'from a file-like object'
  36.             if title == '':
  37.                 self.title = 'from a file-like object'
  38.             else:
  39.                 self.title = title
  40.         else:
  41.             self.fobj = open(src)
  42.             self.fname = src
  43.             if title == '':
  44.                 (filepath, filename) = os.path.split(src)
  45.                 self.title = filename
  46.             else:
  47.                 self.title = title
  48.         self.sys_argv = [
  49.             src] + shlex.split(arg_str)
  50.         self.auto_all = auto_all
  51.         self.ip_ns = __IPYTHON__.user_ns
  52.         self.ip_colorize = __IPYTHON__.pycolorize
  53.         self.ip_showtb = __IPYTHON__.showtraceback
  54.         self.ip_runlines = __IPYTHON__.runlines
  55.         self.shell = __IPYTHON__
  56.         self.reload()
  57.  
  58.     
  59.     def reload(self):
  60.         self.src = self.fobj.read()
  61.         src_b = _[1]
  62.         self._silent = [ bool(self.re_silent.findall(b)) for b in src_b ]
  63.         self._auto = [ bool(self.re_auto.findall(b)) for b in src_b ]
  64.         src_blocks = []
  65.         
  66.         auto_strip = lambda s: self.re_auto.sub('', s)
  67.         for i, b in enumerate(src_b):
  68.             if self._auto[i]:
  69.                 src_blocks.append(auto_strip(b))
  70.                 continue
  71.             ([] if self.auto_all is None else [],)
  72.             src_blocks.append(b)
  73.         
  74.         src_blocks[0] = self.re_auto_all.sub('', src_blocks[0])
  75.         self.nblocks = len(src_blocks)
  76.         self.src_blocks = src_blocks
  77.         self.src_blocks_colored = map(self.ip_colorize, self.src_blocks)
  78.         self.reset()
  79.  
  80.     
  81.     def reset(self):
  82.         self.user_ns = { }
  83.         self.finished = False
  84.         self.block_index = 0
  85.  
  86.     
  87.     def _validate_index(self, index):
  88.         if index < 0 or index >= self.nblocks:
  89.             raise ValueError('invalid block index %s' % index)
  90.         index >= self.nblocks
  91.  
  92.     
  93.     def _get_index(self, index):
  94.         if index is None:
  95.             if self.finished:
  96.                 print >>Term.cout, 'Demo finished.  Use <demo_name>.reset() if you want to rerun it.'
  97.                 return None
  98.             index = self.block_index
  99.         else:
  100.             self._validate_index(index)
  101.         return index
  102.  
  103.     
  104.     def seek(self, index):
  105.         if index < 0:
  106.             index = self.nblocks + index
  107.         
  108.         self._validate_index(index)
  109.         self.block_index = index
  110.         self.finished = False
  111.  
  112.     
  113.     def back(self, num = 1):
  114.         self.seek(self.block_index - num)
  115.  
  116.     
  117.     def jump(self, num = 1):
  118.         self.seek(self.block_index + num)
  119.  
  120.     
  121.     def again(self):
  122.         self.back(1)
  123.         self()
  124.  
  125.     
  126.     def edit(self, index = None):
  127.         index = self._get_index(index)
  128.         if index is None:
  129.             return None
  130.         if index > 0:
  131.             index -= 1
  132.         
  133.         filename = self.shell.mktempfile(self.src_blocks[index])
  134.         self.shell.hooks.editor(filename, 1)
  135.         new_block = file_read(filename)
  136.         self.src_blocks[index] = new_block
  137.         self.src_blocks_colored[index] = self.ip_colorize(new_block)
  138.         self.block_index = index
  139.         self()
  140.  
  141.     
  142.     def show(self, index = None):
  143.         index = self._get_index(index)
  144.         if index is None:
  145.             return None
  146.         print >>Term.cout, self.marquee('<%s> block # %s (%s remaining)' % (self.title, index, self.nblocks - index - 1))
  147.         print >>Term.cout, self.src_blocks_colored[index]
  148.         sys.stdout.flush()
  149.  
  150.     
  151.     def show_all(self):
  152.         fname = self.title
  153.         title = self.title
  154.         nblocks = self.nblocks
  155.         silent = self._silent
  156.         marquee = self.marquee
  157.         for index, block in enumerate(self.src_blocks_colored):
  158.             if silent[index]:
  159.                 print >>Term.cout, marquee('<%s> SILENT block # %s (%s remaining)' % (title, index, nblocks - index - 1))
  160.             else:
  161.                 print >>Term.cout, marquee('<%s> block # %s (%s remaining)' % (title, index, nblocks - index - 1))
  162.             print >>Term.cout, block,
  163.         
  164.         sys.stdout.flush()
  165.  
  166.     
  167.     def runlines(self, source):
  168.         exec source in self.user_ns
  169.  
  170.     
  171.     def __call__(self, index = None):
  172.         index = self._get_index(index)
  173.         if index is None:
  174.             return None
  175.         
  176.         try:
  177.             marquee = self.marquee
  178.             next_block = self.src_blocks[index]
  179.             self.block_index += 1
  180.             
  181.             try:
  182.                 save_argv = sys.argv
  183.                 sys.argv = self.sys_argv
  184.                 self.runlines(next_block)
  185.                 self.post_cmd()
  186.             finally:
  187.                 sys.argv = save_argv
  188.  
  189.         except:
  190.             index is None
  191.             self.ip_showtb(filename = self.fname)
  192.  
  193.         self.ip_ns.update(self.user_ns)
  194.         if self.block_index == self.nblocks:
  195.             mq1 = self.marquee('END OF DEMO')
  196.             self.finished = True
  197.         
  198.  
  199.     
  200.     def marquee(self, txt = '', width = 78, mark = '*'):
  201.         return marquee(txt, width, mark)
  202.  
  203.     
  204.     def pre_cmd(self):
  205.         pass
  206.  
  207.     
  208.     def post_cmd(self):
  209.         pass
  210.  
  211.  
  212.  
  213. class IPythonDemo(Demo):
  214.     
  215.     def runlines(self, source):
  216.         self.shell.runlines(source)
  217.  
  218.  
  219.  
  220. class LineDemo(Demo):
  221.     
  222.     def reload(self):
  223.         src_b = _[1]
  224.         nblocks = len(src_b)
  225.         self.src = os.linesep.join(self.fobj.readlines())
  226.         self._silent = [
  227.             False] * nblocks
  228.         self._auto = [
  229.             True] * nblocks
  230.         self.auto_all = True
  231.         self.nblocks = nblocks
  232.         self.src_blocks = src_b
  233.         self.src_blocks_colored = map(self.ip_colorize, self.src_blocks)
  234.         self.reset()
  235.  
  236.  
  237.  
  238. class IPythonLineDemo(IPythonDemo, LineDemo):
  239.     pass
  240.  
  241.  
  242. class ClearMixin(object):
  243.     
  244.     def marquee(self, txt = '', width = 78, mark = '*'):
  245.         return ''
  246.  
  247.     
  248.     def pre_cmd(self):
  249.         import IPython.platutils as IPython
  250.         IPython.platutils.term_clear()
  251.  
  252.  
  253.  
  254. class ClearDemo(ClearMixin, Demo):
  255.     pass
  256.  
  257.  
  258. class ClearIPDemo(ClearMixin, IPythonDemo):
  259.     pass
  260.  
  261.