diff --git a/.codecov.yml b/.codecov.yml index f6272f5f1..22f35d710 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1,8 +1,6 @@ +comment: false coverage: status: project: default: enabled: no - patch: - default: - enabled: no diff --git a/.travis.yml b/.travis.yml index e1128a3be..0f0217f4d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ -language: python -sudo: false +os: linux dist: xenial +language: python cache: pip env: @@ -9,7 +9,7 @@ env: - SKIP_LATEX_BUILD=1 - IS_PYTHON=true -matrix: +jobs: include: - python: '3.6' env: @@ -20,7 +20,9 @@ matrix: - python: '3.8' env: - TOXENV=du16 - - PYTEST_ADDOPTS="--cov ./ --cov-append --cov-config setup.cfg" + # Disable codecov temporarily + # refs: https://github.com/sphinx-doc/sphinx/pull/7286#issuecomment-596617853 + # - PYTEST_ADDOPTS="--cov ./ --cov-append --cov-config setup.cfg" - python: 'nightly' env: - TOXENV=py39 @@ -34,8 +36,7 @@ matrix: env: TOXENV=flake8 - language: node_js - node_js: - - 10.7 + node_js: '10.7' env: IS_PYTHON=false services: xvfb diff --git a/CHANGES b/CHANGES index 615bb934d..a070ef072 100644 --- a/CHANGES +++ b/CHANGES @@ -52,18 +52,17 @@ Incompatible changes * Due to the scoping changes for :rst:dir:`productionlist` some uses of :rst:role:`token` must be modified to include the scope which was previously ignored. -* #6903: js domain: Internal data structure has changed. Both objects and - modules have node_id for cross reference +* #6903: Internal data structure of Python, reST and standard domains have + changed. The node_id is added to the index of objects and modules. Now they + contains a pair of docname and node_id for cross reference. * #7210: js domain: Non intended behavior is removed such as ``parseInt_`` links to ``.. js:function:: parseInt`` -* #6903: rst domain: Internal data structure has changed. Now objects have - node_id for cross reference * #7229: rst domain: Non intended behavior is removed such as ``numref_`` links to ``.. rst:role:: numref`` -* #6903: py domain: Internal data structure has changed. Both objects and - modules have node_id for cross reference * #6903: py domain: Non intended behavior is removed such as ``say_hello_`` links to ``.. py:function:: say_hello()`` +* #7246: py domain: Drop special cross reference helper for exceptions, + functions and methods Deprecated ---------- @@ -71,6 +70,7 @@ Deprecated * ``desc_signature['first']`` * ``sphinx.directives.DescDirective`` * ``sphinx.domains.std.StandardDomain.add_object()`` +* ``sphinx.domains.python.PyDecoratorMixin`` * ``sphinx.parsers.Parser.app`` * ``sphinx.testing.path.Path.text()`` * ``sphinx.testing.path.Path.bytes()`` @@ -87,6 +87,9 @@ Features added * #6830: autodoc: consider a member private if docstring contains ``:meta private:`` in info-field-list * #7165: autodoc: Support Annotated type (PEP-593) +* #2815: autodoc: Support singledispatch functions and methods +* #7079: autodoc: :confval:`autodoc_typehints` accepts ``"description"`` + configuration. It shows typehints as object description * #6558: glossary: emit a warning for duplicated glossary entry * #3106: domain: Register hyperlink target for index page automatically * #6558: std domain: emit a warning for duplicated generic objects @@ -120,8 +123,11 @@ Bugs fixed * C++, suppress warnings for directly dependent typenames in cross references generated automatically in signatures. * #5637: autodoc: Incorrect handling of nested class names on show-inheritance +* #7267: autodoc: error message for invalid directive options has wrong location * #5637: inheritance_diagram: Incorrect handling of nested class names * #7139: ``code-block:: guess`` does not work +* #7278: html search: Fix use of ``html_file_suffix`` instead of + ``html_link_suffix`` in search results Testing -------- diff --git a/doc/Makefile b/doc/Makefile index d90ae0881..84eafdbe1 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -5,7 +5,6 @@ PYTHON ?= python3 # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = $(PYTHON) ../sphinx/cmd/build.py -SPHINXPROJ = sphinx SOURCEDIR = . BUILDDIR = _build diff --git a/doc/conf.py b/doc/conf.py index 9951aed2d..77d2a577a 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -7,6 +7,7 @@ import sphinx extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo', 'sphinx.ext.autosummary', 'sphinx.ext.extlinks', + 'sphinx.ext.intersphinx', 'sphinx.ext.viewcode', 'sphinx.ext.inheritance_diagram'] master_doc = 'contents' diff --git a/doc/extdev/deprecated.rst b/doc/extdev/deprecated.rst index c4cd82b1f..ec8f4d6ae 100644 --- a/doc/extdev/deprecated.rst +++ b/doc/extdev/deprecated.rst @@ -61,6 +61,11 @@ The following is a list of deprecated interfaces. - 5.0 - ``sphinx.domains.std.StandardDomain.note_object()`` + * - ``sphinx.domains.python.PyDecoratorMixin`` + - 3.0 + - 5.0 + - N/A + * - ``sphinx.parsers.Parser.app`` - 3.0 - 5.0 diff --git a/doc/make.bat b/doc/make.bat index 1e6dc991e..4bc6ddb9a 100644 --- a/doc/make.bat +++ b/doc/make.bat @@ -7,7 +7,6 @@ if "%SPHINXBUILD%" == "" ( ) set SOURCEDIR=. set BUILDDIR=_build -set SPHINXPROJ=sphinx-doc if "%1" == "" goto help diff --git a/doc/usage/extensions/autodoc.rst b/doc/usage/extensions/autodoc.rst index ceef5f36a..9c3120eb5 100644 --- a/doc/usage/extensions/autodoc.rst +++ b/doc/usage/extensions/autodoc.rst @@ -466,9 +466,13 @@ There are also config values that you can set: following values: * ``'signature'`` -- Show typehints as its signature (default) + * ``'description'`` -- Show typehints as content of function or method * ``'none'`` -- Do not show typehints .. versionadded:: 2.1 + .. versionadded:: 3.0 + + New option ``'description'`` is added. .. confval:: autodoc_warningiserror @@ -596,24 +600,3 @@ member should be included in the documentation by using the following event: ``inherited_members``, ``undoc_members``, ``show_inheritance`` and ``noindex`` that are true if the flag option of same name was given to the auto directive - -Generating documents from type annotations ------------------------------------------- - -As an experimental feature, autodoc provides ``sphinx.ext.autodoc.typehints`` as -an additional extension. It extends autodoc itself to generate function document -from its type annotations. - -To enable the feature, please add ``sphinx.ext.autodoc.typehints`` to list of -extensions and set `'description'` to :confval:`autodoc_typehints`: - -.. code-block:: python - - extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autodoc.typehints'] - - autodoc_typehints = 'description' - -.. versionadded:: 2.4 - - Added as an experimental feature. This will be integrated into autodoc core - in Sphinx-3.0. diff --git a/setup.py b/setup.py index 1fb0c5d79..d70eec80c 100644 --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ extras_require = { 'docutils-stubs', ], 'test': [ - 'pytest < 5.3.3', + 'pytest', 'pytest-cov', 'html5lib', 'typed_ast', # for py35-37 diff --git a/sphinx/builders/html/__init__.py b/sphinx/builders/html/__init__.py index 8c91f9a70..2539e30b1 100644 --- a/sphinx/builders/html/__init__.py +++ b/sphinx/builders/html/__init__.py @@ -469,6 +469,7 @@ class StandaloneHTMLBuilder(Builder): 'show_source': self.config.html_show_sourcelink, 'sourcelink_suffix': self.config.html_sourcelink_suffix, 'file_suffix': self.out_suffix, + 'link_suffix': self.link_suffix, 'script_files': self.script_files, 'language': self.config.language, 'css_files': self.css_files, diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index eb5613c64..4e1f4b89f 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -25,7 +25,7 @@ from sphinx import addnodes from sphinx.addnodes import pending_xref, desc_signature from sphinx.application import Sphinx from sphinx.builders import Builder -from sphinx.deprecation import RemovedInSphinx40Warning +from sphinx.deprecation import RemovedInSphinx40Warning, RemovedInSphinx50Warning from sphinx.directives import ObjectDescription from sphinx.domains import Domain, ObjType, Index, IndexEntry from sphinx.environment import BuildEnvironment @@ -439,8 +439,14 @@ class PyModulelevel(PyObject): """ def run(self) -> List[Node]: - warnings.warn('PyModulelevel is deprecated.', - RemovedInSphinx40Warning) + for cls in self.__class__.__mro__: + if cls.__name__ != 'DirectiveAdapter': + warnings.warn('PyModulelevel is deprecated. ' + 'Please check the implementation of %s' % cls, + RemovedInSphinx40Warning) + break + else: + warnings.warn('PyModulelevel is deprecated', RemovedInSphinx40Warning) return super().run() @@ -485,6 +491,23 @@ class PyFunction(PyObject): return _('%s() (built-in function)') % name +class PyDecoratorFunction(PyFunction): + """Description of a decorator.""" + + def run(self) -> List[Node]: + # a decorator function is a function after all + self.name = 'py:function' + return super().run() + + def handle_signature(self, sig: str, signode: desc_signature) -> Tuple[str, str]: + ret = super().handle_signature(sig, signode) + signode.insert(0, addnodes.desc_addname('@', '@')) + return ret + + def needs_arglist(self) -> bool: + return False + + class PyVariable(PyObject): """Description of a variable.""" @@ -542,8 +565,14 @@ class PyClassmember(PyObject): """ def run(self) -> List[Node]: - warnings.warn('PyClassmember is deprecated.', - RemovedInSphinx40Warning) + for cls in self.__class__.__mro__: + if cls.__name__ != 'DirectiveAdapter': + warnings.warn('PyClassmember is deprecated. ' + 'Please check the implementation of %s' % cls, + RemovedInSphinx40Warning) + break + else: + warnings.warn('PyClassmember is deprecated', RemovedInSphinx40Warning) return super().run() @@ -696,6 +725,22 @@ class PyStaticMethod(PyMethod): return super().run() +class PyDecoratorMethod(PyMethod): + """Description of a decoratormethod.""" + + def run(self) -> List[Node]: + self.name = 'py:method' + return super().run() + + def handle_signature(self, sig: str, signode: desc_signature) -> Tuple[str, str]: + ret = super().handle_signature(sig, signode) + signode.insert(0, addnodes.desc_addname('@', '@')) + return ret + + def needs_arglist(self) -> bool: + return False + + class PyAttribute(PyObject): """Description of an attribute.""" @@ -738,6 +783,15 @@ class PyDecoratorMixin: Mixin for decorator directives. """ def handle_signature(self, sig: str, signode: desc_signature) -> Tuple[str, str]: + for cls in self.__class__.__mro__: + if cls.__name__ != 'DirectiveAdapter': + warnings.warn('PyDecoratorMixin is deprecated. ' + 'Please check the implementation of %s' % cls, + RemovedInSphinx50Warning) + break + else: + warnings.warn('PyDecoratorMixin is deprecated', RemovedInSphinx50Warning) + ret = super().handle_signature(sig, signode) # type: ignore signode.insert(0, addnodes.desc_addname('@', '@')) return ret @@ -746,25 +800,6 @@ class PyDecoratorMixin: return False -class PyDecoratorFunction(PyDecoratorMixin, PyModulelevel): - """ - Directive to mark functions meant to be used as decorators. - """ - def run(self) -> List[Node]: - # a decorator function is a function after all - self.name = 'py:function' - return super().run() - - -class PyDecoratorMethod(PyDecoratorMixin, PyClassmember): - """ - Directive to mark methods meant to be used as decorators. - """ - def run(self) -> List[Node]: - self.name = 'py:method' - return super().run() - - class PyModule(SphinxDirective): """ Directive to mark description of a new module. @@ -1106,14 +1141,6 @@ class PythonDomain(Domain): elif modname and classname and \ modname + '.' + classname + '.' + name in self.objects: newname = modname + '.' + classname + '.' + name - # special case: builtin exceptions have module "exceptions" set - elif type == 'exc' and '.' not in name and \ - 'exceptions.' + name in self.objects: - newname = 'exceptions.' + name - # special case: object methods - elif type in ('func', 'meth') and '.' not in name and \ - 'object.' + name in self.objects: - newname = 'object.' + name if newname is not None: matches.append((newname, self.objects[newname])) return matches diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index 1eaa81508..5ec7e36b6 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -16,6 +16,7 @@ import warnings from types import ModuleType from typing import Any, Callable, Dict, Iterator, List, Sequence, Set, Tuple, Type, Union from typing import TYPE_CHECKING +from unittest.mock import patch from docutils.statemachine import StringList @@ -1002,7 +1003,7 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ (inspect.isroutine(member) and isinstance(parent, ModuleDocumenter))) def format_args(self, **kwargs: Any) -> str: - if self.env.config.autodoc_typehints == 'none': + if self.env.config.autodoc_typehints in ('none', 'description'): kwargs.setdefault('show_annotation', False) if inspect.isbuiltin(self.object) or inspect.ismethoddescriptor(self.object): @@ -1055,6 +1056,62 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ self.add_line(' :async:', sourcename) +class SingledispatchFunctionDocumenter(FunctionDocumenter): + """ + Specialized Documenter subclass for singledispatch'ed functions. + """ + objtype = 'singledispatch_function' + directivetype = 'function' + member_order = 30 + + # before FunctionDocumenter + priority = FunctionDocumenter.priority + 1 + + @classmethod + def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any + ) -> bool: + return (super().can_document_member(member, membername, isattr, parent) and + inspect.is_singledispatch_function(member)) + + def add_directive_header(self, sig: str) -> None: + sourcename = self.get_sourcename() + + # intercept generated directive headers + # TODO: It is very hacky to use mock to intercept header generation + with patch.object(self, 'add_line') as add_line: + super().add_directive_header(sig) + + # output first line of header + self.add_line(*add_line.call_args_list[0][0]) + + # inserts signature of singledispatch'ed functions + for typ, func in self.object.registry.items(): + if typ is object: + pass # default implementation. skipped. + else: + self.annotate_to_first_argument(func, typ) + + documenter = FunctionDocumenter(self.directive, '') + documenter.object = func + self.add_line(' %s%s' % (self.format_name(), + documenter.format_signature()), + sourcename) + + # output remains of directive header + for call in add_line.call_args_list[1:]: + self.add_line(*call[0]) + + def annotate_to_first_argument(self, func: Callable, typ: Type) -> None: + """Annotate type hint to the first argument of function if needed.""" + sig = inspect.signature(func) + if len(sig.parameters) == 0: + return + + name = list(sig.parameters)[0] + if name not in func.__annotations__: + func.__annotations__[name] = typ + + class DecoratorDocumenter(FunctionDocumenter): """ Specialized Documenter subclass for decorator functions. @@ -1399,6 +1456,66 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type: pass +class SingledispatchMethodDocumenter(MethodDocumenter): + """ + Specialized Documenter subclass for singledispatch'ed methods. + """ + objtype = 'singledispatch_method' + directivetype = 'method' + member_order = 50 + + # before MethodDocumenter + priority = MethodDocumenter.priority + 1 + + @classmethod + def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any + ) -> bool: + if super().can_document_member(member, membername, isattr, parent) and parent.object: + meth = parent.object.__dict__.get(membername) + return inspect.is_singledispatch_method(meth) + else: + return False + + def add_directive_header(self, sig: str) -> None: + sourcename = self.get_sourcename() + + # intercept generated directive headers + # TODO: It is very hacky to use mock to intercept header generation + with patch.object(self, 'add_line') as add_line: + super().add_directive_header(sig) + + # output first line of header + self.add_line(*add_line.call_args_list[0][0]) + + # inserts signature of singledispatch'ed functions + meth = self.parent.__dict__.get(self.objpath[-1]) + for typ, func in meth.dispatcher.registry.items(): + if typ is object: + pass # default implementation. skipped. + else: + self.annotate_to_first_argument(func, typ) + + documenter = MethodDocumenter(self.directive, '') + documenter.object = func + self.add_line(' %s%s' % (self.format_name(), + documenter.format_signature()), + sourcename) + + # output remains of directive header + for call in add_line.call_args_list[1:]: + self.add_line(*call[0]) + + def annotate_to_first_argument(self, func: Callable, typ: Type) -> None: + """Annotate type hint to the first argument of function if needed.""" + sig = inspect.signature(func, bound_method=True) + if len(sig.parameters) == 0: + return + + name = list(sig.parameters)[0] + if name not in func.__annotations__: + func.__annotations__[name] = typ + + class AttributeDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): # type: ignore """ Specialized Documenter subclass for attributes. @@ -1611,8 +1728,10 @@ def setup(app: Sphinx) -> Dict[str, Any]: app.add_autodocumenter(DataDocumenter) app.add_autodocumenter(DataDeclarationDocumenter) app.add_autodocumenter(FunctionDocumenter) + app.add_autodocumenter(SingledispatchFunctionDocumenter) app.add_autodocumenter(DecoratorDocumenter) app.add_autodocumenter(MethodDocumenter) + app.add_autodocumenter(SingledispatchMethodDocumenter) app.add_autodocumenter(AttributeDocumenter) app.add_autodocumenter(PropertyDocumenter) app.add_autodocumenter(InstanceAttributeDocumenter) @@ -1624,7 +1743,8 @@ def setup(app: Sphinx) -> Dict[str, Any]: app.add_config_value('autodoc_default_options', {}, True) app.add_config_value('autodoc_docstring_signature', True, True) app.add_config_value('autodoc_mock_imports', [], True) - app.add_config_value('autodoc_typehints', "signature", True, ENUM("signature", "none")) + app.add_config_value('autodoc_typehints', "signature", True, + ENUM("signature", "description", "none")) app.add_config_value('autodoc_warningiserror', True, True) app.add_config_value('autodoc_inherit_docstrings', True, True) app.add_event('autodoc-before-process-signature') @@ -1633,5 +1753,6 @@ def setup(app: Sphinx) -> Dict[str, Any]: app.add_event('autodoc-skip-member') app.setup_extension('sphinx.ext.autodoc.type_comment') + app.setup_extension('sphinx.ext.autodoc.typehints') return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/autodoc/directive.py b/sphinx/ext/autodoc/directive.py index 3fe5dc950..85bddb59e 100644 --- a/sphinx/ext/autodoc/directive.py +++ b/sphinx/ext/autodoc/directive.py @@ -133,7 +133,7 @@ class AutodocDirective(SphinxDirective): except (KeyError, ValueError, TypeError) as exc: # an option is either unknown or has a wrong type logger.error('An option to %s is either unknown or has an invalid value: %s' % - (self.name, exc), location=(source, lineno)) + (self.name, exc), location=(self.env.docname, lineno)) return [] # generate the output diff --git a/sphinx/ext/autodoc/typehints.py b/sphinx/ext/autodoc/typehints.py index 64782dc1c..0d5cc5830 100644 --- a/sphinx/ext/autodoc/typehints.py +++ b/sphinx/ext/autodoc/typehints.py @@ -18,21 +18,9 @@ from docutils.nodes import Element from sphinx import addnodes from sphinx.application import Sphinx -from sphinx.config import Config, ENUM from sphinx.util import inspect, typing -def config_inited(app: Sphinx, config: Config) -> None: - if config.autodoc_typehints == 'description': - # HACK: override this to make autodoc suppressing typehints in signatures - config.autodoc_typehints = 'none' # type: ignore - - # preserve user settings - app._autodoc_typehints_description = True # type: ignore - else: - app._autodoc_typehints_description = False # type: ignore - - def record_typehints(app: Sphinx, objtype: str, name: str, obj: Any, options: Dict, args: str, retann: str) -> None: """Record type hints to env object.""" @@ -53,7 +41,7 @@ def record_typehints(app: Sphinx, objtype: str, name: str, obj: Any, def merge_typehints(app: Sphinx, domain: str, objtype: str, contentnode: Element) -> None: if domain != 'py': return - if app._autodoc_typehints_description is False: # type: ignore + if app.config.autodoc_typehints != 'description': return signature = cast(addnodes.desc_signature, contentnode.parent[0]) @@ -141,10 +129,6 @@ def modify_field_list(node: nodes.field_list, annotations: Dict[str, str]) -> No def setup(app: Sphinx) -> Dict[str, Any]: - app.setup_extension('sphinx.ext.autodoc') - app.config.values['autodoc_typehints'] = ('signature', True, - ENUM("signature", "description", "none")) - app.connect('config-inited', config_inited) app.connect('autodoc-process-signature', record_typehints) app.connect('object-description-transform', merge_typehints) diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index 10865749d..921dfcf20 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -68,12 +68,14 @@ def setup_documenters(app: Any) -> None: FunctionDocumenter, MethodDocumenter, AttributeDocumenter, InstanceAttributeDocumenter, DecoratorDocumenter, PropertyDocumenter, SlotsAttributeDocumenter, DataDeclarationDocumenter, + SingledispatchFunctionDocumenter, ) documenters = [ ModuleDocumenter, ClassDocumenter, ExceptionDocumenter, DataDocumenter, FunctionDocumenter, MethodDocumenter, AttributeDocumenter, InstanceAttributeDocumenter, DecoratorDocumenter, PropertyDocumenter, SlotsAttributeDocumenter, DataDeclarationDocumenter, + SingledispatchFunctionDocumenter, ] # type: List[Type[Documenter]] for documenter in documenters: app.registry.add_documenter(documenter.objtype, documenter) diff --git a/sphinx/locale/sphinx.pot b/sphinx/locale/sphinx.pot index c4f9a54fb..da3260585 100644 --- a/sphinx/locale/sphinx.pot +++ b/sphinx/locale/sphinx.pot @@ -1,126 +1,136 @@ # Translations template for Sphinx. -# Copyright (C) 2019 ORGANIZATION +# Copyright (C) 2020 ORGANIZATION # This file is distributed under the same license as the Sphinx project. -# FIRST AUTHOR , 2019. +# FIRST AUTHOR , 2020. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Sphinx 2.0.1\n" +"Project-Id-Version: Sphinx 3.0.0\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-03-29 01:05+0900\n" +"POT-Creation-Date: 2020-03-08 22:11+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.8.0\n" -#: sphinx/application.py:153 +#: sphinx/application.py:159 #, python-format msgid "config directory doesn't contain a conf.py file (%s)" msgstr "" -#: sphinx/application.py:157 +#: sphinx/application.py:163 #, python-format msgid "Cannot find source directory (%s)" msgstr "" -#: sphinx/application.py:161 +#: sphinx/application.py:167 msgid "Source directory and destination directory cannot be identical" msgstr "" -#: sphinx/application.py:192 +#: sphinx/application.py:198 #, python-format msgid "Running Sphinx v%s" msgstr "" -#: sphinx/application.py:214 +#: sphinx/application.py:202 +msgid "" +"For security reason, parallel mode is disabled on macOS and python3.8 and" +" above. For more details, please read https://github.com/sphinx-" +"doc/sphinx/issues/6803" +msgstr "" + +#: sphinx/application.py:226 #, python-format msgid "" "This project needs at least Sphinx v%s and therefore cannot be built with" " this version." msgstr "" -#: sphinx/application.py:234 +#: sphinx/application.py:246 msgid "making output directory" msgstr "" -#: sphinx/application.py:239 sphinx/registry.py:470 +#: sphinx/application.py:251 sphinx/registry.py:399 #, python-format msgid "while setting up extension %s:" msgstr "" -#: sphinx/application.py:245 +#: sphinx/application.py:257 msgid "" "'setup' as currently defined in conf.py isn't a Python callable. Please " "modify its definition to make it a callable function. This is needed for " "conf.py to behave as a Sphinx extension." msgstr "" -#: sphinx/application.py:269 +#: sphinx/application.py:282 #, python-format msgid "loading translations [%s]... " msgstr "" -#: sphinx/application.py:285 sphinx/builders/html.py:852 -#: sphinx/builders/html.py:870 sphinx/builders/html.py:1133 -#: sphinx/builders/html.py:1151 sphinx/util/__init__.py:702 +#: sphinx/application.py:296 sphinx/util/__init__.py:646 msgid "done" msgstr "" -#: sphinx/application.py:287 +#: sphinx/application.py:298 msgid "not available for built-in messages" msgstr "" -#: sphinx/application.py:298 +#: sphinx/application.py:308 msgid "loading pickled environment" msgstr "" -#: sphinx/application.py:303 +#: sphinx/application.py:313 #, python-format msgid "failed: %s" msgstr "" -#: sphinx/application.py:313 +#: sphinx/application.py:321 msgid "No builder selected, using default: html" msgstr "" -#: sphinx/application.py:344 +#: sphinx/application.py:349 msgid "succeeded" msgstr "" -#: sphinx/application.py:344 +#: sphinx/application.py:350 msgid "finished with problems" msgstr "" -#: sphinx/application.py:346 +#: sphinx/application.py:353 +#, python-format +msgid "build %s, %s warning (with warnings treated as errors)." +msgstr "" + +#: sphinx/application.py:357 #, python-format msgid "build %s, %s warning." msgstr "" -#: sphinx/application.py:350 +#: sphinx/application.py:363 #, python-format msgid "build %s." msgstr "" -#: sphinx/application.py:557 +#: sphinx/application.py:552 #, python-format msgid "node class %r is already registered, its visitors will be overridden" msgstr "" -#: sphinx/application.py:654 +#: sphinx/application.py:626 #, python-format msgid "directive %r is already registered, it will be overridden" msgstr "" -#: sphinx/application.py:677 sphinx/application.py:696 +#: sphinx/application.py:644 sphinx/application.py:662 #, python-format msgid "role %r is already registered, it will be overridden" msgstr "" -#: sphinx/application.py:1179 +#: sphinx/application.py:1122 #, python-format msgid "" "the %s extension does not declare if it is safe for parallel reading, " @@ -128,7 +138,12 @@ msgid "" "explicit" msgstr "" -#: sphinx/application.py:1185 +#: sphinx/application.py:1126 +#, python-format +msgid "the %s extension is not safe for parallel reading" +msgstr "" + +#: sphinx/application.py:1129 #, python-format msgid "" "the %s extension does not declare if it is safe for parallel writing, " @@ -136,55 +151,60 @@ msgid "" "explicit" msgstr "" -#: sphinx/application.py:1196 +#: sphinx/application.py:1133 +#, python-format +msgid "the %s extension is not safe for parallel writing" +msgstr "" + +#: sphinx/application.py:1141 sphinx/application.py:1145 #, python-format msgid "doing serial %s" msgstr "" -#: sphinx/config.py:220 +#: sphinx/config.py:191 #, python-format msgid "" "cannot override dictionary config setting %r, ignoring (use %r to set " "individual elements)" msgstr "" -#: sphinx/config.py:229 +#: sphinx/config.py:200 #, python-format msgid "invalid number %r for config value %r, ignoring" msgstr "" -#: sphinx/config.py:234 +#: sphinx/config.py:205 #, python-format msgid "cannot override config setting %r with unsupported type, ignoring" msgstr "" -#: sphinx/config.py:264 +#: sphinx/config.py:233 #, python-format msgid "unknown config value %r in override, ignoring" msgstr "" -#: sphinx/config.py:282 +#: sphinx/config.py:250 #, python-format msgid "No such config value: %s" msgstr "" -#: sphinx/config.py:312 +#: sphinx/config.py:274 #, python-format msgid "Config value %r already present" msgstr "" -#: sphinx/config.py:363 +#: sphinx/config.py:321 #, python-format msgid "There is a syntax error in your configuration file: %s\n" msgstr "" -#: sphinx/config.py:366 +#: sphinx/config.py:324 msgid "" "The configuration file (or one of the modules it imports) called " "sys.exit()" msgstr "" -#: sphinx/config.py:370 +#: sphinx/config.py:331 #, python-format msgid "" "There is a programmable error in your configuration file:\n" @@ -192,52 +212,52 @@ msgid "" "%s" msgstr "" -#: sphinx/config.py:397 +#: sphinx/config.py:357 #, python-format msgid "" "The config value `source_suffix' expects a string, list of strings, or " "dictionary. But `%r' is given." msgstr "" -#: sphinx/config.py:405 +#: sphinx/config.py:364 #, python-format msgid "Section %s" msgstr "" -#: sphinx/config.py:406 +#: sphinx/config.py:365 #, python-format msgid "Fig. %s" msgstr "" -#: sphinx/config.py:407 +#: sphinx/config.py:366 #, python-format msgid "Table %s" msgstr "" -#: sphinx/config.py:408 +#: sphinx/config.py:367 #, python-format msgid "Listing %s" msgstr "" -#: sphinx/config.py:447 +#: sphinx/config.py:404 msgid "" "The config value `{name}` has to be a one of {candidates}, but " "`{current}` is given." msgstr "" -#: sphinx/config.py:465 +#: sphinx/config.py:422 msgid "" "The config value `{name}' has type `{current.__name__}'; expected " "{permitted}." msgstr "" -#: sphinx/config.py:478 +#: sphinx/config.py:435 msgid "" "The config value `{name}' has type `{current.__name__}', defaults to " "`{default.__name__}'." msgstr "" -#: sphinx/config.py:497 +#: sphinx/config.py:453 #, python-format msgid "" "the config value %r is set to a string with non-ASCII characters; this " @@ -245,892 +265,898 @@ msgid "" "%r." msgstr "" -#: sphinx/config.py:506 +#: sphinx/config.py:461 #, python-format msgid "primary_domain %r not found, ignored." msgstr "" -#: sphinx/config.py:518 +#: sphinx/config.py:473 msgid "" "Since v2.0, Sphinx uses \"index\" as master_doc by default. Please add " "\"master_doc = 'contents'\" to your conf.py." msgstr "" -#: sphinx/events.py:54 +#: sphinx/events.py:71 #, python-format msgid "Event %r already present" msgstr "" -#: sphinx/events.py:60 +#: sphinx/events.py:77 #, python-format msgid "Unknown event name: %s" msgstr "" -#: sphinx/extension.py:52 +#: sphinx/extension.py:51 #, python-format msgid "" "The %s extension is required by needs_extensions settings, but it is not " "loaded." msgstr "" -#: sphinx/extension.py:57 +#: sphinx/extension.py:56 #, python-format msgid "" "This project needs the extension %s at least in version %s and therefore " "cannot be built with the loaded version (%s)." msgstr "" -#: sphinx/highlighting.py:142 +#: sphinx/highlighting.py:121 #, python-format msgid "Pygments lexer name %r is not known" msgstr "" -#: sphinx/highlighting.py:163 +#: sphinx/highlighting.py:147 #, python-format msgid "Could not lex literal_block as \"%s\". Highlighting skipped." msgstr "" -#: sphinx/project.py:59 +#: sphinx/project.py:61 msgid "document not readable. Ignored." msgstr "" -#: sphinx/registry.py:131 +#: sphinx/registry.py:126 #, python-format msgid "Builder class %s has no \"name\" attribute" msgstr "" -#: sphinx/registry.py:133 +#: sphinx/registry.py:128 #, python-format msgid "Builder %r already exists (in module %s)" msgstr "" -#: sphinx/registry.py:147 +#: sphinx/registry.py:141 #, python-format msgid "Builder name %s not registered or available through entry point" msgstr "" -#: sphinx/registry.py:155 +#: sphinx/registry.py:148 #, python-format msgid "Builder name %s not registered" msgstr "" -#: sphinx/registry.py:163 +#: sphinx/registry.py:155 #, python-format msgid "domain %s already registered" msgstr "" -#: sphinx/registry.py:197 sphinx/registry.py:212 sphinx/registry.py:223 +#: sphinx/registry.py:178 sphinx/registry.py:191 sphinx/registry.py:202 #, python-format msgid "domain %s not yet registered" msgstr "" -#: sphinx/registry.py:201 +#: sphinx/registry.py:182 #, python-format msgid "The %r directive is already registered to domain %s" msgstr "" -#: sphinx/registry.py:215 +#: sphinx/registry.py:194 #, python-format msgid "The %r role is already registered to domain %s" msgstr "" -#: sphinx/registry.py:226 +#: sphinx/registry.py:205 #, python-format msgid "The %r index is already registered to domain %s" msgstr "" -#: sphinx/registry.py:250 +#: sphinx/registry.py:229 #, python-format msgid "The %r object_type is already registered" msgstr "" -#: sphinx/registry.py:270 +#: sphinx/registry.py:249 #, python-format msgid "The %r crossref_type is already registered" msgstr "" -#: sphinx/registry.py:278 +#: sphinx/registry.py:256 #, python-format msgid "source_suffix %r is already registered" msgstr "" -#: sphinx/registry.py:308 +#: sphinx/registry.py:266 #, python-format msgid "source_parser for %r is already registered" msgstr "" -#: sphinx/registry.py:324 +#: sphinx/registry.py:275 #, python-format msgid "Source parser for %s not registered" msgstr "" -#: sphinx/registry.py:344 -#, python-format -msgid "source_input for %r is already registered" -msgstr "" - -#: sphinx/registry.py:363 +#: sphinx/registry.py:301 #, python-format msgid "Translator for %r already exists" msgstr "" -#: sphinx/registry.py:375 +#: sphinx/registry.py:313 #, python-format msgid "kwargs for add_node() must be a (visit, depart) function tuple: %r=%r" msgstr "" -#: sphinx/registry.py:445 +#: sphinx/registry.py:374 #, python-format msgid "enumerable_node %r already registered" msgstr "" -#: sphinx/registry.py:453 +#: sphinx/registry.py:383 #, python-format msgid "math renderer %s is already registred" msgstr "" -#: sphinx/registry.py:464 +#: sphinx/registry.py:393 #, python-format msgid "" "the extension %r was already merged with Sphinx since version %s; this " "extension is ignored." msgstr "" -#: sphinx/registry.py:475 +#: sphinx/registry.py:404 msgid "Original exception:\n" msgstr "" -#: sphinx/registry.py:476 +#: sphinx/registry.py:405 #, python-format msgid "Could not import extension %s" msgstr "" -#: sphinx/registry.py:479 +#: sphinx/registry.py:409 #, python-format msgid "" "extension %r has no setup() function; is it really a Sphinx extension " "module?" msgstr "" -#: sphinx/registry.py:488 +#: sphinx/registry.py:418 #, python-format msgid "" "The %s extension used by this project needs at least Sphinx v%s; it " "therefore cannot be built with this version." msgstr "" -#: sphinx/registry.py:496 +#: sphinx/registry.py:426 #, python-format msgid "" "extension %r returned an unsupported object from its setup() function; it" " should return None or a metadata dictionary" msgstr "" -#: sphinx/roles.py:221 sphinx/roles.py:272 +#: sphinx/roles.py:221 sphinx/roles.py:271 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "" -#: sphinx/theming.py:79 +#: sphinx/theming.py:78 #, python-format msgid "theme %r doesn't have \"theme\" setting" msgstr "" -#: sphinx/theming.py:81 +#: sphinx/theming.py:80 #, python-format msgid "theme %r doesn't have \"inherit\" setting" msgstr "" -#: sphinx/theming.py:87 +#: sphinx/theming.py:86 #, python-format msgid "no theme named %r found, inherited by %r" msgstr "" -#: sphinx/theming.py:112 +#: sphinx/theming.py:109 #, python-format msgid "setting %s.%s occurs in none of the searched theme configs" msgstr "" -#: sphinx/theming.py:132 +#: sphinx/theming.py:128 #, python-format msgid "unsupported theme option %r given" msgstr "" -#: sphinx/theming.py:242 +#: sphinx/theming.py:228 #, python-format msgid "file %r on theme path is not a valid zipfile or contains no theme" msgstr "" -#: sphinx/theming.py:258 +#: sphinx/theming.py:243 msgid "" "sphinx_rtd_theme is no longer a hard dependency since version 1.4.0. " "Please install it manually.(pip install sphinx_rtd_theme)" msgstr "" -#: sphinx/theming.py:262 +#: sphinx/theming.py:247 #, python-format msgid "no theme named %r found (missing theme.conf?)" msgstr "" -#: sphinx/builders/__init__.py:205 +#: sphinx/builders/__init__.py:195 #, python-format msgid "a suitable image for %s builder not found: %s (%s)" msgstr "" -#: sphinx/builders/__init__.py:209 +#: sphinx/builders/__init__.py:199 #, python-format msgid "a suitable image for %s builder not found: %s" msgstr "" -#: sphinx/builders/__init__.py:231 +#: sphinx/builders/__init__.py:219 msgid "building [mo]: " msgstr "" -#: sphinx/builders/__init__.py:232 sphinx/builders/__init__.py:574 -#: sphinx/builders/__init__.py:602 +#: sphinx/builders/__init__.py:220 sphinx/builders/__init__.py:539 +#: sphinx/builders/__init__.py:565 msgid "writing output... " msgstr "" -#: sphinx/builders/__init__.py:245 +#: sphinx/builders/__init__.py:228 #, python-format msgid "all of %d po files" msgstr "" -#: sphinx/builders/__init__.py:266 +#: sphinx/builders/__init__.py:246 #, python-format msgid "targets for %d po files that are specified" msgstr "" -#: sphinx/builders/__init__.py:276 +#: sphinx/builders/__init__.py:253 #, python-format msgid "targets for %d po files that are out of date" msgstr "" -#: sphinx/builders/__init__.py:284 +#: sphinx/builders/__init__.py:260 msgid "all source files" msgstr "" -#: sphinx/builders/__init__.py:298 +#: sphinx/builders/__init__.py:273 #, python-format msgid "file %r given on command line is not under the source directory, ignoring" msgstr "" -#: sphinx/builders/__init__.py:303 +#: sphinx/builders/__init__.py:277 #, python-format msgid "file %r given on command line does not exist, ignoring" msgstr "" -#: sphinx/builders/__init__.py:314 +#: sphinx/builders/__init__.py:288 #, python-format msgid "%d source files given on command line" msgstr "" -#: sphinx/builders/__init__.py:325 +#: sphinx/builders/__init__.py:298 #, python-format msgid "targets for %d source files that are out of date" msgstr "" -#: sphinx/builders/__init__.py:335 +#: sphinx/builders/__init__.py:307 sphinx/builders/gettext.py:267 #, python-format -msgid "building [%s]" +msgid "building [%s]: " msgstr "" -#: sphinx/builders/__init__.py:342 +#: sphinx/builders/__init__.py:314 msgid "looking for now-outdated files... " msgstr "" -#: sphinx/builders/__init__.py:347 +#: sphinx/builders/__init__.py:319 #, python-format msgid "%d found" msgstr "" -#: sphinx/builders/__init__.py:349 +#: sphinx/builders/__init__.py:321 msgid "none found" msgstr "" -#: sphinx/builders/__init__.py:354 +#: sphinx/builders/__init__.py:326 msgid "pickling environment" msgstr "" -#: sphinx/builders/__init__.py:360 +#: sphinx/builders/__init__.py:332 msgid "checking consistency" msgstr "" -#: sphinx/builders/__init__.py:364 +#: sphinx/builders/__init__.py:336 msgid "no targets are out of date." msgstr "" -#: sphinx/builders/__init__.py:404 +#: sphinx/builders/__init__.py:375 msgid "updating environment: " msgstr "" -#: sphinx/builders/__init__.py:423 +#: sphinx/builders/__init__.py:396 #, python-format msgid "%s added, %s changed, %s removed" msgstr "" -#: sphinx/builders/__init__.py:462 sphinx/builders/__init__.py:492 +#: sphinx/builders/__init__.py:434 sphinx/builders/__init__.py:461 msgid "reading sources... " msgstr "" -#: sphinx/builders/__init__.py:497 sphinx/builders/__init__.py:612 +#: sphinx/builders/__init__.py:466 sphinx/builders/__init__.py:575 msgid "waiting for workers..." msgstr "" -#: sphinx/builders/__init__.py:551 +#: sphinx/builders/__init__.py:517 #, python-format msgid "docnames to write: %s" msgstr "" -#: sphinx/builders/__init__.py:560 sphinx/builders/singlehtml.py:166 +#: sphinx/builders/__init__.py:526 sphinx/builders/singlehtml.py:155 msgid "preparing documents" msgstr "" -#: sphinx/builders/_epub_base.py:218 +#: sphinx/builders/_epub_base.py:211 #, python-format msgid "duplicated ToC entry found: %s" msgstr "" -#: sphinx/builders/_epub_base.py:414 sphinx/builders/html.py:761 -#: sphinx/builders/latex/__init__.py:415 sphinx/builders/texinfo.py:190 +#: sphinx/builders/_epub_base.py:395 sphinx/builders/html/__init__.py:687 +#: sphinx/builders/latex/__init__.py:416 sphinx/builders/texinfo.py:178 msgid "copying images... " msgstr "" -#: sphinx/builders/_epub_base.py:421 +#: sphinx/builders/_epub_base.py:402 #, python-format msgid "cannot read image file %r: copying it instead" msgstr "" -#: sphinx/builders/_epub_base.py:427 sphinx/builders/html.py:769 -#: sphinx/builders/latex/__init__.py:423 sphinx/builders/texinfo.py:199 +#: sphinx/builders/_epub_base.py:408 sphinx/builders/html/__init__.py:695 +#: sphinx/builders/latex/__init__.py:424 sphinx/builders/texinfo.py:187 #, python-format msgid "cannot copy image file %r: %s" msgstr "" -#: sphinx/builders/_epub_base.py:444 +#: sphinx/builders/_epub_base.py:425 #, python-format msgid "cannot write image file %r: %s" msgstr "" -#: sphinx/builders/_epub_base.py:455 +#: sphinx/builders/_epub_base.py:435 msgid "Pillow not found - copying image files" msgstr "" -#: sphinx/builders/_epub_base.py:490 sphinx/builders/_epub_base.py:503 -#: sphinx/builders/_epub_base.py:539 sphinx/builders/_epub_base.py:724 -#: sphinx/builders/_epub_base.py:757 sphinx/builders/epub3.py:183 +#: sphinx/builders/_epub_base.py:467 sphinx/builders/_epub_base.py:479 +#: sphinx/builders/_epub_base.py:513 sphinx/builders/_epub_base.py:694 +#: sphinx/builders/_epub_base.py:726 sphinx/builders/epub3.py:173 #, python-format msgid "writing %s file..." msgstr "" -#: sphinx/builders/_epub_base.py:565 +#: sphinx/builders/_epub_base.py:539 #, python-format msgid "unknown mimetype for %s, ignoring" msgstr "" -#: sphinx/builders/changes.py:39 +#: sphinx/builders/changes.py:36 #, python-format msgid "The overview file is in %(outdir)s." msgstr "" -#: sphinx/builders/changes.py:68 +#: sphinx/builders/changes.py:62 #, python-format msgid "no changes in version %s." msgstr "" -#: sphinx/builders/changes.py:70 +#: sphinx/builders/changes.py:64 msgid "writing summary file..." msgstr "" -#: sphinx/builders/changes.py:86 +#: sphinx/builders/changes.py:80 msgid "Builtins" msgstr "" -#: sphinx/builders/changes.py:88 +#: sphinx/builders/changes.py:82 msgid "Module level" msgstr "" -#: sphinx/builders/changes.py:133 +#: sphinx/builders/changes.py:126 msgid "copying source files..." msgstr "" -#: sphinx/builders/changes.py:140 +#: sphinx/builders/changes.py:133 #, python-format msgid "could not read %r for changelog creation" msgstr "" -#: sphinx/builders/dummy.py:24 +#: sphinx/builders/dummy.py:22 msgid "The dummy builder generates no files." msgstr "" -#: sphinx/builders/epub3.py:68 +#: sphinx/builders/epub3.py:65 #, python-format msgid "The ePub file is in %(outdir)s." msgstr "" -#: sphinx/builders/epub3.py:211 +#: sphinx/builders/epub3.py:200 msgid "" "conf value \"epub_language\" (or \"language\") should not be empty for " "EPUB3" msgstr "" -#: sphinx/builders/epub3.py:215 +#: sphinx/builders/epub3.py:204 msgid "conf value \"epub_uid\" should be XML NAME for EPUB3" msgstr "" -#: sphinx/builders/epub3.py:218 +#: sphinx/builders/epub3.py:207 msgid "" "conf value \"epub_title\" (or \"html_title\") should not be empty for " "EPUB3" msgstr "" -#: sphinx/builders/epub3.py:222 +#: sphinx/builders/epub3.py:211 msgid "conf value \"epub_author\" should not be empty for EPUB3" msgstr "" -#: sphinx/builders/epub3.py:225 +#: sphinx/builders/epub3.py:214 msgid "conf value \"epub_contributor\" should not be empty for EPUB3" msgstr "" -#: sphinx/builders/epub3.py:228 +#: sphinx/builders/epub3.py:217 msgid "conf value \"epub_description\" should not be empty for EPUB3" msgstr "" -#: sphinx/builders/epub3.py:231 +#: sphinx/builders/epub3.py:220 msgid "conf value \"epub_publisher\" should not be empty for EPUB3" msgstr "" -#: sphinx/builders/epub3.py:234 +#: sphinx/builders/epub3.py:223 msgid "" "conf value \"epub_copyright\" (or \"copyright\")should not be empty for " "EPUB3" msgstr "" -#: sphinx/builders/epub3.py:238 +#: sphinx/builders/epub3.py:227 msgid "conf value \"epub_identifier\" should not be empty for EPUB3" msgstr "" -#: sphinx/builders/epub3.py:241 +#: sphinx/builders/epub3.py:230 msgid "conf value \"version\" should not be empty for EPUB3" msgstr "" -#: sphinx/builders/epub3.py:256 sphinx/builders/html.py:1166 +#: sphinx/builders/epub3.py:244 sphinx/builders/html/__init__.py:1059 #, python-format msgid "invalid css_file: %r, ignored" msgstr "" -#: sphinx/builders/gettext.py:221 +#: sphinx/builders/gettext.py:246 #, python-format msgid "The message catalogs are in %(outdir)s." msgstr "" -#: sphinx/builders/gettext.py:245 -#, python-format -msgid "building [%s]: " -msgstr "" - -#: sphinx/builders/gettext.py:246 +#: sphinx/builders/gettext.py:268 #, python-format msgid "targets for %d template files" msgstr "" -#: sphinx/builders/gettext.py:250 +#: sphinx/builders/gettext.py:272 msgid "reading templates... " msgstr "" -#: sphinx/builders/gettext.py:277 +#: sphinx/builders/gettext.py:300 msgid "writing message catalogs... " msgstr "" -#: sphinx/builders/html.py:182 -#, python-format -msgid "build info file is broken: %r" -msgstr "" - -#: sphinx/builders/html.py:217 -#, python-format -msgid "The HTML pages are in %(outdir)s." -msgstr "" - -#: sphinx/builders/html.py:399 -#, python-format -msgid "Failed to read build info file: %r" -msgstr "" - -#: sphinx/builders/html.py:488 sphinx/builders/latex/__init__.py:206 -#: sphinx/transforms/__init__.py:121 sphinx/writers/manpage.py:118 -#: sphinx/writers/texinfo.py:243 -#, python-format -msgid "%b %d, %Y" -msgstr "" - -#: sphinx/builders/html.py:500 -msgid "html_use_opensearch config value must now be a string" -msgstr "" - -#: sphinx/builders/html.py:506 sphinx/themes/basic/defindex.html:30 -msgid "General Index" -msgstr "" - -#: sphinx/builders/html.py:506 -msgid "index" -msgstr "" - -#: sphinx/builders/html.py:570 -msgid "next" -msgstr "" - -#: sphinx/builders/html.py:579 -msgid "previous" -msgstr "" - -#: sphinx/builders/html.py:677 -msgid "generating indices..." -msgstr "" - -#: sphinx/builders/html.py:695 -msgid "writing additional pages..." -msgstr "" - -#: sphinx/builders/html.py:780 -msgid "copying downloadable files... " -msgstr "" - -#: sphinx/builders/html.py:788 -#, python-format -msgid "cannot copy downloadable file %r: %s" -msgstr "" - -#: sphinx/builders/html.py:795 -msgid "copying static files... " -msgstr "" - -#: sphinx/builders/html.py:830 -#, python-format -msgid "html_static_path entry %r does not exist" -msgstr "" - -#: sphinx/builders/html.py:839 sphinx/builders/latex/__init__.py:400 -#, python-format -msgid "logo file %r does not exist" -msgstr "" - -#: sphinx/builders/html.py:847 -#, python-format -msgid "favicon file %r does not exist" -msgstr "" - -#: sphinx/builders/html.py:854 -#, python-format -msgid "cannot copy static file %r" -msgstr "" - -#: sphinx/builders/html.py:860 -msgid "copying extra files... " -msgstr "" - -#: sphinx/builders/html.py:866 -#, python-format -msgid "html_extra_path entry %r does not exist" -msgstr "" - -#: sphinx/builders/html.py:872 -#, python-format -msgid "cannot copy extra file %r" -msgstr "" - -#: sphinx/builders/html.py:880 -#, python-format -msgid "Failed to write build info file: %r" -msgstr "" - -#: sphinx/builders/html.py:927 -msgid "" -"search index couldn't be loaded, but not all documents will be built: the" -" index will be incomplete." -msgstr "" - -#: sphinx/builders/html.py:996 -#, python-format -msgid "page %s matches two patterns in html_sidebars: %r and %r" -msgstr "" - -#: sphinx/builders/html.py:1094 -#, python-format -msgid "" -"a Unicode error occurred when rendering the page %s. Please make sure all" -" config values that contain non-ASCII content are Unicode strings." -msgstr "" - -#: sphinx/builders/html.py:1099 -#, python-format -msgid "" -"An error happened in rendering the page %s.\n" -"Reason: %r" -msgstr "" - -#: sphinx/builders/html.py:1111 sphinx/builders/text.py:85 -#: sphinx/builders/xml.py:99 -#, python-format -msgid "error writing file %s: %s" -msgstr "" - -#: sphinx/builders/html.py:1131 -msgid "dumping object inventory... " -msgstr "" - -#: sphinx/builders/html.py:1138 -#, python-format -msgid "dumping search index in %s ... " -msgstr "" - -#: sphinx/builders/html.py:1184 -#, python-format -msgid "invalid js_file: %r, ignored" -msgstr "" - -#: sphinx/builders/html.py:1228 -msgid "Many math_renderers are registered. But no math_renderer is selected." -msgstr "" - -#: sphinx/builders/html.py:1231 -#, python-format -msgid "Unknown math_renderer %r is given." -msgstr "" - -#: sphinx/builders/html.py:1264 -#, python-format -msgid "%s %s documentation" -msgstr "" - -#: sphinx/builders/linkcheck.py:80 +#: sphinx/builders/linkcheck.py:78 #, python-format msgid "Look for any errors in the above output or in %(outdir)s/output.txt" msgstr "" -#: sphinx/builders/linkcheck.py:144 +#: sphinx/builders/linkcheck.py:150 #, python-format msgid "Anchor '%s' not found" msgstr "" -#: sphinx/builders/linkcheck.py:242 +#: sphinx/builders/linkcheck.py:259 #, python-format msgid "broken link: %s (%s)" msgstr "" -#: sphinx/builders/manpage.py:43 +#: sphinx/builders/manpage.py:40 #, python-format msgid "The manual pages are in %(outdir)s." msgstr "" -#: sphinx/builders/manpage.py:51 +#: sphinx/builders/manpage.py:47 msgid "no \"man_pages\" config value found; no manual pages will be written" msgstr "" -#: sphinx/builders/latex/__init__.py:272 sphinx/builders/manpage.py:64 -#: sphinx/builders/singlehtml.py:174 sphinx/builders/texinfo.py:120 +#: sphinx/builders/latex/__init__.py:292 sphinx/builders/manpage.py:58 +#: sphinx/builders/singlehtml.py:163 sphinx/builders/texinfo.py:111 msgid "writing" msgstr "" -#: sphinx/builders/manpage.py:76 +#: sphinx/builders/manpage.py:69 #, python-format msgid "\"man_pages\" config value references unknown document %s" msgstr "" -#: sphinx/builders/singlehtml.py:37 +#: sphinx/builders/singlehtml.py:36 #, python-format msgid "The HTML page is in %(outdir)s." msgstr "" -#: sphinx/builders/singlehtml.py:169 +#: sphinx/builders/singlehtml.py:158 msgid "assembling single document" msgstr "" -#: sphinx/builders/singlehtml.py:188 +#: sphinx/builders/singlehtml.py:176 msgid "writing additional files" msgstr "" -#: sphinx/builders/texinfo.py:50 +#: sphinx/builders/texinfo.py:47 #, python-format msgid "The Texinfo files are in %(outdir)s." msgstr "" -#: sphinx/builders/texinfo.py:52 +#: sphinx/builders/texinfo.py:49 msgid "" "\n" "Run 'make' in that directory to run these through makeinfo\n" "(use 'make info' here to do that automatically)." msgstr "" -#: sphinx/builders/texinfo.py:85 +#: sphinx/builders/texinfo.py:77 msgid "no \"texinfo_documents\" config value found; no documents will be written" msgstr "" -#: sphinx/builders/texinfo.py:93 +#: sphinx/builders/texinfo.py:85 #, python-format msgid "\"texinfo_documents\" config value references unknown document %s" msgstr "" -#: sphinx/builders/latex/__init__.py:255 sphinx/builders/texinfo.py:116 +#: sphinx/builders/latex/__init__.py:275 sphinx/builders/texinfo.py:107 #, python-format msgid "processing %s" msgstr "" -#: sphinx/builders/latex/__init__.py:323 sphinx/builders/texinfo.py:164 +#: sphinx/builders/latex/__init__.py:343 sphinx/builders/texinfo.py:154 msgid "resolving references..." msgstr "" -#: sphinx/builders/latex/__init__.py:333 sphinx/builders/texinfo.py:173 +#: sphinx/builders/latex/__init__.py:353 sphinx/builders/texinfo.py:163 msgid " (in " msgstr "" -#: sphinx/builders/texinfo.py:205 +#: sphinx/builders/texinfo.py:192 msgid "copying Texinfo support files" msgstr "" -#: sphinx/builders/texinfo.py:209 +#: sphinx/builders/texinfo.py:196 #, python-format msgid "error writing file Makefile: %s" msgstr "" -#: sphinx/builders/text.py:33 +#: sphinx/builders/text.py:30 #, python-format msgid "The text files are in %(outdir)s." msgstr "" -#: sphinx/builders/xml.py:38 +#: sphinx/builders/html/__init__.py:1012 sphinx/builders/text.py:77 +#: sphinx/builders/xml.py:96 +#, python-format +msgid "error writing file %s: %s" +msgstr "" + +#: sphinx/builders/xml.py:40 #, python-format msgid "The XML files are in %(outdir)s." msgstr "" -#: sphinx/builders/xml.py:112 +#: sphinx/builders/xml.py:108 #, python-format msgid "The pseudo-XML files are in %(outdir)s." msgstr "" -#: sphinx/builders/latex/__init__.py:123 +#: sphinx/builders/html/__init__.py:144 +#, python-format +msgid "build info file is broken: %r" +msgstr "" + +#: sphinx/builders/html/__init__.py:176 +#, python-format +msgid "The HTML pages are in %(outdir)s." +msgstr "" + +#: sphinx/builders/html/__init__.py:344 +#, python-format +msgid "Failed to read build info file: %r" +msgstr "" + +#: sphinx/builders/html/__init__.py:430 sphinx/builders/latex/__init__.py:192 +#: sphinx/transforms/__init__.py:116 sphinx/writers/manpage.py:112 +#: sphinx/writers/texinfo.py:237 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html/__init__.py:439 +msgid "html_use_opensearch config value must now be a string" +msgstr "" + +#: sphinx/builders/html/__init__.py:445 sphinx/themes/basic/defindex.html:29 +msgid "General Index" +msgstr "" + +#: sphinx/builders/html/__init__.py:445 +msgid "index" +msgstr "" + +#: sphinx/builders/html/__init__.py:508 +msgid "next" +msgstr "" + +#: sphinx/builders/html/__init__.py:517 +msgid "previous" +msgstr "" + +#: sphinx/builders/html/__init__.py:611 +msgid "generating indices" +msgstr "" + +#: sphinx/builders/html/__init__.py:626 +msgid "writing additional pages" +msgstr "" + +#: sphinx/builders/html/__init__.py:705 +msgid "copying downloadable files... " +msgstr "" + +#: sphinx/builders/html/__init__.py:713 +#, python-format +msgid "cannot copy downloadable file %r: %s" +msgstr "" + +#: sphinx/builders/html/__init__.py:761 +msgid "copying static files... " +msgstr "" + +#: sphinx/builders/html/__init__.py:777 +#, python-format +msgid "cannot copy static file %r" +msgstr "" + +#: sphinx/builders/html/__init__.py:782 +msgid "copying extra files" +msgstr "" + +#: sphinx/builders/html/__init__.py:788 +#, python-format +msgid "cannot copy extra file %r" +msgstr "" + +#: sphinx/builders/html/__init__.py:795 +#, python-format +msgid "Failed to write build info file: %r" +msgstr "" + +#: sphinx/builders/html/__init__.py:843 +msgid "" +"search index couldn't be loaded, but not all documents will be built: the" +" index will be incomplete." +msgstr "" + +#: sphinx/builders/html/__init__.py:912 +#, python-format +msgid "page %s matches two patterns in html_sidebars: %r and %r" +msgstr "" + +#: sphinx/builders/html/__init__.py:995 +#, python-format +msgid "" +"a Unicode error occurred when rendering the page %s. Please make sure all" +" config values that contain non-ASCII content are Unicode strings." +msgstr "" + +#: sphinx/builders/html/__init__.py:1000 +#, python-format +msgid "" +"An error happened in rendering the page %s.\n" +"Reason: %r" +msgstr "" + +#: sphinx/builders/html/__init__.py:1029 +msgid "dumping object inventory" +msgstr "" + +#: sphinx/builders/html/__init__.py:1034 +#, python-format +msgid "dumping search index in %s" +msgstr "" + +#: sphinx/builders/html/__init__.py:1076 +#, python-format +msgid "invalid js_file: %r, ignored" +msgstr "" + +#: sphinx/builders/html/__init__.py:1117 +msgid "Many math_renderers are registered. But no math_renderer is selected." +msgstr "" + +#: sphinx/builders/html/__init__.py:1120 +#, python-format +msgid "Unknown math_renderer %r is given." +msgstr "" + +#: sphinx/builders/html/__init__.py:1128 +#, python-format +msgid "html_extra_path entry %r does not exist" +msgstr "" + +#: sphinx/builders/html/__init__.py:1132 +#, python-format +msgid "html_extra_path entry %r is placed inside outdir" +msgstr "" + +#: sphinx/builders/html/__init__.py:1141 +#, python-format +msgid "html_static_path entry %r does not exist" +msgstr "" + +#: sphinx/builders/html/__init__.py:1145 +#, python-format +msgid "html_static_path entry %r is placed inside outdir" +msgstr "" + +#: sphinx/builders/html/__init__.py:1152 sphinx/builders/latex/__init__.py:428 +#, python-format +msgid "logo file %r does not exist" +msgstr "" + +#: sphinx/builders/html/__init__.py:1159 +#, python-format +msgid "favicon file %r does not exist" +msgstr "" + +#: sphinx/builders/html/__init__.py:1178 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex/__init__.py:115 #, python-format msgid "The LaTeX files are in %(outdir)s." msgstr "" -#: sphinx/builders/latex/__init__.py:125 +#: sphinx/builders/latex/__init__.py:117 msgid "" "\n" "Run 'make' in that directory to run these through (pdf)latex\n" "(use `make latexpdf' here to do that automatically)." msgstr "" -#: sphinx/builders/latex/__init__.py:165 +#: sphinx/builders/latex/__init__.py:154 msgid "no \"latex_documents\" config value found; no documents will be written" msgstr "" -#: sphinx/builders/latex/__init__.py:173 +#: sphinx/builders/latex/__init__.py:162 #, python-format msgid "\"latex_documents\" config value references unknown document %s" msgstr "" -#: sphinx/builders/latex/__init__.py:213 sphinx/domains/std.py:501 -#: sphinx/templates/latex/latex.tex_t:79 -#: sphinx/themes/basic/genindex-single.html:30 -#: sphinx/themes/basic/genindex-single.html:55 -#: sphinx/themes/basic/genindex-split.html:11 -#: sphinx/themes/basic/genindex-split.html:14 -#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 -#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:150 -#: sphinx/writers/texinfo.py:522 +#: sphinx/builders/latex/__init__.py:199 sphinx/domains/std.py:586 +#: sphinx/templates/latex/latex.tex_t:68 +#: sphinx/themes/basic/genindex-single.html:19 +#: sphinx/themes/basic/genindex-single.html:36 +#: sphinx/themes/basic/genindex-split.html:10 +#: sphinx/themes/basic/genindex-split.html:13 +#: sphinx/themes/basic/genindex.html:19 sphinx/themes/basic/genindex.html:22 +#: sphinx/themes/basic/genindex.html:44 sphinx/themes/basic/layout.html:51 +#: sphinx/writers/texinfo.py:502 msgid "Index" msgstr "" -#: sphinx/builders/latex/__init__.py:216 sphinx/templates/latex/latex.tex_t:64 +#: sphinx/builders/latex/__init__.py:202 sphinx/templates/latex/latex.tex_t:55 msgid "Release" msgstr "" -#: sphinx/builders/latex/__init__.py:224 sphinx/writers/latex.py:549 +#: sphinx/builders/latex/__init__.py:209 sphinx/writers/latex.py:388 #, python-format msgid "no Babel option known for language %r" msgstr "" -#: sphinx/builders/latex/__init__.py:363 +#: sphinx/builders/latex/__init__.py:374 msgid "copying TeX support files" msgstr "" -#: sphinx/builders/latex/__init__.py:384 +#: sphinx/builders/latex/__init__.py:394 msgid "copying TeX support files..." msgstr "" -#: sphinx/builders/latex/__init__.py:404 +#: sphinx/builders/latex/__init__.py:407 msgid "copying additional files" msgstr "" -#: sphinx/builders/latex/__init__.py:447 +#: sphinx/builders/latex/__init__.py:489 #, python-format msgid "Unknown configure key: latex_elements[%r]. ignored." msgstr "" -#: sphinx/cmd/build.py:38 +#: sphinx/builders/latex/theming.py:79 +#, python-format +msgid "%r doesn't have \"theme\" setting" +msgstr "" + +#: sphinx/builders/latex/theming.py:81 +#, python-format +msgid "%r doesn't have \"%s\" setting" +msgstr "" + +#: sphinx/cmd/build.py:34 msgid "Exception occurred while building, starting debugger:" msgstr "" -#: sphinx/cmd/build.py:48 -msgid "interrupted!" +#: sphinx/cmd/build.py:44 +msgid "Interrupted!" msgstr "" -#: sphinx/cmd/build.py:50 +#: sphinx/cmd/build.py:46 msgid "reST markup error:" msgstr "" -#: sphinx/cmd/build.py:56 +#: sphinx/cmd/build.py:52 msgid "Encoding error:" msgstr "" -#: sphinx/cmd/build.py:59 sphinx/cmd/build.py:74 +#: sphinx/cmd/build.py:55 sphinx/cmd/build.py:70 #, python-format msgid "" "The full traceback has been saved in %s, if you want to report the issue " "to the developers." msgstr "" -#: sphinx/cmd/build.py:63 +#: sphinx/cmd/build.py:59 msgid "Recursion error:" msgstr "" -#: sphinx/cmd/build.py:66 +#: sphinx/cmd/build.py:62 msgid "" "This can happen with very large or deeply nested source files. You can " "carefully increase the default Python recursion limit of 1000 in conf.py " "with e.g.:" msgstr "" -#: sphinx/cmd/build.py:69 -msgid " import sys; sys.setrecursionlimit(1500)" -msgstr "" - -#: sphinx/cmd/build.py:71 +#: sphinx/cmd/build.py:67 msgid "Exception occurred:" msgstr "" -#: sphinx/cmd/build.py:77 +#: sphinx/cmd/build.py:73 msgid "" "Please also report this if it was a user error, so that a better error " "message can be provided next time." msgstr "" -#: sphinx/cmd/build.py:80 +#: sphinx/cmd/build.py:76 msgid "" "A bug report can be filed in the tracker at . Thanks!" msgstr "" -#: sphinx/cmd/build.py:97 +#: sphinx/cmd/build.py:92 msgid "job number should be a positive number" msgstr "" -#: sphinx/cmd/build.py:106 sphinx/cmd/quickstart.py:497 -#: sphinx/ext/apidoc.py:298 sphinx/ext/autosummary/generate.py:363 +#: sphinx/cmd/build.py:100 sphinx/cmd/quickstart.py:478 +#: sphinx/ext/apidoc.py:350 sphinx/ext/autosummary/generate.py:434 msgid "For more information, visit ." msgstr "" -#: sphinx/cmd/build.py:107 +#: sphinx/cmd/build.py:101 msgid "" "\n" "Generate documentation from source files.\n" @@ -1153,262 +1179,255 @@ msgid "" "files can be built by specifying individual filenames.\n" msgstr "" -#: sphinx/cmd/build.py:128 +#: sphinx/cmd/build.py:122 msgid "path to documentation source files" msgstr "" -#: sphinx/cmd/build.py:130 +#: sphinx/cmd/build.py:124 msgid "path to output directory" msgstr "" -#: sphinx/cmd/build.py:132 +#: sphinx/cmd/build.py:126 msgid "a list of specific files to rebuild. Ignored if -a is specified" msgstr "" -#: sphinx/cmd/build.py:135 +#: sphinx/cmd/build.py:129 msgid "general options" msgstr "" -#: sphinx/cmd/build.py:138 +#: sphinx/cmd/build.py:132 msgid "builder to use (default: html)" msgstr "" -#: sphinx/cmd/build.py:140 +#: sphinx/cmd/build.py:134 msgid "write all files (default: only write new and changed files)" msgstr "" -#: sphinx/cmd/build.py:143 +#: sphinx/cmd/build.py:137 msgid "don't use a saved environment, always read all files" msgstr "" -#: sphinx/cmd/build.py:146 +#: sphinx/cmd/build.py:140 msgid "" "path for the cached environment and doctree files (default: " "OUTPUTDIR/.doctrees)" msgstr "" -#: sphinx/cmd/build.py:149 +#: sphinx/cmd/build.py:143 msgid "" "build in parallel with N processes where possible (special value \"auto\"" " will set N to cpu-count)" msgstr "" -#: sphinx/cmd/build.py:153 +#: sphinx/cmd/build.py:147 msgid "" "path where configuration file (conf.py) is located (default: same as " "SOURCEDIR)" msgstr "" -#: sphinx/cmd/build.py:156 +#: sphinx/cmd/build.py:150 msgid "use no config file at all, only -D options" msgstr "" -#: sphinx/cmd/build.py:159 +#: sphinx/cmd/build.py:153 msgid "override a setting in configuration file" msgstr "" -#: sphinx/cmd/build.py:162 +#: sphinx/cmd/build.py:156 msgid "pass a value into HTML templates" msgstr "" -#: sphinx/cmd/build.py:165 +#: sphinx/cmd/build.py:159 msgid "define tag: include \"only\" blocks with TAG" msgstr "" -#: sphinx/cmd/build.py:167 +#: sphinx/cmd/build.py:161 msgid "nit-picky mode, warn about all missing references" msgstr "" -#: sphinx/cmd/build.py:170 +#: sphinx/cmd/build.py:164 msgid "console output options" msgstr "" -#: sphinx/cmd/build.py:172 +#: sphinx/cmd/build.py:166 msgid "increase verbosity (can be repeated)" msgstr "" -#: sphinx/cmd/build.py:174 +#: sphinx/cmd/build.py:168 sphinx/ext/apidoc.py:373 msgid "no output on stdout, just warnings on stderr" msgstr "" -#: sphinx/cmd/build.py:176 +#: sphinx/cmd/build.py:170 msgid "no output at all, not even warnings" msgstr "" -#: sphinx/cmd/build.py:179 +#: sphinx/cmd/build.py:173 msgid "do emit colored output (default: auto-detect)" msgstr "" -#: sphinx/cmd/build.py:182 +#: sphinx/cmd/build.py:176 msgid "do not emit colored output (default: auto-detect)" msgstr "" -#: sphinx/cmd/build.py:185 +#: sphinx/cmd/build.py:179 msgid "write warnings (and errors) to given file" msgstr "" -#: sphinx/cmd/build.py:187 +#: sphinx/cmd/build.py:181 msgid "turn warnings into errors" msgstr "" -#: sphinx/cmd/build.py:189 -msgid "With -W, Keep going when getting warnings" +#: sphinx/cmd/build.py:183 +msgid "With -W, keep going when getting warnings" msgstr "" -#: sphinx/cmd/build.py:191 +#: sphinx/cmd/build.py:185 msgid "show full traceback on exception" msgstr "" -#: sphinx/cmd/build.py:193 +#: sphinx/cmd/build.py:187 msgid "run Pdb on exception" msgstr "" -#: sphinx/cmd/build.py:227 +#: sphinx/cmd/build.py:219 #, python-format msgid "cannot find files %r" msgstr "" -#: sphinx/cmd/build.py:230 +#: sphinx/cmd/build.py:222 msgid "cannot combine -a option and filenames" msgstr "" -#: sphinx/cmd/build.py:249 +#: sphinx/cmd/build.py:241 #, python-format msgid "cannot open warning file %r: %s" msgstr "" -#: sphinx/cmd/build.py:259 +#: sphinx/cmd/build.py:251 msgid "-D option argument must be in the form name=value" msgstr "" -#: sphinx/cmd/build.py:266 +#: sphinx/cmd/build.py:258 msgid "-A option argument must be in the form name=value" msgstr "" -#: sphinx/cmd/quickstart.py:52 +#: sphinx/cmd/quickstart.py:49 msgid "automatically insert docstrings from modules" msgstr "" -#: sphinx/cmd/quickstart.py:53 +#: sphinx/cmd/quickstart.py:50 msgid "automatically test code snippets in doctest blocks" msgstr "" -#: sphinx/cmd/quickstart.py:54 +#: sphinx/cmd/quickstart.py:51 msgid "link between Sphinx documentation of different projects" msgstr "" -#: sphinx/cmd/quickstart.py:55 +#: sphinx/cmd/quickstart.py:52 msgid "write \"todo\" entries that can be shown or hidden on build" msgstr "" -#: sphinx/cmd/quickstart.py:56 +#: sphinx/cmd/quickstart.py:53 msgid "checks for documentation coverage" msgstr "" -#: sphinx/cmd/quickstart.py:57 +#: sphinx/cmd/quickstart.py:54 msgid "include math, rendered as PNG or SVG images" msgstr "" -#: sphinx/cmd/quickstart.py:58 +#: sphinx/cmd/quickstart.py:55 msgid "include math, rendered in the browser by MathJax" msgstr "" -#: sphinx/cmd/quickstart.py:59 +#: sphinx/cmd/quickstart.py:56 msgid "conditional inclusion of content based on config values" msgstr "" -#: sphinx/cmd/quickstart.py:61 +#: sphinx/cmd/quickstart.py:57 msgid "include links to the source code of documented Python objects" msgstr "" -#: sphinx/cmd/quickstart.py:63 +#: sphinx/cmd/quickstart.py:58 msgid "create .nojekyll file to publish the document on GitHub pages" msgstr "" -#: sphinx/cmd/quickstart.py:107 +#: sphinx/cmd/quickstart.py:100 msgid "Please enter a valid path name." msgstr "" -#: sphinx/cmd/quickstart.py:119 +#: sphinx/cmd/quickstart.py:110 msgid "Please enter some text." msgstr "" -#: sphinx/cmd/quickstart.py:128 +#: sphinx/cmd/quickstart.py:117 #, python-format msgid "Please enter one of %s." msgstr "" -#: sphinx/cmd/quickstart.py:136 +#: sphinx/cmd/quickstart.py:124 msgid "Please enter either 'y' or 'n'." msgstr "" -#: sphinx/cmd/quickstart.py:143 +#: sphinx/cmd/quickstart.py:130 msgid "Please enter a file suffix, e.g. '.rst' or '.txt'." msgstr "" -#: sphinx/cmd/quickstart.py:169 +#: sphinx/cmd/quickstart.py:153 msgid "" "* Note: non-ASCII characters entered and terminal encoding unknown -- " "assuming UTF-8 or Latin-1." msgstr "" -#: sphinx/cmd/quickstart.py:248 +#: sphinx/cmd/quickstart.py:227 #, python-format msgid "Welcome to the Sphinx %s quickstart utility." msgstr "" -#: sphinx/cmd/quickstart.py:249 +#: sphinx/cmd/quickstart.py:229 msgid "" -"\n" "Please enter values for the following settings (just press Enter to\n" "accept a default value, if one is given in brackets)." msgstr "" -#: sphinx/cmd/quickstart.py:254 +#: sphinx/cmd/quickstart.py:234 #, python-format -msgid "" -"\n" -"Selected root path: %s" +msgid "Selected root path: %s" msgstr "" -#: sphinx/cmd/quickstart.py:257 -msgid "" -"\n" -"Enter the root path for documentation." +#: sphinx/cmd/quickstart.py:237 +msgid "Enter the root path for documentation." msgstr "" -#: sphinx/cmd/quickstart.py:259 +#: sphinx/cmd/quickstart.py:238 msgid "Root path for the documentation" msgstr "" -#: sphinx/cmd/quickstart.py:264 +#: sphinx/cmd/quickstart.py:243 msgid "Error: an existing conf.py has been found in the selected root path." msgstr "" -#: sphinx/cmd/quickstart.py:266 +#: sphinx/cmd/quickstart.py:245 msgid "sphinx-quickstart will not overwrite existing Sphinx projects." msgstr "" -#: sphinx/cmd/quickstart.py:268 +#: sphinx/cmd/quickstart.py:247 msgid "Please enter a new root path (or just Enter to exit)" msgstr "" -#: sphinx/cmd/quickstart.py:274 +#: sphinx/cmd/quickstart.py:254 msgid "" -"\n" "You have two options for placing the build directory for Sphinx output.\n" "Either, you use a directory \"_build\" within the root path, or you " "separate\n" "\"source\" and \"build\" directories within the root path." msgstr "" -#: sphinx/cmd/quickstart.py:278 +#: sphinx/cmd/quickstart.py:257 msgid "Separate source and build directories (y/n)" msgstr "" -#: sphinx/cmd/quickstart.py:282 +#: sphinx/cmd/quickstart.py:261 msgid "" -"\n" "Inside the root directory, two more directories will be created; " "\"_templates\"\n" "for custom HTML templates and \"_static\" for custom stylesheets and " @@ -1417,27 +1436,24 @@ msgid "" "underscore." msgstr "" -#: sphinx/cmd/quickstart.py:286 +#: sphinx/cmd/quickstart.py:264 msgid "Name prefix for templates and static dir" msgstr "" -#: sphinx/cmd/quickstart.py:289 -msgid "" -"\n" -"The project name will occur in several places in the built documentation." +#: sphinx/cmd/quickstart.py:268 +msgid "The project name will occur in several places in the built documentation." msgstr "" -#: sphinx/cmd/quickstart.py:291 +#: sphinx/cmd/quickstart.py:269 msgid "Project name" msgstr "" -#: sphinx/cmd/quickstart.py:293 +#: sphinx/cmd/quickstart.py:271 msgid "Author name(s)" msgstr "" -#: sphinx/cmd/quickstart.py:296 +#: sphinx/cmd/quickstart.py:275 msgid "" -"\n" "Sphinx has the notion of a \"version\" and a \"release\" for the\n" "software. Each version can have multiple releases. For example, for\n" "Python the version is something like 2.5 or 3.0, while the release is\n" @@ -1445,138 +1461,134 @@ msgid "" "just set both to the same value." msgstr "" -#: sphinx/cmd/quickstart.py:302 +#: sphinx/cmd/quickstart.py:280 msgid "Project version" msgstr "" -#: sphinx/cmd/quickstart.py:304 +#: sphinx/cmd/quickstart.py:282 msgid "Project release" msgstr "" -#: sphinx/cmd/quickstart.py:307 +#: sphinx/cmd/quickstart.py:286 msgid "" -"\n" "If the documents are to be written in a language other than English,\n" "you can select a language here by its language code. Sphinx will then\n" "translate text that it generates into that language.\n" "\n" "For a list of supported codes, see\n" -"https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-language." +"https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-" +"language." msgstr "" -#: sphinx/cmd/quickstart.py:314 +#: sphinx/cmd/quickstart.py:292 msgid "Project language" msgstr "" -#: sphinx/cmd/quickstart.py:319 +#: sphinx/cmd/quickstart.py:298 msgid "" -"\n" "The file name suffix for source files. Commonly, this is either \".txt\"\n" "or \".rst\". Only files with this suffix are considered documents." msgstr "" -#: sphinx/cmd/quickstart.py:322 +#: sphinx/cmd/quickstart.py:300 msgid "Source file suffix" msgstr "" -#: sphinx/cmd/quickstart.py:325 +#: sphinx/cmd/quickstart.py:304 msgid "" -"\n" "One document is special in that it is considered the top node of the\n" "\"contents tree\", that is, it is the root of the hierarchical structure\n" "of the documents. Normally, this is \"index\", but if your \"index\"\n" "document is a custom template, you can also set this to another filename." msgstr "" -#: sphinx/cmd/quickstart.py:330 +#: sphinx/cmd/quickstart.py:308 msgid "Name of your master document (without suffix)" msgstr "" -#: sphinx/cmd/quickstart.py:336 +#: sphinx/cmd/quickstart.py:313 #, python-format msgid "" "Error: the master file %s has already been found in the selected root " "path." msgstr "" -#: sphinx/cmd/quickstart.py:338 +#: sphinx/cmd/quickstart.py:315 msgid "sphinx-quickstart will not overwrite the existing file." msgstr "" -#: sphinx/cmd/quickstart.py:340 +#: sphinx/cmd/quickstart.py:317 msgid "Please enter a new file name, or rename the existing file and press Enter" msgstr "" -#: sphinx/cmd/quickstart.py:344 +#: sphinx/cmd/quickstart.py:321 msgid "Indicate which of the following Sphinx extensions should be enabled:" msgstr "" -#: sphinx/cmd/quickstart.py:353 +#: sphinx/cmd/quickstart.py:329 msgid "" "Note: imgmath and mathjax cannot be enabled at the same time. imgmath has" " been deselected." msgstr "" -#: sphinx/cmd/quickstart.py:358 +#: sphinx/cmd/quickstart.py:335 msgid "" -"\n" "A Makefile and a Windows command file can be generated for you so that " "you\n" "only have to run e.g. `make html' instead of invoking sphinx-build\n" "directly." msgstr "" -#: sphinx/cmd/quickstart.py:362 +#: sphinx/cmd/quickstart.py:338 msgid "Create Makefile? (y/n)" msgstr "" -#: sphinx/cmd/quickstart.py:365 +#: sphinx/cmd/quickstart.py:341 msgid "Create Windows command file? (y/n)" msgstr "" -#: sphinx/cmd/quickstart.py:408 sphinx/ext/apidoc.py:74 +#: sphinx/cmd/quickstart.py:382 sphinx/ext/apidoc.py:107 #, python-format msgid "Creating file %s." msgstr "" -#: sphinx/cmd/quickstart.py:413 sphinx/ext/apidoc.py:72 +#: sphinx/cmd/quickstart.py:387 sphinx/ext/apidoc.py:104 #, python-format msgid "File %s already exists, skipping." msgstr "" -#: sphinx/cmd/quickstart.py:449 +#: sphinx/cmd/quickstart.py:423 msgid "Finished: An initial directory structure has been created." msgstr "" -#: sphinx/cmd/quickstart.py:450 +#: sphinx/cmd/quickstart.py:425 #, python-format msgid "" -"\n" "You should now populate your master file %s and create other " "documentation\n" "source files. " msgstr "" -#: sphinx/cmd/quickstart.py:452 +#: sphinx/cmd/quickstart.py:428 msgid "" "Use the Makefile to build the docs, like so:\n" -" make builder\n" +" make builder" msgstr "" -#: sphinx/cmd/quickstart.py:455 +#: sphinx/cmd/quickstart.py:431 #, python-format msgid "" "Use the sphinx-build command to build the docs, like so:\n" -" sphinx-build -b builder %s %s\n" +" sphinx-build -b builder %s %s" msgstr "" -#: sphinx/cmd/quickstart.py:458 +#: sphinx/cmd/quickstart.py:433 msgid "" "where \"builder\" is one of the supported builders, e.g. html, latex or " -"linkcheck.\n" +"linkcheck." msgstr "" -#: sphinx/cmd/quickstart.py:498 +#: sphinx/cmd/quickstart.py:468 msgid "" "\n" "Generate required files for a Sphinx project.\n" @@ -1587,137 +1599,137 @@ msgid "" "Makefile to be used with sphinx-build.\n" msgstr "" -#: sphinx/cmd/quickstart.py:508 +#: sphinx/cmd/quickstart.py:483 msgid "quiet mode" msgstr "" -#: sphinx/cmd/quickstart.py:513 -msgid "output path" +#: sphinx/cmd/quickstart.py:488 +msgid "project root" msgstr "" -#: sphinx/cmd/quickstart.py:515 +#: sphinx/cmd/quickstart.py:490 msgid "Structure options" msgstr "" -#: sphinx/cmd/quickstart.py:517 +#: sphinx/cmd/quickstart.py:492 msgid "if specified, separate source and build dirs" msgstr "" -#: sphinx/cmd/quickstart.py:519 +#: sphinx/cmd/quickstart.py:494 msgid "replacement for dot in _templates etc." msgstr "" -#: sphinx/cmd/quickstart.py:521 +#: sphinx/cmd/quickstart.py:496 msgid "Project basic options" msgstr "" -#: sphinx/cmd/quickstart.py:523 +#: sphinx/cmd/quickstart.py:498 msgid "project name" msgstr "" -#: sphinx/cmd/quickstart.py:525 +#: sphinx/cmd/quickstart.py:500 msgid "author names" msgstr "" -#: sphinx/cmd/quickstart.py:527 +#: sphinx/cmd/quickstart.py:502 msgid "version of project" msgstr "" -#: sphinx/cmd/quickstart.py:529 +#: sphinx/cmd/quickstart.py:504 msgid "release of project" msgstr "" -#: sphinx/cmd/quickstart.py:531 +#: sphinx/cmd/quickstart.py:506 msgid "document language" msgstr "" -#: sphinx/cmd/quickstart.py:533 +#: sphinx/cmd/quickstart.py:508 msgid "source file suffix" msgstr "" -#: sphinx/cmd/quickstart.py:535 +#: sphinx/cmd/quickstart.py:510 msgid "master document name" msgstr "" -#: sphinx/cmd/quickstart.py:537 +#: sphinx/cmd/quickstart.py:512 msgid "use epub" msgstr "" -#: sphinx/cmd/quickstart.py:539 +#: sphinx/cmd/quickstart.py:514 msgid "Extension options" msgstr "" -#: sphinx/cmd/quickstart.py:543 sphinx/ext/apidoc.py:379 +#: sphinx/cmd/quickstart.py:518 sphinx/ext/apidoc.py:433 #, python-format msgid "enable %s extension" msgstr "" -#: sphinx/cmd/quickstart.py:545 sphinx/ext/apidoc.py:375 +#: sphinx/cmd/quickstart.py:520 sphinx/ext/apidoc.py:429 msgid "enable arbitrary extensions" msgstr "" -#: sphinx/cmd/quickstart.py:547 +#: sphinx/cmd/quickstart.py:522 msgid "Makefile and Batchfile creation" msgstr "" -#: sphinx/cmd/quickstart.py:549 +#: sphinx/cmd/quickstart.py:524 msgid "create makefile" msgstr "" -#: sphinx/cmd/quickstart.py:551 +#: sphinx/cmd/quickstart.py:526 msgid "do not create makefile" msgstr "" -#: sphinx/cmd/quickstart.py:553 +#: sphinx/cmd/quickstart.py:528 msgid "create batchfile" msgstr "" -#: sphinx/cmd/quickstart.py:556 +#: sphinx/cmd/quickstart.py:531 msgid "do not create batchfile" msgstr "" -#: sphinx/cmd/quickstart.py:559 +#: sphinx/cmd/quickstart.py:534 msgid "use make-mode for Makefile/make.bat" msgstr "" -#: sphinx/cmd/quickstart.py:562 +#: sphinx/cmd/quickstart.py:537 msgid "do not use make-mode for Makefile/make.bat" msgstr "" -#: sphinx/cmd/quickstart.py:564 +#: sphinx/cmd/quickstart.py:539 sphinx/ext/apidoc.py:435 msgid "Project templating" msgstr "" -#: sphinx/cmd/quickstart.py:567 +#: sphinx/cmd/quickstart.py:542 sphinx/ext/apidoc.py:438 msgid "template directory for template files" msgstr "" -#: sphinx/cmd/quickstart.py:570 +#: sphinx/cmd/quickstart.py:545 msgid "define a template variable" msgstr "" -#: sphinx/cmd/quickstart.py:604 +#: sphinx/cmd/quickstart.py:578 msgid "" "\"quiet\" is specified, but any of \"project\" or \"author\" is not " "specified." msgstr "" -#: sphinx/cmd/quickstart.py:618 +#: sphinx/cmd/quickstart.py:592 msgid "Error: specified path is not a directory, or sphinx files already exist." msgstr "" -#: sphinx/cmd/quickstart.py:620 +#: sphinx/cmd/quickstart.py:594 msgid "" "sphinx-quickstart only generate into a empty directory. Please specify a " "new root path." msgstr "" -#: sphinx/cmd/quickstart.py:635 +#: sphinx/cmd/quickstart.py:609 #, python-format msgid "Invalid template variable: %s" msgstr "" -#: sphinx/directives/code.py:74 +#: sphinx/directives/code.py:75 msgid "Over dedent has detected" msgstr "" @@ -1726,489 +1738,554 @@ msgstr "" msgid "Invalid caption: %s" msgstr "" -#: sphinx/directives/code.py:140 sphinx/directives/code.py:292 -#: sphinx/directives/code.py:462 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:284 +#: sphinx/directives/code.py:450 #, python-format msgid "line number spec is out of range(1-%d): %r" msgstr "" -#: sphinx/directives/code.py:222 +#: sphinx/directives/code.py:219 #, python-format msgid "Cannot use both \"%s\" and \"%s\" options" msgstr "" -#: sphinx/directives/code.py:235 +#: sphinx/directives/code.py:231 #, python-format msgid "Include file %r not found or reading it failed" msgstr "" -#: sphinx/directives/code.py:237 +#: sphinx/directives/code.py:233 #, python-format msgid "" "Encoding %r used for reading included file %r seems to be wrong, try " "giving an :encoding: option" msgstr "" -#: sphinx/directives/code.py:275 +#: sphinx/directives/code.py:268 #, python-format msgid "Object named %r not found in include file %r" msgstr "" -#: sphinx/directives/code.py:301 +#: sphinx/directives/code.py:293 msgid "Cannot use \"lineno-match\" with a disjoint set of \"lines\"" msgstr "" -#: sphinx/directives/code.py:306 +#: sphinx/directives/code.py:298 #, python-format msgid "Line spec %r: no lines pulled from include file %r" msgstr "" -#: sphinx/directives/other.py:172 +#: sphinx/directives/other.py:171 msgid "Section author: " msgstr "" -#: sphinx/directives/other.py:174 +#: sphinx/directives/other.py:173 msgid "Module author: " msgstr "" -#: sphinx/directives/other.py:176 +#: sphinx/directives/other.py:175 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:178 +#: sphinx/directives/other.py:177 msgid "Author: " msgstr "" -#: sphinx/domains/__init__.py:344 +#: sphinx/domains/__init__.py:393 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:64 sphinx/domains/cpp.py:6445 -#: sphinx/domains/python.py:210 sphinx/ext/napoleon/docstring.py:696 +#: sphinx/domains/c.py:67 sphinx/domains/cpp.py:6410 +#: sphinx/domains/python.py:242 sphinx/ext/napoleon/docstring.py:661 msgid "Parameters" msgstr "" -#: sphinx/domains/c.py:67 sphinx/domains/cpp.py:6454 -#: sphinx/domains/javascript.py:209 sphinx/domains/python.py:222 +#: sphinx/domains/c.py:70 sphinx/domains/cpp.py:6419 +#: sphinx/domains/javascript.py:216 sphinx/domains/python.py:254 msgid "Returns" msgstr "" -#: sphinx/domains/c.py:69 sphinx/domains/javascript.py:211 -#: sphinx/domains/python.py:224 +#: sphinx/domains/c.py:72 sphinx/domains/javascript.py:218 +#: sphinx/domains/python.py:256 msgid "Return type" msgstr "" -#: sphinx/domains/c.py:189 +#: sphinx/domains/c.py:187 #, python-format msgid "%s (C function)" msgstr "" -#: sphinx/domains/c.py:191 +#: sphinx/domains/c.py:189 #, python-format msgid "%s (C member)" msgstr "" -#: sphinx/domains/c.py:193 +#: sphinx/domains/c.py:191 #, python-format msgid "%s (C macro)" msgstr "" -#: sphinx/domains/c.py:195 +#: sphinx/domains/c.py:193 #, python-format msgid "%s (C type)" msgstr "" -#: sphinx/domains/c.py:197 +#: sphinx/domains/c.py:195 #, python-format msgid "%s (C variable)" msgstr "" -#: sphinx/domains/c.py:258 sphinx/domains/cpp.py:7029 -#: sphinx/domains/javascript.py:297 sphinx/domains/python.py:742 +#: sphinx/domains/c.py:248 sphinx/domains/cpp.py:6991 +#: sphinx/domains/javascript.py:321 sphinx/domains/python.py:995 msgid "function" msgstr "" -#: sphinx/domains/c.py:259 sphinx/domains/cpp.py:7030 +#: sphinx/domains/c.py:249 sphinx/domains/cpp.py:6992 msgid "member" msgstr "" -#: sphinx/domains/c.py:260 +#: sphinx/domains/c.py:250 msgid "macro" msgstr "" -#: sphinx/domains/c.py:261 sphinx/domains/cpp.py:7031 +#: sphinx/domains/c.py:251 sphinx/domains/cpp.py:6993 msgid "type" msgstr "" -#: sphinx/domains/c.py:262 +#: sphinx/domains/c.py:252 msgid "variable" msgstr "" -#: sphinx/domains/changeset.py:33 +#: sphinx/domains/c.py:280 +#, python-format +msgid "" +"duplicate C object description of %s, other instance in %s, use :noindex:" +" for one of them" +msgstr "" + +#: sphinx/domains/changeset.py:31 #, python-format msgid "New in version %s" msgstr "" -#: sphinx/domains/changeset.py:34 +#: sphinx/domains/changeset.py:32 #, python-format msgid "Changed in version %s" msgstr "" -#: sphinx/domains/changeset.py:35 +#: sphinx/domains/changeset.py:33 #, python-format msgid "Deprecated since version %s" msgstr "" -#: sphinx/domains/cpp.py:4323 +#: sphinx/domains/citation.py:77 +#, python-format +msgid "duplicate citation %s, other instance in %s" +msgstr "" + +#: sphinx/domains/citation.py:88 +#, python-format +msgid "Citation [%s] is not referenced." +msgstr "" + +#: sphinx/domains/cpp.py:4220 #, python-format msgid "" "Duplicate declaration, also defined in '%s'.\n" "Declaration is '%s'." msgstr "" -#: sphinx/domains/cpp.py:6448 +#: sphinx/domains/cpp.py:6413 msgid "Template Parameters" msgstr "" -#: sphinx/domains/cpp.py:6451 sphinx/domains/javascript.py:206 +#: sphinx/domains/cpp.py:6416 sphinx/domains/javascript.py:213 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:6579 +#: sphinx/domains/cpp.py:6539 #, python-format msgid "%s (C++ %s)" msgstr "" -#: sphinx/domains/cpp.py:7027 sphinx/domains/javascript.py:299 -#: sphinx/domains/python.py:744 +#: sphinx/domains/cpp.py:6989 sphinx/domains/javascript.py:323 +#: sphinx/domains/python.py:997 msgid "class" msgstr "" -#: sphinx/domains/cpp.py:7028 +#: sphinx/domains/cpp.py:6990 msgid "union" msgstr "" -#: sphinx/domains/cpp.py:7032 +#: sphinx/domains/cpp.py:6994 msgid "concept" msgstr "" -#: sphinx/domains/cpp.py:7033 +#: sphinx/domains/cpp.py:6995 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:7034 +#: sphinx/domains/cpp.py:6996 msgid "enumerator" msgstr "" -#: sphinx/domains/cpp.py:7127 +#: sphinx/domains/cpp.py:7086 #, python-format msgid "" "Duplicate declaration, also defined in '%s'.\n" "Name of declaration is '%s'." msgstr "" -#: sphinx/domains/javascript.py:130 sphinx/domains/python.py:430 +#: sphinx/domains/javascript.py:131 sphinx/domains/python.py:457 +#: sphinx/domains/python.py:489 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:131 sphinx/domains/python.py:495 +#: sphinx/domains/javascript.py:132 sphinx/domains/python.py:595 +#: sphinx/domains/python.py:693 #, python-format msgid "%s() (%s method)" msgstr "" -#: sphinx/domains/javascript.py:133 +#: sphinx/domains/javascript.py:134 #, python-format msgid "%s() (class)" msgstr "" -#: sphinx/domains/javascript.py:135 +#: sphinx/domains/javascript.py:136 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:137 sphinx/domains/python.py:533 +#: sphinx/domains/javascript.py:138 sphinx/domains/python.py:633 +#: sphinx/domains/python.py:770 #, python-format msgid "%s (%s attribute)" msgstr "" -#: sphinx/domains/javascript.py:203 +#: sphinx/domains/javascript.py:210 msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:264 sphinx/domains/python.py:610 +#: sphinx/domains/javascript.py:281 sphinx/domains/python.py:842 #, python-format msgid "%s (module)" msgstr "" -#: sphinx/domains/javascript.py:298 sphinx/domains/python.py:746 +#: sphinx/domains/javascript.py:322 sphinx/domains/python.py:999 msgid "method" msgstr "" -#: sphinx/domains/javascript.py:300 sphinx/domains/python.py:743 +#: sphinx/domains/javascript.py:324 sphinx/domains/python.py:996 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:301 sphinx/domains/python.py:749 +#: sphinx/domains/javascript.py:325 sphinx/domains/python.py:1002 msgid "attribute" msgstr "" -#: sphinx/domains/javascript.py:302 sphinx/domains/python.py:49 -#: sphinx/domains/python.py:750 +#: sphinx/domains/javascript.py:326 sphinx/domains/python.py:60 +#: sphinx/domains/python.py:1003 msgid "module" msgstr "" -#: sphinx/domains/math.py:101 sphinx/writers/latex.py:2459 +#: sphinx/domains/javascript.py:357 #, python-format -msgid "Invalid math_eqref_format: %r" +msgid "duplicate %s description of %s, other %s in %s" msgstr "" -#: sphinx/domains/math.py:126 +#: sphinx/domains/math.py:69 sphinx/domains/math.py:148 #, python-format msgid "duplicate label of equation %s, other instance in %s" msgstr "" -#: sphinx/domains/python.py:50 +#: sphinx/domains/math.py:123 sphinx/writers/latex.py:2031 +#, python-format +msgid "Invalid math_eqref_format: %r" +msgstr "" + +#: sphinx/domains/python.py:61 msgid "keyword" msgstr "" -#: sphinx/domains/python.py:51 +#: sphinx/domains/python.py:62 msgid "operator" msgstr "" -#: sphinx/domains/python.py:52 +#: sphinx/domains/python.py:63 msgid "object" msgstr "" -#: sphinx/domains/python.py:53 sphinx/domains/python.py:745 +#: sphinx/domains/python.py:64 sphinx/domains/python.py:998 msgid "exception" msgstr "" -#: sphinx/domains/python.py:54 +#: sphinx/domains/python.py:65 msgid "statement" msgstr "" -#: sphinx/domains/python.py:55 +#: sphinx/domains/python.py:66 msgid "built-in function" msgstr "" -#: sphinx/domains/python.py:215 +#: sphinx/domains/python.py:247 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:219 +#: sphinx/domains/python.py:251 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:431 sphinx/domains/python.py:489 -#: sphinx/domains/python.py:501 sphinx/domains/python.py:514 +#: sphinx/domains/python.py:458 sphinx/domains/python.py:487 +#: sphinx/domains/python.py:589 sphinx/domains/python.py:601 +#: sphinx/domains/python.py:614 sphinx/domains/python.py:682 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:434 +#: sphinx/domains/python.py:461 sphinx/domains/python.py:536 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:435 sphinx/domains/python.py:527 +#: sphinx/domains/python.py:462 sphinx/domains/python.py:534 +#: sphinx/domains/python.py:627 sphinx/domains/python.py:766 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:455 +#: sphinx/domains/python.py:552 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:456 +#: sphinx/domains/python.py:553 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:493 +#: sphinx/domains/python.py:593 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:505 +#: sphinx/domains/python.py:605 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:508 +#: sphinx/domains/python.py:608 sphinx/domains/python.py:691 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:618 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:521 +#: sphinx/domains/python.py:621 sphinx/domains/python.py:687 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:531 +#: sphinx/domains/python.py:631 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:668 +#: sphinx/domains/python.py:689 +#, python-format +msgid "%s() (%s property)" +msgstr "" + +#: sphinx/domains/python.py:923 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:669 +#: sphinx/domains/python.py:924 msgid "modules" msgstr "" -#: sphinx/domains/python.py:720 +#: sphinx/domains/python.py:974 msgid "Deprecated" msgstr "" -#: sphinx/domains/python.py:747 +#: sphinx/domains/python.py:1000 msgid "class method" msgstr "" -#: sphinx/domains/python.py:748 +#: sphinx/domains/python.py:1001 msgid "static method" msgstr "" -#: sphinx/domains/python.py:880 +#: sphinx/domains/python.py:1050 +#, python-format +msgid "" +"duplicate object description of %s, other instance in %s, use :noindex: " +"for one of them" +msgstr "" + +#: sphinx/domains/python.py:1156 #, python-format msgid "more than one target found for cross-reference %r: %s" msgstr "" -#: sphinx/domains/python.py:918 +#: sphinx/domains/python.py:1194 msgid " (deprecated)" msgstr "" -#: sphinx/domains/rst.py:62 +#: sphinx/domains/rst.py:105 sphinx/domains/rst.py:166 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:64 +#: sphinx/domains/rst.py:167 sphinx/domains/rst.py:171 +#, python-format +msgid ":%s: (directive option)" +msgstr "" + +#: sphinx/domains/rst.py:200 #, python-format msgid "%s (role)" msgstr "" -#: sphinx/domains/rst.py:116 +#: sphinx/domains/rst.py:209 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:117 +#: sphinx/domains/rst.py:210 +msgid "directive-option" +msgstr "" + +#: sphinx/domains/rst.py:211 msgid "role" msgstr "" -#: sphinx/domains/std.py:88 sphinx/domains/std.py:105 +#: sphinx/domains/rst.py:233 +#, python-format +msgid "duplicate description of %s %s, other instance in %s" +msgstr "" + +#: sphinx/domains/std.py:103 sphinx/domains/std.py:120 #, python-format msgid "environment variable; %s" msgstr "" -#: sphinx/domains/std.py:166 +#: sphinx/domains/std.py:194 #, python-format msgid "" "Malformed option description %r, should look like \"opt\", \"-opt args\"," " \"--opt args\", \"/opt args\" or \"+opt args\"" msgstr "" -#: sphinx/domains/std.py:207 +#: sphinx/domains/std.py:235 #, python-format -msgid "%scommand line option; %s" +msgid "%s command line option" msgstr "" -#: sphinx/domains/std.py:458 +#: sphinx/domains/std.py:237 +msgid "command line option" +msgstr "" + +#: sphinx/domains/std.py:368 +msgid "glossary term must be preceded by empty line" +msgstr "" + +#: sphinx/domains/std.py:376 +msgid "glossary terms must not be separated by empty lines" +msgstr "" + +#: sphinx/domains/std.py:382 sphinx/domains/std.py:395 +msgid "glossary seems to be misformatted, check indentation" +msgstr "" + +#: sphinx/domains/std.py:545 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:459 +#: sphinx/domains/std.py:546 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:460 +#: sphinx/domains/std.py:547 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:462 +#: sphinx/domains/std.py:549 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:463 +#: sphinx/domains/std.py:550 msgid "program option" msgstr "" -#: sphinx/domains/std.py:464 +#: sphinx/domains/std.py:551 msgid "document" msgstr "" -#: sphinx/domains/std.py:502 +#: sphinx/domains/std.py:587 msgid "Module Index" msgstr "" -#: sphinx/domains/std.py:503 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:588 sphinx/themes/basic/defindex.html:24 msgid "Search Page" msgstr "" -#: sphinx/domains/std.py:598 -#, python-format -msgid "duplicate citation %s, other instance in %s" -msgstr "" - -#: sphinx/domains/std.py:631 sphinx/ext/autosectionlabel.py:56 +#: sphinx/domains/std.py:638 sphinx/domains/std.py:727 +#: sphinx/ext/autosectionlabel.py:53 #, python-format msgid "duplicate label %s, other instance in %s" msgstr "" -#: sphinx/domains/std.py:665 +#: sphinx/domains/std.py:657 #, python-format -msgid "Citation [%s] is not referenced." +msgid "duplicate %s description of %s, other instance in %s" msgstr "" -#: sphinx/domains/std.py:748 +#: sphinx/domains/std.py:833 msgid "numfig is disabled. :numref: is ignored." msgstr "" -#: sphinx/domains/std.py:756 +#: sphinx/domains/std.py:841 #, python-format msgid "no number is assigned for %s: %s" msgstr "" -#: sphinx/domains/std.py:767 +#: sphinx/domains/std.py:852 #, python-format msgid "the link has no caption: %s" msgstr "" -#: sphinx/domains/std.py:781 +#: sphinx/domains/std.py:866 #, python-format msgid "invalid numfig_format: %s (%r)" msgstr "" -#: sphinx/domains/std.py:784 +#: sphinx/domains/std.py:869 #, python-format msgid "invalid numfig_format: %s" msgstr "" -#: sphinx/environment/__init__.py:69 +#: sphinx/environment/__init__.py:73 msgid "new config" msgstr "" -#: sphinx/environment/__init__.py:70 +#: sphinx/environment/__init__.py:74 msgid "config changed" msgstr "" -#: sphinx/environment/__init__.py:71 +#: sphinx/environment/__init__.py:75 msgid "extensions changed" msgstr "" -#: sphinx/environment/__init__.py:210 +#: sphinx/environment/__init__.py:202 msgid "build environment version not current" msgstr "" -#: sphinx/environment/__init__.py:212 +#: sphinx/environment/__init__.py:204 msgid "source directory has changed" msgstr "" @@ -2218,40 +2295,40 @@ msgid "" " another doctree directory." msgstr "" -#: sphinx/environment/__init__.py:404 +#: sphinx/environment/__init__.py:396 #, python-format msgid "Failed to scan documents in %s: %r" msgstr "" -#: sphinx/environment/__init__.py:532 +#: sphinx/environment/__init__.py:515 #, python-format msgid "Domain %r is not registered" msgstr "" -#: sphinx/environment/__init__.py:617 +#: sphinx/environment/__init__.py:596 msgid "self referenced toctree found. Ignored." msgstr "" -#: sphinx/environment/__init__.py:658 +#: sphinx/environment/__init__.py:636 msgid "document isn't included in any toctree" msgstr "" -#: sphinx/environment/adapters/indexentries.py:82 +#: sphinx/environment/adapters/indexentries.py:80 #, python-format msgid "see %s" msgstr "" -#: sphinx/environment/adapters/indexentries.py:86 +#: sphinx/environment/adapters/indexentries.py:84 #, python-format msgid "see also %s" msgstr "" -#: sphinx/environment/adapters/indexentries.py:89 +#: sphinx/environment/adapters/indexentries.py:87 #, python-format msgid "unknown index entry type %r" msgstr "" -#: sphinx/environment/adapters/indexentries.py:156 +#: sphinx/environment/adapters/indexentries.py:172 #: sphinx/templates/latex/sphinxmessages.sty_t:11 msgid "Symbols" msgstr "" @@ -2278,7 +2355,7 @@ msgstr "" msgid "toctree contains reference to nonexisting document %r" msgstr "" -#: sphinx/environment/collectors/asset.py:90 +#: sphinx/environment/collectors/asset.py:87 #, python-format msgid "image file not readable: %s" msgstr "" @@ -2288,22 +2365,22 @@ msgstr "" msgid "image file %s not readable: %s" msgstr "" -#: sphinx/environment/collectors/asset.py:134 +#: sphinx/environment/collectors/asset.py:132 #, python-format msgid "download file not readable: %s" msgstr "" -#: sphinx/environment/collectors/toctree.py:196 +#: sphinx/environment/collectors/toctree.py:191 #, python-format msgid "%s is already assigned section numbers (nested numbered toctree?)" msgstr "" -#: sphinx/ext/apidoc.py:69 +#: sphinx/ext/apidoc.py:100 #, python-format msgid "Would create file %s." msgstr "" -#: sphinx/ext/apidoc.py:299 +#: sphinx/ext/apidoc.py:351 msgid "" "\n" "Look recursively in for Python modules and packages and " @@ -2318,177 +2395,181 @@ msgid "" "Note: By default this script will not overwrite already created files." msgstr "" -#: sphinx/ext/apidoc.py:312 +#: sphinx/ext/apidoc.py:364 msgid "path to module to document" msgstr "" -#: sphinx/ext/apidoc.py:314 +#: sphinx/ext/apidoc.py:366 msgid "fnmatch-style file and/or directory patterns to exclude from generation" msgstr "" -#: sphinx/ext/apidoc.py:319 +#: sphinx/ext/apidoc.py:371 msgid "directory to place all output" msgstr "" -#: sphinx/ext/apidoc.py:322 +#: sphinx/ext/apidoc.py:376 msgid "maximum depth of submodules to show in the TOC (default: 4)" msgstr "" -#: sphinx/ext/apidoc.py:325 +#: sphinx/ext/apidoc.py:379 msgid "overwrite existing files" msgstr "" -#: sphinx/ext/apidoc.py:328 +#: sphinx/ext/apidoc.py:382 msgid "" "follow symbolic links. Powerful when combined with " "collective.recipe.omelette." msgstr "" -#: sphinx/ext/apidoc.py:331 +#: sphinx/ext/apidoc.py:385 msgid "run the script without creating files" msgstr "" -#: sphinx/ext/apidoc.py:334 +#: sphinx/ext/apidoc.py:388 msgid "put documentation for each module on its own page" msgstr "" -#: sphinx/ext/apidoc.py:337 +#: sphinx/ext/apidoc.py:391 msgid "include \"_private\" modules" msgstr "" -#: sphinx/ext/apidoc.py:339 +#: sphinx/ext/apidoc.py:393 msgid "filename of table of contents (default: modules)" msgstr "" -#: sphinx/ext/apidoc.py:341 +#: sphinx/ext/apidoc.py:395 msgid "don't create a table of contents file" msgstr "" -#: sphinx/ext/apidoc.py:344 +#: sphinx/ext/apidoc.py:398 msgid "" "don't create headings for the module/package packages (e.g. when the " "docstrings already contain them)" msgstr "" -#: sphinx/ext/apidoc.py:349 +#: sphinx/ext/apidoc.py:403 msgid "put module documentation before submodule documentation" msgstr "" -#: sphinx/ext/apidoc.py:353 +#: sphinx/ext/apidoc.py:407 msgid "" "interpret module paths according to PEP-0420 implicit namespaces " "specification" msgstr "" -#: sphinx/ext/apidoc.py:357 +#: sphinx/ext/apidoc.py:411 msgid "file suffix (default: rst)" msgstr "" -#: sphinx/ext/apidoc.py:359 +#: sphinx/ext/apidoc.py:413 msgid "generate a full project with sphinx-quickstart" msgstr "" -#: sphinx/ext/apidoc.py:362 +#: sphinx/ext/apidoc.py:416 msgid "append module_path to sys.path, used when --full is given" msgstr "" -#: sphinx/ext/apidoc.py:364 +#: sphinx/ext/apidoc.py:418 msgid "project name (default: root module name)" msgstr "" -#: sphinx/ext/apidoc.py:366 +#: sphinx/ext/apidoc.py:420 msgid "project author(s), used when --full is given" msgstr "" -#: sphinx/ext/apidoc.py:368 +#: sphinx/ext/apidoc.py:422 msgid "project version, used when --full is given" msgstr "" -#: sphinx/ext/apidoc.py:370 +#: sphinx/ext/apidoc.py:424 msgid "project release, used when --full is given, defaults to --doc-version" msgstr "" -#: sphinx/ext/apidoc.py:373 +#: sphinx/ext/apidoc.py:427 msgid "extension options" msgstr "" -#: sphinx/ext/apidoc.py:402 +#: sphinx/ext/apidoc.py:460 #, python-format msgid "%s is not a directory." msgstr "" -#: sphinx/ext/coverage.py:46 +#: sphinx/ext/coverage.py:42 #, python-format msgid "invalid regex %r in %s" msgstr "" -#: sphinx/ext/coverage.py:55 +#: sphinx/ext/coverage.py:51 #, python-format msgid "" "Testing of coverage in the sources finished, look at the results in " "%(outdir)spython.txt." msgstr "" -#: sphinx/ext/coverage.py:70 +#: sphinx/ext/coverage.py:65 #, python-format msgid "invalid regex %r in coverage_c_regexes" msgstr "" -#: sphinx/ext/coverage.py:152 +#: sphinx/ext/coverage.py:150 #, python-format msgid "module %s could not be imported: %s" msgstr "" -#: sphinx/ext/doctest.py:132 +#: sphinx/ext/doctest.py:131 #, python-format msgid "missing '+' or '-' in '%s' option." msgstr "" -#: sphinx/ext/doctest.py:137 +#: sphinx/ext/doctest.py:136 #, python-format msgid "'%s' is not a valid option." msgstr "" -#: sphinx/ext/doctest.py:151 +#: sphinx/ext/doctest.py:150 #, python-format msgid "'%s' is not a valid pyversion option" msgstr "" -#: sphinx/ext/doctest.py:222 +#: sphinx/ext/doctest.py:219 msgid "invalid TestCode type" msgstr "" -#: sphinx/ext/doctest.py:283 +#: sphinx/ext/doctest.py:277 #, python-format msgid "" "Testing of doctests in the sources finished, look at the results in " "%(outdir)s/output.txt." msgstr "" -#: sphinx/ext/doctest.py:446 +#: sphinx/ext/doctest.py:427 #, python-format msgid "no code/output in %s block at %s:%s" msgstr "" -#: sphinx/ext/doctest.py:535 +#: sphinx/ext/doctest.py:513 #, python-format msgid "ignoring invalid doctest code: %r" msgstr "" -#: sphinx/ext/graphviz.py:140 +#: sphinx/ext/duration.py:80 +msgid "====================== slowest reading durations =======================" +msgstr "" + +#: sphinx/ext/graphviz.py:132 msgid "Graphviz directive cannot have both content and a filename argument" msgstr "" -#: sphinx/ext/graphviz.py:150 +#: sphinx/ext/graphviz.py:142 #, python-format msgid "External Graphviz file %r not found or reading it failed" msgstr "" -#: sphinx/ext/graphviz.py:156 +#: sphinx/ext/graphviz.py:148 msgid "Ignoring \"graphviz\" directive without content." msgstr "" -#: sphinx/ext/graphviz.py:250 +#: sphinx/ext/graphviz.py:248 #, python-format msgid "" "dot did not produce an output file:\n" @@ -2498,14 +2579,14 @@ msgid "" "%r" msgstr "" -#: sphinx/ext/graphviz.py:254 +#: sphinx/ext/graphviz.py:252 #, python-format msgid "" "dot command %r cannot be run (needed for graphviz output), check the " "graphviz_dot setting" msgstr "" -#: sphinx/ext/graphviz.py:261 +#: sphinx/ext/graphviz.py:259 #, python-format msgid "" "dot exited with error:\n" @@ -2515,32 +2596,32 @@ msgid "" "%r" msgstr "" -#: sphinx/ext/graphviz.py:271 +#: sphinx/ext/graphviz.py:269 #, python-format msgid "graphviz_output_format must be one of 'png', 'svg', but is %r" msgstr "" -#: sphinx/ext/graphviz.py:275 sphinx/ext/graphviz.py:329 -#: sphinx/ext/graphviz.py:367 +#: sphinx/ext/graphviz.py:273 sphinx/ext/graphviz.py:324 +#: sphinx/ext/graphviz.py:361 #, python-format msgid "dot code %r: %s" msgstr "" -#: sphinx/ext/graphviz.py:382 sphinx/ext/graphviz.py:391 +#: sphinx/ext/graphviz.py:374 sphinx/ext/graphviz.py:382 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:384 sphinx/ext/graphviz.py:393 +#: sphinx/ext/graphviz.py:376 sphinx/ext/graphviz.py:384 msgid "[graph]" msgstr "" -#: sphinx/ext/imgconverter.py:43 sphinx/ext/imgconverter.py:68 +#: sphinx/ext/imgconverter.py:41 sphinx/ext/imgconverter.py:65 #, python-format msgid "convert command %r cannot be run.check the image_converter setting" msgstr "" -#: sphinx/ext/imgconverter.py:48 sphinx/ext/imgconverter.py:73 +#: sphinx/ext/imgconverter.py:46 sphinx/ext/imgconverter.py:70 #, python-format msgid "" "convert exited with error:\n" @@ -2550,75 +2631,75 @@ msgid "" "%r" msgstr "" -#: sphinx/ext/imgmath.py:139 +#: sphinx/ext/imgmath.py:170 #, python-format msgid "" "LaTeX command %r cannot be run (needed for math display), check the " "imgmath_latex setting" msgstr "" -#: sphinx/ext/imgmath.py:154 +#: sphinx/ext/imgmath.py:184 #, python-format msgid "" "%s command %r cannot be run (needed for math display), check the " "imgmath_%s setting" msgstr "" -#: sphinx/ext/imgmath.py:289 +#: sphinx/ext/imgmath.py:329 #, python-format msgid "display latex %r: %s" msgstr "" -#: sphinx/ext/imgmath.py:316 +#: sphinx/ext/imgmath.py:355 #, python-format msgid "inline latex %r: %s" msgstr "" -#: sphinx/ext/imgmath.py:323 sphinx/ext/mathjax.py:54 +#: sphinx/ext/imgmath.py:362 sphinx/ext/mathjax.py:49 msgid "Permalink to this equation" msgstr "" -#: sphinx/ext/intersphinx.py:182 +#: sphinx/ext/intersphinx.py:173 #, python-format msgid "intersphinx inventory has moved: %s -> %s" msgstr "" -#: sphinx/ext/intersphinx.py:217 +#: sphinx/ext/intersphinx.py:204 #, python-format msgid "loading intersphinx inventory from %s..." msgstr "" -#: sphinx/ext/intersphinx.py:232 +#: sphinx/ext/intersphinx.py:218 msgid "" "encountered some issues with some of the inventories, but they had " "working alternatives:" msgstr "" -#: sphinx/ext/intersphinx.py:238 +#: sphinx/ext/intersphinx.py:224 msgid "failed to reach any of the inventories with the following issues:" msgstr "" -#: sphinx/ext/intersphinx.py:311 +#: sphinx/ext/intersphinx.py:314 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/intersphinx.py:313 +#: sphinx/ext/intersphinx.py:316 #, python-format msgid "(in %s)" msgstr "" -#: sphinx/ext/intersphinx.py:347 +#: sphinx/ext/intersphinx.py:349 #, python-format msgid "intersphinx identifier %r is not string. Ignored" msgstr "" -#: sphinx/ext/intersphinx.py:360 +#: sphinx/ext/intersphinx.py:362 #, python-format msgid "Fail to read intersphinx_mapping[%s], Ignored: %r" msgstr "" -#: sphinx/ext/linkcode.py:72 sphinx/ext/viewcode.py:117 +#: sphinx/ext/linkcode.py:70 sphinx/ext/viewcode.py:113 msgid "[source]" msgstr "" @@ -2626,65 +2707,65 @@ msgstr "" msgid "Todo" msgstr "" -#: sphinx/ext/todo.py:111 +#: sphinx/ext/todo.py:103 sphinx/ext/todo.py:130 #, python-format msgid "TODO entry found: %s" msgstr "" -#: sphinx/ext/todo.py:160 +#: sphinx/ext/todo.py:193 sphinx/ext/todo.py:242 msgid "<>" msgstr "" -#: sphinx/ext/todo.py:163 +#: sphinx/ext/todo.py:195 sphinx/ext/todo.py:245 #, python-format msgid "(The <> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:172 +#: sphinx/ext/todo.py:205 sphinx/ext/todo.py:253 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:153 msgid "highlighting module code... " msgstr "" -#: sphinx/ext/viewcode.py:187 +#: sphinx/ext/viewcode.py:182 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:201 +#: sphinx/ext/viewcode.py:196 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:207 +#: sphinx/ext/viewcode.py:202 #, python-format msgid "

