Files
gajim-plugins/syntax_highlight/syntax_highlight.py
Daniel Brötzmann c60deaea19 [syntax_highlight] Fix deprecation warnings, fix pylint errors
This fixes some deprecation warnings related to Gtk.Color and restructures
code and formatting according to pylint suggestions
2019-05-08 11:53:13 +02:00

112 lines
4.0 KiB
Python

import logging
import sys
from gajim.plugins import GajimPlugin
from syntax_highlight.types import LineBreakOptions
from syntax_highlight.types import CodeMarkerOptions
from syntax_highlight.types import PLUGIN_INTERNAL_NONE_LEXER_ID
if sys.version_info >= (3, 4):
from importlib.util import find_spec as find_module
else:
from importlib import find_loader as find_module
PYGMENTS_MISSING = 'You are missing Python-Pygments.'
log = logging.getLogger('gajim.p.syntax_highlight')
def try_loading_pygments():
success = find_module('pygments') is not None
if success:
try:
from syntax_highlight.chat_syntax_highlighter import \
ChatSyntaxHighlighter
from syntax_highlight.plugin_config_dialog import \
SyntaxHighlighterPluginConfiguration
from syntax_highlight.plugin_config import SyntaxHighlighterConfig
global SyntaxHighlighterPluginConfiguration
global ChatSyntaxHighlighter
global SyntaxHighlighterConfig
success = True
log.debug("pygments loaded.")
except Exception as exception:
log.error("Import Error: %s.", exception)
success = False
return success
class SyntaxHighlighterPlugin(GajimPlugin):
def on_connect_with_chat_control(self, chat_control):
account = chat_control.contact.account.name
jid = chat_control.contact.jid
if account not in self.ccontrol:
self.ccontrol[account] = {}
self.ccontrol[account][jid] = ChatSyntaxHighlighter(
self.conf, chat_control.conv_textview)
def on_disconnect_from_chat_control(self, chat_control):
account = chat_control.contact.account.name
jid = chat_control.contact.jid
del self.ccontrol[account][jid]
def on_print_real_text(self, text_view, real_text, other_tags, graphics,
iterator, additional):
account = text_view.account
for jid in self.ccontrol[account]:
if self.ccontrol[account][jid].textview != text_view:
continue
self.ccontrol[account][jid].process_text(
real_text, other_tags, graphics, iterator, additional)
return
def try_init(self):
"""
Separating this part of the initialization from the init() method
allows repeating this step again, without reloading the plugin,
i.e. restarting Gajim for instance.
Doing so allows resolving the dependency issues without restart :)
"""
pygments_loaded = try_loading_pygments()
if not pygments_loaded:
return False
self.activatable = True
self.available_text = None
self.config_dialog = SyntaxHighlighterPluginConfiguration(self)
self.conf = SyntaxHighlighterConfig(self.config)
# The following initialization requires pygments to be available.
self.conf.init_pygments()
self.config_dialog = SyntaxHighlighterPluginConfiguration(self)
self.config_dialog.set_config(self.conf)
self.gui_extension_points = {
'chat_control_base': (
self.on_connect_with_chat_control,
self.on_disconnect_from_chat_control),
'print_real_text': (self.on_print_real_text, None), }
return True
def init(self):
self.ccontrol = {}
self.config_default_values = {
'default_lexer': (PLUGIN_INTERNAL_NONE_LEXER_ID, ''),
'line_break': (LineBreakOptions.MULTILINE, ''),
'style': ('default', ''),
'font': ('Monospace 10', ''),
'bgcolor': ('#ccc', ''),
'bgcolor_override': (True, ''),
'code_marker': (CodeMarkerOptions.AS_COMMENT, ''),
'pygments_path': (None, ''), }
is_initialized = self.try_init()
if not is_initialized:
self.activatable = False
self.available_text = PYGMENTS_MISSING
self.config_dialog = None