From 6a43559f4fb7542ed95968357fdc72abfd5e0bac Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Thu, 23 Nov 2017 12:10:39 +0000 Subject: Add a Markup plugin. --- slixmpp/plugins/xep_0394/stanza.py | 123 +++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 slixmpp/plugins/xep_0394/stanza.py (limited to 'slixmpp/plugins/xep_0394/stanza.py') diff --git a/slixmpp/plugins/xep_0394/stanza.py b/slixmpp/plugins/xep_0394/stanza.py new file mode 100644 index 00000000..f15a9ba1 --- /dev/null +++ b/slixmpp/plugins/xep_0394/stanza.py @@ -0,0 +1,123 @@ +""" + Slixmpp: The Slick XMPP Library + Copyright (C) 2017 Emmanuel Gil Peyrot + This file is part of Slixmpp. + + See the file LICENSE for copying permission. +""" + +from slixmpp.xmlstream import ElementBase, register_stanza_plugin, ET + + +class Markup(ElementBase): + namespace = 'urn:xmpp:markup:0' + name = 'markup' + plugin_attrib = 'markup' + + +class _FirstLevel(ElementBase): + namespace = 'urn:xmpp:markup:0' + interfaces = {'start', 'end'} + + def get_start(self): + return int(self._get_attr('start')) + + def set_start(self, value): + self._set_attr('start', '%d' % value) + + def get_end(self): + return int(self._get_attr('end')) + + def set_end(self, value): + self._set_attr('end', '%d' % value) + +class Span(_FirstLevel): + name = 'span' + plugin_attrib = 'span' + plugin_multi_attrib = 'spans' + interfaces = {'start', 'end', 'types'} + + def get_types(self): + types = [] + if self.xml.find('{urn:xmpp:markup:0}emphasis') is not None: + types.append('emphasis') + if self.xml.find('{urn:xmpp:markup:0}code') is not None: + types.append('code') + if self.xml.find('{urn:xmpp:markup:0}deleted') is not None: + types.append('deleted') + return types + + def set_types(self, value): + del self['types'] + for type_ in value: + if type_ == 'emphasis': + self.xml.append(ET.Element('{urn:xmpp:markup:0}emphasis')) + elif type_ == 'code': + self.xml.append(ET.Element('{urn:xmpp:markup:0}code')) + elif type_ == 'deleted': + self.xml.append(ET.Element('{urn:xmpp:markup:0}deleted')) + + def det_types(self): + for child in self.xml: + self.xml.remove(child) + + +class _SpanType(ElementBase): + namespace = 'urn:xmpp:markup:0' + + +class EmphasisType(_SpanType): + name = 'emphasis' + plugin_attrib = 'emphasis' + + +class CodeType(_SpanType): + name = 'code' + plugin_attrib = 'code' + + +class DeletedType(_SpanType): + name = 'deleted' + plugin_attrib = 'deleted' + + +class BlockCode(_FirstLevel): + name = 'bcode' + plugin_attrib = 'bcode' + plugin_multi_attrib = 'bcodes' + + +class List(_FirstLevel): + name = 'list' + plugin_attrib = 'list' + plugin_multi_attrib = 'lists' + interfaces = {'start', 'end', 'li'} + + +class Li(ElementBase): + namespace = 'urn:xmpp:markup:0' + name = 'li' + plugin_attrib = 'li' + plugin_multi_attrib = 'lis' + interfaces = {'start'} + + def get_start(self): + return int(self._get_attr('start')) + + def set_start(self, value): + self._set_attr('start', '%d' % value) + + +class BlockQuote(_FirstLevel): + name = 'bquote' + plugin_attrib = 'bquote' + plugin_multi_attrib = 'bquotes' + +register_stanza_plugin(Markup, Span, iterable=True) +register_stanza_plugin(Markup, BlockCode, iterable=True) +register_stanza_plugin(Markup, List, iterable=True) +register_stanza_plugin(Markup, BlockQuote, iterable=True) +register_stanza_plugin(Span, EmphasisType) +register_stanza_plugin(Span, CodeType) +register_stanza_plugin(Span, DeletedType) +register_stanza_plugin(List, Li, iterable=True) -- cgit v1.2.3