diff --git a/plugins/acronyms_expander.py b/plugins/acronyms_expander.py new file mode 100644 index 000000000..43a33a8d2 --- /dev/null +++ b/plugins/acronyms_expander.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +## This file is part of Gajim. +## +## Gajim is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation; version 3 only. +## +## Gajim is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Gajim. If not, see . +## + +''' +Acronyms expander plugin. + +:author: Mateusz Biliński +:since: 06/10/2008 +:copyright: Copyright (2008) Mateusz Biliński +:license: GPL +''' + +import sys + +import gtk + +from plugins import GajimPlugin +from plugins.helpers import log, log_calls + +class AcronymsExpanderPlugin(GajimPlugin): + name = u'Acronyms Expander' + short_name = u'acronyms_expander' + version = u'0.1' + description = u'''Replaces acronyms (or other strings) with given expansions/substitutes.''' + authors = [u'Mateusz Biliński '] + homepage = u'http://blog.bilinski.it' + + @log_calls('AcronymsExpanderPlugin') + def __init__(self): + super(AcronymsExpanderPlugin, self).__init__() + + self.__class__.gui_extension_points = { + 'chat_control_base' : (self.connect_with_chat_control_base, + self.disconnect_from_chat_control_base) + } + + self.INVOKER = ' ' + self.ACRONYMS = {'RTFM' : 'Read The Friendly Manual', + '/slap' : '/me slaps', + 'PS-' : 'plug-in system', + 'G-' : 'Gajim', + 'GNT-' : 'http://trac.gajim.org/newticket', + 'GW-' : 'http://trac.gajim.org/', + 'GTS-' : 'http://trac.gajim.org/report' + } + + @log_calls('AcronymsExpanderPlugin') + def textbuffer_live_acronym_expander(self, tb): + """ + @param tb gtk.TextBuffer + """ + assert isinstance(tb,gtk.TextBuffer) + t = tb.get_text(tb.get_start_iter(), tb.get_end_iter()) + log.debug('%s %d'%(t, len(t))) + if t and t[-1] == self.INVOKER: + log.debug("changing msg text") + base,sep,head=t[:-1].rpartition(self.INVOKER) + log.debug('%s | %s | %s'%(base, sep, head)) + if head in self.ACRONYMS: + head = self.ACRONYMS[head] + log.debug("head: %s"%(head)) + t = "".join((base, sep, head, self.INVOKER)) + log.debug("turning off notify") + tb.freeze_notify() + log.debug("setting text: '%s'"%(t)) + tb.set_text(t) + log.debug("turning on notify") + tb.thaw_notify() + + @log_calls('AcronymsExpanderPlugin') + def connect_with_chat_control_base(self, chat_control): + d = {} + tv = chat_control.msg_textview + tb = tv.get_buffer() + h_id = tb.connect('changed', self.textbuffer_live_acronym_expander) + d['h_id'] = h_id + + chat_control.acronyms_expander_plugin_data = d + + return True + + @log_calls('AcronymsExpanderPlugin') + def disconnect_from_chat_control_base(self, chat_control): + d = chat_control.acronyms_expander_plugin_data + tv = chat_control.msg_textview + tv.get_buffer().disconnect(d['h_id']) + \ No newline at end of file diff --git a/src/chat_control.py b/src/chat_control.py index ecc817bf6..c0859fb0f 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -291,6 +291,8 @@ class ChatControlBase(MessageControl): self.user_nick = None self.smooth = True + + gajim.plugin_manager.gui_extension_point('chat_control_base', self) def on_msg_textview_populate_popup(self, textview, menu): '''we override the default context menu and we prepend an option to switch languages'''