## $Id: html.py,v 1.8 2001/09/26 14:29:09 kjetilja Exp $ ## System modules from gtk import * from gnome.ui import * import gnome.mime from gtkhtml import * import os, string, re ## Error messages from the GUI err1 = "No external viewer defined for text/html" ## Grab URLs and make them clickable for regular mails tags = re.compile('()|(http://[\w\.\S]+)', re.I|re.M) ## Grab cited lines and transform them to make them easier to read cites = re.compile('^>(.*)$', re.M) ## ## ## HTML message rendering window class ## ## class HtmlWindow(GtkHTML): def __init__(self, msgwin): GtkHTML.__init__(self) self.show() self.connect('link_clicked', self.load_uri) self.connect('on_url', self.anchor_track) self.handle = None self.msgwin = msgwin self.load_empty() def insert(self, body, type): def uri(match): m1, m2 = match.group(2), match.group(3) m = m1 or m2 return "%s" % (m, m) def cite(match): # This should probably be configurable later on return ">%s" % match.group(1) if not self.handle: self.handle = self.begin() else: self.write(self.handle, '
') body = cites.sub(cite, body) if type != 'text/html': body = tags.sub(uri, body) body = '
%s
' % body self.write(self.handle, body) def end_insert(self): if self.handle != None: self.end(self.handle, HTML_STREAM_OK) self.handle = None def anchor_track(self, html, uri): if uri != None: self.msgwin.fld.appbar.set_status(uri) else: self.msgwin.fld.appbar.set_status('') def load_uri(self, html, url): gtypekeys = gnome.mime.get_keys('text/html') if 'open' in gtypekeys: prog = gnome.mime.program('text/html') if not prog: w = GnomeErrorDialog(err1) w.show() return else: w = GnomeErrorDialog(err1) w.show() return prog = string.split(prog, ' ')[0] cmd = prog + " '" + url + "' 2>/dev/null &" os.system(cmd)