Merge branch 'sphinx-doc:4.x' into container-latex

This commit is contained in:
David A. Ham 2021-05-12 20:34:23 +01:00
commit 20d5570abc
228 changed files with 56561 additions and 48609 deletions

View File

@ -23,9 +23,9 @@ jobs:
python: 3.9 python: 3.9
docutils: du17 docutils: du17
coverage: "--cov ./ --cov-append --cov-config setup.cfg" coverage: "--cov ./ --cov-append --cov-config setup.cfg"
# - name: py310-dev - name: py310-dev
# python: 3.10-dev python: 3.10-dev
# docutils: du16 docutils: du17
env: env:
PYTEST_ADDOPTS: ${{ matrix.coverage }} PYTEST_ADDOPTS: ${{ matrix.coverage }}

51
.github/workflows/transifex.yml vendored Normal file
View File

@ -0,0 +1,51 @@
name: Sync translations on repository and transifex.com
on:
schedule:
- cron: "0 0 * * SUN"
workflow_dispatch:
jobs:
push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: 4.x
- name: Set up Python
uses: actions/setup-python@v2
- name: Install dependencies
run: pip install -U babel jinja2 transifex-client
- name: Extract translations from source code
run: python setup.py extract_messages
- name: Push translations to transifex.com
run: cd sphinx/locale && tx push -s --no-interactive --parallel
env:
TX_TOKEN: ${{ secrets.TX_TOKEN }}
pull:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: 4.x
- name: Set up Python
uses: actions/setup-python@v2
- name: Install dependencies
run: pip install -U babel jinja2 transifex-client
- name: Extract translations from source code
run: python setup.py extract_messages
- name: Pull translations to transifex.com
run: cd sphinx/locale && tx pull -a -f --no-interactive --parallel
env:
TX_TOKEN: ${{ secrets.TX_TOKEN }}
- name: Compile message catalogs
run: python setup.py compile_catalog
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
commit-message: 'Update message catalogs'
branch: bot/pull-translations
title: Update message catalogs

118
CHANGES
View File

@ -4,12 +4,15 @@ Release 4.1.0 (in development)
Dependencies Dependencies
------------ ------------
* Support jinja2-3.0
Incompatible changes Incompatible changes
-------------------- --------------------
Deprecated Deprecated
---------- ----------
* ``sphinx.application.Sphinx.html_theme``
* ``sphinx.util.docstrings.extract_metadata()`` * ``sphinx.util.docstrings.extract_metadata()``
Features added Features added
@ -21,10 +24,19 @@ Features added
* #8588: autodoc: :confval:`autodoc_type_aliases` now supports dotted name. It * #8588: autodoc: :confval:`autodoc_type_aliases` now supports dotted name. It
allows you to define an alias for a class with module name like allows you to define an alias for a class with module name like
``foo.bar.BazClass`` ``foo.bar.BazClass``
* #9175: autodoc: Special member is not documented in the module
* #9195: autodoc: The arguments of ``typing.Literal`` are wrongly rendered
* #9185: autodoc: :confval:`autodoc_typehints` allows ``'both'`` setting to
allow typehints to be included both in the signature and description
* #3257: autosummary: Support instance attributes for classes
* #9129: html search: Show search summaries when html_copy_source = False * #9129: html search: Show search summaries when html_copy_source = False
* #9120: html theme: Eliminate prompt characters of code-block from copyable * #9120: html theme: Eliminate prompt characters of code-block from copyable
text text
* #9176: i18n: Emit a debug message if message catalog file not found under
:confval:`locale_dirs`
* #9097: Optimize the paralell build * #9097: Optimize the paralell build
* #9131: Add :confval:`nitpick_ignore_regex` to ignore nitpicky warnings using
regular expressions
Bugs fixed Bugs fixed
@ -33,12 +45,13 @@ Bugs fixed
* #8872: autodoc: stacked singledispatches are wrongly rendered * #8872: autodoc: stacked singledispatches are wrongly rendered
* #8597: autodoc: a docsting having metadata only should be treated as * #8597: autodoc: a docsting having metadata only should be treated as
undocumented undocumented
* #9185: autodoc: typehints for overloaded functions and methods are inaccurate
Testing Testing
-------- --------
Release 4.0.0 beta3 (in development) Release 4.0.2 (in development)
==================================== ==============================
Dependencies Dependencies
------------ ------------
@ -55,15 +68,41 @@ Features added
Bugs fixed Bugs fixed
---------- ----------
* #9210: viewcode: crashed if non importable modules found on parallel build
Testing Testing
-------- --------
Release 4.0.0 beta2 (released Apr 29, 2021) Release 4.0.1 (released May 11, 2021)
=========================================== =====================================
Bugs fixed
----------
* #9189: autodoc: crashed when ValueError is raised on generating signature
from a property of the class
* #9188: autosummary: warning is emitted if list value is set to
autosummary_generate
* #8380: html search: tags for search result are broken
* #9198: i18n: Babel emits errors when running compile_catalog
* #9205: py domain: The :canonical: option causes "more than one target for
cross-reference" warning
* #9201: websupport: UndefinedError is raised: 'css_tag' is undefined
Release 4.0.0 (released May 09, 2021)
=====================================
Dependencies Dependencies
------------ ------------
4.0.0b1
* Drop python 3.5 support
* Drop docutils 0.12 and 0.13 support
* LaTeX: add ``tex-gyre`` font dependency
4.0.0b2
* Support docutils-0.17. Please notice it changes the output of HTML builder. * Support docutils-0.17. Please notice it changes the output of HTML builder.
Some themes do not support it, and you need to update your custom CSS to Some themes do not support it, and you need to update your custom CSS to
upgrade it. upgrade it.
@ -71,43 +110,7 @@ Dependencies
Incompatible changes Incompatible changes
-------------------- --------------------
* #9023: Change the CSS classes on :rst:role:`cpp:expr` and 4.0.0b1
:rst:role:`cpp:texpr`.
Features added
--------------
* #8818: autodoc: Super class having ``Any`` arguments causes nit-picky warning
* #9095: autodoc: TypeError is raised on processing broken metaclass
* #9110: autodoc: metadata of GenericAlias is not rendered as a reference in
py37+
* #9098: html: copy-range protection for doctests doesn't work in Safari
* #9103: LaTeX: imgconverter: conversion runs even if not needed
* #8127: py domain: Ellipsis in info-field-list causes nit-picky warning
* #9121: py domain: duplicated warning is emitted when both canonical and its
alias objects are defined on the document
* #9023: More CSS classes on domain descriptions, see :ref:`nodes` for details.
* #8195: mathjax: Rename :confval:`mathjax_config` to
:confval:`mathjax2_config` and add :confval:`mathjax3_config`
Bugs fixed
----------
* C, C++, fix ``KeyError`` when an ``alias`` directive is the first C/C++
directive in a file with another C/C++ directive later.
Release 4.0.0 beta1 (released Apr 12, 2021)
===========================================
Dependencies
------------
* Drop python 3.5 support
* Drop docutils 0.12 and 0.13 support
* LaTeX: add ``tex-gyre`` font dependency
Incompatible changes
--------------------
* #8539: autodoc: info-field-list is generated into the class description when * #8539: autodoc: info-field-list is generated into the class description when
``autodoc_typehints='description'`` and ``autoclass_content='class'`` set ``autodoc_typehints='description'`` and ``autoclass_content='class'`` set
@ -144,6 +147,11 @@ Incompatible changes
* #8487: The :file: option for csv-table directive now recognizes an absolute * #8487: The :file: option for csv-table directive now recognizes an absolute
path as a relative path from source directory path as a relative path from source directory
4.0.0b2
* #9023: Change the CSS classes on :rst:role:`cpp:expr` and
:rst:role:`cpp:texpr`.
Deprecated Deprecated
---------- ----------
@ -165,6 +173,8 @@ Deprecated
Features added Features added
-------------- --------------
4.0.0b1
* #8924: autodoc: Support ``bound`` argument for TypeVar * #8924: autodoc: Support ``bound`` argument for TypeVar
* #7383: autodoc: Support typehints for properties * #7383: autodoc: Support typehints for properties
* #5603: autodoc: Allow to refer to a python class using its canonical name * #5603: autodoc: Allow to refer to a python class using its canonical name
@ -194,9 +204,26 @@ Features added
* #7199: A new node, ``sphinx.addnodes.pending_xref_condition`` has been added. * #7199: A new node, ``sphinx.addnodes.pending_xref_condition`` has been added.
It can be used to choose appropriate content of the reference by conditions. It can be used to choose appropriate content of the reference by conditions.
4.0.0b2
* #8818: autodoc: Super class having ``Any`` arguments causes nit-picky warning
* #9095: autodoc: TypeError is raised on processing broken metaclass
* #9110: autodoc: metadata of GenericAlias is not rendered as a reference in
py37+
* #9098: html: copy-range protection for doctests doesn't work in Safari
* #9103: LaTeX: imgconverter: conversion runs even if not needed
* #8127: py domain: Ellipsis in info-field-list causes nit-picky warning
* #9121: py domain: duplicated warning is emitted when both canonical and its
alias objects are defined on the document
* #9023: More CSS classes on domain descriptions, see :ref:`nodes` for details.
* #8195: mathjax: Rename :confval:`mathjax_config` to
:confval:`mathjax2_config` and add :confval:`mathjax3_config`
Bugs fixed Bugs fixed
---------- ----------
4.0.0b1
* #8917: autodoc: Raises a warning if function has wrong __globals__ value * #8917: autodoc: Raises a warning if function has wrong __globals__ value
* #8415: autodoc: a TypeVar imported from other module is not resolved (in * #8415: autodoc: a TypeVar imported from other module is not resolved (in
Python 3.7 or above) Python 3.7 or above)
@ -231,6 +258,15 @@ Bugs fixed
(function) declarators, and in the argument to ``sizeof...``. (function) declarators, and in the argument to ``sizeof...``.
* C, fix linking of names in array declarators. * C, fix linking of names in array declarators.
4.0.0b2
* C, C++, fix ``KeyError`` when an ``alias`` directive is the first C/C++
directive in a file with another C/C++ directive later.
4.0.0b3
* #9167: html: Failed to add CSS files to the specific page
Release 3.5.5 (in development) Release 3.5.5 (in development)
============================== ==============================

View File

@ -10,10 +10,6 @@
:target: http://www.sphinx-doc.org/ :target: http://www.sphinx-doc.org/
:alt: Documentation Status :alt: Documentation Status
.. image:: https://travis-ci.org/sphinx-doc/sphinx.svg?branch=master
:target: https://travis-ci.org/sphinx-doc/sphinx
:alt: Build Status (Travis CI)
.. image:: https://ci.appveyor.com/api/projects/status/github/sphinx-doc/sphinx?branch=master&svg=true .. image:: https://ci.appveyor.com/api/projects/status/github/sphinx-doc/sphinx?branch=master&svg=true
:target: https://ci.appveyor.com/project/sphinxdoc/sphinx :target: https://ci.appveyor.com/project/sphinxdoc/sphinx
:alt: Build Status (AppVeyor) :alt: Build Status (AppVeyor)

View File

@ -22,6 +22,11 @@ The following is a list of deprecated interfaces.
- (will be) Removed - (will be) Removed
- Alternatives - Alternatives
* - ``sphinx.application.Sphinx.html_theme``
- 4.1
- 6.0
- ``sphinx.registry.SphinxComponentRegistry.html_themes``
* - ``sphinx.util.docstrings.extract_metadata()`` * - ``sphinx.util.docstrings.extract_metadata()``
- 4.1 - 4.1
- 6.0 - 6.0
@ -40,12 +45,12 @@ The following is a list of deprecated interfaces.
* - ``sphinx.directives.patches.ListTable`` * - ``sphinx.directives.patches.ListTable``
- 4.0 - 4.0
- 6.0 - 6.0
- ``docutils.parsers.rst.diretives.tables.ListSVTable`` - ``docutils.parsers.rst.directives.tables.ListSVTable``
* - ``sphinx.directives.patches.RSTTable`` * - ``sphinx.directives.patches.RSTTable``
- 4.0 - 4.0
- 6.0 - 6.0
- ``docutils.parsers.rst.diretives.tables.RSTTable`` - ``docutils.parsers.rst.directives.tables.RSTTable``
* - ``sphinx.ext.autodoc.directive.DocumenterBridge.filename_set`` * - ``sphinx.ext.autodoc.directive.DocumenterBridge.filename_set``
- 4.0 - 4.0
@ -85,7 +90,7 @@ The following is a list of deprecated interfaces.
* - ``sphinx.util.smartypants`` * - ``sphinx.util.smartypants``
- 4.0 - 4.0
- 6.0 - 6.0
- ``docutils.utils.smartyquotes`` - ``docutils.utils.smartquotes``
* - ``sphinx.util.typing.DirectiveOption`` * - ``sphinx.util.typing.DirectiveOption``
- 4.0 - 4.0

