diff options
-rw-r--r-- | plugins/code.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/plugins/code.py b/plugins/code.py new file mode 100644 index 00000000..44afd3d8 --- /dev/null +++ b/plugins/code.py @@ -0,0 +1,44 @@ +""" +This plugin adds a :term:`/code` command, to send syntax highlighted snippets +of code using pygments and XHTML-IM (XEP-0071). + +Install +------- + +Either use your distribution tools to install python3-pygments or equivalent, +or run: + +.. code-block:: shell + + pip install --user pygments + +Usage +----- + +.. glossary:: + + /code <language> <snippet> + + Run this command to send the <snippet> of code, syntax highlighted + using pygments’s <language> lexer. +""" + +from plugin import BasePlugin + +from pygments import highlight +from pygments.lexers import get_lexer_by_name +from pygments.formatters import HtmlFormatter +FORMATTER = HtmlFormatter(noclasses=True) + +class Plugin(BasePlugin): + def init(self): + self.api.add_command('code', self.command_code, + usage='<message>', + short='Sends syntax-highlighted code', + help='Sends syntax-highlighted code in the current tab') + + def command_code(self, args): + language, code = args.split(None, 1) + lexer = get_lexer_by_name(language) + room = self.api.current_tab() + room.command_xhtml(highlight(code, lexer, FORMATTER).strip().replace('\n</pre>', '</pre>')) |