gtkpygments.py

4 years ago

author
mitsuhiko
date
Wed May 30 08:21:46 2007 +0200
branch
mitsuhiko
changeset 56
28ea0acf86de
child 57
47950bc0633a
permissions
-rw-r--r--

[svn] added gtkpygments

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 import pygtk
     4 pygtk.require('2.0')
     5 import gtk
     6 import pango
     7 from pygments.lexers import PythonLexer
     8 from pygments.styles.pastie import PastieStyle
    11 STYLE = PastieStyle
    12 f = file(__file__)
    13 try:
    14     SOURCE = f.read()
    15 finally:
    16     f.close()
    19 class GTKPygments(gtk.Window):
    21     def __init__(self):
    22         super(GTKPygments, self).__init__()
    23         self.set_title('GTK Pygments')
    25         win = gtk.ScrolledWindow()
    26         self.add(win)
    27         self.textview = gtk.TextView()
    28         win.add(self.textview)
    29         buf = gtk.TextBuffer()
    31         styles = {}
    32         for token, value in PythonLexer().get_tokens(SOURCE):
    33             while not STYLE.styles_token(token) and token.parent:
    34                 token = token.parent
    35             if token not in styles:
    36                 styles[token] = buf.create_tag()
    37             start = buf.get_end_iter()
    38             buf.insert_with_tags(start, value.encode('utf-8'), styles[token])
    40         for token, tag in styles.iteritems():
    41             style = STYLE.style_for_token(token)
    42             if style['bgcolor']:
    43                 tag.set_property('background', '#' + style['bgcolor'])
    44             if style['color']:
    45                 tag.set_property('foreground', '#' + style['color'])
    46             if style['bold']:
    47                 tag.set_property('weight', pango.WEIGHT_BOLD)
    48             if style['italic']:
    49                 tag.set_property('style', pango.STYLE_ITALIC)
    50             if style['underline']:
    51                 tag.set_property('underline', pango.UNDERLINE_SINGLE)
    53         self.connect('delete-event', lambda *a: gtk.main_quit())
    55         self.textview.set_buffer(buf)
    56         self.textview.set_editable(False)
    57         self.textview.modify_font(pango.FontDescription('monospace'))
    59         self.resize(800, 500)
    60         self.show_all()
    62     def run(self):
    63         gtk.main()
    66 if __name__ == '__main__':
    67     GTKPygments().run()

mercurial