View File

@ -419,6 +419,20 @@ General configuration
.. versionadded:: 1.1 .. versionadded:: 1.1
.. confval:: nitpick_ignore_regex
An extended version of :confval:`nitpick_ignore`, which instead interprets
the ``type`` and ``target`` strings as regular expressions. Note, that the
regular expression must match the whole string (as if the ``^`` and ``$``
markers were inserted).
For example, ``(r'py:.*', r'foo.*bar\.B.*')`` will ignore nitpicky warnings
for all python entities that start with ``'foo'`` and have ``'bar.B'`` in
them, such as ``('py:const', 'foo_package.bar.BAZ_VALUE')`` or
``('py:class', 'food.bar.Barman')``.
.. versionadded:: 4.1
.. confval:: numfig .. confval:: numfig
If true, figures, tables and code-blocks are automatically numbered if they If true, figures, tables and code-blocks are automatically numbered if they
@ -780,6 +794,10 @@ documentation on :ref:`intl` for details.
The default is ``['locales']``. The default is ``['locales']``.
.. note:: The :option:`-v option for sphinx-build command <sphinx-build -v>`
is useful to check the locale_dirs config works as expected. It
emits debug messages if message catalog directory not found.
.. versionchanged:: 1.5 .. versionchanged:: 1.5
Use ``locales`` directory as a default value Use ``locales`` directory as a default value

View File

@ -573,15 +573,27 @@ There are also config values that you can set:
This value controls how to represent typehints. The setting takes the This value controls how to represent typehints. The setting takes the
following values: following values:
* ``'signature'`` -- Show typehints as its signature (default) * ``'signature'`` -- Show typehints in the signature (default)
* ``'description'`` -- Show typehints as content of function or method * ``'description'`` -- Show typehints as content of the function or method
The typehints of overloaded functions or methods will still be represented
in the signature.
* ``'none'`` -- Do not show typehints * ``'none'`` -- Do not show typehints
* ``'both'`` -- Show typehints in the signature and as content of
the function or method
Overloaded functions or methods will not have typehints included in the
description because it is impossible to accurately represent all possible
overloads as a list of parameters.
.. versionadded:: 2.1 .. versionadded:: 2.1
.. versionadded:: 3.0 .. versionadded:: 3.0
New option ``'description'`` is added. New option ``'description'`` is added.
.. versionadded:: 4.1
New option ``'both'`` is added.
.. confval:: autodoc_typehints_description_target .. confval:: autodoc_typehints_description_target
This value controls whether the types of undocumented parameters and return This value controls whether the types of undocumented parameters and return

6
package-lock.json generated
View File

@ -704,9 +704,9 @@
} }
}, },
"lodash": { "lodash": {
"version": "4.17.19", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true "dev": true
}, },
"log4js": { "log4js": {

View File

@ -21,8 +21,7 @@ install_requires = [
'sphinxcontrib-htmlhelp', 'sphinxcontrib-htmlhelp',
'sphinxcontrib-serializinghtml', 'sphinxcontrib-serializinghtml',
'sphinxcontrib-qthelp', 'sphinxcontrib-qthelp',
'Jinja2>=2.3,<3.0', 'Jinja2>=2.3',
'MarkupSafe<2.0',
'Pygments>=2.0', 'Pygments>=2.0',
'docutils>=0.14,<0.18', 'docutils>=0.14,<0.18',
'snowballstemmer>=1.1', 'snowballstemmer>=1.1',

View File

@ -14,6 +14,7 @@ import os
import pickle import pickle
import platform import platform
import sys import sys
import warnings
from collections import deque from collections import deque
from io import StringIO from io import StringIO
from os import path from os import path
@ -29,6 +30,7 @@ from pygments.lexer import Lexer
import sphinx import sphinx
from sphinx import locale, package_dir from sphinx import locale, package_dir
from sphinx.config import Config from sphinx.config import Config
from sphinx.deprecation import RemovedInSphinx60Warning
from sphinx.domains import Domain, Index from sphinx.domains import Domain, Index
from sphinx.environment import BuildEnvironment from sphinx.environment import BuildEnvironment
from sphinx.environment.collectors import EnvironmentCollector from sphinx.environment.collectors import EnvironmentCollector
@ -141,11 +143,10 @@ class Sphinx:
self.phase = BuildPhase.INITIALIZATION self.phase = BuildPhase.INITIALIZATION
self.verbosity = verbosity self.verbosity = verbosity
self.extensions: Dict[str, Extension] = {} self.extensions: Dict[str, Extension] = {}
self.builder: Builder = None self.builder: Optional[Builder] = None
self.env: BuildEnvironment = None self.env: Optional[BuildEnvironment] = None
self.project: Project = None self.project: Optional[Project] = None
self.registry = SphinxComponentRegistry() self.registry = SphinxComponentRegistry()
self.html_themes: Dict[str, str] = {}
# validate provided directories # validate provided directories
self.srcdir = abspath(srcdir) self.srcdir = abspath(srcdir)
@ -174,7 +175,7 @@ class Sphinx:
if status is None: if status is None:
self._status: IO = StringIO() self._status: IO = StringIO()
self.quiet = True self.quiet: bool = True
else: else:
self._status = status self._status = status
self.quiet = False self.quiet = False
@ -1184,13 +1185,13 @@ class Sphinx:
def add_html_theme(self, name: str, theme_path: str) -> None: def add_html_theme(self, name: str, theme_path: str) -> None:
"""Register a HTML Theme. """Register a HTML Theme.
The *name* is a name of theme, and *path* is a full path to the theme The *name* is a name of theme, and *theme_path* is a full path to the
(refs: :ref:`distribute-your-theme`). theme (refs: :ref:`distribute-your-theme`).
.. versionadded:: 1.6 .. versionadded:: 1.6
""" """
logger.debug('[app] adding HTML theme: %r, %r', name, theme_path) logger.debug('[app] adding HTML theme: %r, %r', name, theme_path)
self.html_themes[name] = theme_path self.registry.add_html_theme(name, theme_path)
def add_html_math_renderer(self, name: str, def add_html_math_renderer(self, name: str,
inline_renderers: Tuple[Callable, Callable] = None, inline_renderers: Tuple[Callable, Callable] = None,
@ -1257,6 +1258,12 @@ class Sphinx:
return True return True
@property
def html_themes(self) -> Dict[str, str]:
warnings.warn('app.html_themes is deprecated.',
RemovedInSphinx60Warning)
return self.registry.html_themes
class TemplateBridge: class TemplateBridge:
""" """

View File

@ -11,7 +11,8 @@
import pickle import pickle
import time import time
from os import path from os import path
from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Sequence, Set, Tuple, Type, Union from typing import (TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Sequence, Set, Tuple,
Type, Union)
from docutils import nodes from docutils import nodes
from docutils.nodes import Node from docutils.nodes import Node
@ -88,7 +89,7 @@ class Builder:
ensuredir(self.doctreedir) ensuredir(self.doctreedir)
self.app: Sphinx = app self.app: Sphinx = app
self.env: BuildEnvironment = None self.env: Optional[BuildEnvironment] = None
self.events: EventManager = app.events self.events: EventManager = app.events
self.config: Config = app.config self.config: Config = app.config
self.tags: Tags = app.tags self.tags: Tags = app.tags
@ -225,7 +226,7 @@ class Builder:
self.compile_catalogs(set(repo.catalogs), message) self.compile_catalogs(set(repo.catalogs), message)
def compile_specific_catalogs(self, specified_files: List[str]) -> None: def compile_specific_catalogs(self, specified_files: List[str]) -> None:
def to_domain(fpath: str) -> str: def to_domain(fpath: str) -> Optional[str]:
docname = self.env.path2doc(path.abspath(fpath)) docname = self.env.path2doc(path.abspath(fpath))
if docname: if docname:
return docname_to_domain(docname, self.config.gettext_compact) return docname_to_domain(docname, self.config.gettext_compact)

View File

@ -1000,16 +1000,6 @@ class StandaloneHTMLBuilder(Builder):
return uri return uri
ctx['pathto'] = pathto ctx['pathto'] = pathto
def css_tag(css: Stylesheet) -> str:
attrs = []
for key in sorted(css.attributes):
value = css.attributes[key]
if value is not None:
attrs.append('%s="%s"' % (key, html.escape(value, True)))
attrs.append('href="%s"' % pathto(css.filename, resource=True))
return '<link %s />' % ' '.join(attrs)
ctx['css_tag'] = css_tag
def hasdoc(name: str) -> bool: def hasdoc(name: str) -> bool:
if name in self.env.all_docs: if name in self.env.all_docs:
return True return True
@ -1026,7 +1016,7 @@ class StandaloneHTMLBuilder(Builder):
# revert script_files and css_files # revert script_files and css_files
self.script_files[:] = self._script_files self.script_files[:] = self._script_files
self.css_files[:] = self.css_files self.css_files[:] = self._css_files
self.update_page_context(pagename, templatename, ctx, event_arg) self.update_page_context(pagename, templatename, ctx, event_arg)
newtmpl = self.app.emit_firstresult('html-page-context', pagename, newtmpl = self.app.emit_firstresult('html-page-context', pagename,
@ -1140,6 +1130,26 @@ def convert_html_js_files(app: Sphinx, config: Config) -> None:
config.html_js_files = html_js_files # type: ignore config.html_js_files = html_js_files # type: ignore
def setup_css_tag_helper(app: Sphinx, pagename: str, templatename: str,
context: Dict, doctree: Node) -> None:
"""Set up css_tag() template helper.
.. note:: This set up function is added to keep compatibility with webhelper.
"""
pathto = context.get('pathto')
def css_tag(css: Stylesheet) -> str:
attrs = []
for key in sorted(css.attributes):
value = css.attributes[key]
if value is not None:
attrs.append('%s="%s"' % (key, html.escape(value, True)))
attrs.append('href="%s"' % pathto(css.filename, resource=True))
return '<link %s />' % ' '.join(attrs)
context['css_tag'] = css_tag
def setup_js_tag_helper(app: Sphinx, pagename: str, templatename: str, def setup_js_tag_helper(app: Sphinx, pagename: str, templatename: str,
context: Dict, doctree: Node) -> None: context: Dict, doctree: Node) -> None:
"""Set up js_tag() template helper. """Set up js_tag() template helper.
@ -1347,6 +1357,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.connect('config-inited', validate_html_logo, priority=800) app.connect('config-inited', validate_html_logo, priority=800)
app.connect('config-inited', validate_html_favicon, priority=800) app.connect('config-inited', validate_html_favicon, priority=800)
app.connect('builder-inited', validate_math_renderer) app.connect('builder-inited', validate_math_renderer)
app.connect('html-page-context', setup_css_tag_helper)
app.connect('html-page-context', setup_js_tag_helper) app.connect('html-page-context', setup_js_tag_helper)
app.connect('html-page-context', setup_resource_paths) app.connect('html-page-context', setup_resource_paths)

View File

@ -131,6 +131,7 @@ class Config:
'manpages_url': (None, 'env', []), 'manpages_url': (None, 'env', []),
'nitpicky': (False, None, []), 'nitpicky': (False, None, []),
'nitpick_ignore': ([], None, []), 'nitpick_ignore': ([], None, []),
'nitpick_ignore_regex': ([], None, []),
'numfig': (False, 'env', []), 'numfig': (False, 'env', []),
'numfig_secnum_depth': (1, 'env', []), 'numfig_secnum_depth': (1, 'env', []),
'numfig_format': ({}, 'env', []), # will be initialized in init_numfig_format() 'numfig_format': ({}, 'env', []), # will be initialized in init_numfig_format()
@ -309,7 +310,7 @@ class Config:
self.__dict__.update(state) self.__dict__.update(state)
def eval_config_file(filename: str, tags: Tags) -> Dict[str, Any]: def eval_config_file(filename: str, tags: Optional[Tags]) -> Dict[str, Any]:
"""Evaluate a config file.""" """Evaluate a config file."""
namespace: Dict[str, Any] = {} namespace: Dict[str, Any] = {}
namespace['__file__'] = filename namespace['__file__'] = filename

View File

@ -11,8 +11,8 @@
import copy import copy
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import (TYPE_CHECKING, Any, Callable, Dict, Iterable, List, NamedTuple, Tuple, from typing import (TYPE_CHECKING, Any, Callable, Dict, Iterable, List, NamedTuple, Optional,
Type, Union, cast) Tuple, Type, Union, cast)
from docutils import nodes from docutils import nodes
from docutils.nodes import Element, Node, system_message from docutils.nodes import Element, Node, system_message
@ -196,7 +196,7 @@ class Domain:
#: data value for a fresh environment #: data value for a fresh environment
initial_data: Dict = {} initial_data: Dict = {}
#: data value #: data value
data: Dict = None data: Dict
#: data version, bump this when the format of `self.data` changes #: data version, bump this when the format of `self.data` changes
data_version = 0 data_version = 0
@ -251,7 +251,7 @@ class Domain:
for role in objtype.roles: for role in objtype.roles:
self._role2type.setdefault(role, []).append(name) self._role2type.setdefault(role, []).append(name)
def role(self, name: str) -> RoleFunction: def role(self, name: str) -> Optional[RoleFunction]:
"""Return a role adapter function that always gives the registered """Return a role adapter function that always gives the registered
role its full name ('domain:name') as the first argument. role its full name ('domain:name') as the first argument.
""" """
@ -269,7 +269,7 @@ class Domain:
self._role_cache[name] = role_adapter self._role_cache[name] = role_adapter
return role_adapter return role_adapter
def directive(self, name: str) -> Callable: def directive(self, name: str) -> Optional[Callable]:
"""Return a directive adapter class that always gives the registered """Return a directive adapter class that always gives the registered
directive its full name ('domain:name') as ``self.name``. directive its full name ('domain:name') as ``self.name``.
""" """
@ -318,7 +318,7 @@ class Domain:
def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder", def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder",
typ: str, target: str, node: pending_xref, contnode: Element typ: str, target: str, node: pending_xref, contnode: Element
) -> Element: ) -> Optional[Element]:
"""Resolve the pending_xref *node* with the given *typ* and *target*. """Resolve the pending_xref *node* with the given *typ* and *target*.
This method should return a new node, to replace the xref node, This method should return a new node, to replace the xref node,
@ -393,11 +393,11 @@ class Domain:
return type.lname return type.lname
return _('%s %s') % (self.label, type.lname) return _('%s %s') % (self.label, type.lname)
def get_enumerable_node_type(self, node: Node) -> str: def get_enumerable_node_type(self, node: Node) -> Optional[str]:
"""Get type of enumerable nodes (experimental).""" """Get type of enumerable nodes (experimental)."""
enum_node_type, _ = self.enumerable_nodes.get(node.__class__, (None, None)) enum_node_type, _ = self.enumerable_nodes.get(node.__class__, (None, None))
return enum_node_type return enum_node_type
def get_full_qualified_name(self, node: Element) -> str: def get_full_qualified_name(self, node: Element) -> Optional[str]:
"""Return full qualified name for given node.""" """Return full qualified name for given node."""
return None return None

View File

@ -9,7 +9,8 @@
""" """
import re import re
from typing import Any, Callable, Dict, Generator, Iterator, List, Tuple, TypeVar, Union, cast from typing import (Any, Callable, Dict, Generator, Iterator, List, Optional, Tuple, TypeVar,
Union, cast)
from docutils import nodes from docutils import nodes
from docutils.nodes import Element, Node, TextElement, system_message from docutils.nodes import Element, Node, TextElement, system_message
@ -3807,7 +3808,7 @@ class CDomain(Domain):
def _resolve_xref_inner(self, env: BuildEnvironment, fromdocname: str, builder: Builder, def _resolve_xref_inner(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref, typ: str, target: str, node: pending_xref,
contnode: Element) -> Tuple[Element, str]: contnode: Element) -> Tuple[Optional[Element], Optional[str]]:
parser = DefinitionParser(target, location=node, config=env.config) parser = DefinitionParser(target, location=node, config=env.config)
try: try:
name = parser.parse_xref_object() name = parser.parse_xref_object()
@ -3844,7 +3845,7 @@ class CDomain(Domain):
def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder, def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref, typ: str, target: str, node: pending_xref,
contnode: Element) -> Element: contnode: Element) -> Optional[Element]:
return self._resolve_xref_inner(env, fromdocname, builder, typ, return self._resolve_xref_inner(env, fromdocname, builder, typ,
target, node, contnode)[0] target, node, contnode)[0]

View File

@ -8,7 +8,7 @@
:license: BSD, see LICENSE for details. :license: BSD, see LICENSE for details.
""" """
from typing import TYPE_CHECKING, Any, Dict, List, Set, Tuple, cast from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Tuple, cast
from docutils import nodes from docutils import nodes
from docutils.nodes import Element from docutils.nodes import Element
@ -88,7 +88,7 @@ class CitationDomain(Domain):
def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder", def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder",
typ: str, target: str, node: pending_xref, contnode: Element typ: str, target: str, node: pending_xref, contnode: Element
) -> Element: ) -> Optional[Element]:
docname, labelid, lineno = self.citations.get(target, ('', '', 0)) docname, labelid, lineno = self.citations.get(target, ('', '', 0))
if not docname: if not docname:
return None return None

View File

@ -7594,7 +7594,7 @@ class CPPDomain(Domain):
def _resolve_xref_inner(self, env: BuildEnvironment, fromdocname: str, builder: Builder, def _resolve_xref_inner(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref, typ: str, target: str, node: pending_xref,
contnode: Element) -> Tuple[Element, str]: contnode: Element) -> Tuple[Optional[Element], Optional[str]]:
# add parens again for those that could be functions # add parens again for those that could be functions
if typ == 'any' or typ == 'func': if typ == 'any' or typ == 'func':
target += '()' target += '()'
@ -7743,7 +7743,7 @@ class CPPDomain(Domain):
def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder, def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref, contnode: Element typ: str, target: str, node: pending_xref, contnode: Element
) -> Element: ) -> Optional[Element]:
return self._resolve_xref_inner(env, fromdocname, builder, typ, return self._resolve_xref_inner(env, fromdocname, builder, typ,
target, node, contnode)[0] target, node, contnode)[0]

