update latex plugin to py3

This commit is contained in:
Yann Leboulanger
2013-01-29 12:28:48 +01:00
parent aa3fc9bfea
commit dccc279d6f
3 changed files with 36 additions and 31 deletions

View File

@@ -1 +1 @@
from latex import LatexPlugin from .latex import LatexPlugin

View File

@@ -23,8 +23,11 @@
from threading import Thread from threading import Thread
import os import os
import gtk from gi.repository import Gtk
import gobject from gi.repository import Gdk
from gi.repository import GdkPixbuf
from gi.repository import Pango
from gi.repository import GObject
from tempfile import mkstemp, mkdtemp from tempfile import mkstemp, mkdtemp
import random import random
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
@@ -35,7 +38,7 @@ from plugins import GajimPlugin
from plugins.helpers import log, log_calls from plugins.helpers import log, log_calls
from plugins.gui import GajimPluginConfigDialog from plugins.gui import GajimPluginConfigDialog
gtk.gdk.threads_init() # for gtk.gdk.thread_[enter|leave]() Gdk.threads_init()
def latex_template(code): def latex_template(code):
return '''\\documentclass[12pt]{article} return '''\\documentclass[12pt]{article}
@@ -73,7 +76,7 @@ def try_run(argv, directory):
out = p.communicate()[0] out = p.communicate()[0]
log.info(out) log.info(out)
return p.wait() return p.wait()
except Exception, e: except Exception as e:
return _('Error executing "%(command)s": %(error)s') % { return _('Error executing "%(command)s": %(error)s') % {
'command': " ".join(argv), 'command': " ".join(argv),
'error': helpers.decode_string(str(e))} 'error': helpers.decode_string(str(e))}
@@ -114,8 +117,8 @@ class LatexRenderer(Thread):
self.show_image() self.show_image()
else: else:
self.show_error(_('There are bad commands!')) self.show_error(_('There are bad commands!'))
except: except Exception:
pass self.show_error(_('Error processing LaTeX'))
finally: finally:
self.buffer_.delete_mark(self.mark) self.buffer_.delete_mark(self.mark)
@@ -123,16 +126,16 @@ class LatexRenderer(Thread):
""" """
String -> TextBuffer String -> TextBuffer
""" """
gtk.gdk.threads_enter() Gdk.threads_enter()
iter_mark = self.buffer_.get_iter_at_mark(self.mark) iter_mark = self.buffer_.get_iter_at_mark(self.mark)
iter_end = iter_mark.copy().forward_search(_('Processing LaTeX'), iter_end = iter_mark.copy().forward_search(_('Processing LaTeX'),
gtk.TEXT_SEARCH_TEXT_ONLY)[1] Gtk.TextSearchFlags.TEXT_ONLY, None)[1]
self.buffer_.delete(iter_mark, iter_end) self.buffer_.delete(iter_mark, iter_end)
pixbuf = self.widget.render_icon(gtk.STOCK_STOP, gtk.ICON_SIZE_BUTTON) pixbuf = self.widget.render_icon(Gtk.STOCK_STOP, Gtk.IconSize.BUTTON)
self.buffer_.insert_pixbuf(iter_end, pixbuf) self.buffer_.insert_pixbuf(iter_end, pixbuf)
self.buffer_.insert(iter_end, message) self.buffer_.insert(iter_end, message)
gtk.gdk.threads_leave() Gdk.threads_leave()
@log_calls('LatexRenderer') @log_calls('LatexRenderer')
def show_image(self): def show_image(self):
@@ -207,21 +210,21 @@ class LatexRenderer(Thread):
log.debug('Loading PNG %s' % tmppng) log.debug('Loading PNG %s' % tmppng)
try: try:
gtk.gdk.threads_enter() Gdk.threads_enter()
pixbuf = gtk.gdk.pixbuf_new_from_file(tmppng) pixbuf = GdkPixbuf.Pixbuf.new_from_file(tmppng)
log.debug('png loaded') log.debug('png loaded')
iter_mark = self.buffer_.get_iter_at_mark(self.mark) iter_mark = self.buffer_.get_iter_at_mark(self.mark)
iter_end = iter_mark.copy().forward_search('Processing LaTeX', iter_end = iter_mark.copy().forward_search('Processing LaTeX',
gtk.TEXT_SEARCH_TEXT_ONLY)[1] Gtk.TextSearchFlags.TEXT_ONLY, None)[1]
log.debug('Delete old Text') log.debug('Delete old Text')
self.buffer_.delete(iter_mark, iter_end) self.buffer_.delete(iter_mark, iter_end)
log.debug('Insert pixbuf') log.debug('Insert pixbuf')
self.buffer_.insert_pixbuf(iter_end, pixbuf) self.buffer_.insert_pixbuf(iter_end, pixbuf)
except gobject.GError: except GObject.GError:
self.show_error(_('Cannot open %s for reading') % tmppng) self.show_error(_('Cannot open %s for reading') % tmppng)
log.debug('Cant open %s for reading' % tmppng) log.debug('Cant open %s for reading' % tmppng)
finally: finally:
gtk.gdk.threads_leave() Gdk.threads_leave()
os.remove(tmppng) os.remove(tmppng)
def check_code(self): def check_code(self):
@@ -235,11 +238,11 @@ class LatexPluginConfiguration(GajimPluginConfigDialog):
def init(self): def init(self):
self.GTK_BUILDER_FILE_PATH = self.plugin.local_file_path( self.GTK_BUILDER_FILE_PATH = self.plugin.local_file_path(
'config_dialog.ui') 'config_dialog.ui')
self.xml = gtk.Builder() self.xml = Gtk.Builder()
self.xml.set_translation_domain('gajim_plugins') self.xml.set_translation_domain('gajim_plugins')
self.xml.add_objects_from_file(self.GTK_BUILDER_FILE_PATH, ['vbox1']) self.xml.add_objects_from_file(self.GTK_BUILDER_FILE_PATH, ['vbox1'])
hbox = self.xml.get_object('vbox1') hbox = self.xml.get_object('vbox1')
self.child.pack_start(hbox) self.get_child().pack_start(hbox, False, False, 0)
self.result_label = self.xml.get_object('result_label') self.result_label = self.xml.get_object('result_label')
self.xml.connect_signals(self) self.xml.connect_signals(self)
@@ -340,16 +343,17 @@ class LatexPlugin(GajimPlugin):
self.activatable = False self.activatable = False
self.available_text += _('. Install %s') % pkgs self.available_text += _('. Install %s') % pkgs
def textview_event_after(self, tag, widget, event, iter): def textview_event_after(self, tag, widget, event, iter_):
""" """
start rendering if clicked on a link start rendering if clicked on a link
""" """
if tag.get_property('name') != 'latex' or \ if tag.get_property('name') != 'latex' or \
event.type != gtk.gdk.BUTTON_PRESS: return event.type != Gdk.EventType.BUTTON_PRESS:
dollar_start, iter_start = iter.backward_search('$$', return
gtk.TEXT_SEARCH_TEXT_ONLY) dollar_start, iter_start = iter_.backward_search('$$',
iter_end, dollar_end = iter.forward_search('$$', Gtk.TextSearchFlags.TEXT_ONLY, None)
gtk.TEXT_SEARCH_TEXT_ONLY) iter_end, dollar_end = iter_.forward_search('$$',
Gtk.TextSearchFlags.TEXT_ONLY, None)
LatexRenderer(dollar_start, dollar_end, widget.get_buffer(), widget, LatexRenderer(dollar_start, dollar_end, widget.get_buffer(), widget,
self.config['png_dpi']) self.config['png_dpi'])
@@ -363,14 +367,15 @@ class LatexPlugin(GajimPlugin):
newlist.append( [ list[i], list[i+1], ] ) newlist.append( [ list[i], list[i+1], ] )
return newlist return newlist
assert isinstance(tb, gtk.TextBuffer) assert isinstance(tb, Gtk.TextBuffer)
start_iter = tb.get_start_iter() start_iter = tb.get_start_iter()
points = [] points = []
tuple_found = start_iter.forward_search('$$', gtk.TEXT_SEARCH_TEXT_ONLY) tuple_found = start_iter.forward_search('$$',
Gtk.TextSearchFlags.TEXT_ONLY, None)
while tuple_found != None: while tuple_found != None:
points.append(tuple_found) points.append(tuple_found)
tuple_found = tuple_found[1].forward_search('$$', tuple_found = tuple_found[1].forward_search('$$',
gtk.TEXT_SEARCH_TEXT_ONLY) Gtk.TextSearchFlags.TEXT_ONLY, None)
for pair in split_list(points): for pair in split_list(points):
tb.apply_tag_by_name('latex', pair[0][1], pair[1][0]) tb.apply_tag_by_name('latex', pair[0][1], pair[1][0])
@@ -380,9 +385,9 @@ class LatexPlugin(GajimPlugin):
tv = chat_control.conv_textview.tv tv = chat_control.conv_textview.tv
tb = tv.get_buffer() tb = tv.get_buffer()
self.latex_tag = gtk.TextTag('latex') self.latex_tag = Gtk.TextTag.new('latex')
self.latex_tag.set_property('foreground', 'blue') self.latex_tag.set_property('foreground', 'blue')
self.latex_tag.set_property('underline', 'single') self.latex_tag.set_property('underline', Pango.Underline.SINGLE)
d['tag_id'] = self.latex_tag.connect('event', self.textview_event_after) d['tag_id'] = self.latex_tag.connect('event', self.textview_event_after)
tb.get_tag_table().add(self.latex_tag) tb.get_tag_table().add(self.latex_tag)

View File

@@ -1,9 +1,9 @@
[info] [info]
name: Latex name: Latex
short_name: latex short_name: latex
version: 0.2.1 version: 0.3
description: render received latex code description: render received latex code
authors: Yves Fischer <yvesf@xapek.org> authors: Yves Fischer <yvesf@xapek.org>
Yann Leboulanger <asterix@lagaule.org> Yann Leboulanger <asterix@lagaule.org>
homepage: http://trac-plugins.gajim.org/wiki/LatexPlugin homepage: http://trac-plugins.gajim.org/wiki/LatexPlugin
max_gajim_version: 0.15.9 min_gajim_version: 0.15.10