summaryrefslogtreecommitdiff
path: root/sphinx
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2020-10-04 22:41:44 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2020-10-04 22:41:44 +0900
commit598b85da75bc533004d68b95a5056016dc16df1c (patch)
treee08eae0ea5f098257f01081e4c792bcfeb92eba6 /sphinx
parent11633f2e53bf01f6844256558444991836815690 (diff)
parent38bb3774643d779b708970f941f2b16d1ab81b89 (diff)
downloadsphinx-git-598b85da75bc533004d68b95a5056016dc16df1c.tar.gz
Merge branch '3.x' into master
Diffstat (limited to 'sphinx')
-rw-r--r--sphinx/application.py7
-rw-r--r--sphinx/builders/html/__init__.py12
-rw-r--r--sphinx/builders/latex/__init__.py4
-rw-r--r--sphinx/builders/linkcheck.py8
-rw-r--r--sphinx/builders/manpage.py10
-rw-r--r--sphinx/environment/collectors/toctree.py4
-rw-r--r--sphinx/ext/autodoc/__init__.py47
-rw-r--r--sphinx/locale/__init__.py2
-rw-r--r--sphinx/locale/ar/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/bg/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/bn/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ca/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/cak/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/cs/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/cy/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/da/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/de/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/el/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/eo/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/es/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/et/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/eu/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/fa/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/fi/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/fr/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/he/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/hi/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/hr/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/hu/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/id/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/it/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ja/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ko/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/lt/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/lv/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/mk/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ne/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/nl/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/pl/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/pt/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ro/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ru/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/si/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/sk/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/sl/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/sq/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/sr/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/sr@latin/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/sr_RS/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/sv/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ta/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/te/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/tr/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/ur/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/vi/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po2
-rw-r--r--sphinx/pycode/ast.py18
-rw-r--r--sphinx/search/non-minified-js/danish-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/dutch-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/finnish-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/french-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/german-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/hungarian-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/italian-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/norwegian-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/porter-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/portuguese-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/romanian-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/russian-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/spanish-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/swedish-stemmer.js4
-rw-r--r--sphinx/search/non-minified-js/turkish-stemmer.js4
-rw-r--r--sphinx/texinputs/sphinx.sty4
-rw-r--r--sphinx/texinputs/sphinxcyrillic.sty2
-rw-r--r--sphinx/texinputs/sphinxhowto.cls2
-rw-r--r--sphinx/themes/nature/static/nature.css_t66
-rw-r--r--sphinx/themes/pyramid/static/pyramid.css_t64
-rw-r--r--sphinx/themes/sphinxdoc/static/sphinxdoc.css_t2
-rw-r--r--sphinx/transforms/post_transforms/images.py15
-rw-r--r--sphinx/util/inspect.py6
-rw-r--r--sphinx/util/typing.py11
87 files changed, 258 insertions, 194 deletions
diff --git a/sphinx/application.py b/sphinx/application.py
index 4a82efcfa..72a8898bf 100644
--- a/sphinx/application.py
+++ b/sphinx/application.py
@@ -17,7 +17,7 @@ import sys
from collections import deque
from io import StringIO
from os import path
-from typing import Any, Callable, Dict, IO, List, Tuple, Type, Union
+from typing import Any, Callable, Dict, IO, List, Optional, Tuple, Type, Union
from typing import TYPE_CHECKING
from docutils import nodes
@@ -289,7 +289,10 @@ class Sphinx:
if catalog.domain == 'sphinx' and catalog.is_outdated():
catalog.write_mo(self.config.language)
- locale_dirs = [None, path.join(package_dir, 'locale')] + list(repo.locale_dirs)
+ locale_dirs = [None] # type: List[Optional[str]]
+ locale_dirs += list(repo.locale_dirs)
+ locale_dirs += [path.join(package_dir, 'locale')]
+
self.translator, has_translation = locale.init(locale_dirs, self.config.language)
if has_translation or self.config.language == 'en':
# "en" never needs to be translated
diff --git a/sphinx/builders/html/__init__.py b/sphinx/builders/html/__init__.py
index 03a8daeb7..0e132e4b4 100644
--- a/sphinx/builders/html/__init__.py
+++ b/sphinx/builders/html/__init__.py
@@ -646,17 +646,17 @@ class StandaloneHTMLBuilder(Builder):
def gen_additional_pages(self) -> None:
# additional pages from conf.py
for pagename, template in self.config.html_additional_pages.items():
- logger.info(' ' + pagename, nonl=True)
+ logger.info(pagename + ' ', nonl=True)
self.handle_page(pagename, {}, template)
# the search page
if self.search:
- logger.info(' search', nonl=True)
+ logger.info('search ', nonl=True)
self.handle_page('search', {}, 'search.html')
# the opensearch xml file
if self.config.html_use_opensearch and self.search:
- logger.info(' opensearch', nonl=True)
+ logger.info('opensearch ', nonl=True)
fn = path.join(self.outdir, '_static', 'opensearch.xml')
self.handle_page('opensearch', {}, 'opensearch.xml', outfilename=fn)
@@ -674,7 +674,7 @@ class StandaloneHTMLBuilder(Builder):
'genindexcounts': indexcounts,
'split_index': self.config.html_split_index,
}
- logger.info(' genindex', nonl=True)
+ logger.info('genindex ', nonl=True)
if self.config.html_split_index:
self.handle_page('genindex', genindexcontext,
@@ -696,7 +696,7 @@ class StandaloneHTMLBuilder(Builder):
'content': content,
'collapse_index': collapse,
}
- logger.info(' ' + indexname, nonl=True)
+ logger.info(indexname + ' ', nonl=True)
self.handle_page(indexname, indexcontext, 'domainindex.html')
def copy_image_files(self) -> None:
@@ -790,7 +790,7 @@ class StandaloneHTMLBuilder(Builder):
def copy_static_files(self) -> None:
try:
- with progress_message(__('copying static files... ')):
+ with progress_message(__('copying static files')):
ensuredir(path.join(self.outdir, '_static'))
# prepare context for templates
diff --git a/sphinx/builders/latex/__init__.py b/sphinx/builders/latex/__init__.py
index 34518c42d..6a876862d 100644
--- a/sphinx/builders/latex/__init__.py
+++ b/sphinx/builders/latex/__init__.py
@@ -474,7 +474,7 @@ def validate_latex_theme_options(app: Sphinx, config: Config) -> None:
config.latex_theme_options.pop(key)
-def install_pakcages_for_ja(app: Sphinx) -> None:
+def install_packages_for_ja(app: Sphinx) -> None:
"""Install packages for Japanese."""
if app.config.language == 'ja' and app.config.latex_engine in ('platex', 'uplatex'):
app.add_latex_package('pxjahyper', after_hyperref=True)
@@ -527,7 +527,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_builder(LaTeXBuilder)
app.connect('config-inited', validate_config_values, priority=800)
app.connect('config-inited', validate_latex_theme_options, priority=800)
- app.connect('builder-inited', install_pakcages_for_ja)
+ app.connect('builder-inited', install_packages_for_ja)
app.add_config_value('latex_engine', default_latex_engine, None,
ENUM('pdflatex', 'xelatex', 'lualatex', 'platex', 'uplatex'))
diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py
index 9b54afc7c..a9e6b05b0 100644
--- a/sphinx/builders/linkcheck.py
+++ b/sphinx/builders/linkcheck.py
@@ -166,6 +166,7 @@ class CheckExternalLinksBuilder(Builder):
# Read the whole document and see if #anchor exists
response = requests.get(req_url, stream=True, config=self.app.config,
auth=auth_info, **kwargs)
+ response.raise_for_status()
found = check_anchor(response, unquote(anchor))
if not found:
@@ -210,7 +211,7 @@ class CheckExternalLinksBuilder(Builder):
else:
return 'redirected', new_url, 0
- def check() -> Tuple[str, str, int]:
+ def check(docname: str) -> Tuple[str, str, int]:
# check for various conditions without bothering the network
if len(uri) == 0 or uri.startswith(('#', 'mailto:')):
return 'unchecked', '', 0
@@ -219,7 +220,8 @@ class CheckExternalLinksBuilder(Builder):
# non supported URI schemes (ex. ftp)
return 'unchecked', '', 0
else:
- if path.exists(path.join(self.srcdir, uri)):
+ srcdir = path.dirname(self.env.doc2path(docname))
+ if path.exists(path.join(srcdir, uri)):
return 'working', '', 0
else:
for rex in self.to_ignore:
@@ -256,7 +258,7 @@ class CheckExternalLinksBuilder(Builder):
uri, docname, lineno = self.wqueue.get()
if uri is None:
break
- status, info, code = check()
+ status, info, code = check(docname)
self.rqueue.put((uri, docname, lineno, status, info, code))
def process_result(self, result: Tuple[str, str, int, str, str, int]) -> None:
diff --git a/sphinx/builders/manpage.py b/sphinx/builders/manpage.py
index 4166dece9..2a10ba62f 100644
--- a/sphinx/builders/manpage.py
+++ b/sphinx/builders/manpage.py
@@ -24,7 +24,7 @@ from sphinx.util import logging
from sphinx.util import progress_message
from sphinx.util.console import darkgreen # type: ignore
from sphinx.util.nodes import inline_all_toctrees
-from sphinx.util.osutil import make_filename_from_project
+from sphinx.util.osutil import ensuredir, make_filename_from_project
from sphinx.writers.manpage import ManualPageWriter, ManualPageTranslator
@@ -80,7 +80,12 @@ class ManualPageBuilder(Builder):
docsettings.authors = authors
docsettings.section = section
- targetname = '%s.%s' % (name, section)
+ if self.config.man_make_section_directory:
+ ensuredir(path.join(self.outdir, str(section)))
+ targetname = '%s/%s.%s' % (section, name, section)
+ else:
+ targetname = '%s.%s' % (name, section)
+
logger.info(darkgreen(targetname) + ' { ', nonl=True)
destination = FileOutput(
destination_path=path.join(self.outdir, targetname),
@@ -115,6 +120,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value('man_pages', default_man_pages, None)
app.add_config_value('man_show_urls', False, None)
+ app.add_config_value('man_make_section_directory', False, None)
return {
'version': 'builtin',
diff --git a/sphinx/environment/collectors/toctree.py b/sphinx/environment/collectors/toctree.py
index acb45ef56..d17f7090e 100644
--- a/sphinx/environment/collectors/toctree.py
+++ b/sphinx/environment/collectors/toctree.py
@@ -220,6 +220,10 @@ class TocTreeCollector(EnvironmentCollector):
def get_figtype(node: Node) -> str:
for domain in env.domains.values():
figtype = domain.get_enumerable_node_type(node)
+ if domain.name == 'std' and not domain.get_numfig_title(node): # type: ignore
+ # Skip if uncaptioned node
+ continue
+
if figtype:
return figtype
diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py
index 9325c0f4c..983c43b24 100644
--- a/sphinx/ext/autodoc/__init__.py
+++ b/sphinx/ext/autodoc/__init__.py
@@ -1198,7 +1198,8 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
try:
self.env.app.emit('autodoc-before-process-signature', self.object, False)
- sig = inspect.signature(self.object, follow_wrapped=True)
+ sig = inspect.signature(self.object, follow_wrapped=True,
+ type_aliases=self.env.config.autodoc_type_aliases)
args = stringify_signature(sig, **kwargs)
except TypeError as exc:
logger.warning(__("Failed to get a function signature for %s: %s"),
@@ -1247,7 +1248,9 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
if overloaded:
__globals__ = safe_getattr(self.object, '__globals__', {})
for overload in self.analyzer.overloads.get('.'.join(self.objpath)):
- overload = evaluate_signature(overload, __globals__)
+ overload = evaluate_signature(overload, __globals__,
+ self.env.config.autodoc_type_aliases)
+
sig = stringify_signature(overload, **kwargs)
sigs.append(sig)
@@ -1256,7 +1259,7 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
def annotate_to_first_argument(self, func: Callable, typ: Type) -> None:
"""Annotate type hint to the first argument of function if needed."""
try:
- sig = inspect.signature(func)
+ sig = inspect.signature(func, type_aliases=self.env.config.autodoc_type_aliases)
except TypeError as exc:
logger.warning(__("Failed to get a function signature for %s: %s"),
self.fullname, exc)
@@ -1284,6 +1287,11 @@ class SingledispatchFunctionDocumenter(FunctionDocumenter):
Retained for backwards compatibility, now does the same as the FunctionDocumenter
"""
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
+ warnings.warn("%s is deprecated." % self.__class__.__name__,
+ RemovedInSphinx50Warning, stacklevel=2)
+ super().__init__(*args, **kwargs)
+
class DecoratorDocumenter(FunctionDocumenter):
"""
@@ -1377,7 +1385,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
if call is not None:
self.env.app.emit('autodoc-before-process-signature', call, True)
try:
- sig = inspect.signature(call, bound_method=True)
+ sig = inspect.signature(call, bound_method=True,
+ type_aliases=self.env.config.autodoc_type_aliases)
return type(self.object), '__call__', sig
except ValueError:
pass
@@ -1392,7 +1401,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
if new is not None:
self.env.app.emit('autodoc-before-process-signature', new, True)
try:
- sig = inspect.signature(new, bound_method=True)
+ sig = inspect.signature(new, bound_method=True,
+ type_aliases=self.env.config.autodoc_type_aliases)
return self.object, '__new__', sig
except ValueError:
pass
@@ -1402,7 +1412,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
if init is not None:
self.env.app.emit('autodoc-before-process-signature', init, True)
try:
- sig = inspect.signature(init, bound_method=True)
+ sig = inspect.signature(init, bound_method=True,
+ type_aliases=self.env.config.autodoc_type_aliases)
return self.object, '__init__', sig
except ValueError:
pass
@@ -1413,7 +1424,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
# the signature from, so just pass the object itself to our hook.
self.env.app.emit('autodoc-before-process-signature', self.object, False)
try:
- sig = inspect.signature(self.object, bound_method=False)
+ sig = inspect.signature(self.object, bound_method=False,
+ type_aliases=self.env.config.autodoc_type_aliases)
return None, None, sig
except ValueError:
pass
@@ -1460,7 +1472,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
method = safe_getattr(self._signature_class, self._signature_method_name, None)
__globals__ = safe_getattr(method, '__globals__', {})
for overload in self.analyzer.overloads.get(qualname):
- overload = evaluate_signature(overload, __globals__)
+ overload = evaluate_signature(overload, __globals__,
+ self.env.config.autodoc_type_aliases)
parameters = list(overload.parameters.values())
overload = overload.replace(parameters=parameters[1:],
@@ -1798,11 +1811,13 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
else:
if inspect.isstaticmethod(self.object, cls=self.parent, name=self.object_name):
self.env.app.emit('autodoc-before-process-signature', self.object, False)
- sig = inspect.signature(self.object, bound_method=False)
+ sig = inspect.signature(self.object, bound_method=False,
+ type_aliases=self.env.config.autodoc_type_aliases)
else:
self.env.app.emit('autodoc-before-process-signature', self.object, True)
sig = inspect.signature(self.object, bound_method=True,
- follow_wrapped=True)
+ follow_wrapped=True,
+ type_aliases=self.env.config.autodoc_type_aliases)
args = stringify_signature(sig, **kwargs)
except TypeError as exc:
logger.warning(__("Failed to get a method signature for %s: %s"),
@@ -1862,7 +1877,9 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
if overloaded:
__globals__ = safe_getattr(self.object, '__globals__', {})
for overload in self.analyzer.overloads.get('.'.join(self.objpath)):
- overload = evaluate_signature(overload, __globals__)
+ overload = evaluate_signature(overload, __globals__,
+ self.env.config.autodoc_type_aliases)
+
if not inspect.isstaticmethod(self.object, cls=self.parent,
name=self.object_name):
parameters = list(overload.parameters.values())
@@ -1875,7 +1892,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
def annotate_to_first_argument(self, func: Callable, typ: Type) -> None:
"""Annotate type hint to the first argument of function if needed."""
try:
- sig = inspect.signature(func)
+ sig = inspect.signature(func, type_aliases=self.env.config.autodoc_type_aliases)
except TypeError as exc:
logger.warning(__("Failed to get a method signature for %s: %s"),
self.fullname, exc)
@@ -1902,6 +1919,11 @@ class SingledispatchMethodDocumenter(MethodDocumenter):
Retained for backwards compatibility, now does the same as the MethodDocumenter
"""
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
+ warnings.warn("%s is deprecated." % self.__class__.__name__,
+ RemovedInSphinx50Warning, stacklevel=2)
+ super().__init__(*args, **kwargs)
+
class AttributeDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): # type: ignore
"""
@@ -2212,6 +2234,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value('autodoc_mock_imports', [], True)
app.add_config_value('autodoc_typehints', "signature", True,
ENUM("signature", "description", "none"))
+ app.add_config_value('autodoc_type_aliases', {}, True)
app.add_config_value('autodoc_warningiserror', True, True)
app.add_config_value('autodoc_inherit_docstrings', True, True)
app.add_event('autodoc-before-process-signature')
diff --git a/sphinx/locale/__init__.py b/sphinx/locale/__init__.py
index 385ca3566..5210dc725 100644
--- a/sphinx/locale/__init__.py
+++ b/sphinx/locale/__init__.py
@@ -106,7 +106,7 @@ class _TranslationProxy(UserString):
translators = defaultdict(NullTranslations) # type: Dict[Tuple[str, str], NullTranslations]
-def init(locale_dirs: List[str], language: str,
+def init(locale_dirs: List[Optional[str]], language: str,
catalog: str = 'sphinx', namespace: str = 'general') -> Tuple[NullTranslations, bool]:
"""Look for message catalogs in `locale_dirs` and *ensure* that there is at
least a NullTranslations catalog set in `translators`. If called multiple
diff --git a/sphinx/locale/ar/LC_MESSAGES/sphinx.po b/sphinx/locale/ar/LC_MESSAGES/sphinx.po
index bd69d2aeb..371395b7b 100644
--- a/sphinx/locale/ar/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ar/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Mohammed Shannaq <sam@ms.per.jo>, 2018
msgid ""
diff --git a/sphinx/locale/bg/LC_MESSAGES/sphinx.po b/sphinx/locale/bg/LC_MESSAGES/sphinx.po
index 79329a57a..6d36b05f3 100644
--- a/sphinx/locale/bg/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/bg/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.po b/sphinx/locale/bn/LC_MESSAGES/sphinx.po
index 63aae6877..98ecbe5d0 100644
--- a/sphinx/locale/bn/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009
msgid ""
diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.po b/sphinx/locale/ca/LC_MESSAGES/sphinx.po
index 6a8e317b1..9cbebc74a 100644
--- a/sphinx/locale/ca/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009
msgid ""
diff --git a/sphinx/locale/cak/LC_MESSAGES/sphinx.po b/sphinx/locale/cak/LC_MESSAGES/sphinx.po
index b729d5f1f..2ea8716e3 100644
--- a/sphinx/locale/cak/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/cak/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Julien Malard <julien.malard@mail.mcgill.ca>, 2019
msgid ""
diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.po b/sphinx/locale/cs/LC_MESSAGES/sphinx.po
index 8952713e1..1e7890782 100644
--- a/sphinx/locale/cs/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2008
# Vilibald W. <vilibald.wanca@gmail.com>, 2014-2015
diff --git a/sphinx/locale/cy/LC_MESSAGES/sphinx.po b/sphinx/locale/cy/LC_MESSAGES/sphinx.po
index 12f2aecd2..19a4c83d3 100644
--- a/sphinx/locale/cy/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/cy/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016
# Geraint Palmer <palmer.geraint@googlemail.com>, 2016
diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.po b/sphinx/locale/da/LC_MESSAGES/sphinx.po
index 317b832d2..47fcbfd6f 100644
--- a/sphinx/locale/da/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/da/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# askhl <asklarsen@gmail.com>, 2010-2011
# Jakob Lykke Andersen <jakob@caput.dk>, 2014,2016
diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.po b/sphinx/locale/de/LC_MESSAGES/sphinx.po
index 8d5cd4e43..2eaab8597 100644
--- a/sphinx/locale/de/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/de/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Georg Brandl <g.brandl@gmx.net>, 2013-2015
# Jean-François B. <jfbu@free.fr>, 2018
diff --git a/sphinx/locale/el/LC_MESSAGES/sphinx.po b/sphinx/locale/el/LC_MESSAGES/sphinx.po
index 54eb341ec..03f5d01fe 100644
--- a/sphinx/locale/el/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/el/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Stelios Vitalis <liberostelios@gmail.com>, 2015
# tzoumakers tzoumakers <tzoumakersx@gmail.com>, 2019
diff --git a/sphinx/locale/eo/LC_MESSAGES/sphinx.po b/sphinx/locale/eo/LC_MESSAGES/sphinx.po
index 6c94360c6..1af0769f3 100644
--- a/sphinx/locale/eo/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/eo/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Dinu Gherman <gherman@darwin.in-berlin.de>, 2014
msgid ""
diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.po b/sphinx/locale/es/LC_MESSAGES/sphinx.po
index be149e88a..a01ae6c80 100644
--- a/sphinx/locale/es/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/es/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Edward Villegas-Pulgarin <cosmoscalibur@gmail.com>, 2018
# Edward Villegas-Pulgarin <cosmoscalibur@gmail.com>, 2019
diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.po b/sphinx/locale/et/LC_MESSAGES/sphinx.po
index a87de4d11..1f40f10c0 100644
--- a/sphinx/locale/et/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/et/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Aivar Annamaa <aivar.annamaa@gmail.com>, 2011
# Ivar Smolin <okul at linux ee>, 2012
diff --git a/sphinx/locale/eu/LC_MESSAGES/sphinx.po b/sphinx/locale/eu/LC_MESSAGES/sphinx.po
index 80dbae5a3..c6f25f8b0 100644
--- a/sphinx/locale/eu/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/eu/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Ales Zabala Alava <shagi@gisa-elkartea.org>, 2011
# Asier Iturralde Sarasola <asier.iturralde@gmail.com>, 2018
diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.po b/sphinx/locale/fa/LC_MESSAGES/sphinx.po
index ddca8112c..066cfc4bb 100644
--- a/sphinx/locale/fa/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.po b/sphinx/locale/fi/LC_MESSAGES/sphinx.po
index 19233894d..6e18d601a 100644
--- a/sphinx/locale/fi/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009
msgid ""
diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.po b/sphinx/locale/fr/LC_MESSAGES/sphinx.po
index b01d956c0..740e9ba70 100644
--- a/sphinx/locale/fr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2017
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2013,2015
diff --git a/sphinx/locale/he/LC_MESSAGES/sphinx.po b/sphinx/locale/he/LC_MESSAGES/sphinx.po
index 7332af27f..1f8d45480 100644
--- a/sphinx/locale/he/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/he/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011
msgid ""
diff --git a/sphinx/locale/hi/LC_MESSAGES/sphinx.po b/sphinx/locale/hi/LC_MESSAGES/sphinx.po
index 7fd40316b..5effb078c 100644
--- a/sphinx/locale/hi/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/hi/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Ajay Singh <ajaysajay@gmail.com>, 2019
# Purnank H. Ghumalia <me@purnank.in>, 2015-2016
diff --git a/sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po b/sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po
index 78f66e29e..b1047a51f 100644
--- a/sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.po b/sphinx/locale/hr/LC_MESSAGES/sphinx.po
index c1f1d4be0..20e336487 100644
--- a/sphinx/locale/hr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Mario Šarić, 2015-2020
msgid ""
diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.po b/sphinx/locale/hu/LC_MESSAGES/sphinx.po
index fe58d1895..ecf147f1f 100644
--- a/sphinx/locale/hu/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/hu/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011
# Molnár Dénes <denes.molnar2@stud.uni-corvinus.hu>, 2017
diff --git a/sphinx/locale/id/LC_MESSAGES/sphinx.po b/sphinx/locale/id/LC_MESSAGES/sphinx.po
index d11a59d35..d1ff01f34 100644
--- a/sphinx/locale/id/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/id/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Arif Budiman <arifpedia@gmail.com>, 2016-2017
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009
diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.po b/sphinx/locale/it/LC_MESSAGES/sphinx.po
index 9c871d0d2..c0aeb2e06 100644
--- a/sphinx/locale/it/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/it/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Denis Cappellin <denis@cappell.in>, 2018
# Paolo Cavallini <cavallini@faunalia.it>, 2013-2017
diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.po b/sphinx/locale/ja/LC_MESSAGES/sphinx.po
index d9299e58c..1477b3d8a 100644
--- a/sphinx/locale/ja/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# shirou - しろう <shirou.faw@gmail.com>, 2013
# Akitoshi Ohta <fire.kuma8@gmail.com>, 2011
diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.po b/sphinx/locale/ko/LC_MESSAGES/sphinx.po
index bf3bbe78e..56fff17d1 100644
--- a/sphinx/locale/ko/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Minho Ryang <minhoryang@gmail.com>, 2019
# YT H <dev@theYT.net>, 2019
diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.po b/sphinx/locale/lt/LC_MESSAGES/sphinx.po
index fbf5b0a1d..4df91eb54 100644
--- a/sphinx/locale/lt/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# DALIUS DOBRAVOLSKAS <DALIUS@SANDBOX.LT>, 2010
msgid ""
diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.po b/sphinx/locale/lv/LC_MESSAGES/sphinx.po
index a3968756d..ca8ef8240 100644
--- a/sphinx/locale/lv/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/mk/LC_MESSAGES/sphinx.po b/sphinx/locale/mk/LC_MESSAGES/sphinx.po
index 5543d45fd..397828d91 100644
--- a/sphinx/locale/mk/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/mk/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Vasil Vangelovski <vvangelovski@gmail.com>, 2013
msgid ""
diff --git a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po
index b061b0361..05fe2c92c 100644
--- a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.po b/sphinx/locale/ne/LC_MESSAGES/sphinx.po
index 46590097d..22e4ef626 100644
--- a/sphinx/locale/ne/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011
# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016
diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.po b/sphinx/locale/nl/LC_MESSAGES/sphinx.po
index d5eb16c6f..4bdf9f43b 100644
--- a/sphinx/locale/nl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Bram Geron, 2017
# brechtm, 2016
diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.po b/sphinx/locale/pl/LC_MESSAGES/sphinx.po
index ac8488a45..73b7a6478 100644
--- a/sphinx/locale/pl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# m_aciek <maciej.olko@gmail.com>, 2017-2020
# Michael Gielda <michal.gielda@gmail.com>, 2014
diff --git a/sphinx/locale/pt/LC_MESSAGES/sphinx.po b/sphinx/locale/pt/LC_MESSAGES/sphinx.po
index 4b0c30cb7..e08ce7a5d 100644
--- a/sphinx/locale/pt/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pt/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
index dba58f93e..3e9e2965f 100644
--- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Claudio Rogerio Carvalho Filho <excriptbrasil@gmail.com>, 2016
# FIRST AUTHOR <roger.demetrescu@gmail.com>, 2008
diff --git a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po
index 7d219561a..6c78b0813 100644
--- a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Pedro Algarvio <pedro@algarvio.me>, 2013
# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016
diff --git a/sphinx/locale/ro/LC_MESSAGES/sphinx.po b/sphinx/locale/ro/LC_MESSAGES/sphinx.po
index 6a4591643..721f8dcd2 100644
--- a/sphinx/locale/ro/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ro/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Razvan Stefanescu <razvan.stefanescu@gmail.com>, 2015-2017
# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016
diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po
index e69207f4e..d8572db5f 100644
--- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Alex Salikov <Salikvo57@gmail.com>, 2019
# Dmitry Shachnev <mitya57@gmail.com>, 2013
diff --git a/sphinx/locale/si/LC_MESSAGES/sphinx.po b/sphinx/locale/si/LC_MESSAGES/sphinx.po
index a257711c5..d03be451e 100644
--- a/sphinx/locale/si/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/si/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# callkalpa <callkalpa@gmail.com>, 2013
msgid ""
diff --git a/sphinx/locale/sk/LC_MESSAGES/sphinx.po b/sphinx/locale/sk/LC_MESSAGES/sphinx.po
index 7d4bb2118..07d654695 100644
--- a/sphinx/locale/sk/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sk/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2008
# Slavko <linux@slavino.sk>, 2013-2019
diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.po b/sphinx/locale/sl/LC_MESSAGES/sphinx.po
index 80dde8bd0..6ceca74a0 100644
--- a/sphinx/locale/sl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/sq/LC_MESSAGES/sphinx.po b/sphinx/locale/sq/LC_MESSAGES/sphinx.po
index bf21f378d..fb1b0e26c 100644
--- a/sphinx/locale/sq/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sq/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/sr/LC_MESSAGES/sphinx.po b/sphinx/locale/sr/LC_MESSAGES/sphinx.po
index 1df55881c..2bcfcf51c 100644
--- a/sphinx/locale/sr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sr/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Risto Pejasinovic <risto.pejasinovic@gmail.com>, 2019
msgid ""
diff --git a/sphinx/locale/sr@latin/LC_MESSAGES/sphinx.po b/sphinx/locale/sr@latin/LC_MESSAGES/sphinx.po
index a7b82e633..574d218de 100644
--- a/sphinx/locale/sr@latin/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sr@latin/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/sr_RS/LC_MESSAGES/sphinx.po b/sphinx/locale/sr_RS/LC_MESSAGES/sphinx.po
index dad4f3542..3e7ac5ba4 100644
--- a/sphinx/locale/sr_RS/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sr_RS/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.po b/sphinx/locale/sv/LC_MESSAGES/sphinx.po
index bbf5e5ff1..af26ab2f1 100644
--- a/sphinx/locale/sv/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/ta/LC_MESSAGES/sphinx.po b/sphinx/locale/ta/LC_MESSAGES/sphinx.po
index bb1c77f28..cc19b6dfa 100644
--- a/sphinx/locale/ta/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ta/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Julien Malard <julien.malard@mail.mcgill.ca>, 2019
msgid ""
diff --git a/sphinx/locale/te/LC_MESSAGES/sphinx.po b/sphinx/locale/te/LC_MESSAGES/sphinx.po
index c6c3c45f1..32c1fc59e 100644
--- a/sphinx/locale/te/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/te/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.po b/sphinx/locale/tr/LC_MESSAGES/sphinx.po
index 996d6e67c..b37c18d50 100644
--- a/sphinx/locale/tr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# BouRock, 2020
# Fırat Özgül <ozgulfirat@gmail.com>, 2013-2016
diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
index 2b43faa32..791426dd7 100644
--- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Petro Sasnyk <petro@sasnyk.name>, 2009
msgid ""
diff --git a/sphinx/locale/ur/LC_MESSAGES/sphinx.po b/sphinx/locale/ur/LC_MESSAGES/sphinx.po
index c674b9283..c37314be1 100644
--- a/sphinx/locale/ur/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ur/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
msgid ""
msgstr ""
diff --git a/sphinx/locale/vi/LC_MESSAGES/sphinx.po b/sphinx/locale/vi/LC_MESSAGES/sphinx.po
index 83b579ea4..20c77edeb 100644
--- a/sphinx/locale/vi/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/vi/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Hoat Le Van <hoatlevan@gmail.com>, 2014
msgid ""
diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
index 47cb76210..5b9491c53 100644
--- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Yinian Chin <yinian1992@live.com>, 2015,2017-2018
# Hsiaoming Yang <me@lepture.com>, 2018
diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
index 67b4d2b81..435fe0453 100644
--- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
@@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-#
+#
# Translators:
# Adrian Liaw <adrianliaw2000@gmail.com>, 2018
# Fred Lin <gasolin@gmail.com>, 2008
diff --git a/sphinx/pycode/ast.py b/sphinx/pycode/ast.py
index 9734cb476..5d95b2abb 100644
--- a/sphinx/pycode/ast.py
+++ b/sphinx/pycode/ast.py
@@ -183,14 +183,28 @@ class _UnparseVisitor(ast.NodeVisitor):
return "{" + ", ".join(self.visit(e) for e in node.elts) + "}"
def visit_Subscript(self, node: ast.Subscript) -> str:
- return "%s[%s]" % (self.visit(node.value), self.visit(node.slice))
+ def is_simple_tuple(value: ast.AST) -> bool:
+ return (
+ isinstance(value, ast.Tuple) and
+ bool(value.elts) and
+ not any(isinstance(elt, ast.Starred) for elt in value.elts)
+ )
+
+ if is_simple_tuple(node.slice):
+ elts = ", ".join(self.visit(e) for e in node.slice.elts) # type: ignore
+ return "%s[%s]" % (self.visit(node.value), elts)
+ elif isinstance(node.slice, ast.Index) and is_simple_tuple(node.slice.value):
+ elts = ", ".join(self.visit(e) for e in node.slice.value.elts) # type: ignore
+ return "%s[%s]" % (self.visit(node.value), elts)
+ else:
+ return "%s[%s]" % (self.visit(node.value), self.visit(node.slice))
def visit_UnaryOp(self, node: ast.UnaryOp) -> str:
return "%s %s" % (self.visit(node.op), self.visit(node.operand))
def visit_Tuple(self, node: ast.Tuple) -> str:
if node.elts:
- return ", ".join(self.visit(e) for e in node.elts)
+ return "(" + ", ".join(self.visit(e) for e in node.elts) + ")"
else:
return "()"
diff --git a/sphinx/search/non-minified-js/danish-stemmer.js b/sphinx/search/non-minified-js/danish-stemmer.js
index f6309327f..36943d22a 100644
--- a/sphinx/search/non-minified-js/danish-stemmer.js
+++ b/sphinx/search/non-minified-js/danish-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/dutch-stemmer.js b/sphinx/search/non-minified-js/dutch-stemmer.js
index 15c053a8d..997f1467b 100644
--- a/sphinx/search/non-minified-js/dutch-stemmer.js
+++ b/sphinx/search/non-minified-js/dutch-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/finnish-stemmer.js b/sphinx/search/non-minified-js/finnish-stemmer.js
index 210c3e13d..5b520c00f 100644
--- a/sphinx/search/non-minified-js/finnish-stemmer.js
+++ b/sphinx/search/non-minified-js/finnish-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/french-stemmer.js b/sphinx/search/non-minified-js/french-stemmer.js
index 3b3c0607f..75255a03d 100644
--- a/sphinx/search/non-minified-js/french-stemmer.js
+++ b/sphinx/search/non-minified-js/french-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/german-stemmer.js b/sphinx/search/non-minified-js/german-stemmer.js
index 4f1dc1cf3..a5beb8f3a 100644
--- a/sphinx/search/non-minified-js/german-stemmer.js
+++ b/sphinx/search/non-minified-js/german-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/hungarian-stemmer.js b/sphinx/search/non-minified-js/hungarian-stemmer.js
index c9a6347c6..67fd1cdf0 100644
--- a/sphinx/search/non-minified-js/hungarian-stemmer.js
+++ b/sphinx/search/non-minified-js/hungarian-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/italian-stemmer.js b/sphinx/search/non-minified-js/italian-stemmer.js
index ca16ff24c..52daef58f 100644
--- a/sphinx/search/non-minified-js/italian-stemmer.js
+++ b/sphinx/search/non-minified-js/italian-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/norwegian-stemmer.js b/sphinx/search/non-minified-js/norwegian-stemmer.js
index 38b64c5a8..5c6eba182 100644
--- a/sphinx/search/non-minified-js/norwegian-stemmer.js
+++ b/sphinx/search/non-minified-js/norwegian-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/porter-stemmer.js b/sphinx/search/non-minified-js/porter-stemmer.js
index 7a0f4558a..d07e7a426 100644
--- a/sphinx/search/non-minified-js/porter-stemmer.js
+++ b/sphinx/search/non-minified-js/porter-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/portuguese-stemmer.js b/sphinx/search/non-minified-js/portuguese-stemmer.js
index 35f21aa8f..4042c0aef 100644
--- a/sphinx/search/non-minified-js/portuguese-stemmer.js
+++ b/sphinx/search/non-minified-js/portuguese-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/romanian-stemmer.js b/sphinx/search/non-minified-js/romanian-stemmer.js
index f71f44a68..545d3ee2e 100644
--- a/sphinx/search/non-minified-js/romanian-stemmer.js
+++ b/sphinx/search/non-minified-js/romanian-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/russian-stemmer.js b/sphinx/search/non-minified-js/russian-stemmer.js
index 74d630968..87f4844e0 100644
--- a/sphinx/search/non-minified-js/russian-stemmer.js
+++ b/sphinx/search/non-minified-js/russian-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/spanish-stemmer.js b/sphinx/search/non-minified-js/spanish-stemmer.js
index 21b648fa8..6c5d2da91 100644
--- a/sphinx/search/non-minified-js/spanish-stemmer.js
+++ b/sphinx/search/non-minified-js/spanish-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/swedish-stemmer.js b/sphinx/search/non-minified-js/swedish-stemmer.js
index fd2a58f0a..1d8aba8f4 100644
--- a/sphinx/search/non-minified-js/swedish-stemmer.js
+++ b/sphinx/search/non-minified-js/swedish-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/search/non-minified-js/turkish-stemmer.js b/sphinx/search/non-minified-js/turkish-stemmer.js
index f8f088576..22bd7538d 100644
--- a/sphinx/search/non-minified-js/turkish-stemmer.js
+++ b/sphinx/search/non-minified-js/turkish-stemmer.js
@@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
-var GeneratorFunction$0 =
+var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
-var __jsx_generator_object$0 =
+var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;
diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty
index a3e91ad34..2b83ab85b 100644
--- a/sphinx/texinputs/sphinx.sty
+++ b/sphinx/texinputs/sphinx.sty
@@ -1823,7 +1823,7 @@
% fix a space-gobbling issue due to LaTeX's original \do@noligs
% TODO: using \@noligs as patched by upquote.sty is now unneeded because
% either ` and ' are escaped (non-unicode engines) or they don't build
-% ligatures (unicode engines). Thus remove this and unify handling of `, <, >,
+% ligatures (unicode engines). Thus remove this and unify handling of `, <, >,
% ' and - with the characters . , ; ? ! / as handled via
% \sphinxbreaksviaactive.
% Hence \sphinx@do@noligs will be removed, or rather replaced with code
@@ -1905,7 +1905,7 @@
% Special characters
%
% This definition prevents en-dash and em-dash TeX ligatures.
-%
+%
% It inserts a potential breakpoint after the hyphen. This is to keep in sync
% with behavior in code-blocks, parsed and inline literals. For a breakpoint
% before the hyphen use \leavevmode\kern\z@- (within \makeatletter/\makeatother)
diff --git a/sphinx/texinputs/sphinxcyrillic.sty b/sphinx/texinputs/sphinxcyrillic.sty
index 482b4e3f7..6747b5ec6 100644
--- a/sphinx/texinputs/sphinxcyrillic.sty
+++ b/sphinx/texinputs/sphinxcyrillic.sty
@@ -15,7 +15,7 @@
% https://tex.stackexchange.com/a/460325/
% 159 Cyrillic glyphs as available in X2 TeX 8bit font encoding
% This assumes inputenc loaded with utf8 option, or LaTeX release
-% as recent as 2018/04/01 which does it automatically.
+% as recent as 2018/04/01 which does it automatically.
\@tfor\next:=%
{Ё}{Ђ}{Є}{Ѕ}{І}{Ј}{Љ}{Њ}{Ћ}{Ў}{Џ}{А}{Б}{В}{Г}{Д}{Е}{Ж}{З}{И}{Й}%
{К}{Л}{М}{Н}{О}{П}{Р}{С}{Т}{У}{Ф}{Х}{Ц}{Ч}{Ш}{Щ}{Ъ}{Ы}{Ь}{Э}{Ю}%
diff --git a/sphinx/texinputs/sphinxhowto.cls b/sphinx/texinputs/sphinxhowto.cls
index 57d73cebf..0848a79fd 100644
--- a/sphinx/texinputs/sphinxhowto.cls
+++ b/sphinx/texinputs/sphinxhowto.cls
@@ -76,7 +76,7 @@
\endgroup
\noindent\rule{\textwidth}{1pt}\par
\vspace{12pt}%
-}
+}
\newcommand\sphinxtableofcontentshook{}
\pagenumbering{arabic}
diff --git a/sphinx/themes/nature/static/nature.css_t b/sphinx/themes/nature/static/nature.css_t
index 34893b86a..7df474a91 100644
--- a/sphinx/themes/nature/static/nature.css_t
+++ b/sphinx/themes/nature/static/nature.css_t
@@ -8,11 +8,11 @@
* :license: BSD, see LICENSE for details.
*
*/
-
+
@import url("basic.css");
-
+
/* -- page layout ----------------------------------------------------------- */
-
+
body {
font-family: Arial, sans-serif;
font-size: 100%;
@@ -34,18 +34,18 @@ div.bodywrapper {
hr {
border: 1px solid #B1B4B6;
}
-
+
div.document {
background-color: #eee;
}
-
+
div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 30px 30px 30px;
font-size: 0.9em;
}
-
+
div.footer {
color: #555;
width: 100%;
@@ -53,12 +53,12 @@ div.footer {
text-align: center;
font-size: 75%;
}
-
+
div.footer a {
color: #444;
text-decoration: underline;
}
-
+
div.related {
background-color: #6BA81E;
line-height: 32px;
@@ -66,11 +66,11 @@ div.related {
text-shadow: 0px 1px 0 #444;
font-size: 0.9em;
}
-
+
div.related a {
color: #E2F3CC;
}
-
+
div.sphinxsidebar {
font-size: 0.75em;
line-height: 1.5em;
@@ -79,7 +79,7 @@ div.sphinxsidebar {
div.sphinxsidebarwrapper{
padding: 20px 0;
}
-
+
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Arial, sans-serif;
@@ -95,30 +95,30 @@ div.sphinxsidebar h4 {
div.sphinxsidebar h4{
font-size: 1.1em;
}
-
+
div.sphinxsidebar h3 a {
color: #444;
}
-
-
+
+
div.sphinxsidebar p {
color: #888;
padding: 5px 20px;
}
-
+
div.sphinxsidebar p.topless {
}
-
+
div.sphinxsidebar ul {
margin: 10px 20px;
padding: 0;
color: #000;
}
-
+
div.sphinxsidebar a {
color: #444;
}
-
+
div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: sans-serif;
@@ -131,17 +131,17 @@ div.sphinxsidebar .searchformwrapper {
}
/* -- body styles ----------------------------------------------------------- */
-
+
a {
color: #005B81;
text-decoration: none;
}
-
+
a:hover {
color: #E32E00;
text-decoration: underline;
}
-
+
div.body h1,
div.body h2,
div.body h3,
@@ -156,30 +156,30 @@ div.body h6 {
padding: 5px 0 5px 10px;
text-shadow: 0px 1px 0 white
}
-
+
div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
div.body h2 { font-size: 150%; background-color: #C8D5E3; }
div.body h3 { font-size: 120%; background-color: #D8DEE3; }
div.body h4 { font-size: 110%; background-color: #D8DEE3; }
div.body h5 { font-size: 100%; background-color: #D8DEE3; }
div.body h6 { font-size: 100%; background-color: #D8DEE3; }
-
+
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
padding: 0 4px 0 4px;
text-decoration: none;
}
-
+
a.headerlink:hover {
background-color: #c60f0f;
color: white;
}
-
+
div.body p, div.body dd, div.body li {
line-height: 1.5em;
}
-
+
div.admonition p.admonition-title + p {
display: inline;
}
@@ -188,29 +188,29 @@ div.note {
background-color: #eee;
border: 1px solid #ccc;
}
-
+
div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}
-
+
div.topic {
background-color: #eee;
}
-
+
div.warning {
background-color: #ffe4e4;
border: 1px solid #f66;
}
-
+
p.admonition-title {
display: inline;
}
-
+
p.admonition-title:after {
content: ":";
}
-
+
pre {
padding: 10px;
line-height: 1.2em;
@@ -220,7 +220,7 @@ pre {
-webkit-box-shadow: 1px 1px 1px #d8d8d8;
-moz-box-shadow: 1px 1px 1px #d8d8d8;
}
-
+
code {
background-color: #ecf0f3;
color: #222;
diff --git a/sphinx/themes/pyramid/static/pyramid.css_t b/sphinx/themes/pyramid/static/pyramid.css_t
index dafd898d5..0bab3d1a2 100644
--- a/sphinx/themes/pyramid/static/pyramid.css_t
+++ b/sphinx/themes/pyramid/static/pyramid.css_t
@@ -8,11 +8,11 @@
* :license: BSD, see LICENSE for details.
*
*/
-
+
@import url("basic.css");
-
+
/* -- page layout ----------------------------------------------------------- */
-
+
body {
font-family: "Nobile", sans-serif;
font-size: 100%;
@@ -34,7 +34,7 @@ div.bodywrapper {
hr {
border: 1px solid #B1B4B6;
}
-
+
div.document {
background-color: #eee;
}
@@ -59,7 +59,7 @@ div.body {
border-right-style: none;
overflow: auto;
}
-
+
div.footer {
color: #ffffff;
width: 100%;
@@ -69,7 +69,7 @@ div.footer {
background: transparent;
clear:both;
}
-
+
div.footer a {
color: #ffffff;
text-decoration: none;
@@ -79,14 +79,14 @@ div.footer a:hover {
color: #e88f00;
text-decoration: underline;
}
-
+
div.related {
line-height: 30px;
color: #373839;
font-size: 0.8em;
background-color: #eee;
}
-
+
div.related a {
color: #1b61d6;
}
@@ -94,7 +94,7 @@ div.related a {
div.related ul {
padding-left: calc({{ theme_sidebarwidth|todim }} + 10px);
}
-
+
div.sphinxsidebar {
font-size: 0.75em;
line-height: 1.5em;
@@ -103,7 +103,7 @@ div.sphinxsidebar {
div.sphinxsidebarwrapper{
padding: 10px 0;
}
-
+
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: "Neuton", sans-serif;
@@ -118,30 +118,30 @@ div.sphinxsidebar h4 {
div.sphinxsidebar h4{
font-size: 1.3em;
}
-
+
div.sphinxsidebar h3 a {
color: #000000;
}
-
-
+
+
div.sphinxsidebar p {
color: #888;
padding: 5px 20px;
}
-
+
div.sphinxsidebar p.topless {
}
-
+
div.sphinxsidebar ul {
margin: 10px 20px;
padding: 0;
color: #373839;
}
-
+
div.sphinxsidebar a {
color: #444;
}
-
+
div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: sans-serif;
@@ -171,16 +171,16 @@ p.sidebar-title {
}
/* -- body styles ----------------------------------------------------------- */
-
+
a, a .pre {
color: #1b61d6;
text-decoration: none;
}
-
+
a:hover, a:hover .pre {
text-decoration: underline;
}
-
+
div.body h1,
div.body h2,
div.body h3,
@@ -194,29 +194,29 @@ div.body h6 {
margin: 30px 0px 10px 0px;
padding: 5px 0;
}
-
+
div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
div.body h2 { font-size: 150%; background-color: #ffffff; }
div.body h3 { font-size: 120%; background-color: #ffffff; }
div.body h4 { font-size: 110%; background-color: #ffffff; }
div.body h5 { font-size: 100%; background-color: #ffffff; }
div.body h6 { font-size: 100%; background-color: #ffffff; }
-
+
a.headerlink {
color: #1b61d6;
font-size: 0.8em;
padding: 0 4px 0 4px;
text-decoration: none;
}
-
+
a.headerlink:hover {
text-decoration: underline;
}
-
+
div.body p, div.body dd, div.body li {
line-height: 1.5em;
}
-
+
div.admonition p.admonition-title + p {
display: inline;
}
@@ -236,7 +236,7 @@ div.note {
padding: 10px 20px 10px 60px;
background: #e1ecfe url(dialog-note.png) no-repeat 10px 8px;
}
-
+
div.seealso {
background: #fff6bf url(dialog-seealso.png) no-repeat 10px 8px;
border: 2px solid #ffd324;
@@ -244,7 +244,7 @@ div.seealso {
border-right-style: none;
padding: 10px 20px 10px 60px;
}
-
+
div.topic {
background: #eeeeee;
border: 2px solid #C6C9CB;
@@ -252,7 +252,7 @@ div.topic {
border-right-style: none;
border-left-style: none;
}
-
+
div.warning {
background: #fbe3e4 url(dialog-warning.png) no-repeat 10px 8px;
border: 2px solid #fbc2c4;
@@ -268,18 +268,18 @@ div.admonition-todo {
border-left-style: none;
padding: 10px 20px 10px 60px;
}
-
+
div.note p.admonition-title,
div.warning p.admonition-title,
div.seealso p.admonition-title,
div.admonition-todo p.admonition-title {
display: none;
}
-
+
p.admonition-title:after {
content: ":";
}
-
+
pre {
padding: 10px;
line-height: 1.2em;
@@ -289,7 +289,7 @@ pre {
border-right-style: none;
border-left-style: none;
}
-
+
code {
background-color: transparent;
color: #222;
diff --git a/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t
index f9961ae36..8eca63278 100644
--- a/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t
+++ b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t
@@ -138,7 +138,7 @@ div.footer a {
/* -- body styles ----------------------------------------------------------- */
-p {
+p {
margin: 0.8em 0 0.5em 0;
}
diff --git a/sphinx/transforms/post_transforms/images.py b/sphinx/transforms/post_transforms/images.py
index f2cacac3c..949c09dde 100644
--- a/sphinx/transforms/post_transforms/images.py
+++ b/sphinx/transforms/post_transforms/images.py
@@ -11,7 +11,7 @@
import os
import re
from math import ceil
-from typing import Any, Dict, List, Tuple
+from typing import Any, Dict, List, Optional, Tuple
from docutils import nodes
@@ -175,6 +175,13 @@ class ImageConverter(BaseImageConverter):
"""
default_priority = 200
+ #: The converter is available or not. Will be filled at the first call of
+ #: the build. The result is shared in the same process.
+ #:
+ #: .. todo:: This should be refactored not to store the state without class
+ #: variable.
+ available = None # type: Optional[bool]
+
#: A conversion rules the image converter supports.
#: It is represented as a list of pair of source image format (mimetype) and
#: destination one::
@@ -187,16 +194,14 @@ class ImageConverter(BaseImageConverter):
conversion_rules = [] # type: List[Tuple[str, str]]
def __init__(self, *args: Any, **kwargs: Any) -> None:
- self.available = None # type: bool
- # the converter is available or not.
- # Will be checked at first conversion
super().__init__(*args, **kwargs)
def match(self, node: nodes.image) -> bool:
if not self.app.builder.supported_image_types:
return False
elif self.available is None:
- self.available = self.is_available()
+ # store the value to the class variable to share it during the build
+ self.__class__.available = self.is_available()
if not self.available:
return False
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py
index 8c724395d..e3f230dc5 100644
--- a/sphinx/util/inspect.py
+++ b/sphinx/util/inspect.py
@@ -422,8 +422,8 @@ def _should_unwrap(subject: Callable) -> bool:
return False
-def signature(subject: Callable, bound_method: bool = False, follow_wrapped: bool = False
- ) -> inspect.Signature:
+def signature(subject: Callable, bound_method: bool = False, follow_wrapped: bool = False,
+ type_aliases: Dict = {}) -> inspect.Signature:
"""Return a Signature object for the given *subject*.
:param bound_method: Specify *subject* is a bound method or not
@@ -453,7 +453,7 @@ def signature(subject: Callable, bound_method: bool = False, follow_wrapped: boo
try:
# Update unresolved annotations using ``get_type_hints()``.
- annotations = typing.get_type_hints(subject)
+ annotations = typing.get_type_hints(subject, None, type_aliases)
for i, param in enumerate(parameters):
if isinstance(param.annotation, str) and param.name in annotations:
parameters[i] = param.replace(annotation=annotations[param.name])
diff --git a/sphinx/util/typing.py b/sphinx/util/typing.py
index e91939ec2..2987f9ae3 100644
--- a/sphinx/util/typing.py
+++ b/sphinx/util/typing.py
@@ -63,7 +63,11 @@ def is_system_TypeVar(typ: Any) -> bool:
def stringify(annotation: Any) -> str:
"""Stringify type annotation object."""
if isinstance(annotation, str):
- return annotation
+ if annotation.startswith("'") and annotation.endswith("'"):
+ # might be a double Forward-ref'ed type. Go unquoting.
+ return annotation[1:-2]
+ else:
+ return annotation
elif isinstance(annotation, TypeVar): # type: ignore
return annotation.__name__
elif not annotation:
@@ -105,7 +109,10 @@ def _stringify_py37(annotation: Any) -> str:
return repr(annotation)
if getattr(annotation, '__args__', None):
- if qualname == 'Union':
+ if not isinstance(annotation.__args__, (list, tuple)):
+ # broken __args__ found
+ pass
+ elif qualname == 'Union':
if len(annotation.__args__) > 1 and annotation.__args__[-1] is NoneType:
if len(annotation.__args__) > 2:
args = ', '.join(stringify(a) for a in annotation.__args__[:-1])