diff --git a/picard/script/__init__.py b/picard/script/__init__.py index f056c5af0..8d9ec9ccf 100644 --- a/picard/script/__init__.py +++ b/picard/script/__init__.py @@ -4,7 +4,7 @@ # # Copyright (C) 2006-2009, 2012 Lukáš Lalinský # Copyright (C) 2007 Javier Kohen -# Copyright (C) 2008-2011, 2014-2015, 2018-2021, 2023 Philipp Wolfer +# Copyright (C) 2008-2011, 2014-2015, 2018-2021, 2023-2024 Philipp Wolfer # Copyright (C) 2009 Carlin Mangar # Copyright (C) 2009 Nikolai Prokoschenko # Copyright (C) 2011-2012 Michael Wiencek @@ -70,18 +70,26 @@ class ScriptFunctionDocError(Exception): pass +class ScriptFunctionDocUnknownFunctionError(ScriptFunctionDocError): + pass + + +class ScriptFunctionDocNoDocumentationError(ScriptFunctionDocError): + pass + + def script_function_documentation(name, fmt, functions=None, postprocessor=None): if functions is None: functions = dict(script_functions.ext_point_script_functions) if name not in functions: - raise ScriptFunctionDocError("no such function: %s (known functions: %r)" % (name, [name for name in functions])) + raise ScriptFunctionDocUnknownFunctionError("no such function: %s (known functions: %r)" % (name, [name for name in functions])) if fmt == 'html': return functions[name].htmldoc(postprocessor) elif fmt == 'markdown': return functions[name].markdowndoc(postprocessor) else: - raise ScriptFunctionDocError("no such documentation format: %s (known formats: html, markdown)" % fmt) + raise ScriptFunctionDocNoDocumentationError("no such documentation format: %s (known formats: html, markdown)" % fmt) def script_function_names(functions=None): diff --git a/picard/ui/widgets/scripttextedit.py b/picard/ui/widgets/scripttextedit.py index d0f4853cd..be89faa04 100644 --- a/picard/ui/widgets/scripttextedit.py +++ b/picard/ui/widgets/scripttextedit.py @@ -4,7 +4,7 @@ # # Copyright (C) 2006-2007, 2009 Lukáš Lalinský # Copyright (C) 2014 m42i -# Copyright (C) 2020-2023 Philipp Wolfer +# Copyright (C) 2020-2024 Philipp Wolfer # Copyright (C) 2020-2024 Laurent Monin # Copyright (C) 2021-2022 Bob Swift # @@ -48,6 +48,7 @@ from picard.const.sys import IS_MACOS from picard.i18n import gettext as _ from picard.script import ( ScriptFunctionDocError, + ScriptFunctionDocUnknownFunctionError, script_function_documentation, script_function_names, ) @@ -279,6 +280,12 @@ class FunctionScriptToken(DocumentedScriptToken): function = self._read_allowed_chars(position + 1) try: return script_function_documentation(function, 'html') + except ScriptFunctionDocUnknownFunctionError: + return _( + 'Function $%s does not exist.
' + '
' + 'Are you missing a plugin?' + '
') % function except ScriptFunctionDocError: return None