View File

@ -8,7 +8,7 @@
:license: BSD, see LICENSE for details. :license: BSD, see LICENSE for details.
""" """
from typing import Any, Dict, Iterator, List, Tuple, cast from typing import Any, Dict, Iterator, List, Optional, Tuple, cast
from docutils import nodes from docutils import nodes
from docutils.nodes import Element, Node from docutils.nodes import Element, Node
@ -413,7 +413,7 @@ class JavaScriptDomain(Domain):
def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder, def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref, contnode: Element typ: str, target: str, node: pending_xref, contnode: Element
) -> Element: ) -> Optional[Element]:
mod_name = node.get('js:module') mod_name = node.get('js:module')
prefix = node.get('js:object') prefix = node.get('js:object')
searchorder = 1 if node.hasattr('refspecific') else 0 searchorder = 1 if node.hasattr('refspecific') else 0

View File

@ -8,7 +8,7 @@
:license: BSD, see LICENSE for details. :license: BSD, see LICENSE for details.
""" """
from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Tuple from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple
from docutils import nodes from docutils import nodes
from docutils.nodes import Element, Node, make_id, system_message from docutils.nodes import Element, Node, make_id, system_message
@ -97,7 +97,7 @@ class MathDomain(Domain):
def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: "Builder", def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: "Builder",
typ: str, target: str, node: pending_xref, contnode: Element typ: str, target: str, node: pending_xref, contnode: Element
) -> Element: ) -> Optional[Element]:
assert typ in ('eq', 'numref') assert typ in ('eq', 'numref')
docname, number = self.equations.get(target, (None, None)) docname, number = self.equations.get(target, (None, None))
if docname: if docname:

View File

@ -15,7 +15,7 @@ import sys
import typing import typing
import warnings import warnings
from inspect import Parameter from inspect import Parameter
from typing import Any, Dict, Iterable, Iterator, List, NamedTuple, Tuple, Type, cast from typing import Any, Dict, Iterable, Iterator, List, NamedTuple, Optional, Tuple, Type, cast
from docutils import nodes from docutils import nodes
from docutils.nodes import Element, Node from docutils.nodes import Element, Node
@ -1246,7 +1246,7 @@ class PythonDomain(Domain):
def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder, def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
type: str, target: str, node: pending_xref, contnode: Element type: str, target: str, node: pending_xref, contnode: Element
) -> Element: ) -> Optional[Element]:
modname = node.get('py:module') modname = node.get('py:module')
clsname = node.get('py:class') clsname = node.get('py:class')
searchmode = 1 if node.hasattr('refspecific') else 0 searchmode = 1 if node.hasattr('refspecific') else 0
@ -1269,9 +1269,13 @@ class PythonDomain(Domain):
if not matches: if not matches:
return None return None
elif len(matches) > 1: elif len(matches) > 1:
logger.warning(__('more than one target found for cross-reference %r: %s'), canonicals = [m for m in matches if not m[1].aliased]
target, ', '.join(match[0] for match in matches), if len(canonicals) == 1:
type='ref', subtype='python', location=node) matches = canonicals
else:
logger.warning(__('more than one target found for cross-reference %r: %s'),
target, ', '.join(match[0] for match in matches),
type='ref', subtype='python', location=node)
name, obj = matches[0] name, obj = matches[0]
if obj[2] == 'module': if obj[2] == 'module':
@ -1340,7 +1344,7 @@ class PythonDomain(Domain):
else: else:
yield (refname, refname, obj.objtype, obj.docname, obj.node_id, 1) yield (refname, refname, obj.objtype, obj.docname, obj.node_id, 1)
def get_full_qualified_name(self, node: Element) -> str: def get_full_qualified_name(self, node: Element) -> Optional[str]:
modname = node.get('py:module') modname = node.get('py:module')
clsname = node.get('py:class') clsname = node.get('py:class')
target = node.get('reftarget') target = node.get('reftarget')

View File

@ -9,7 +9,7 @@
""" """
import re import re
from typing import Any, Dict, Iterator, List, Tuple, cast from typing import Any, Dict, Iterator, List, Optional, Tuple, cast
from docutils.nodes import Element from docutils.nodes import Element
from docutils.parsers.rst import directives from docutils.parsers.rst import directives
@ -247,7 +247,7 @@ class ReSTDomain(Domain):
def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder, def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref, contnode: Element typ: str, target: str, node: pending_xref, contnode: Element
) -> Element: ) -> Optional[Element]:
objtypes = self.objtypes_for_role(typ) objtypes = self.objtypes_for_role(typ)
for objtype in objtypes: for objtype in objtypes:
todocname, node_id = self.objects.get((objtype, target), (None, None)) todocname, node_id = self.objects.get((objtype, target), (None, None))

View File

