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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __license__ = 'GPL v3'
  5. __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
  6. import sys
  7. import re
  8. import os
  9.  
  10. class TerminalController:
  11.     BOL = ''
  12.     UP = ''
  13.     DOWN = ''
  14.     LEFT = ''
  15.     RIGHT = ''
  16.     CLEAR_SCREEN = ''
  17.     CLEAR_EOL = ''
  18.     CLEAR_BOL = ''
  19.     CLEAR_EOS = ''
  20.     BOLD = ''
  21.     BLINK = ''
  22.     DIM = ''
  23.     REVERSE = ''
  24.     NORMAL = ''
  25.     HIDE_CURSOR = ''
  26.     SHOW_CURSOR = ''
  27.     COLS = None
  28.     LINES = None
  29.     BLACK = BLUE = GREEN = CYAN = RED = MAGENTA = YELLOW = WHITE = ''
  30.     BG_BLACK = BG_BLUE = BG_GREEN = BG_CYAN = ''
  31.     BG_RED = BG_MAGENTA = BG_YELLOW = BG_WHITE = ''
  32.     _STRING_CAPABILITIES = '\n    BOL=cr UP=cuu1 DOWN=cud1 LEFT=cub1 RIGHT=cuf1\n    CLEAR_SCREEN=clear CLEAR_EOL=el CLEAR_BOL=el1 CLEAR_EOS=ed BOLD=bold\n    BLINK=blink DIM=dim REVERSE=rev UNDERLINE=smul NORMAL=sgr0\n    HIDE_CURSOR=cinvis SHOW_CURSOR=cnorm'.split()
  33.     _COLORS = 'BLACK BLUE GREEN CYAN RED MAGENTA YELLOW WHITE'.split()
  34.     _ANSICOLORS = 'BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE'.split()
  35.     
  36.     def __init__(self, term_stream = sys.stdout):
  37.         
  38.         try:
  39.             import curses
  40.         except:
  41.             return None
  42.  
  43.         if os.environ.get('CALIBRE_WORKER', None) is not None and not hasattr(term_stream, 'isatty') or not term_stream.isatty():
  44.             return None
  45.         
  46.         try:
  47.             curses.setupterm()
  48.         except:
  49.             not term_stream.isatty()
  50.             return None
  51.  
  52.         self.COLS = curses.tigetnum('cols')
  53.         self.LINES = curses.tigetnum('lines')
  54.         for capability in self._STRING_CAPABILITIES:
  55.             (attrib, cap_name) = capability.split('=')
  56.             if not self._tigetstr(cap_name):
  57.                 pass
  58.             setattr(self, attrib, '')
  59.         
  60.         set_fg = self._tigetstr('setf')
  61.         if set_fg:
  62.             for i, color in zip(range(len(self._COLORS)), self._COLORS):
  63.                 if not curses.tparm(set_fg, i):
  64.                     pass
  65.                 setattr(self, color, '')
  66.             
  67.         
  68.         set_fg_ansi = self._tigetstr('setaf')
  69.         if set_fg_ansi:
  70.             for i, color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS):
  71.                 if not curses.tparm(set_fg_ansi, i):
  72.                     pass
  73.                 setattr(self, color, '')
  74.             
  75.         
  76.         set_bg = self._tigetstr('setb')
  77.         if set_bg:
  78.             for i, color in zip(range(len(self._COLORS)), self._COLORS):
  79.                 if not curses.tparm(set_bg, i):
  80.                     pass
  81.                 setattr(self, 'BG_' + color, '')
  82.             
  83.         
  84.         set_bg_ansi = self._tigetstr('setab')
  85.         if set_bg_ansi:
  86.             for i, color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS):
  87.                 if not curses.tparm(set_bg_ansi, i):
  88.                     pass
  89.                 setattr(self, 'BG_' + color, '')
  90.             
  91.         
  92.  
  93.     
  94.     def _tigetstr(self, cap_name):
  95.         import curses
  96.         if not curses.tigetstr(cap_name):
  97.             pass
  98.         cap = ''
  99.         return re.sub('\\$<\\d+>[/*]?', '', cap)
  100.  
  101.     
  102.     def render(self, template):
  103.         return re.sub('\\$\\$|\\${\\w+}', self._render_sub, template)
  104.  
  105.     
  106.     def _render_sub(self, match):
  107.         s = match.group()
  108.         if s == '$$':
  109.             return s
  110.         return getattr(self, s[2:-1])
  111.  
  112.  
  113.  
  114. class ProgressBar:
  115.     BAR = '%3d%% ${GREEN}[${BOLD}%s%s${NORMAL}${GREEN}]${NORMAL}\n'
  116.     HEADER = '${BOLD}${CYAN}%s${NORMAL}\n\n'
  117.     
  118.     def __init__(self, term, header, no_progress_bar = False):
  119.         self.term = term
  120.         self.no_progress_bar = no_progress_bar
  121.         if self.term.CLEAR_EOL and self.term.UP:
  122.             pass
  123.         self.fancy = self.term.BOL
  124.         if self.fancy:
  125.             if not self.term.COLS:
  126.                 pass
  127.             self.width = 75
  128.             self.bar = term.render(self.BAR)
  129.             self.header = self.term.render(self.HEADER % header.center(self.width))
  130.             if isinstance(self.header, unicode):
  131.                 self.header = self.header.encode('utf-8')
  132.             
  133.             self.cleared = 1
  134.         
  135.  
  136.     
  137.     def update(self, percent, message = ''):
  138.         if isinstance(message, unicode):
  139.             message = message.encode('utf-8', 'replace')
  140.         
  141.         if self.no_progress_bar:
  142.             if message:
  143.                 print message
  144.             
  145.         elif self.fancy:
  146.             if self.cleared:
  147.                 sys.stdout.write(self.header)
  148.                 self.cleared = 0
  149.             
  150.             n = int((self.width - 10) * percent)
  151.             msg = message.center(self.width)
  152.             sys.stdout.write(self.term.BOL + self.term.UP + self.term.CLEAR_EOL + self.bar % (100 * percent, '=' * n, '-' * (self.width - 10 - n)) + self.term.CLEAR_EOL + msg)
  153.             sys.stdout.flush()
  154.         elif not message:
  155.             print '%d%%' % percent * 100,
  156.         else:
  157.             print '%d%%' % percent * 100, message
  158.         sys.stdout.flush()
  159.  
  160.     
  161.     def clear(self):
  162.         if self.fancy and not (self.cleared):
  163.             sys.stdout.write(self.term.BOL + self.term.CLEAR_EOL + self.term.UP + self.term.CLEAR_EOL + self.term.UP + self.term.CLEAR_EOL)
  164.             self.cleared = 1
  165.         
  166.  
  167.  
  168.