summaryrefslogtreecommitdiffstats
path: root/htmlbuffer.py
diff options
context:
space:
mode:
authorDavid Cantrell <dcantrell@redhat.com>2006-05-18 15:22:17 +0000
committerDavid Cantrell <dcantrell@redhat.com>2006-05-18 15:22:17 +0000
commit3154a627ba80a9c8dc1b7993d416f26db48e4ff9 (patch)
tree5e96f80e5530643f823c86aec600d47d098002b9 /htmlbuffer.py
parent8eab80c9f5dced25657ffcf7da99ff060d1ac20d (diff)
Old code go away.
Diffstat (limited to 'htmlbuffer.py')
-rw-r--r--htmlbuffer.py237
1 files changed, 0 insertions, 237 deletions
diff --git a/htmlbuffer.py b/htmlbuffer.py
deleted file mode 100644
index 8ba8a99f8..000000000
--- a/htmlbuffer.py
+++ /dev/null
@@ -1,237 +0,0 @@
-#
-# htmlbuffer.py - A quick hacked up HTML parser that creates a GtkTextBuffer
-# that resembles rendered HTML.
-#
-# Matt Wilson <msw@redhat.com>
-#
-# Copyright 2001-2002 Red Hat, Inc.
-#
-# This software may be freely redistributed under the terms of the GNU
-# library public license.
-#
-# You should have received a copy of the GNU Library Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-
-import HTMLParser
-import sys
-import gtk
-import pango
-import string
-import re
-
-class HTMLBuffer(HTMLParser.HTMLParser):
- ignoreTags = ('title',)
- noTagTags = ('html', 'head', 'span')
- newlineTags = ('p', 'h1', 'h2', 'h3')
- entityRefMap = { 'copy': unichr(0xA9),
- 'lt': '<',
- 'gt': '>',
- 'quot': '"',
- 'nbsp': ' '}
- whiteSpaceNuker = re.compile(r"""\s+""", re.MULTILINE)
- def __init__(self):
- self.buffer = gtk.TextBuffer(None)
- self.ignoreData = 0
- self.inList = 0
- self.inOList = 0
- self.pInListCounter = 0
- self.startOfP = 0
- self.lastTag = None
- self.lastDataEmpty = 0
- self.onBlankLine = 0
- HTMLParser.HTMLParser.__init__(self)
- if gtk.gdk.screen_width() >= 800:
- baseSize = 12
- else:
- baseSize = 10
-
- baseFont = 'sans'
-
- tag = self.buffer.create_tag('body')
- tag.set_property('font', '%s %d' % (baseFont, baseSize))
-
- tag = self.buffer.create_tag('tt')
- tag.set_property('font', 'Monospace %d' % (baseSize,))
-
- tag = self.buffer.create_tag('keycap')
- tag.set_property('font', 'Monospace %d' % (baseSize,))
-
- tag = self.buffer.create_tag('pre')
- tag.set_property('font', 'Monospace %d' % (baseSize,))
-
- tag = self.buffer.create_tag('a')
- tag.set_property('font', '%s %d' % (baseFont, baseSize))
-
- tag = self.buffer.create_tag('h1')
- tag.set_property('font', '%s %d' % (baseFont, baseSize + 10))
- tag.set_property('weight', pango.WEIGHT_BOLD)
-
- tag = self.buffer.create_tag('h2')
- tag.set_property('font', '%s %d' % (baseFont, baseSize + 6))
- tag.set_property('weight', pango.WEIGHT_BOLD)
-
- tag = self.buffer.create_tag('h3')
- tag.set_property('font', '%s %d' % (baseFont, baseSize + 4))
- tag.set_property('weight', pango.WEIGHT_BOLD)
-
- tag = self.buffer.create_tag('h4')
- tag.set_property('font', '%s %d' % (baseFont, baseSize + 1))
- tag.set_property('weight', pango.WEIGHT_BOLD)
-
- tag = self.buffer.create_tag('b')
- tag.set_property('weight', pango.WEIGHT_BOLD)
-
- tag = self.buffer.create_tag('i')
- tag.set_property('style', pango.STYLE_ITALIC)
-
- tag = self.buffer.create_tag('em')
- tag.set_property('style', pango.STYLE_ITALIC)
-
- tag = self.buffer.create_tag('sub')
- tag.set_property('rise', -2500)
-
- tag = self.buffer.create_tag('ul')
- tag.set_property('left-margin', 20)
-
- tag = self.buffer.create_tag('ol')
- tag.set_property('left-margin', 20)
-
- self.buffer.create_tag('p')
- self.buffer.create_tag('div')
- self.buffer.create_tag('li')
-
- self.iter = self.buffer.get_iter_at_offset(0)
- self.offsets = {}
-
- def get_buffer(self):
- iter = self.buffer.get_iter_at_offset(0)
- self.buffer.place_cursor(iter)
- return self.buffer
-
- def pushTag(self, tag, offset):
- if self.offsets.has_key(tag):
- self.offsets[tag].append(offset)
- else:
- self.offsets[tag] = [offset]
-
- def popTag(self, tag):
- if not self.offsets.has_key(tag):
- raise RuntimeError, "impossible"
- return self.offsets[tag].pop()
-
- # structure markup
- def handle_starttag(self, tag, attrs):
- if tag in self.ignoreTags:
- self.ignoreData += 1
- return
- if tag in self.noTagTags:
- return
- self.pushTag(tag, self.iter.get_offset())
- if tag == 'li':
- self.inList += 1
- if not self.inOList:
- self.buffer.insert(self.iter, u'\u2022 ')
- else:
- self.buffer.insert(self.iter, u'%d. ' %(self.inOList,))
- self.inOList += 1
- elif tag == 'p':
- self.startOfP = 1
- if self.inList:
- self.pInListCounter += 1
- elif tag == "ol":
- self.inOList = 1
-
- def handle_endtag(self, tag):
- self.lastTag = tag
- if tag in self.ignoreTags:
- self.ignoreData -= 1
- return
- if tag == 'li':
- self.inList -= 1
- self.pInListCounter = 0
- elif tag == "ol":
- self.inOList = 0
-
- if tag in self.noTagTags:
- return
- offset = self.popTag(tag)
- current = self.iter.get_offset()
- if tag in self.newlineTags and offset != current:
- if tag == 'p' and self.inList:
- # for the first <li> entry with a <p> following, break
- # before the bullet
- if self.pInListCounter == 1:
- if self.inOList:
- offset -= 2
- offset -= 2
- # put a newline at the beginning
- start = self.buffer.get_iter_at_offset(offset)
- self.buffer.insert(start, '\n')
- offset += 1
- current += 1
- # put a newline at the end
- start = self.buffer.get_iter_at_offset(current)
- self.buffer.insert(start, '\n')
- current += 1
- self.iter = self.buffer.get_iter_at_offset(current)
- start = self.buffer.get_iter_at_offset(offset)
- self.buffer.apply_tag_by_name(tag, start, self.iter)
-
- # all other markup
- def handle_data(self, data):
- if self.ignoreData == 0:
- data = data.replace('\n', ' ')
- data = self.whiteSpaceNuker.sub(' ', data)
- if self.startOfP:
- if data.startswith(' '):
- data = data[1:]
- self.startOfP = 0
- # print '|%s|' % (data,)
- if data:
- self.buffer.insert(self.iter, data)
- self.onBlankLine = 0
- else:
- self.lastDataEmpty = 1
-
- def handle_charref(self, name):
- if self.ignoreData == 0:
- self.buffer.insert(self.iter, unichr(int(name)))
-
- def handle_entityref(self, name):
- if self.ignoreData != 0:
- return
- if self.entityRefMap.has_key(name):
- self.buffer.insert(self.iter, self.entityRefMap[name])
- else:
- pass
- #print "warning: unhandled entity", name
-
-if __name__ == '__main__':
- def quit(*args):
- gtk.main_quit()
-
- import sys
- f = open(sys.argv[1], 'r')
- buffer = HTMLBuffer()
- buffer.feed(f.read())
- buffer.close()
-
- win = gtk.Window()
- view = gtk.TextView()
- view.set_buffer(buffer.get_buffer())
- view.set_property("editable", False)
- view.set_property("cursor_visible", False)
- view.set_wrap_mode(gtk.WRAP_WORD)
- sw = gtk.ScrolledWindow()
- sw.add(view)
- win = gtk.Window()
- win.connect('destroy', quit)
- win.add(sw)
- win.show_all()
- win.set_size_request(600, 600)
- gtk.threads_enter()
- gtk.main()
- gtk.threads_leave()
-