@ -285,7 +285,7 @@ class OptionXRefRole(XRefRole):
def split_term_classifiers(line: str) -> List[Optional[str]]: def split_term_classifiers(line: str) -> List[Optional[str]]:
# split line into a term and classifiers. if no classifier, None is used.. # split line into a term and classifiers. if no classifier, None is used..
parts = re.split(' +: +', line) + [None] parts: List[Optional[str]] = re.split(' +: +', line) + [None]
return parts return parts
@ -621,7 +621,7 @@ class StandardDomain(Domain):
} }
# node_class -> (figtype, title_getter) # node_class -> (figtype, title_getter)
enumerable_nodes: Dict[Type[Node], Tuple[str, Callable]] = { enumerable_nodes: Dict[Type[Node], Tuple[str, Optional[Callable]]] = {
nodes.figure: ('figure', None), nodes.figure: ('figure', None),
nodes.table: ('table', None), nodes.table: ('table', None),
nodes.container: ('code-block', None), nodes.container: ('code-block', None),
@ -812,7 +812,8 @@ class StandardDomain(Domain):
return newnode return newnode
def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder", def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder",
typ: str, target: str, node: pending_xref, contnode: Element) -> Element: typ: str, target: str, node: pending_xref, contnode: Element
) -> Optional[Element]:
if typ == 'ref': if typ == 'ref':
resolver = self._resolve_ref_xref resolver = self._resolve_ref_xref
elif typ == 'numref': elif typ == 'numref':
@ -832,7 +833,7 @@ class StandardDomain(Domain):
def _resolve_ref_xref(self, env: "BuildEnvironment", fromdocname: str, def _resolve_ref_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str, node: pending_xref, builder: "Builder", typ: str, target: str, node: pending_xref,
contnode: Element) -> Element: contnode: Element) -> Optional[Element]:
if node['refexplicit']: if node['refexplicit']:
# reference to anonymous label; the reference uses # reference to anonymous label; the reference uses
# the supplied link caption # the supplied link caption
@ -850,7 +851,7 @@ class StandardDomain(Domain):
def _resolve_numref_xref(self, env: "BuildEnvironment", fromdocname: str, def _resolve_numref_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str, builder: "Builder", typ: str, target: str,
node: pending_xref, contnode: Element) -> Element: node: pending_xref, contnode: Element) -> Optional[Element]:
if target in self.labels: if target in self.labels:
docname, labelid, figname = self.labels.get(target, ('', '', '')) docname, labelid, figname = self.labels.get(target, ('', '', ''))
else: else:
@ -913,7 +914,7 @@ class StandardDomain(Domain):
def _resolve_keyword_xref(self, env: "BuildEnvironment", fromdocname: str, def _resolve_keyword_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str, builder: "Builder", typ: str, target: str,
node: pending_xref, contnode: Element) -> Element: node: pending_xref, contnode: Element) -> Optional[Element]:
# keywords are oddballs: they are referenced by named labels # keywords are oddballs: they are referenced by named labels
docname, labelid, _ = self.labels.get(target, ('', '', '')) docname, labelid, _ = self.labels.get(target, ('', '', ''))
if not docname: if not docname:
@ -923,7 +924,7 @@ class StandardDomain(Domain):
def _resolve_doc_xref(self, env: "BuildEnvironment", fromdocname: str, def _resolve_doc_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str, builder: "Builder", typ: str, target: str,
node: pending_xref, contnode: Element) -> Element: node: pending_xref, contnode: Element) -> Optional[Element]:
# directly reference to document by source name; can be absolute or relative # directly reference to document by source name; can be absolute or relative
refdoc = node.get('refdoc', fromdocname) refdoc = node.get('refdoc', fromdocname)
docname = docname_join(refdoc, node['reftarget']) docname = docname_join(refdoc, node['reftarget'])
@ -940,7 +941,7 @@ class StandardDomain(Domain):
def _resolve_option_xref(self, env: "BuildEnvironment", fromdocname: str, def _resolve_option_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str, builder: "Builder", typ: str, target: str,
node: pending_xref, contnode: Element) -> Element: node: pending_xref, contnode: Element) -> Optional[Element]:
progname = node.get('std:program') progname = node.get('std:program')
target = target.strip() target = target.strip()
docname, labelid = self.progoptions.get((progname, target), ('', '')) docname, labelid = self.progoptions.get((progname, target), ('', ''))
@ -977,7 +978,7 @@ class StandardDomain(Domain):
def _resolve_obj_xref(self, env: "BuildEnvironment", fromdocname: str, def _resolve_obj_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str, builder: "Builder", typ: str, target: str,
node: pending_xref, contnode: Element) -> Element: node: pending_xref, contnode: Element) -> Optional[Element]:
objtypes = self.objtypes_for_role(typ) or [] objtypes = self.objtypes_for_role(typ) or []
for objtype in objtypes: for objtype in objtypes:
if (objtype, target) in self.objects: if (objtype, target) in self.objects:
@ -1041,7 +1042,7 @@ class StandardDomain(Domain):
def is_enumerable_node(self, node: Node) -> bool: def is_enumerable_node(self, node: Node) -> bool:
return node.__class__ in self.enumerable_nodes return node.__class__ in self.enumerable_nodes
def get_numfig_title(self, node: Node) -> str: def get_numfig_title(self, node: Node) -> Optional[str]:
"""Get the title of enumerable nodes to refer them using its title""" """Get the title of enumerable nodes to refer them using its title"""
if self.is_enumerable_node(node): if self.is_enumerable_node(node):
elem = cast(Element, node) elem = cast(Element, node)
@ -1055,7 +1056,7 @@ class StandardDomain(Domain):
return None return None
def get_enumerable_node_type(self, node: Node) -> str: def get_enumerable_node_type(self, node: Node) -> Optional[str]:
"""Get type of enumerable nodes.""" """Get type of enumerable nodes."""
def has_child(node: Element, cls: Type) -> bool: def has_child(node: Element, cls: Type) -> bool:
return any(isinstance(child, cls) for child in node) return any(isinstance(child, cls) for child in node)
@ -1094,7 +1095,7 @@ class StandardDomain(Domain):
# Maybe it is defined in orphaned document. # Maybe it is defined in orphaned document.
raise ValueError from exc raise ValueError from exc
def get_full_qualified_name(self, node: Element) -> str: def get_full_qualified_name(self, node: Element) -> Optional[str]:
if node.get('reftype') == 'option': if node.get('reftype') == 'option':
progname = node.get('std:program') progname = node.get('std:program')
command = ws_re.split(node.get('reftarget')) command = ws_re.split(node.get('reftarget'))
@ -1109,7 +1110,8 @@ class StandardDomain(Domain):
return None return None
def warn_missing_reference(app: "Sphinx", domain: Domain, node: pending_xref) -> bool: def warn_missing_reference(app: "Sphinx", domain: Domain, node: pending_xref
) -> Optional[bool]:
if (domain and domain.name != 'std') or node['reftype'] != 'ref': if (domain and domain.name != 'std') or node['reftype'] != 'ref':
return None return None
else: else:

View File

@ -14,8 +14,8 @@ from collections import defaultdict
from copy import copy from copy import copy
from datetime import datetime from datetime import datetime
from os import path from os import path
from typing import (TYPE_CHECKING, Any, Callable, Dict, Generator, Iterator, List, Set, Tuple, from typing import (TYPE_CHECKING, Any, Callable, Dict, Generator, Iterator, List, Optional,
Union) Set, Tuple, Union)
from docutils import nodes from docutils import nodes
from docutils.nodes import Node from docutils.nodes import Node
@ -87,7 +87,7 @@ class BuildEnvironment:
transformations to resolve links to them. transformations to resolve links to them.
""" """
domains: Dict[str, Domain] = None domains: Dict[str, Domain]
# --------- ENVIRONMENT INITIALIZATION ------------------------------------- # --------- ENVIRONMENT INITIALIZATION -------------------------------------
@ -266,7 +266,7 @@ class BuildEnvironment:
raise an exception if the user tries to use an environment with an raise an exception if the user tries to use an environment with an
incompatible versioning method. incompatible versioning method.
""" """
condition: Union[bool, Callable] = None condition: Union[bool, Callable]
if callable(method): if callable(method):
condition = method condition = method
else: else:
@ -309,7 +309,7 @@ class BuildEnvironment:
domain.merge_domaindata(docnames, other.domaindata[domainname]) domain.merge_domaindata(docnames, other.domaindata[domainname])
self.events.emit('env-merge-info', self, docnames, other) self.events.emit('env-merge-info', self, docnames, other)
def path2doc(self, filename: str) -> str: def path2doc(self, filename: str) -> Optional[str]:
"""Return the docname for the filename if the file is document. """Return the docname for the filename if the file is document.
*filename* should be absolute or relative to the source directory. *filename* should be absolute or relative to the source directory.
@ -577,7 +577,7 @@ class BuildEnvironment:
# allow custom references to be resolved # allow custom references to be resolved
self.events.emit('doctree-resolved', doctree, docname) self.events.emit('doctree-resolved', doctree, docname)
def collect_relations(self) -> Dict[str, List[str]]: def collect_relations(self) -> Dict[str, List[Optional[str]]]:
traversed = set() traversed = set()
def traverse_toctree(parent: str, docname: str) -> Iterator[Tuple[str, str]]: def traverse_toctree(parent: str, docname: str) -> Iterator[Tuple[str, str]]:

View File

@ -8,7 +8,7 @@
:license: BSD, see LICENSE for details. :license: BSD, see LICENSE for details.
""" """
from typing import TYPE_CHECKING, Any, Iterable, List, cast from typing import TYPE_CHECKING, Any, Iterable, List, Optional, cast
from docutils import nodes from docutils import nodes
from docutils.nodes import Element, Node from docutils.nodes import Element, Node
@ -48,7 +48,7 @@ class TocTree:
def resolve(self, docname: str, builder: "Builder", toctree: addnodes.toctree, def resolve(self, docname: str, builder: "Builder", toctree: addnodes.toctree,
prune: bool = True, maxdepth: int = 0, titles_only: bool = False, prune: bool = True, maxdepth: int = 0, titles_only: bool = False,
collapse: bool = False, includehidden: bool = False) -> Element: collapse: bool = False, includehidden: bool = False) -> Optional[Element]:
"""Resolve a *toctree* node into individual bullet lists with titles """Resolve a *toctree* node into individual bullet lists with titles
as items, returning None (if no containing titles are found) or as items, returning None (if no containing titles are found) or
a new node. a new node.
@ -313,7 +313,7 @@ class TocTree:
return toc return toc
def get_toctree_for(self, docname: str, builder: "Builder", collapse: bool, def get_toctree_for(self, docname: str, builder: "Builder", collapse: bool,
**kwargs: Any) -> Element: **kwargs: Any) -> Optional[Element]:
"""Return the global TOC nodetree.""" """Return the global TOC nodetree."""
doctree = self.env.get_doctree(self.env.config.root_doc) doctree = self.env.get_doctree(self.env.config.root_doc)
toctrees: List[Element] = [] toctrees: List[Element] = []

View File

@ -8,7 +8,7 @@
:license: BSD, see LICENSE for details. :license: BSD, see LICENSE for details.
""" """
from typing import TYPE_CHECKING, Dict, List, Set from typing import TYPE_CHECKING, Dict, List, Optional, Set
from docutils import nodes from docutils import nodes
@ -27,7 +27,7 @@ class EnvironmentCollector:
entries and toctrees, etc. entries and toctrees, etc.
""" """
listener_ids: Dict[str, int] = None listener_ids: Optional[Dict[str, int]] = None
def enable(self, app: "Sphinx") -> None: def enable(self, app: "Sphinx") -> None:
assert self.listener_ids is None assert self.listener_ids is None

View File

