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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __all__ = [
  5.     'ANSICodeColors',
  6.     'Parser']
  7. _scheme_default = 'Linux'
  8. import cStringIO
  9. import keyword
  10. import os
  11. import optparse
  12. import string
  13. import sys
  14. import token
  15. import tokenize
  16. from IPython.ColorANSI import *
  17. _KEYWORD = token.NT_OFFSET + 1
  18. _TEXT = token.NT_OFFSET + 2
  19. Colors = TermColors
  20. NoColor = ColorScheme('NoColor', {
  21.     token.NUMBER: Colors.NoColor,
  22.     token.OP: Colors.NoColor,
  23.     token.STRING: Colors.NoColor,
  24.     tokenize.COMMENT: Colors.NoColor,
  25.     token.NAME: Colors.NoColor,
  26.     token.ERRORTOKEN: Colors.NoColor,
  27.     _KEYWORD: Colors.NoColor,
  28.     _TEXT: Colors.NoColor,
  29.     'normal': Colors.NoColor })
  30. LinuxColors = ColorScheme('Linux', {
  31.     token.NUMBER: Colors.LightCyan,
  32.     token.OP: Colors.Yellow,
  33.     token.STRING: Colors.LightBlue,
  34.     tokenize.COMMENT: Colors.LightRed,
  35.     token.NAME: Colors.White,
  36.     token.ERRORTOKEN: Colors.Red,
  37.     _KEYWORD: Colors.LightGreen,
  38.     _TEXT: Colors.Yellow,
  39.     'normal': Colors.Normal })
  40. LightBGColors = ColorScheme('LightBG', {
  41.     token.NUMBER: Colors.Cyan,
  42.     token.OP: Colors.Blue,
  43.     token.STRING: Colors.Blue,
  44.     tokenize.COMMENT: Colors.Red,
  45.     token.NAME: Colors.Black,
  46.     token.ERRORTOKEN: Colors.Red,
  47.     _KEYWORD: Colors.Green,
  48.     _TEXT: Colors.Blue,
  49.     'normal': Colors.Normal })
  50. ANSICodeColors = ColorSchemeTable([
  51.     NoColor,
  52.     LinuxColors,
  53.     LightBGColors], _scheme_default)
  54.  
  55. class Parser:
  56.     
  57.     def __init__(self, color_table = None, out = sys.stdout):
  58.         if not color_table or color_table:
  59.             pass
  60.         self.color_table = ANSICodeColors
  61.         self.out = out
  62.  
  63.     
  64.     def format(self, raw, out = None, scheme = ''):
  65.         return self.format2(raw, out, scheme)[0]
  66.  
  67.     
  68.     def format2(self, raw, out = None, scheme = ''):
  69.         string_output = 0
  70.         if out == 'str' and self.out == 'str' or isinstance(self.out, cStringIO.OutputType):
  71.             out_old = self.out
  72.             self.out = cStringIO.StringIO()
  73.             string_output = 1
  74.         elif out is not None:
  75.             self.out = out
  76.         
  77.         if scheme == 'NoColor':
  78.             error = False
  79.             self.out.write(raw)
  80.             if string_output:
  81.                 return (raw, error)
  82.             return (None, error)
  83.         scheme == 'NoColor'
  84.         colors = self.color_table[scheme].colors
  85.         self.colors = colors
  86.         self.raw = raw.expandtabs().rstrip()
  87.         self.lines = [
  88.             0,
  89.             0]
  90.         pos = 0
  91.         raw_find = self.raw.find
  92.         lines_append = self.lines.append
  93.         while None:
  94.             pos = raw_find('\n', pos) + 1
  95.             if not pos:
  96.                 break
  97.             
  98.             continue
  99.             lines_append(len(self.raw))
  100.             self.pos = 0
  101.             text = cStringIO.StringIO(self.raw)
  102.             error = False
  103.             
  104.             try:
  105.                 tokenize.tokenize(text.readline, self)
  106.             except tokenize.TokenError:
  107.                 ex = None
  108.                 msg = ex[0]
  109.                 line = ex[1][0]
  110.                 self.out.write('%s\n\n*** ERROR: %s%s%s\n' % (colors[token.ERRORTOKEN], msg, self.raw[self.lines[line]:], colors.normal))
  111.                 error = True
  112.  
  113.             self.out.write(colors.normal + '\n')
  114.             if string_output:
  115.                 output = self.out.getvalue()
  116.                 self.out = out_old
  117.                 return (output, error)
  118.             return (None, error)
  119.  
  120.     
  121.     def __call__(self, toktype, toktext, .3, .4, line):
  122.         (srow, scol) = .3
  123.         (erow, ecol) = .4
  124.         colors = self.colors
  125.         owrite = self.out.write
  126.         linesep = os.linesep
  127.         oldpos = self.pos
  128.         newpos = self.lines[srow] + scol
  129.         self.pos = newpos + len(toktext)
  130.         if toktype in [
  131.             token.NEWLINE,
  132.             tokenize.NL]:
  133.             owrite(linesep)
  134.             return None
  135.         if newpos > oldpos:
  136.             owrite(self.raw[oldpos:newpos])
  137.         
  138.         if toktype in [
  139.             token.INDENT,
  140.             token.DEDENT]:
  141.             self.pos = newpos
  142.             return None
  143.         if token.LPAR <= toktype and toktype <= token.OP:
  144.             toktype = token.OP
  145.         elif toktype == token.NAME and keyword.iskeyword(toktext):
  146.             toktype = _KEYWORD
  147.         
  148.         color = colors.get(toktype, colors[_TEXT])
  149.         if linesep in toktext:
  150.             toktext = toktext.replace(linesep, '%s%s%s' % (colors.normal, linesep, color))
  151.         
  152.         owrite('%s%s%s' % (color, toktext, colors.normal))
  153.  
  154.  
  155.  
  156. def main(argv = None):
  157.     usage_msg = '%prog [options] [filename]\n\nColorize a python file or stdin using ANSI color escapes and print to stdout.\nIf no filename is given, or if filename is -, read standard input.'
  158.     parser = optparse.OptionParser(usage = usage_msg)
  159.     newopt = parser.add_option
  160.     newopt('-s', '--scheme', metavar = 'NAME', dest = 'scheme_name', action = 'store', choices = [
  161.         'Linux',
  162.         'LightBG',
  163.         'NoColor'], default = _scheme_default, help = "give the color scheme to use. Currently only 'Linux' (default) and 'LightBG' and 'NoColor' are implemented (give without quotes)")
  164.     (opts, args) = parser.parse_args(argv)
  165.     if len(args) > 1:
  166.         parser.error('you must give at most one filename.')
  167.     
  168.     if len(args) == 0:
  169.         fname = '-'
  170.     else:
  171.         fname = args[0]
  172.     if fname == '-':
  173.         stream = sys.stdin
  174.     else:
  175.         stream = file(fname)
  176.     parser = Parser()
  177.     
  178.     try:
  179.         parser.format(stream.read(), scheme = opts.scheme_name)
  180.     except IOError:
  181.         msg = None
  182.         if msg.args != (32, 'Broken pipe'):
  183.             raise 
  184.         msg.args != (32, 'Broken pipe')
  185.     finally:
  186.         if stream is not sys.stdin:
  187.             stream.close()
  188.         
  189.  
  190.  
  191. if __name__ == '__main__':
  192.     main()
  193.  
  194.