4 years ago
[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()