Source code for %s

" msgstr "" -#: sphinx/ext/viewcode.py:233 +#: sphinx/ext/viewcode.py:228 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:234 +#: sphinx/ext/viewcode.py:229 msgid "

All modules for which code is available

" msgstr "" -#: sphinx/ext/autodoc/__init__.py:300 +#: sphinx/ext/autodoc/__init__.py:298 #, python-format msgid "invalid signature for auto%s (%r)" msgstr "" -#: sphinx/ext/autodoc/__init__.py:400 +#: sphinx/ext/autodoc/__init__.py:395 #, python-format msgid "error while formatting arguments for %s: %s" msgstr "" -#: sphinx/ext/autodoc/__init__.py:512 +#: sphinx/ext/autodoc/__init__.py:502 #, python-format msgid "missing attribute %s in object %s" msgstr "" -#: sphinx/ext/autodoc/__init__.py:600 +#: sphinx/ext/autodoc/__init__.py:617 #, python-format msgid "" "autodoc: failed to determine %r to be documented.the following exception " @@ -2692,7 +2773,7 @@ msgid "" "%s" msgstr "" -#: sphinx/ext/autodoc/__init__.py:692 +#: sphinx/ext/autodoc/__init__.py:706 #, python-format msgid "" "don't know which module to import for autodocumenting %r (try placing a " @@ -2700,86 +2781,106 @@ msgid "" "explicit module name)" msgstr "" -#: sphinx/ext/autodoc/__init__.py:786 +#: sphinx/ext/autodoc/__init__.py:799 msgid "\"::\" in automodule name doesn't make sense" msgstr "" -#: sphinx/ext/autodoc/__init__.py:794 +#: sphinx/ext/autodoc/__init__.py:806 #, python-format msgid "signature arguments or return annotation given for automodule %s" msgstr "" -#: sphinx/ext/autodoc/__init__.py:827 +#: sphinx/ext/autodoc/__init__.py:837 #, python-format msgid "" "__all__ should be a list of strings, not %r (in module %s) -- ignoring " "__all__" msgstr "" -#: sphinx/ext/autodoc/__init__.py:842 +#: sphinx/ext/autodoc/__init__.py:852 #, python-format msgid "" "missing attribute mentioned in :members: or __all__: module %s, attribute" " %s" msgstr "" -#: sphinx/ext/autodoc/__init__.py:1126 +#: sphinx/ext/autodoc/__init__.py:1208 #, python-format msgid "Bases: %s" msgstr "" -#: sphinx/ext/autodoc/__init__.py:1183 +#: sphinx/ext/autodoc/__init__.py:1267 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/autodoc/__init__.py:1468 +#: sphinx/ext/autodoc/type_comment.py:132 #, python-format -msgid "Ignoring invalid option in autodoc_default_flags: %r" +msgid "Failed to parse type_comment for %r: %s" msgstr "" -#: sphinx/ext/autosummary/__init__.py:256 +#: sphinx/ext/autosummary/__init__.py:255 #, python-format -msgid "toctree references excluded document %r" +msgid "autosummary references excluded document %r. Ignored." msgstr "" -#: sphinx/ext/autosummary/__init__.py:258 +#: sphinx/ext/autosummary/__init__.py:257 #, python-format -msgid "toctree references unknown document %r" +msgid "" +"autosummary: stub file not found %r. Check your autosummary_generate " +"setting." msgstr "" -#: sphinx/ext/autosummary/__init__.py:292 +#: sphinx/ext/autosummary/__init__.py:296 #, python-format msgid "failed to import %s" msgstr "" -#: sphinx/ext/autosummary/__init__.py:307 +#: sphinx/ext/autosummary/__init__.py:311 #, python-format msgid "failed to parse name %s" msgstr "" -#: sphinx/ext/autosummary/__init__.py:311 +#: sphinx/ext/autosummary/__init__.py:315 #, python-format msgid "failed to import object %s" msgstr "" -#: sphinx/ext/autosummary/__init__.py:702 +#: sphinx/ext/autosummary/__init__.py:730 +#, python-format +msgid "autosummary_generate: file not found: %s" +msgstr "" + +#: sphinx/ext/autosummary/__init__.py:738 msgid "" "autosummary generats .rst files internally. But your source_suffix does " "not contain .rst. Skipped." msgstr "" -#: sphinx/ext/autosummary/generate.py:100 +#: sphinx/ext/autosummary/generate.py:153 +#, python-format +msgid "" +"autosummary: failed to determine %r to be documented.the following " +"exception was raised:\n" +"%s" +msgstr "" + +#: sphinx/ext/autosummary/generate.py:247 #, python-format msgid "[autosummary] generating autosummary for: %s" msgstr "" -#: sphinx/ext/autosummary/generate.py:104 +#: sphinx/ext/autosummary/generate.py:251 #, python-format msgid "[autosummary] writing to %s" msgstr "" -#: sphinx/ext/autosummary/generate.py:364 +#: sphinx/ext/autosummary/generate.py:277 +#, python-format +msgid "[autosummary] failed to import %r: %s" +msgstr "" + +#: sphinx/ext/autosummary/generate.py:435 msgid "" "\n" "Generate ReStructuredText using autosummary directives.\n" @@ -2796,110 +2897,107 @@ msgid "" " pydoc sphinx.ext.autosummary\n" msgstr "" -#: sphinx/ext/autosummary/generate.py:381 +#: sphinx/ext/autosummary/generate.py:452 msgid "source files to generate rST files for" msgstr "" -#: sphinx/ext/autosummary/generate.py:385 +#: sphinx/ext/autosummary/generate.py:456 msgid "directory to place all output in" msgstr "" -#: sphinx/ext/autosummary/generate.py:388 +#: sphinx/ext/autosummary/generate.py:459 #, python-format msgid "default suffix for files (default: %(default)s)" msgstr "" -#: sphinx/ext/autosummary/generate.py:392 +#: sphinx/ext/autosummary/generate.py:463 #, python-format msgid "custom template directory (default: %(default)s)" msgstr "" -#: sphinx/ext/autosummary/generate.py:396 +#: sphinx/ext/autosummary/generate.py:467 #, python-format msgid "document imported members (default: %(default)s)" msgstr "" -#: sphinx/ext/napoleon/__init__.py:330 sphinx/ext/napoleon/docstring.py:669 +#: sphinx/ext/napoleon/__init__.py:325 sphinx/ext/napoleon/docstring.py:638 msgid "Keyword Arguments" msgstr "" -#: sphinx/ext/napoleon/docstring.py:627 +#: sphinx/ext/napoleon/docstring.py:599 msgid "Example" msgstr "" -#: sphinx/ext/napoleon/docstring.py:628 +#: sphinx/ext/napoleon/docstring.py:600 msgid "Examples" msgstr "" -#: sphinx/ext/napoleon/docstring.py:684 +#: sphinx/ext/napoleon/docstring.py:651 msgid "Notes" msgstr "" -#: sphinx/ext/napoleon/docstring.py:688 +#: sphinx/ext/napoleon/docstring.py:654 msgid "Other Parameters" msgstr "" -#: sphinx/ext/napoleon/docstring.py:717 +#: sphinx/ext/napoleon/docstring.py:680 msgid "References" msgstr "" -#: sphinx/ext/napoleon/docstring.py:754 +#: sphinx/ext/napoleon/docstring.py:714 msgid "Warns" msgstr "" -#: sphinx/ext/napoleon/docstring.py:759 +#: sphinx/ext/napoleon/docstring.py:718 msgid "Yields" msgstr "" -#: sphinx/locale/__init__.py:307 +#: sphinx/locale/__init__.py:250 msgid "Attention" msgstr "" -#: sphinx/locale/__init__.py:308 +#: sphinx/locale/__init__.py:251 msgid "Caution" msgstr "" -#: sphinx/locale/__init__.py:309 +#: sphinx/locale/__init__.py:252 msgid "Danger" msgstr "" -#: sphinx/locale/__init__.py:310 +#: sphinx/locale/__init__.py:253 msgid "Error" msgstr "" -#: sphinx/locale/__init__.py:311 +#: sphinx/locale/__init__.py:254 msgid "Hint" msgstr "" -#: sphinx/locale/__init__.py:312 +#: sphinx/locale/__init__.py:255 msgid "Important" msgstr "" -#: sphinx/locale/__init__.py:313 +#: sphinx/locale/__init__.py:256 msgid "Note" msgstr "" -#: sphinx/locale/__init__.py:314 +#: sphinx/locale/__init__.py:257 msgid "See also" msgstr "" -#: sphinx/locale/__init__.py:315 +#: sphinx/locale/__init__.py:258 msgid "Tip" msgstr "" -#: sphinx/locale/__init__.py:316 +#: sphinx/locale/__init__.py:259 msgid "Warning" msgstr "" -#: sphinx/templates/latex/longtable.tex_t:23 +#: sphinx/templates/latex/longtable.tex_t:18 #: sphinx/templates/latex/sphinxmessages.sty_t:8 msgid "continued from previous page" msgstr "" -#: sphinx/templates/latex/longtable.tex_t:29 -msgid "Continued on next page" -msgstr "" - +#: sphinx/templates/latex/longtable.tex_t:24 #: sphinx/templates/latex/sphinxmessages.sty_t:9 msgid "continues on next page" msgstr "" @@ -2916,122 +3014,121 @@ msgstr "" msgid "page" msgstr "" -#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 -#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:41 +#: sphinx/themes/agogo/layout.html:27 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:10 sphinx/themes/scrolls/layout.html:31 msgid "Table of Contents" msgstr "" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:153 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:21 -#: sphinx/themes/basic/searchresults.html:10 +#: sphinx/themes/agogo/layout.html:30 sphinx/themes/basic/layout.html:52 +#: sphinx/themes/basic/search.html:10 sphinx/themes/basic/search.html:18 msgid "Search" msgstr "" -#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:16 +#: sphinx/themes/agogo/layout.html:33 sphinx/themes/basic/searchbox.html:15 msgid "Go" msgstr "" -#: sphinx/themes/agogo/layout.html:79 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:66 sphinx/themes/basic/sourcelink.html:14 msgid "Show Source" msgstr "" -#: sphinx/themes/basic/defindex.html:11 +#: sphinx/themes/basic/defindex.html:10 msgid "Overview" msgstr "" -#: sphinx/themes/basic/defindex.html:15 +#: sphinx/themes/basic/defindex.html:14 msgid "Welcome! This is" msgstr "" -#: sphinx/themes/basic/defindex.html:16 +#: sphinx/themes/basic/defindex.html:15 msgid "the documentation for" msgstr "" -#: sphinx/themes/basic/defindex.html:17 +#: sphinx/themes/basic/defindex.html:16 msgid "last updated" msgstr "" -#: sphinx/themes/basic/defindex.html:20 +#: sphinx/themes/basic/defindex.html:19 msgid "Indices and tables:" msgstr "" -#: sphinx/themes/basic/defindex.html:23 +#: sphinx/themes/basic/defindex.html:22 msgid "Complete Table of Contents" msgstr "" -#: sphinx/themes/basic/defindex.html:24 +#: sphinx/themes/basic/defindex.html:23 msgid "lists all sections and subsections" msgstr "" -#: sphinx/themes/basic/defindex.html:26 +#: sphinx/themes/basic/defindex.html:25 msgid "search this documentation" msgstr "" -#: sphinx/themes/basic/defindex.html:28 +#: sphinx/themes/basic/defindex.html:27 msgid "Global Module Index" msgstr "" -#: sphinx/themes/basic/defindex.html:29 +#: sphinx/themes/basic/defindex.html:28 msgid "quick access to all modules" msgstr "" -#: sphinx/themes/basic/defindex.html:31 +#: sphinx/themes/basic/defindex.html:30 msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:33 +#: sphinx/themes/basic/genindex-single.html:22 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:61 -#: sphinx/themes/basic/genindex-split.html:24 -#: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:72 +#: sphinx/themes/basic/genindex-single.html:41 +#: sphinx/themes/basic/genindex-split.html:22 +#: sphinx/themes/basic/genindex-split.html:35 +#: sphinx/themes/basic/genindex.html:49 msgid "Full index on one page" msgstr "" -#: sphinx/themes/basic/genindex-split.html:16 +#: sphinx/themes/basic/genindex-split.html:15 msgid "Index pages by letter" msgstr "" -#: sphinx/themes/basic/genindex-split.html:25 +#: sphinx/themes/basic/genindex-split.html:23 msgid "can be huge" msgstr "" -#: sphinx/themes/basic/layout.html:31 +#: sphinx/themes/basic/layout.html:16 msgid "Navigation" msgstr "" -#: sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/layout.html:47 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:147 +#: sphinx/themes/basic/layout.html:50 msgid "About these documents" msgstr "" -#: sphinx/themes/basic/layout.html:156 +#: sphinx/themes/basic/layout.html:53 msgid "Copyright" msgstr "" -#: sphinx/themes/basic/layout.html:201 +#: sphinx/themes/basic/layout.html:69 #, python-format msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:203 +#: sphinx/themes/basic/layout.html:70 #, python-format msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:207 +#: sphinx/themes/basic/layout.html:71 #, python-format msgid "Last updated on %(last_updated)s." msgstr "" -#: sphinx/themes/basic/layout.html:210 +#: sphinx/themes/basic/layout.html:72 #, python-format msgid "" "Created using Sphinx " @@ -3043,57 +3140,55 @@ msgstr "" msgid "Search %(docstitle)s" msgstr "" -#: sphinx/themes/basic/relations.html:11 +#: sphinx/themes/basic/relations.html:10 msgid "Previous topic" msgstr "" -#: sphinx/themes/basic/relations.html:13 +#: sphinx/themes/basic/relations.html:12 msgid "previous chapter" msgstr "" -#: sphinx/themes/basic/relations.html:16 +#: sphinx/themes/basic/relations.html:13 msgid "Next topic" msgstr "" -#: sphinx/themes/basic/relations.html:18 +#: sphinx/themes/basic/relations.html:15 msgid "next chapter" msgstr "" -#: sphinx/themes/basic/search.html:25 +#: sphinx/themes/basic/search.html:22 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "" -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:27 msgid "" -"From here you can search these documents. Enter your search\n" -" words into the box below and click \"search\". Note that the search\n" -" function will automatically search for all of the words. Pages\n" -" containing fewer words won't appear in the result list." +"Searching for multiple words only shows matches that contain\n" +" all words." msgstr "" -#: sphinx/themes/basic/search.html:37 sphinx/themes/basic/searchresults.html:17 +#: sphinx/themes/basic/search.html:32 msgid "search" msgstr "" -#: sphinx/themes/basic/search.html:41 sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/static/searchtools.js:301 msgid "Search Results" msgstr "" -#: sphinx/themes/basic/search.html:43 sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js:287 +#: sphinx/themes/basic/search.html:38 +#: sphinx/themes/basic/static/searchtools.js:303 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." msgstr "" -#: sphinx/themes/basic/searchbox.html:12 +#: sphinx/themes/basic/searchbox.html:11 msgid "Quick search" msgstr "" -#: sphinx/themes/basic/sourcelink.html:12 +#: sphinx/themes/basic/sourcelink.html:11 msgid "This Page" msgstr "" @@ -3125,15 +3220,15 @@ msgstr "" msgid "Other changes" msgstr "" -#: sphinx/themes/basic/static/doctools.js:194 sphinx/writers/html.py:454 -#: sphinx/writers/html.py:459 sphinx/writers/html5.py:400 -#: sphinx/writers/html5.py:405 +#: sphinx/themes/basic/static/doctools.js:194 sphinx/writers/html.py:403 +#: sphinx/writers/html.py:408 sphinx/writers/html5.py:355 +#: sphinx/writers/html5.py:360 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:200 sphinx/writers/html.py:134 -#: sphinx/writers/html.py:145 sphinx/writers/html5.py:103 -#: sphinx/writers/html5.py:114 +#: sphinx/themes/basic/static/doctools.js:200 sphinx/writers/html.py:121 +#: sphinx/writers/html.py:130 sphinx/writers/html5.py:93 +#: sphinx/writers/html5.py:102 msgid "Permalink to this definition" msgstr "" @@ -3141,20 +3236,20 @@ msgstr "" msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js:121 +#: sphinx/themes/basic/static/searchtools.js:136 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js:126 +#: sphinx/themes/basic/static/searchtools.js:141 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js:289 +#: sphinx/themes/basic/static/searchtools.js:305 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js:342 +#: sphinx/themes/basic/static/searchtools.js:359 msgid ", in " msgstr "" @@ -3167,224 +3262,215 @@ msgstr "" msgid "Collapse sidebar" msgstr "" -#: sphinx/themes/haiku/layout.html:24 +#: sphinx/themes/haiku/layout.html:19 msgid "Contents" msgstr "" -#: sphinx/transforms/__init__.py:261 +#: sphinx/transforms/__init__.py:224 #, python-format msgid "4 column based index found. It might be a bug of extensions you use: %r" msgstr "" -#: sphinx/transforms/__init__.py:303 +#: sphinx/transforms/__init__.py:263 #, python-format msgid "Footnote [%s] is not referenced." msgstr "" -#: sphinx/transforms/__init__.py:309 +#: sphinx/transforms/__init__.py:269 msgid "Footnote [#] is not referenced." msgstr "" -#: sphinx/transforms/i18n.py:293 sphinx/transforms/i18n.py:363 +#: sphinx/transforms/i18n.py:296 sphinx/transforms/i18n.py:366 msgid "" "inconsistent footnote references in translated message. original: {0}, " "translated: {1}" msgstr "" -#: sphinx/transforms/i18n.py:335 +#: sphinx/transforms/i18n.py:338 msgid "" "inconsistent references in translated message. original: {0}, translated:" " {1}" msgstr "" -#: sphinx/transforms/i18n.py:382 +#: sphinx/transforms/i18n.py:385 msgid "" "inconsistent citation references in translated message. original: {0}, " "translated: {1}" msgstr "" -#: sphinx/transforms/i18n.py:402 +#: sphinx/transforms/i18n.py:405 msgid "" "inconsistent term references in translated message. original: {0}, " "translated: {1}" msgstr "" -#: sphinx/transforms/post_transforms/__init__.py:110 +#: sphinx/transforms/post_transforms/__init__.py:138 #, python-format msgid "more than one target found for 'any' cross-reference %r: could be %s" msgstr "" -#: sphinx/transforms/post_transforms/__init__.py:142 +#: sphinx/transforms/post_transforms/__init__.py:170 #, python-format msgid "%s:%s reference target not found: %%(target)s" msgstr "" -#: sphinx/transforms/post_transforms/__init__.py:145 +#: sphinx/transforms/post_transforms/__init__.py:173 #, python-format msgid "%r reference target not found: %%(target)s" msgstr "" -#: sphinx/transforms/post_transforms/images.py:92 +#: sphinx/transforms/post_transforms/images.py:86 #, python-format msgid "Could not fetch remote image: %s [%d]" msgstr "" -#: sphinx/transforms/post_transforms/images.py:120 +#: sphinx/transforms/post_transforms/images.py:114 #, python-format msgid "Could not fetch remote image: %s [%s]" msgstr "" -#: sphinx/transforms/post_transforms/images.py:140 +#: sphinx/transforms/post_transforms/images.py:132 #, python-format msgid "Unknown image format: %s..." msgstr "" -#: sphinx/util/__init__.py:415 +#: sphinx/util/__init__.py:379 #, python-format msgid "undecodable source characters, replacing with \"?\": %r" msgstr "" -#: sphinx/util/__init__.py:695 +#: sphinx/util/__init__.py:639 msgid "skipped" msgstr "" -#: sphinx/util/__init__.py:700 +#: sphinx/util/__init__.py:644 msgid "failed" msgstr "" -#: sphinx/util/docutils.py:320 -msgid "when adding directive classes, no additional arguments may be given" -msgstr "" - -#: sphinx/util/i18n.py:74 +#: sphinx/util/i18n.py:68 #, python-format msgid "reading error: %s, %s" msgstr "" -#: sphinx/util/i18n.py:81 +#: sphinx/util/i18n.py:75 #, python-format msgid "writing error: %s, %s" msgstr "" -#: sphinx/util/i18n.py:215 +#: sphinx/util/i18n.py:260 #, python-format msgid "" "Invalid date format. Quote the string by single quote if you want to " "output it directly: %s" msgstr "" -#: sphinx/util/nodes.py:428 +#: sphinx/util/nodes.py:426 #, python-format msgid "toctree contains ref to nonexisting file %r" msgstr "" -#: sphinx/util/nodes.py:501 +#: sphinx/util/nodes.py:526 #, python-format msgid "exception while evaluating only directive expression: %s" msgstr "" -#: sphinx/util/pycompat.py:82 +#: sphinx/util/pycompat.py:77 #, python-format msgid "" "Support for evaluating Python 2 syntax is deprecated and will be removed " "in Sphinx 4.0. Convert %s to Python 3 syntax." msgstr "" -#: sphinx/util/rst.py:49 +#: sphinx/util/rst.py:74 #, python-format msgid "default role %s not found" msgstr "" -#: sphinx/writers/html.py:345 sphinx/writers/html5.py:313 +#: sphinx/writers/html.py:306 sphinx/writers/html5.py:278 #, python-format msgid "numfig_format is not defined for %s" msgstr "" -#: sphinx/writers/html.py:355 sphinx/writers/html5.py:323 +#: sphinx/writers/html.py:316 sphinx/writers/html5.py:288 #, python-format msgid "Any IDs not assigned for %s node" msgstr "" -#: sphinx/writers/html.py:463 sphinx/writers/html5.py:409 +#: sphinx/writers/html.py:412 sphinx/writers/html5.py:364 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/html.py:510 sphinx/writers/html5.py:456 +#: sphinx/writers/html.py:456 sphinx/writers/html5.py:408 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:512 sphinx/writers/html5.py:458 +#: sphinx/writers/html.py:458 sphinx/writers/html5.py:410 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:514 sphinx/writers/html5.py:460 +#: sphinx/writers/html.py:460 sphinx/writers/html5.py:412 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:672 sphinx/writers/html5.py:606 +#: sphinx/writers/html.py:584 sphinx/writers/html5.py:525 msgid "Could not obtain image size. :scale: option is ignored." msgstr "" -#: sphinx/writers/latex.py:510 +#: sphinx/writers/latex.py:352 #, python-format msgid "unknown %r toplevel_sectioning for class %r" msgstr "" -#: sphinx/writers/latex.py:603 +#: sphinx/writers/latex.py:404 msgid "too large :maxdepth:, ignored." msgstr "" -#: sphinx/writers/latex.py:893 +#: sphinx/writers/latex.py:653 msgid "document title is not a single Text node" msgstr "" -#: sphinx/writers/latex.py:926 sphinx/writers/texinfo.py:658 +#: sphinx/writers/latex.py:685 sphinx/writers/texinfo.py:626 msgid "encountered title node not in section, topic, table, admonition or sidebar" msgstr "" -#: sphinx/writers/latex.py:1102 sphinx/writers/manpage.py:277 -#: sphinx/writers/texinfo.py:675 +#: sphinx/writers/latex.py:827 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:641 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:1150 +#: sphinx/writers/latex.py:879 msgid "both tabularcolumns and :widths: option are given. :widths: is ignored." msgstr "" -#: sphinx/writers/latex.py:1521 +#: sphinx/writers/latex.py:1202 #, python-format msgid "dimension unit %s is invalid. Ignored." msgstr "" -#: sphinx/writers/latex.py:1847 +#: sphinx/writers/latex.py:1513 #, python-format msgid "unknown index entry type %s found" msgstr "" -#: sphinx/writers/latex.py:2560 -#, python-format -msgid "Unknown configure key: latex_elements[%r] is ignored." -msgstr "" - -#: sphinx/writers/manpage.py:333 sphinx/writers/text.py:887 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:788 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:334 sphinx/writers/text.py:888 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:789 msgid "[image]" msgstr "" -#: sphinx/writers/texinfo.py:1330 +#: sphinx/writers/texinfo.py:1185 msgid "caption not inside a figure." msgstr "" -#: sphinx/writers/texinfo.py:1422 +#: sphinx/writers/texinfo.py:1261 #, python-format msgid "unimplemented node type: %r" msgstr "" -#: sphinx/writers/texinfo.py:1427 +#: sphinx/writers/texinfo.py:1265 #, python-format msgid "unknown node type: %r" msgstr "" diff --git a/sphinx/themes/basic/static/documentation_options.js_t b/sphinx/themes/basic/static/documentation_options.js_t index 059e8871c..8afaac2f8 100644 --- a/sphinx/themes/basic/static/documentation_options.js_t +++ b/sphinx/themes/basic/static/documentation_options.js_t @@ -5,6 +5,7 @@ var DOCUMENTATION_OPTIONS = { COLLAPSE_INDEX: false, BUILDER: '{{ builder }}', FILE_SUFFIX: '{{ file_suffix }}', + LINK_SUFFIX: '{{ link_suffix }}', HAS_SOURCE: {{ has_source|lower }}, SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}', NAVIGATION_WITH_KEYS: {{ 'true' if theme_navigation_with_keys|tobool else 'false'}} diff --git a/sphinx/themes/basic/static/searchtools.js b/sphinx/themes/basic/static/searchtools.js index d11b33a78..ab5649965 100644 --- a/sphinx/themes/basic/static/searchtools.js +++ b/sphinx/themes/basic/static/searchtools.js @@ -251,6 +251,7 @@ var Search = { var item = results.pop(); var listItem = $('
  • '); var requestUrl = ""; + var linkUrl = ""; if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') { // dirhtml builder var dirname = item[0] + '/'; @@ -260,13 +261,15 @@ var Search = { dirname = ''; } requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname; + linkUrl = requestUrl; } else { // normal html builders requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX; + linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX; } listItem.append($('').attr('href', - requestUrl + + linkUrl + highlightstring + item[2]).html(item[1])); if (item[3]) { listItem.append($(' (' + item[3] + ')')); diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index fb5e96d5f..98ddc5fa6 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -224,6 +224,26 @@ def isattributedescriptor(obj: Any) -> bool: return False +def is_singledispatch_function(obj: Any) -> bool: + """Check if the object is singledispatch function.""" + if (inspect.isfunction(obj) and + hasattr(obj, 'dispatch') and + hasattr(obj, 'register') and + obj.dispatch.__module__ == 'functools'): + return True + else: + return False + + +def is_singledispatch_method(obj: Any) -> bool: + """Check if the object is singledispatch method.""" + try: + from functools import singledispatchmethod # type: ignore + return isinstance(obj, singledispatchmethod) + except ImportError: # py35-37 + return False + + def isfunction(obj: Any) -> bool: """Check if the object is function.""" return inspect.isfunction(unwrap(obj)) diff --git a/tests/roots/test-domain-py/module.rst b/tests/roots/test-domain-py/module.rst index c01032b26..dce3fa5ac 100644 --- a/tests/roots/test-domain-py/module.rst +++ b/tests/roots/test-domain-py/module.rst @@ -51,3 +51,11 @@ module .. py:attribute:: attr2 :type: :doc:`index` + +.. py:module:: exceptions + +.. py:exception:: Exception + +.. py:module:: object + +.. py:function:: sum() diff --git a/tests/roots/test-ext-autodoc/target/singledispatch.py b/tests/roots/test-ext-autodoc/target/singledispatch.py new file mode 100644 index 000000000..c33d001b1 --- /dev/null +++ b/tests/roots/test-ext-autodoc/target/singledispatch.py @@ -0,0 +1,19 @@ +from functools import singledispatch + + +@singledispatch +def func(arg, kwarg=None): + """A function for general use.""" + pass + + +@func.register(int) +def _func_int(arg, kwarg=None): + """A function for int.""" + pass + + +@func.register(str) +def _func_str(arg, kwarg=None): + """A function for str.""" + pass diff --git a/tests/roots/test-ext-autodoc/target/singledispatchmethod.py b/tests/roots/test-ext-autodoc/target/singledispatchmethod.py new file mode 100644 index 000000000..b5ccbb2f0 --- /dev/null +++ b/tests/roots/test-ext-autodoc/target/singledispatchmethod.py @@ -0,0 +1,20 @@ +from functools import singledispatchmethod + + +class Foo: + """docstring""" + + @singledispatchmethod + def meth(self, arg, kwarg=None): + """A method for general use.""" + pass + + @meth.register(int) + def _meth_int(self, arg, kwarg=None): + """A method for int.""" + pass + + @meth.register(str) + def _meth_str(self, arg, kwarg=None): + """A method for str.""" + pass diff --git a/tests/test_autodoc.py b/tests/test_autodoc.py index b001de804..0510fff86 100644 --- a/tests/test_autodoc.py +++ b/tests/test_autodoc.py @@ -1563,3 +1563,49 @@ def test_autodoc_for_egged_code(app): ' :module: sample', '' ] + + +@pytest.mark.usefixtures('setup_test') +def test_singledispatch(): + options = {"members": None} + actual = do_autodoc(app, 'module', 'target.singledispatch', options) + assert list(actual) == [ + '', + '.. py:module:: target.singledispatch', + '', + '', + '.. py:function:: func(arg, kwarg=None)', + ' func(arg: int, kwarg=None)', + ' func(arg: str, kwarg=None)', + ' :module: target.singledispatch', + '', + ' A function for general use.', + ' ' + ] + + +@pytest.mark.skipif(sys.version_info < (3, 8), + reason='singledispatchmethod is available since python3.8') +@pytest.mark.usefixtures('setup_test') +def test_singledispatchmethod(): + options = {"members": None} + actual = do_autodoc(app, 'module', 'target.singledispatchmethod', options) + assert list(actual) == [ + '', + '.. py:module:: target.singledispatchmethod', + '', + '', + '.. py:class:: Foo', + ' :module: target.singledispatchmethod', + '', + ' docstring', + ' ', + ' ', + ' .. py:method:: Foo.meth(arg, kwarg=None)', + ' Foo.meth(arg: int, kwarg=None)', + ' Foo.meth(arg: str, kwarg=None)', + ' :module: target.singledispatchmethod', + ' ', + ' A method for general use.', + ' ' + ] diff --git a/tests/test_domain_py.py b/tests/test_domain_py.py index 218ded510..27819af6b 100644 --- a/tests/test_domain_py.py +++ b/tests/test_domain_py.py @@ -585,6 +585,36 @@ def test_pyattribute(app): assert domain.objects['Class.attr'] == ('index', 'class-attr', 'attribute') +def test_pydecorator_signature(app): + text = ".. py:decorator:: deco" + domain = app.env.get_domain('py') + doctree = restructuredtext.parse(app, text) + assert_node(doctree, (addnodes.index, + [desc, ([desc_signature, ([desc_addname, "@"], + [desc_name, "deco"])], + desc_content)])) + assert_node(doctree[1], addnodes.desc, desctype="function", + domain="py", objtype="function", noindex=False) + + assert 'deco' in domain.objects + assert domain.objects['deco'] == ('index', 'deco', 'function') + + +def test_pydecoratormethod_signature(app): + text = ".. py:decoratormethod:: deco" + domain = app.env.get_domain('py') + doctree = restructuredtext.parse(app, text) + assert_node(doctree, (addnodes.index, + [desc, ([desc_signature, ([desc_addname, "@"], + [desc_name, "deco"])], + desc_content)])) + assert_node(doctree[1], addnodes.desc, desctype="method", + domain="py", objtype="method", noindex=False) + + assert 'deco' in domain.objects + assert domain.objects['deco'] == ('index', 'deco', 'method') + + @pytest.mark.sphinx(freshenv=True) def test_module_index(app): text = (".. py:module:: docutils\n" diff --git a/tests/test_ext_autodoc_configs.py b/tests/test_ext_autodoc_configs.py index b90772f6e..e250b21b3 100644 --- a/tests/test_ext_autodoc_configs.py +++ b/tests/test_ext_autodoc_configs.py @@ -462,10 +462,9 @@ def test_mocked_module_imports(app, warning): assert warning.getvalue() == '' -@pytest.mark.sphinx('html', testroot='ext-autodoc') +@pytest.mark.sphinx('html', testroot='ext-autodoc', + confoverrides={'autodoc_typehints': "signature"}) def test_autodoc_typehints_signature(app): - app.config.autodoc_typehints = "signature" - options = {"members": None, "undoc-members": True} actual = do_autodoc(app, 'module', 'target.typehints', options) @@ -513,10 +512,9 @@ def test_autodoc_typehints_signature(app): ] -@pytest.mark.sphinx('html', testroot='ext-autodoc') +@pytest.mark.sphinx('html', testroot='ext-autodoc', + confoverrides={'autodoc_typehints': "none"}) def test_autodoc_typehints_none(app): - app.config.autodoc_typehints = "none" - options = {"members": None, "undoc-members": True} actual = do_autodoc(app, 'module', 'target.typehints', options) @@ -564,8 +562,7 @@ def test_autodoc_typehints_none(app): @pytest.mark.sphinx('text', testroot='ext-autodoc', - confoverrides={'extensions': ['sphinx.ext.autodoc.typehints'], - 'autodoc_typehints': 'description'}) + confoverrides={'autodoc_typehints': "description"}) def test_autodoc_typehints_description(app): app.build() context = (app.outdir / 'index.txt').read_text()