gtkpygments.py

21 months ago

author
Georg Brandl <georg@python.org>
date
Mon Aug 23 17:07:30 2010 +0000
changeset 354
98ce1ce17c7c
parent 56
28ea0acf86de
permissions
-rw-r--r--

Remove unnecessary step.

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

mercurial