home *** CD-ROM | disk | FTP | other *** search
Wrap
# Source Generated with Decompyle++ # File: in.pyc (Python 2.6) __all__ = [ 'ANSICodeColors', 'Parser'] _scheme_default = 'Linux' import cStringIO import keyword import os import optparse import string import sys import token import tokenize from IPython.ColorANSI import * _KEYWORD = token.NT_OFFSET + 1 _TEXT = token.NT_OFFSET + 2 Colors = TermColors NoColor = ColorScheme('NoColor', { token.NUMBER: Colors.NoColor, token.OP: Colors.NoColor, token.STRING: Colors.NoColor, tokenize.COMMENT: Colors.NoColor, token.NAME: Colors.NoColor, token.ERRORTOKEN: Colors.NoColor, _KEYWORD: Colors.NoColor, _TEXT: Colors.NoColor, 'normal': Colors.NoColor }) LinuxColors = ColorScheme('Linux', { token.NUMBER: Colors.LightCyan, token.OP: Colors.Yellow, token.STRING: Colors.LightBlue, tokenize.COMMENT: Colors.LightRed, token.NAME: Colors.White, token.ERRORTOKEN: Colors.Red, _KEYWORD: Colors.LightGreen, _TEXT: Colors.Yellow, 'normal': Colors.Normal }) LightBGColors = ColorScheme('LightBG', { token.NUMBER: Colors.Cyan, token.OP: Colors.Blue, token.STRING: Colors.Blue, tokenize.COMMENT: Colors.Red, token.NAME: Colors.Black, token.ERRORTOKEN: Colors.Red, _KEYWORD: Colors.Green, _TEXT: Colors.Blue, 'normal': Colors.Normal }) ANSICodeColors = ColorSchemeTable([ NoColor, LinuxColors, LightBGColors], _scheme_default) class Parser: def __init__(self, color_table = None, out = sys.stdout): if not color_table or color_table: pass self.color_table = ANSICodeColors self.out = out def format(self, raw, out = None, scheme = ''): return self.format2(raw, out, scheme)[0] def format2(self, raw, out = None, scheme = ''): string_output = 0 if out == 'str' and self.out == 'str' or isinstance(self.out, cStringIO.OutputType): out_old = self.out self.out = cStringIO.StringIO() string_output = 1 elif out is not None: self.out = out if scheme == 'NoColor': error = False self.out.write(raw) if string_output: return (raw, error) return (None, error) scheme == 'NoColor' colors = self.color_table[scheme].colors self.colors = colors self.raw = raw.expandtabs().rstrip() self.lines = [ 0, 0] pos = 0 raw_find = self.raw.find lines_append = self.lines.append while None: pos = raw_find('\n', pos) + 1 if not pos: break continue lines_append(len(self.raw)) self.pos = 0 text = cStringIO.StringIO(self.raw) error = False try: tokenize.tokenize(text.readline, self) except tokenize.TokenError: ex = None msg = ex[0] line = ex[1][0] self.out.write('%s\n\n*** ERROR: %s%s%s\n' % (colors[token.ERRORTOKEN], msg, self.raw[self.lines[line]:], colors.normal)) error = True self.out.write(colors.normal + '\n') if string_output: output = self.out.getvalue() self.out = out_old return (output, error) return (None, error) def __call__(self, toktype, toktext, .3, .4, line): (srow, scol) = .3 (erow, ecol) = .4 colors = self.colors owrite = self.out.write linesep = os.linesep oldpos = self.pos newpos = self.lines[srow] + scol self.pos = newpos + len(toktext) if toktype in [ token.NEWLINE, tokenize.NL]: owrite(linesep) return None if newpos > oldpos: owrite(self.raw[oldpos:newpos]) if toktype in [ token.INDENT, token.DEDENT]: self.pos = newpos return None if token.LPAR <= toktype and toktype <= token.OP: toktype = token.OP elif toktype == token.NAME and keyword.iskeyword(toktext): toktype = _KEYWORD color = colors.get(toktype, colors[_TEXT]) if linesep in toktext: toktext = toktext.replace(linesep, '%s%s%s' % (colors.normal, linesep, color)) owrite('%s%s%s' % (color, toktext, colors.normal)) def main(argv = None): 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.' parser = optparse.OptionParser(usage = usage_msg) newopt = parser.add_option newopt('-s', '--scheme', metavar = 'NAME', dest = 'scheme_name', action = 'store', choices = [ 'Linux', 'LightBG', 'NoColor'], default = _scheme_default, help = "give the color scheme to use. Currently only 'Linux' (default) and 'LightBG' and 'NoColor' are implemented (give without quotes)") (opts, args) = parser.parse_args(argv) if len(args) > 1: parser.error('you must give at most one filename.') if len(args) == 0: fname = '-' else: fname = args[0] if fname == '-': stream = sys.stdin else: stream = file(fname) parser = Parser() try: parser.format(stream.read(), scheme = opts.scheme_name) except IOError: msg = None if msg.args != (32, 'Broken pipe'): raise msg.args != (32, 'Broken pipe') finally: if stream is not sys.stdin: stream.close() if __name__ == '__main__': main()