@ -389,8 +389,8 @@ class Documenter:
# functions can contain a signature which is then used instead of # functions can contain a signature which is then used instead of
# an autogenerated one # an autogenerated one
try: try:
explicit_modname, path, base, args, retann = \ matched = py_ext_sig_re.match(self.name)
py_ext_sig_re.match(self.name).groups() explicit_modname, path, base, args, retann = matched.groups()
except AttributeError: except AttributeError:
logger.warning(__('invalid signature for auto%s (%r)') % (self.objtype, self.name), logger.warning(__('invalid signature for auto%s (%r)') % (self.objtype, self.name),
type='autodoc') type='autodoc')
@ -412,8 +412,8 @@ class Documenter:
self.args = args self.args = args
self.retann = retann self.retann = retann
self.fullname = (self.modname or '') + \ self.fullname = ((self.modname or '') +
('.' + '.'.join(self.objpath) if self.objpath else '') ('.' + '.'.join(self.objpath) if self.objpath else ''))
return True return True
def import_object(self, raiseerror: bool = False) -> bool: def import_object(self, raiseerror: bool = False) -> bool:
@ -709,6 +709,8 @@ class Documenter:
# if isattr is True, the member is documented as an attribute # if isattr is True, the member is documented as an attribute
if member is INSTANCEATTR: if member is INSTANCEATTR:
isattr = True isattr = True
elif (namespace, membername) in attr_docs:
isattr = True
else: else:
isattr = False isattr = False
@ -769,7 +771,6 @@ class Documenter:
else: else:
# keep documented attributes # keep documented attributes
keep = True keep = True
isattr = True
elif want_all and isprivate: elif want_all and isprivate:
if has_doc or self.options.undoc_members: if has_doc or self.options.undoc_members:
if self.options.private_members is None: if self.options.private_members is None:
@ -824,8 +825,9 @@ class Documenter:
if self.objpath: if self.objpath:
self.env.temp_data['autodoc:class'] = self.objpath[0] self.env.temp_data['autodoc:class'] = self.objpath[0]
want_all = all_members or self.options.inherited_members or \ want_all = (all_members or
self.options.members is ALL self.options.inherited_members or
self.options.members is ALL)
# find out which members are documentable # find out which members are documentable
members_check_module, members = self.get_object_members(want_all) members_check_module, members = self.get_object_members(want_all)
@ -841,8 +843,7 @@ class Documenter:
classes.sort(key=lambda cls: cls.priority) classes.sort(key=lambda cls: cls.priority)
# give explicitly separated module name, so that members # give explicitly separated module name, so that members
# of inner classes can be documented # of inner classes can be documented
full_mname = self.modname + '::' + \ full_mname = self.modname + '::' + '.'.join(self.objpath + [mname])
'.'.join(self.objpath + [mname])
documenter = classes[-1](self.directive, full_mname, self.indent) documenter = classes[-1](self.directive, full_mname, self.indent)
memberdocumenters.append((documenter, isattr)) memberdocumenters.append((documenter, isattr))
@ -1314,7 +1315,7 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
sigs = [] sigs = []
if (self.analyzer and if (self.analyzer and
'.'.join(self.objpath) in self.analyzer.overloads and '.'.join(self.objpath) in self.analyzer.overloads and
self.config.autodoc_typehints == 'signature'): self.config.autodoc_typehints != 'none'):
# Use signatures for overloaded functions instead of the implementation function. # Use signatures for overloaded functions instead of the implementation function.
overloaded = True overloaded = True
else: else:
@ -1560,7 +1561,7 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
sigs = [] sigs = []
overloads = self.get_overloaded_signatures() overloads = self.get_overloaded_signatures()
if overloads and self.config.autodoc_typehints == 'signature': if overloads and self.config.autodoc_typehints != 'none':
# Use signatures for overloaded methods instead of the implementation method. # Use signatures for overloaded methods instead of the implementation method.
method = safe_getattr(self._signature_class, self._signature_method_name, None) method = safe_getattr(self._signature_class, self._signature_method_name, None)
__globals__ = safe_getattr(method, '__globals__', {}) __globals__ = safe_getattr(method, '__globals__', {})
@ -1967,8 +1968,8 @@ class DataDocumenter(GenericAliasMixin, NewTypeMixin, TypeVarMixin,
pass pass
def get_real_modname(self) -> str: def get_real_modname(self) -> str:
return self.get_attr(self.parent or self.object, '__module__', None) \ real_modname = self.get_attr(self.parent or self.object, '__module__', None)
or self.modname return real_modname or self.modname
def get_module_comment(self, attrname: str) -> Optional[List[str]]: def get_module_comment(self, attrname: str) -> Optional[List[str]]:
try: try:
@ -2033,8 +2034,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
@classmethod @classmethod
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
) -> bool: ) -> bool:
return inspect.isroutine(member) and \ return inspect.isroutine(member) and not isinstance(parent, ModuleDocumenter)
not isinstance(parent, ModuleDocumenter)
def import_object(self, raiseerror: bool = False) -> bool: def import_object(self, raiseerror: bool = False) -> bool:
ret = super().import_object(raiseerror) ret = super().import_object(raiseerror)
@ -2109,7 +2109,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
sigs = [] sigs = []
if (self.analyzer and if (self.analyzer and
'.'.join(self.objpath) in self.analyzer.overloads and '.'.join(self.objpath) in self.analyzer.overloads and
self.config.autodoc_typehints == 'signature'): self.config.autodoc_typehints != 'none'):
# Use signatures for overloaded methods instead of the implementation method. # Use signatures for overloaded methods instead of the implementation method.
overloaded = True overloaded = True
else: else:
@ -2469,8 +2469,8 @@ class AttributeDocumenter(GenericAliasMixin, NewTypeMixin, SlotsMixin, # type:
return ret return ret
def get_real_modname(self) -> str: def get_real_modname(self) -> str:
return self.get_attr(self.parent or self.object, '__module__', None) \ real_modname = self.get_attr(self.parent or self.object, '__module__', None)
or self.modname return real_modname or self.modname
def should_suppress_value_header(self) -> bool: def should_suppress_value_header(self) -> bool:
if super().should_suppress_value_header(): if super().should_suppress_value_header():
@ -2571,8 +2571,8 @@ class PropertyDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): #
pass pass
def get_real_modname(self) -> str: def get_real_modname(self) -> str:
return self.get_attr(self.parent or self.object, '__module__', None) \ real_modname = self.get_attr(self.parent or self.object, '__module__', None)
or self.modname return real_modname or self.modname
def add_directive_header(self, sig: str) -> None: def add_directive_header(self, sig: str) -> None:
super().add_directive_header(sig) super().add_directive_header(sig)
@ -2592,7 +2592,7 @@ class PropertyDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): #
self.fullname, exc) self.fullname, exc)
return None return None
except ValueError: except ValueError:
raise return None
class NewTypeAttributeDocumenter(AttributeDocumenter): class NewTypeAttributeDocumenter(AttributeDocumenter):
@ -2666,7 +2666,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value('autodoc_docstring_signature', True, True) app.add_config_value('autodoc_docstring_signature', True, True)
app.add_config_value('autodoc_mock_imports', [], True) app.add_config_value('autodoc_mock_imports', [], True)
app.add_config_value('autodoc_typehints', "signature", True, app.add_config_value('autodoc_typehints', "signature", True,
ENUM("signature", "description", "none")) ENUM("signature", "description", "none", "both"))
app.add_config_value('autodoc_typehints_description_target', 'all', True, app.add_config_value('autodoc_typehints_description_target', 'all', True,
ENUM('all', 'documented')) ENUM('all', 'documented'))
app.add_config_value('autodoc_type_aliases', {}, True) app.add_config_value('autodoc_type_aliases', {}, True)

View File

