# HG changeset patch # User Goffi # Date 1499972031 -7200 # Node ID fe922e6fabd4640c8b23427afbdad09ecc51ea91 # Parent 2dae79990122dac9363efaf630576052e6cdcb2c plugin text syntaxes: various improvments: - syntaxes and default_syntax are now class attribute instead of members of params_data - removed local exception UnknownSyntax in favor of exceptions.NotFound - syntaxes are now saved with a key which is name in lower case and stripped, unmodified name is put in syntax's data - new getSyntax (syntaxGet in bridge) method to get syntax key and raise an error if not found. Can be used by frontends to check that a syntax is known. diff -r 2dae79990122 -r fe922e6fabd4 src/plugins/plugin_misc_text_syntaxes.py --- a/src/plugins/plugin_misc_text_syntaxes.py Wed Jul 12 19:06:28 2017 +0200 +++ b/src/plugins/plugin_misc_text_syntaxes.py Thu Jul 13 20:53:51 2017 +0200 @@ -63,8 +63,6 @@ C.PI_DESCRIPTION: _("""Management of various text syntaxes (XHTML-IM, Markdown, etc)""") } -class UnknownSyntax(Exception): - pass class TextSyntaxes(object): """ Text conversion class @@ -77,6 +75,8 @@ SYNTAX_XHTML = _SYNTAX_XHTML SYNTAX_MARKDOWN = "markdown" SYNTAX_TEXT = "text" + syntaxes = {} + default_syntax = SYNTAX_XHTML params = """ @@ -95,13 +95,12 @@ 'category_label': _(CATEGORY), 'name': NAME, 'label': _(NAME), - 'syntaxes': {}, + 'syntaxes': syntaxes, } def __init__(self, host): log.info(_("Text syntaxes plugin initialization")) self.host = host - self.syntaxes = {} self.addSyntax(self.SYNTAX_XHTML, lambda xhtml: defer.succeed(xhtml), lambda xhtml: defer.succeed(xhtml), TextSyntaxes.OPT_NO_THREAD) # TODO: text => XHTML should add to url like in frontends @@ -120,10 +119,12 @@ log.info(u"You can download/install them from https://pythonhosted.org/Markdown/ and https://github.com/Alir3z4/html2text/") host.bridge.addMethod("syntaxConvert", ".plugin", in_sign='sssbs', out_sign='s', async=True, method=self.convert) + host.bridge.addMethod("syntaxGet", ".plugin", in_sign='s', out_sign='s', + method=self.getSyntax) def _updateParamOptions(self): - data_synt = TextSyntaxes.params_data['syntaxes'] - default_synt = TextSyntaxes.params_data.get('default', _SYNTAX_XHTML) + data_synt = TextSyntaxes.syntaxes + default_synt = TextSyntaxes.default_syntax syntaxes = [] for syntax in data_synt.keys(): @@ -216,13 +217,17 @@ if syntax_from == _SYNTAX_CURRENT: syntax_from = self.getCurrentSyntax(profile) + else: + syntax_from = syntax_from.lower().strip() if syntax_to == _SYNTAX_CURRENT: syntax_to = self.getCurrentSyntax(profile) - syntaxes = TextSyntaxes.params_data['syntaxes'] + else: + syntax_to = syntax_to.lower().strip() + syntaxes = TextSyntaxes.syntaxes if syntax_from not in syntaxes: - raise UnknownSyntax(syntax_from) + raise exceptions.NotFound(syntax_from) if syntax_to not in syntaxes: - raise UnknownSyntax(syntax_to) + raise exceptions.NotFound(syntax_to) d = None if TextSyntaxes.OPT_NO_THREAD in syntaxes[syntax_from]["flags"]: @@ -259,18 +264,29 @@ if TextSyntaxes.OPT_HIDDEN in flags and TextSyntaxes.OPT_DEFAULT in flags: raise ValueError(u"{} and {} are mutually exclusive".format(TextSyntaxes.OPT_HIDDEN, TextSyntaxes.OPT_DEFAULT)) - syntaxes = TextSyntaxes.params_data['syntaxes'] - if name in syntaxes: - raise exceptions.ConflictError(u"This syntax name already exists: {}".format(name)) - syntaxes[name] = {"to": to_xhtml_cb, "from": from_xhtml_cb, "flags": flags} + syntaxes = TextSyntaxes.syntaxes + key = name.lower().strip() + if key in syntaxes: + raise exceptions.ConflictError(u"This syntax key already exists: {}".format(key)) + syntaxes[key] = {"name": name, "to": to_xhtml_cb, "from": from_xhtml_cb, "flags": flags} if TextSyntaxes.OPT_DEFAULT in flags: - TextSyntaxes.params_data['default'] = name + TextSyntaxes.default_syntaxe = key self._updateParamOptions() - def _removeMarkups(self, xhtml): + def getSyntax(self, name): + """get syntax key corresponding to a name + + @raise exceptions.NotFound: syntax doesn't exist """ - Remove XHTML markups from the given string. + key = name.lower().strip() + if key in self.syntaxes: + return key + raise exceptions.NotFound + + def _removeMarkups(self, xhtml): + """Remove XHTML markups from the given string. + @param xhtml: the XHTML string to be cleaned @return: the cleaned string """