@ -40,7 +40,7 @@ def record_typehints(app: Sphinx, objtype: str, name: str, obj: Any,
def merge_typehints(app: Sphinx, domain: str, objtype: str, contentnode: Element) -> None: def merge_typehints(app: Sphinx, domain: str, objtype: str, contentnode: Element) -> None:
if domain != 'py': if domain != 'py':
return return
if app.config.autodoc_typehints != 'description': if app.config.autodoc_typehints not in ('both', 'description'):
return return
try: try:

View File

@ -662,8 +662,10 @@ def import_ivar_by_name(name: str, prefixes: List[str] = [None]) -> Tuple[str, A
name, attr = name.rsplit(".", 1) name, attr = name.rsplit(".", 1)
real_name, obj, parent, modname = import_by_name(name, prefixes) real_name, obj, parent, modname = import_by_name(name, prefixes)
qualname = real_name.replace(modname + ".", "") qualname = real_name.replace(modname + ".", "")
analyzer = ModuleAnalyzer.for_module(modname) analyzer = ModuleAnalyzer.for_module(getattr(obj, '__module__', modname))
if (qualname, attr) in analyzer.find_attr_docs(): analyzer.analyze()
# check for presence in `annotations` to include dataclass attributes
if (qualname, attr) in analyzer.attr_docs or (qualname, attr) in analyzer.annotations:
return real_name + "." + attr, INSTANCEATTR, obj, modname return real_name + "." + attr, INSTANCEATTR, obj, modname
except (ImportError, ValueError, PycodeError): except (ImportError, ValueError, PycodeError):
pass pass
@ -773,7 +775,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.connect('builder-inited', process_generate_options) app.connect('builder-inited', process_generate_options)
app.add_config_value('autosummary_context', {}, True) app.add_config_value('autosummary_context', {}, True)
app.add_config_value('autosummary_filename_map', {}, 'html') app.add_config_value('autosummary_filename_map', {}, 'html')
app.add_config_value('autosummary_generate', True, True, [bool]) app.add_config_value('autosummary_generate', True, True, [bool, list])
app.add_config_value('autosummary_generate_overwrite', True, False) app.add_config_value('autosummary_generate_overwrite', True, False)
app.add_config_value('autosummary_mock_imports', app.add_config_value('autosummary_mock_imports',
lambda config: config.autodoc_mock_imports, 'env') lambda config: config.autodoc_mock_imports, 'env')

View File

@ -239,15 +239,33 @@ def generate_autosummary_content(name: str, obj: Any, parent: Any,
name, exc, type='autosummary') name, exc, type='autosummary')
return False return False
def get_class_members(obj: Any) -> Dict[str, Any]:
members = sphinx.ext.autodoc.get_class_members(obj, [qualname], safe_getattr)
return {name: member.object for name, member in members.items()}
def get_module_members(obj: Any) -> Dict[str, Any]:
members = {}
for name in dir(obj):
try:
members[name] = safe_getattr(obj, name)
except AttributeError:
continue
return members
def get_all_members(obj: Any) -> Dict[str, Any]:
if doc.objtype == "module":
return get_module_members(obj)
elif doc.objtype == "class":
return get_class_members(obj)
return {}
def get_members(obj: Any, types: Set[str], include_public: List[str] = [], def get_members(obj: Any, types: Set[str], include_public: List[str] = [],
imported: bool = True) -> Tuple[List[str], List[str]]: imported: bool = True) -> Tuple[List[str], List[str]]:
items: List[str] = [] items: List[str] = []
public: List[str] = [] public: List[str] = []
for name in dir(obj):
try: all_members = get_all_members(obj)
value = safe_getattr(obj, name) for name, value in all_members.items():
except AttributeError:
continue
documenter = get_documenter(app, value, obj) documenter = get_documenter(app, value, obj)
if documenter.objtype in types: if documenter.objtype in types:
# skip imported members if expected # skip imported members if expected

View File

@ -150,10 +150,11 @@ def env_merge_info(app: Sphinx, env: BuildEnvironment, docnames: Iterable[str],
if modname not in env._viewcode_modules: # type: ignore if modname not in env._viewcode_modules: # type: ignore
env._viewcode_modules[modname] = entry # type: ignore env._viewcode_modules[modname] = entry # type: ignore
else: else:
used = env._viewcode_modules[modname][2] # type: ignore if env._viewcode_modules[modname]: # type: ignore
for fullname, docname in entry[2].items(): used = env._viewcode_modules[modname][2] # type: ignore
if fullname not in used: for fullname, docname in entry[2].items():
used[fullname] = docname if fullname not in used:
used[fullname] = docname
def env_purge_doc(app: Sphinx, env: BuildEnvironment, docname: str) -> None: def env_purge_doc(app: Sphinx, env: BuildEnvironment, docname: str) -> None:

View File

@ -12,7 +12,7 @@ from os import path
from pprint import pformat from pprint import pformat
from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Tuple, Union from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Tuple, Union
from jinja2 import BaseLoader, FileSystemLoader, TemplateNotFound, contextfunction from jinja2 import BaseLoader, FileSystemLoader, TemplateNotFound
from jinja2.environment import Environment from jinja2.environment import Environment
from jinja2.sandbox import SandboxedEnvironment from jinja2.sandbox import SandboxedEnvironment
from jinja2.utils import open_if_exists from jinja2.utils import open_if_exists
@ -22,6 +22,11 @@ from sphinx.theming import Theme
from sphinx.util import logging from sphinx.util import logging
from sphinx.util.osutil import mtimes_of_files from sphinx.util.osutil import mtimes_of_files
try:
from jinja2.utils import pass_context
except ImportError:
from jinja2 import contextfunction as pass_context
if TYPE_CHECKING: if TYPE_CHECKING:
from sphinx.builders import Builder from sphinx.builders import Builder
@ -101,7 +106,7 @@ class idgen:
next = __next__ # Python 2/Jinja compatibility next = __next__ # Python 2/Jinja compatibility
@contextfunction @pass_context
def warning(context: Dict, message: str, *args: Any, **kwargs: Any) -> str: def warning(context: Dict, message: str, *args: Any, **kwargs: Any) -> str:
if 'pagename' in context: if 'pagename' in context:
filename = context.get('pagename') + context.get('file_suffix', '') filename = context.get('pagename') + context.get('file_suffix', '')
@ -180,9 +185,9 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader):
self.environment.filters['toint'] = _toint self.environment.filters['toint'] = _toint
self.environment.filters['todim'] = _todim self.environment.filters['todim'] = _todim
self.environment.filters['slice_index'] = _slice_index self.environment.filters['slice_index'] = _slice_index
self.environment.globals['debug'] = contextfunction(pformat) self.environment.globals['debug'] = pass_context(pformat)
self.environment.globals['warning'] = warning self.environment.globals['warning'] = warning
self.environment.globals['accesskey'] = contextfunction(accesskey) self.environment.globals['accesskey'] = pass_context(accesskey)
self.environment.globals['idgen'] = idgen self.environment.globals['idgen'] = idgen
if use_i18n: if use_i18n:
self.environment.install_gettext_translations(builder.app.translator) self.environment.install_gettext_translations(builder.app.translator)

View File

@ -11,12 +11,12 @@ Documentation.addTranslations({
"Changes in Version %(version)s &#8212; %(docstitle)s": "", "Changes in Version %(version)s &#8212; %(docstitle)s": "",
"Collapse sidebar": "", "Collapse sidebar": "",
"Complete Table of Contents": "", "Complete Table of Contents": "",
"Contents": "", "Contents": "\u0627\u0644\u0645\u062d\u062a\u0648\u0649",
"Copyright": "", "Copyright": "\u0627\u0644\u062d\u0642\u0648\u0642",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "", "Full index on one page": "",
"General Index": "", "General Index": "\u0627\u0644\u0641\u0647\u0631\u0633 \u0627\u0644\u0639\u0627\u0645",
"Global Module Index": "", "Global Module Index": "",
"Go": "", "Go": "",
"Hide Search Matches": "", "Hide Search Matches": "",
@ -25,7 +25,7 @@ Documentation.addTranslations({
"Index pages by letter": "", "Index pages by letter": "",
"Indices and tables:": "", "Indices and tables:": "",
"Last updated on %(last_updated)s.": "", "Last updated on %(last_updated)s.": "",
"Library changes": "", "Library changes": "\u062a\u062c\u0647\u064a\u0632 \u0627\u0644\u0628\u062d\u062b",
"Navigation": "", "Navigation": "",
"Next topic": "\u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u062a\u0627\u0644\u064a", "Next topic": "\u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u062a\u0627\u0644\u064a",
"Other changes": "", "Other changes": "",
@ -35,29 +35,29 @@ Documentation.addTranslations({
"Please activate JavaScript to enable the search\n functionality.": "", "Please activate JavaScript to enable the search\n functionality.": "",
"Preparing search...": "", "Preparing search...": "",
"Previous topic": "\u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u0633\u0627\u0628\u0642", "Previous topic": "\u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u0633\u0627\u0628\u0642",
"Quick search": "", "Quick search": "\u0627\u0644\u0628\u062d\u062b \u0627\u0644\u0633\u0631\u064a\u0639",
"Search": "", "Search": "\u0628\u062d\u062b",
"Search Page": "", "Search Page": "\u0635\u0641\u062d\u0629 \u0627\u0644\u0628\u062d\u062b",
"Search Results": "", "Search Results": "\u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0628\u062d\u062b",
"Search finished, found %s page(s) matching the search query.": "", "Search finished, found %s page(s) matching the search query.": "",
"Search within %(docstitle)s": "\u0627\u0644\u0628\u062d\u062b \u0636\u0645\u0646 %(docstitle)s", "Search within %(docstitle)s": "\u0627\u0644\u0628\u062d\u062b \u0636\u0645\u0646 %(docstitle)s",
"Searching": "", "Searching": "",
"Searching for multiple words only shows matches that contain\n all words.": "", "Searching for multiple words only shows matches that contain\n all words.": "",
"Show Source": "", "Show Source": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0645\u0635\u062f\u0631",
"Table of Contents": "", "Table of Contents": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a",
"This Page": "", "This Page": "\u0647\u0630\u0647 \u0627\u0644\u0635\u0641\u062d\u0629",
"Welcome! This is": "", "Welcome! This is": "\u0623\u0647\u0644\u0627 \u0648\u0633\u0647\u0644\u0627 \u0647\u0630\u0627",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "",
"all functions, classes, terms": "", "all functions, classes, terms": "",
"can be huge": "", "can be huge": "",
"last updated": "", "last updated": "",
"lists all sections and subsections": "", "lists all sections and subsections": "",
"next chapter": "\u0627\u0644\u0641\u0635\u0644 \u0627\u0644\u062a\u0627\u0644\u064a", "next chapter": "\u0627\u0644\u0641\u0635\u0644 \u0627\u0644\u062a\u0627\u0644\u064a",
"previous chapter": "", "previous chapter": "\u0627\u0644\u0642\u0633\u0645 \u0627\u0644\u0633\u0627\u0628\u0642",
"quick access to all modules": "", "quick access to all modules": "",
"search": "", "search": "\u0628\u062d\u062b",
"search this documentation": "", "search this documentation": "",
"the documentation for": "" "the documentation for": "\u0627\u0644\u062a\u0648\u062b\u064a\u0642 \u0644"
}, },
"plural_expr": "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5" "plural_expr": "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5"
}); });

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "", "Complete Table of Contents": "",
"Contents": "", "Contents": "",
"Copyright": "", "Copyright": "",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "", "Full index on one page": "",
"General Index": "", "General Index": "",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "\u09aa\u09c2\u09b0\u09cd\u09a3\u09be\u0999\u09cd\u0997 \u09b8\u09c2\u099a\u09c0\u09aa\u09a4\u09cd\u09b0", "Complete Table of Contents": "\u09aa\u09c2\u09b0\u09cd\u09a3\u09be\u0999\u09cd\u0997 \u09b8\u09c2\u099a\u09c0\u09aa\u09a4\u09cd\u09b0",
"Contents": "", "Contents": "",
"Copyright": "\u0995\u09aa\u09bf\u09b0\u09be\u0987\u099f", "Copyright": "\u0995\u09aa\u09bf\u09b0\u09be\u0987\u099f",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u09a6\u09bf\u09df\u09c7 \u09a4\u09c8\u09b0\u09c0\u0964", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "\u098f\u0995 \u09aa\u09be\u09a4\u09be\u09df \u09b8\u09ae\u09cd\u09aa\u09c2\u09b0\u09cd\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "Full index on one page": "\u098f\u0995 \u09aa\u09be\u09a4\u09be\u09df \u09b8\u09ae\u09cd\u09aa\u09c2\u09b0\u09cd\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8",
"General Index": "\u09b8\u09be\u09a7\u09be\u09b0\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "General Index": "\u09b8\u09be\u09a7\u09be\u09b0\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Taula de Contingut Completa", "Complete Table of Contents": "Taula de Contingut Completa",
"Contents": "", "Contents": "",
"Copyright": "Copyright", "Copyright": "Copyright",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creat amb <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "\u00cdndex complet en una p\u00e0gina", "Full index on one page": "\u00cdndex complet en una p\u00e0gina",
"General Index": "\u00cdndex General", "General Index": "\u00cdndex General",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "", "Complete Table of Contents": "",
"Contents": "", "Contents": "",
"Copyright": "", "Copyright": "",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "", "Full index on one page": "",
"General Index": "Konojel cholwuj", "General Index": "Konojel cholwuj",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Celkov\u00fd obsah", "Complete Table of Contents": "Celkov\u00fd obsah",
"Contents": "Obsah", "Contents": "Obsah",
"Copyright": "Ve\u0161ker\u00e1 pr\u00e1va vyhrazena", "Copyright": "Ve\u0161ker\u00e1 pr\u00e1va vyhrazena",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Vytvo\u0159eno pomoc\u00ed <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Rozbalit bo\u010dn\u00ed li\u0161tu", "Expand sidebar": "Rozbalit bo\u010dn\u00ed li\u0161tu",
"Full index on one page": "Cel\u00fd rejst\u0159\u00edk na jedn\u00e9 str\u00e1nce", "Full index on one page": "Cel\u00fd rejst\u0159\u00edk na jedn\u00e9 str\u00e1nce",
"General Index": "Obecn\u00fd rejst\u0159\u00edk", "General Index": "Obecn\u00fd rejst\u0159\u00edk",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Tabl Cynnwys Llawn", "Complete Table of Contents": "Tabl Cynnwys Llawn",
"Contents": "Cynnwys", "Contents": "Cynnwys",
"Copyright": "Hawlfraint", "Copyright": "Hawlfraint",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Cr\u8c37wyd gan ddefnyddio <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Ehangu'r bar ochr", "Expand sidebar": "Ehangu'r bar ochr",
"Full index on one page": "Indecs llawn ar un tudalen", "Full index on one page": "Indecs llawn ar un tudalen",
"General Index": "Indecs cyffredinol", "General Index": "Indecs cyffredinol",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Fuldst\u00e6ndig indholdsfortegnelse", "Complete Table of Contents": "Fuldst\u00e6ndig indholdsfortegnelse",
"Contents": "Indhold", "Contents": "Indhold",
"Copyright": "Ophavsret", "Copyright": "Ophavsret",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Bygget med <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Udfold sidebj\u00e6lke", "Expand sidebar": "Udfold sidebj\u00e6lke",
"Full index on one page": "Fuldt indeks p\u00e5 \u00e9n side", "Full index on one page": "Fuldt indeks p\u00e5 \u00e9n side",
"General Index": "Generelt indeks", "General Index": "Generelt indeks",
@ -42,7 +42,7 @@ Documentation.addTranslations({
"Search finished, found %s page(s) matching the search query.": "S\u00f8gning f\u00e6rdig, fandt %s sider der matcher s\u00f8geforesp\u00f8rgslen.", "Search finished, found %s page(s) matching the search query.": "S\u00f8gning f\u00e6rdig, fandt %s sider der matcher s\u00f8geforesp\u00f8rgslen.",
"Search within %(docstitle)s": "S\u00f8g i %(docstitle)s", "Search within %(docstitle)s": "S\u00f8g i %(docstitle)s",
"Searching": "S\u00f8ger", "Searching": "S\u00f8ger",
"Searching for multiple words only shows matches that contain\n all words.": "", "Searching for multiple words only shows matches that contain\n all words.": "Bem\u00e6rk: Hvis du s\u00f8ger efter flere ord, vises kun resultater der indeholder alle ordene.",
"Show Source": "Vis kilde", "Show Source": "Vis kilde",
"Table of Contents": "", "Table of Contents": "",
"This Page": "Denne side", "This Page": "Denne side",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Vollst\u00e4ndiges Inhaltsverzeichnis", "Complete Table of Contents": "Vollst\u00e4ndiges Inhaltsverzeichnis",
"Contents": "Inhalt", "Contents": "Inhalt",
"Copyright": "Copyright", "Copyright": "Copyright",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Mit <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s erstellt.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Seitenleiste ausklappen", "Expand sidebar": "Seitenleiste ausklappen",
"Full index on one page": "Gesamtes Stichwortverzeichnis auf einer Seite", "Full index on one page": "Gesamtes Stichwortverzeichnis auf einer Seite",
"General Index": "Stichwortverzeichnis", "General Index": "Stichwortverzeichnis",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd", "Complete Table of Contents": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
"Contents": "\u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1", "Contents": "\u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1",
"Copyright": "Copyright", "Copyright": "Copyright",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03bc\u03b5 \u03c4\u03bf <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bb\u03b1\u03ca\u03bd\u03ae\u03c2 \u03bc\u03c0\u03ac\u03c1\u03b1\u03c2", "Expand sidebar": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bb\u03b1\u03ca\u03bd\u03ae\u03c2 \u03bc\u03c0\u03ac\u03c1\u03b1\u03c2",
"Full index on one page": "\u03a0\u03bb\u03ae\u03c1\u03b5\u03c2 \u03b5\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf \u03c3\u03b5 \u03bc\u03af\u03b1 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1", "Full index on one page": "\u03a0\u03bb\u03ae\u03c1\u03b5\u03c2 \u03b5\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf \u03c3\u03b5 \u03bc\u03af\u03b1 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1",
"General Index": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03cc \u0395\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf\u03bf", "General Index": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03cc \u0395\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf\u03bf",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "", "Complete Table of Contents": "",
"Contents": "", "Contents": "",
"Copyright": "A\u016dtora rajto", "Copyright": "A\u016dtora rajto",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "", "Full index on one page": "",
"General Index": "Indico universala", "General Index": "Indico universala",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "\u00cdndice de contenidos completo", "Complete Table of Contents": "\u00cdndice de contenidos completo",
"Contents": "Contenidos", "Contents": "Contenidos",
"Copyright": "Copyright", "Copyright": "Copyright",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creado con <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Expandir barra lateral", "Expand sidebar": "Expandir barra lateral",
"Full index on one page": "\u00cdndice completo en una p\u00e1gina", "Full index on one page": "\u00cdndice completo en una p\u00e1gina",
"General Index": "\u00cdndice General", "General Index": "\u00cdndice General",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "T\u00e4ielik sisukorratabel", "Complete Table of Contents": "T\u00e4ielik sisukorratabel",
"Contents": "Sisukord", "Contents": "Sisukord",
"Copyright": "Autori\u00f5igus", "Copyright": "Autori\u00f5igus",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Loodud <a href=\"http://sphinx-doc.org/\">Sphinxiga</a> (versioon: %(sphinx_version)s).", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "N\u00e4ita k\u00fclgriba", "Expand sidebar": "N\u00e4ita k\u00fclgriba",
"Full index on one page": "T\u00e4isindeks \u00fchel lehel", "Full index on one page": "T\u00e4isindeks \u00fchel lehel",
"General Index": "\u00dcldindeks", "General Index": "\u00dcldindeks",
@ -47,7 +47,7 @@ Documentation.addTranslations({
"Table of Contents": "Sisukorratabel", "Table of Contents": "Sisukorratabel",
"This Page": "K\u00e4esolev leht", "This Page": "K\u00e4esolev leht",
"Welcome! This is": "Tervitused! See on", "Welcome! This is": "Tervitused! See on",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sinu otsingule ei vastanud \u00fckski dokument. Palun veendu, et k\u00f5ik sisestatud s\u00f5nad on \u00f5igesti kirjutatud ja sa oled valikud piisaval hulgal kategooriaid.", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sinu otsingule ei vastanud \u00fckski dokument. Palun veendu, et k\u00f5ik sisestatud s\u00f5nad on \u00f5igesti kirjutatud ja sa oled valinud piisavalt kategooriaid.",
"all functions, classes, terms": "k\u00f5ik funktsioonid, klassid ja terminid", "all functions, classes, terms": "k\u00f5ik funktsioonid, klassid ja terminid",
"can be huge": "v\u00f5ib olla v\u00e4ga suur", "can be huge": "v\u00f5ib olla v\u00e4ga suur",
"last updated": "viimati uuendatud", "last updated": "viimati uuendatud",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Eduki taula osoa", "Complete Table of Contents": "Eduki taula osoa",
"Contents": "Edukiak", "Contents": "Edukiak",
"Copyright": "Copyright", "Copyright": "Copyright",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s erabiliz sortutakoa.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Alboko barra luzatu", "Expand sidebar": "Alboko barra luzatu",
"Full index on one page": "Indize guztia orri batean", "Full index on one page": "Indize guztia orri batean",
"General Index": "Indize orokorra", "General Index": "Indize orokorra",

File diff suppressed because it is too large Load Diff

View File

@ -1,63 +1,63 @@
Documentation.addTranslations({ Documentation.addTranslations({
"locale": "fa", "locale": "fa",
"messages": { "messages": {
"%(filename)s &#8212; %(docstitle)s": "", "%(filename)s &#8212; %(docstitle)s": "%(filename)s &#8212; %(docstitle)s",
"&#169; <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "&#169; <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "&#169; <a href=\"%(path)s\">\u062d\u0642 \u0646\u0634\u0631</a> %(copyright)s.",
"&#169; Copyright %(copyright)s.": "", "&#169; Copyright %(copyright)s.": "&#169; \u062d\u0642 \u0646\u0634\u0631%(copyright)s.",
", in ": "", ", in ": "\u060c \u062f\u0631 ",
"About these documents": "\u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646 \u0645\u0633\u062a\u0646\u062f\u0627\u062a", "About these documents": "\u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646 \u0645\u0633\u062a\u0646\u062f\u0627\u062a",
"Automatically generated list of changes in version %(version)s": "\u0644\u06cc\u0633\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0646\u0633\u062e\u0647 %(version)s", "Automatically generated list of changes in version %(version)s": "\u0644\u06cc\u0633\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0646\u0633\u062e\u0647 %(version)s",
"C API changes": "C API \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a", "C API changes": "C API \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a",
"Changes in Version %(version)s &#8212; %(docstitle)s": "", "Changes in Version %(version)s &#8212; %(docstitle)s": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0646\u0633\u062e\u0647 %(version)s &#8212; %(docstitle)s",
"Collapse sidebar": "", "Collapse sidebar": "\u062a\u0627 \u06a9\u0631\u062f\u0646 \u0646\u0648\u0627\u0631 \u06a9\u0646\u0627\u0631\u0647",
"Complete Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u0645\u0637\u0627\u0644\u0628", "Complete Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u0645\u0637\u0627\u0644\u0628",
"Contents": "", "Contents": "\u0645\u062d\u062a\u0648\u0627 \u0647\u0627",
"Copyright": "\u06a9\u067e\u06cc \u0631\u0627\u06cc\u062a", "Copyright": "\u062d\u0642 \u0627\u0646\u062a\u0634\u0627\u0631",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": ". <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0628\u0627", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0628\u0627<a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.",
"Expand sidebar": "", "Expand sidebar": "\u06af\u0633\u062a\u0631\u0634 \u0646\u0648\u0627\u0631 \u06a9\u0646\u0627\u0631\u0647",
"Full index on one page": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u062f\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647", "Full index on one page": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u062f\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647",
"General Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc", "General Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc",
"Global Module Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc \u0645\u0627\u0698\u0648\u0644 \u0647\u0627", "Global Module Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc \u0645\u0627\u0698\u0648\u0644 \u0647\u0627",
"Go": "\u0628\u0631\u0648", "Go": "\u0631\u0641\u062a\u0646 \u0628\u0647",
"Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647", "Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647",
"Index": "\u0641\u0647\u0631\u0633\u062a", "Index": "\u0641\u0647\u0631\u0633\u062a",
"Index &ndash; %(key)s": "\u0641\u0647\u0631\u0633\u062a &ndash; %(key)s", "Index &ndash; %(key)s": "\u0641\u0647\u0631\u0633\u062a &ndash; %(key)s",
"Index pages by letter": "\u0641\u0647\u0631\u0633\u062a \u0635\u0641\u062d\u0627\u062a \u0628\u0631 \u0627\u0633\u0627\u0633 \u062d\u0631\u0648\u0641", "Index pages by letter": "\u0641\u0647\u0631\u0633\u062a \u0635\u0641\u062d\u0627\u062a \u0628\u0631 \u0627\u0633\u0627\u0633 \u062d\u0631\u0648\u0641",
"Indices and tables:": "\u0627\u06cc\u0646\u062f\u06a9\u0633 \u0647\u0627 \u0648 \u062c\u062f\u0627\u0648\u0644:", "Indices and tables:": "\u0646\u0645\u0627\u06cc\u0647\u200c\u0647\u0627 \u0648 \u062c\u062f\u0648\u0644\u200c\u0647\u0627:",
"Last updated on %(last_updated)s.": ". %(last_updated)s \u0622\u062e\u0631\u06cc\u0646 \u0628\u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0631", "Last updated on %(last_updated)s.": "\u0622\u062e\u0631\u06cc\u0646 \u0628\u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0631 %(last_updated)s .",
"Library changes": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u06cc\u06cc", "Library changes": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u06cc\u06cc",
"Navigation": "\u0646\u0627\u0648\u0628\u0631\u06cc", "Navigation": "\u0646\u0627\u0648\u0628\u0631\u06cc",
"Next topic": "\u0645\u0648\u0636\u0648\u0639 \u0628\u0639\u062f\u06cc", "Next topic": "\u0645\u0648\u0636\u0648\u0639 \u0628\u0639\u062f\u06cc",
"Other changes": "\u062f\u06af\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a", "Other changes": "\u062f\u06af\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a",
"Overview": "\u0628\u0631\u0631\u0633\u06cc \u0627\u062c\u0645\u0627\u0644\u06cc", "Overview": "\u0628\u0631\u0631\u0633\u06cc \u0627\u062c\u0645\u0627\u0644\u06cc",
"Permalink to this definition": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641", "Permalink to this definition": "\u067e\u06cc\u0648\u0646\u062f \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641",
"Permalink to this headline": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647", "Permalink to this headline": "\u067e\u06cc\u0648\u0646\u062f \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647",
"Please activate JavaScript to enable the search\n functionality.": "", "Please activate JavaScript to enable the search\n functionality.": "\u0644\u0637\u0641\u0627\u064b \u0628\u0631\u0627\u06cc \u0641\u0639\u0651\u0627\u0644 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0631\u06a9\u0631\u062f \u062c\u0633\u062a\u062c\u0648\n\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0641\u0639\u0651\u0627\u0644 \u06a9\u0646\u06cc\u062f.",
"Preparing search...": "", "Preparing search...": "\u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u062c\u0633\u062a \u0648 \u062c\u0648...",
"Previous topic": "\u0645\u0648\u0636\u0648\u0639 \u0642\u0628\u0644\u06cc", "Previous topic": "\u0645\u0648\u0636\u0648\u0639 \u0642\u0628\u0644\u06cc",
"Quick search": "\u062c\u0633\u062a\u062c\u0648 \u0633\u0631\u06cc\u0639", "Quick search": "\u062c\u0633\u062a\u062c\u0648 \u0633\u0631\u06cc\u0639",
"Search": "\u062c\u0633\u062a\u062c\u0648", "Search": "\u062c\u0633\u062a\u062c\u0648",
"Search Page": "\u0635\u0641\u062d\u0647 \u062c\u0633\u062a\u062c\u0648", "Search Page": "\u0635\u0641\u062d\u0647 \u062c\u0633\u062a\u062c\u0648",
"Search Results": "\u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648", "Search Results": "\u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648",
"Search finished, found %s page(s) matching the search query.": "", "Search finished, found %s page(s) matching the search query.": "\u062c\u0633\u062a\u062c\u0648 \u067e\u0627\u06cc\u0627\u0646 \u06cc\u0627\u0641\u062a \u0648 %s\u0635\u0641\u062d\u0647 \u0646\u062a\u0627\u06cc\u062c \u0645\u0637\u0627\u0628\u0642 \u062c\u0633\u062a\u0627\u0631 \u067e\u06cc\u062f\u0627 \u0634\u062f\u0646.",
"Search within %(docstitle)s": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 %(docstitle)s", "Search within %(docstitle)s": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 %(docstitle)s",
"Searching": "", "Searching": "\u062f\u0631 \u062d\u0627\u0644 \u062c\u0633\u062a \u0648 \u062c\u0648",
"Searching for multiple words only shows matches that contain\n all words.": "", "Searching for multiple words only shows matches that contain\n all words.": "\u062f\u0631 \u062d\u0627\u0644 \u062c\u0633\u062a\u062c\u0648 \u0628\u0631\u0627\u06cc \u0686\u0646\u062f\u06cc\u0646 \u0648\u0627\u0698\u0647. \u0641\u0642\u0637 \u0648\u0627\u0698\u06af\u0627\u0646\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0634\u0627\u0645\u0644 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0628\u0627\u0634\u062f:\n \u0647\u0645\u0647\u200c\u06cc \u06a9\u0644\u0645\u0647\u200c\u0647\u0627.",
"Show Source": "\u0646\u0645\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633", "Show Source": "\u0646\u0645\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633",
"Table of Contents": "", "Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u0639\u0646\u0627\u0648\u06cc\u0646",
"This Page": "\u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc", "This Page": "\u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc",
"Welcome! This is": "", "Welcome! This is": "\u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f! \u0627\u06cc\u0646",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0645\u0627 \u0628\u0627 \u0647\u06cc\u0686 \u0633\u0646\u062f\u06cc \u0647\u0645 \u062e\u0648\u0627\u0646\u06cc \u0646\u062f\u0627\u0634\u062a. \u0644\u0637\u0641\u0627\u064b \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0647\u0645\u0647 \u06cc \u0648\u0627\u0698\u0647 \u0647\u0627 \u0627\u0645\u0644\u0627\u06cc \u062f\u0631\u0633\u062a\u06cc \u062f\u0627\u0631\u0646\u062f \u0648 \u062f\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u0647\u0627\u06cc \u06a9\u0627\u0641\u06cc \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f.",
"all functions, classes, terms": "\u062a\u0645\u0627\u0645\u06cc \u062a\u0648\u0627\u0628\u0639 \u060c \u06a9\u0644\u0627\u0633 \u0647\u0627 \u060c \u0627\u0635\u0637\u0644\u0627\u062d\u0627\u062a", "all functions, classes, terms": "\u062a\u0645\u0627\u0645\u06cc \u062a\u0648\u0627\u0628\u0639 \u060c \u06a9\u0644\u0627\u0633 \u0647\u0627 \u060c \u0627\u0635\u0637\u0644\u0627\u062d\u0627\u062a",
"can be huge": "", "can be huge": "\u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0633\u062a\u0631\u06af \u0628\u0627\u0634\u062f",
"last updated": "", "last updated": "\u0622\u062e\u0631\u06cc\u0646 \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc",
"lists all sections and subsections": "\u0641\u0647\u0631\u0633\u062a \u062a\u0645\u0627\u0645\u06cc \u0628\u062e\u0634 \u0647\u0627 \u0648 \u0632\u06cc\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627", "lists all sections and subsections": "\u0641\u0647\u0631\u0633\u062a \u062a\u0645\u0627\u0645\u06cc \u0628\u062e\u0634 \u0647\u0627 \u0648 \u0632\u06cc\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627",
"next chapter": "\u0641\u0635\u0644 \u0628\u0639\u062f\u06cc", "next chapter": "\u0641\u0635\u0644 \u0628\u0639\u062f\u06cc",
"previous chapter": "\u0641\u0635\u0644 \u0642\u0628\u0644\u06cc", "previous chapter": "\u0641\u0635\u0644 \u0642\u0628\u0644\u06cc",
"quick access to all modules": "\u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u06cc\u0639 \u0628\u0647 \u062a\u0645\u0627\u0645\u06cc \u0645\u062a\u062f\u0647\u0627", "quick access to all modules": "\u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u06cc\u0639 \u0628\u0647 \u062a\u0645\u0627\u0645\u06cc \u0645\u062a\u062f\u0647\u0627",
"search": "\u062c\u0633\u062a\u062c\u0648", "search": "\u062c\u0633\u062a\u062c\u0648",
"search this documentation": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0633\u0646\u0627\u062f", "search this documentation": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0633\u0646\u0627\u062f",
"the documentation for": "" "the documentation for": "\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0628\u0631\u0627\u06cc"
}, },
"plural_expr": "(n > 1)" "plural_expr": "(n > 1)"
}); });

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "", "Complete Table of Contents": "",
"Contents": "", "Contents": "",
"Copyright": "", "Copyright": "",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "Hakemisto yhten\u00e4 luettelona", "Full index on one page": "Hakemisto yhten\u00e4 luettelona",
"General Index": "Yleinen sis\u00e4llysluettelo", "General Index": "Yleinen sis\u00e4llysluettelo",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Table des mati\u00e8res compl\u00e8te", "Complete Table of Contents": "Table des mati\u00e8res compl\u00e8te",
"Contents": "Contenu", "Contents": "Contenu",
"Copyright": "Copyright", "Copyright": "Copyright",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Cr\u00e9\u00e9 avec <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Agrandir la barre lat\u00e9rale", "Expand sidebar": "Agrandir la barre lat\u00e9rale",
"Full index on one page": "Index complet sur une seule page", "Full index on one page": "Index complet sur une seule page",
"General Index": "Index g\u00e9n\u00e9ral", "General Index": "Index g\u00e9n\u00e9ral",
@ -42,7 +42,7 @@ Documentation.addTranslations({
"Search finished, found %s page(s) matching the search query.": "La recherche est finie, %s page(s) trouv\u00e9e(s) qui corresponde(nt) \u00e0 la recherche.", "Search finished, found %s page(s) matching the search query.": "La recherche est finie, %s page(s) trouv\u00e9e(s) qui corresponde(nt) \u00e0 la recherche.",
"Search within %(docstitle)s": "Recherchez dans %(docstitle)s", "Search within %(docstitle)s": "Recherchez dans %(docstitle)s",
"Searching": "Recherche en cours", "Searching": "Recherche en cours",
"Searching for multiple words only shows matches that contain\n all words.": "", "Searching for multiple words only shows matches that contain\n all words.": "Une recherche sur plusieurs mots ne retourne que les r\u00e9sultats contenant tous les mots.",
"Show Source": "Montrer le code source", "Show Source": "Montrer le code source",
"Table of Contents": "Table des mati\u00e8res", "Table of Contents": "Table des mati\u00e8res",
"This Page": "Cette page", "This Page": "Cette page",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd \u05de\u05dc\u05d0", "Complete Table of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd \u05de\u05dc\u05d0",
"Contents": "\u05ea\u05d5\u05db\u05df", "Contents": "\u05ea\u05d5\u05db\u05df",
"Copyright": "\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea", "Copyright": "\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "\u05d4\u05e8\u05d7\u05d1 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3", "Expand sidebar": "\u05d4\u05e8\u05d7\u05d1 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3",
"Full index on one page": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05de\u05dc\u05d0 \u05d1\u05e2\u05de\u05d5\u05d3 \u05d0\u05d7\u05d3", "Full index on one page": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05de\u05dc\u05d0 \u05d1\u05e2\u05de\u05d5\u05d3 \u05d0\u05d7\u05d3",
"General Index": "", "General Index": "",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "\u0935\u093f\u0938\u094d\u0924\u0943\u0924 \u0935\u093f\u0937\u092f-\u0938\u0942\u091a\u0940", "Complete Table of Contents": "\u0935\u093f\u0938\u094d\u0924\u0943\u0924 \u0935\u093f\u0937\u092f-\u0938\u0942\u091a\u0940",
"Contents": "\u0935\u093f\u0937\u092f \u0938\u093e\u092e\u093f\u0917\u094d\u0930\u0940", "Contents": "\u0935\u093f\u0937\u092f \u0938\u093e\u092e\u093f\u0917\u094d\u0930\u0940",
"Copyright": "\u0938\u0930\u094d\u0935\u093e\u0927\u093f\u0915\u093e\u0930", "Copyright": "\u0938\u0930\u094d\u0935\u093e\u0927\u093f\u0915\u093e\u0930",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u0938\u0947 \u0928\u093f\u0930\u094d\u092e\u093f\u0924.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "\u0915\u093f\u0928\u093e\u0930\u0947 \u0915\u093e \u0938\u094d\u0925\u093e\u0928 \u092c\u095d\u093e\u090f\u0902", "Expand sidebar": "\u0915\u093f\u0928\u093e\u0930\u0947 \u0915\u093e \u0938\u094d\u0925\u093e\u0928 \u092c\u095d\u093e\u090f\u0902",
"Full index on one page": "\u090f\u0915 \u092a\u0943\u0937\u094d\u0920 \u092a\u0930 \u092a\u0942\u0930\u0940 \u0905\u0928\u0941\u0915\u094d\u0930\u092e\u0923\u093f\u0915\u093e", "Full index on one page": "\u090f\u0915 \u092a\u0943\u0937\u094d\u0920 \u092a\u0930 \u092a\u0942\u0930\u0940 \u0905\u0928\u0941\u0915\u094d\u0930\u092e\u0923\u093f\u0915\u093e",
"General Index": "\u0938\u093e\u092e\u093e\u0928\u094d\u092f \u0905\u0928\u0941\u0915\u094d\u0930\u092e\u093e\u0923\u093f\u0915\u093e", "General Index": "\u0938\u093e\u092e\u093e\u0928\u094d\u092f \u0905\u0928\u0941\u0915\u094d\u0930\u092e\u093e\u0923\u093f\u0915\u093e",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "", "Complete Table of Contents": "",
"Contents": "", "Contents": "",
"Copyright": "", "Copyright": "",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "", "Expand sidebar": "",
"Full index on one page": "", "Full index on one page": "",
"General Index": "", "General Index": "",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Detaljni sadr\u017eaj", "Complete Table of Contents": "Detaljni sadr\u017eaj",
"Contents": "Sadr\u017eaj", "Contents": "Sadr\u017eaj",
"Copyright": "Sva prava zadr\u017eana", "Copyright": "Sva prava zadr\u017eana",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Izra\u0111eno sa <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Poka\u017ei pomo\u0107nu traku", "Expand sidebar": "Poka\u017ei pomo\u0107nu traku",
"Full index on one page": "Potpun indeks na jednoj stranici", "Full index on one page": "Potpun indeks na jednoj stranici",
"General Index": "Opceniti abecedni indeks", "General Index": "Opceniti abecedni indeks",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Teljes tartalomjegyz\u00e9k", "Complete Table of Contents": "Teljes tartalomjegyz\u00e9k",
"Contents": "Tartalom", "Contents": "Tartalom",
"Copyright": "Minden jog fenntartva", "Copyright": "Minden jog fenntartva",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s haszn\u00e1lat\u00e1val k\u00e9sz\u00fclt.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Oldals\u00e1v kinyit\u00e1sa", "Expand sidebar": "Oldals\u00e1v kinyit\u00e1sa",
"Full index on one page": "Teljes t\u00e1rgymutat\u00f3 egy oldalon", "Full index on one page": "Teljes t\u00e1rgymutat\u00f3 egy oldalon",
"General Index": "\u00c1ltal\u00e1nos t\u00e1rgymutat\u00f3", "General Index": "\u00c1ltal\u00e1nos t\u00e1rgymutat\u00f3",

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ Documentation.addTranslations({
"Complete Table of Contents": "Daftar Isi Lengkap", "Complete Table of Contents": "Daftar Isi Lengkap",
"Contents": "Konten", "Contents": "Konten",
"Copyright": "Hak Cipta", "Copyright": "Hak Cipta",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Dibuat menggunakan <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Buka sidebar", "Expand sidebar": "Buka sidebar",
"Full index on one page": "Index penuh dalam satu halaman", "Full index on one page": "Index penuh dalam satu halaman",
"General Index": "Indeks Umum", "General Index": "Indeks Umum",

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More