Sphinx 7.2.5__py3-none-any.whl → 7.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Sphinx might be problematic. Click here for more details.
- sphinx/__init__.py +8 -9
- sphinx/addnodes.py +31 -28
- sphinx/application.py +9 -15
- sphinx/builders/__init__.py +5 -6
- sphinx/builders/_epub_base.py +17 -9
- sphinx/builders/changes.py +10 -5
- sphinx/builders/dirhtml.py +4 -2
- sphinx/builders/dummy.py +3 -2
- sphinx/builders/epub3.py +5 -3
- sphinx/builders/gettext.py +24 -7
- sphinx/builders/html/__init__.py +88 -96
- sphinx/builders/html/_assets.py +16 -16
- sphinx/builders/html/transforms.py +4 -2
- sphinx/builders/latex/__init__.py +40 -33
- sphinx/builders/latex/nodes.py +6 -2
- sphinx/builders/latex/transforms.py +17 -8
- sphinx/builders/latex/util.py +1 -1
- sphinx/builders/linkcheck.py +86 -27
- sphinx/builders/manpage.py +8 -6
- sphinx/builders/singlehtml.py +5 -4
- sphinx/builders/texinfo.py +18 -14
- sphinx/builders/text.py +3 -2
- sphinx/builders/xml.py +5 -2
- sphinx/cmd/build.py +119 -76
- sphinx/cmd/make_mode.py +21 -20
- sphinx/cmd/quickstart.py +13 -16
- sphinx/config.py +432 -250
- sphinx/deprecation.py +23 -13
- sphinx/directives/__init__.py +8 -8
- sphinx/directives/code.py +7 -7
- sphinx/directives/other.py +23 -13
- sphinx/directives/patches.py +7 -6
- sphinx/domains/__init__.py +2 -2
- sphinx/domains/c/__init__.py +796 -0
- sphinx/domains/c/_ast.py +1421 -0
- sphinx/domains/c/_ids.py +65 -0
- sphinx/domains/c/_parser.py +1048 -0
- sphinx/domains/c/_symbol.py +700 -0
- sphinx/domains/changeset.py +11 -7
- sphinx/domains/citation.py +5 -2
- sphinx/domains/cpp/__init__.py +1089 -0
- sphinx/domains/cpp/_ast.py +3635 -0
- sphinx/domains/cpp/_ids.py +537 -0
- sphinx/domains/cpp/_parser.py +2117 -0
- sphinx/domains/cpp/_symbol.py +1092 -0
- sphinx/domains/index.py +6 -4
- sphinx/domains/javascript.py +16 -13
- sphinx/domains/math.py +9 -4
- sphinx/domains/python/__init__.py +890 -0
- sphinx/domains/python/_annotations.py +507 -0
- sphinx/domains/python/_object.py +426 -0
- sphinx/domains/rst.py +12 -7
- sphinx/domains/{std.py → std/__init__.py} +19 -16
- sphinx/environment/__init__.py +21 -19
- sphinx/environment/adapters/indexentries.py +2 -2
- sphinx/environment/adapters/toctree.py +10 -9
- sphinx/environment/collectors/__init__.py +6 -3
- sphinx/environment/collectors/asset.py +4 -3
- sphinx/environment/collectors/dependencies.py +3 -2
- sphinx/environment/collectors/metadata.py +6 -5
- sphinx/environment/collectors/title.py +3 -2
- sphinx/environment/collectors/toctree.py +5 -4
- sphinx/errors.py +13 -2
- sphinx/events.py +14 -9
- sphinx/ext/apidoc.py +9 -11
- sphinx/ext/autodoc/__init__.py +105 -71
- sphinx/ext/autodoc/directive.py +7 -6
- sphinx/ext/autodoc/importer.py +132 -52
- sphinx/ext/autodoc/mock.py +7 -5
- sphinx/ext/autodoc/preserve_defaults.py +4 -3
- sphinx/ext/autodoc/type_comment.py +2 -1
- sphinx/ext/autodoc/typehints.py +5 -4
- sphinx/ext/autosectionlabel.py +3 -2
- sphinx/ext/autosummary/__init__.py +21 -17
- sphinx/ext/autosummary/generate.py +9 -9
- sphinx/ext/coverage.py +26 -20
- sphinx/ext/doctest.py +38 -33
- sphinx/ext/duration.py +1 -0
- sphinx/ext/extlinks.py +4 -3
- sphinx/ext/githubpages.py +3 -2
- sphinx/ext/graphviz.py +10 -7
- sphinx/ext/ifconfig.py +5 -5
- sphinx/ext/imgconverter.py +6 -5
- sphinx/ext/imgmath.py +9 -8
- sphinx/ext/inheritance_diagram.py +31 -31
- sphinx/ext/intersphinx.py +140 -23
- sphinx/ext/linkcode.py +3 -2
- sphinx/ext/mathjax.py +2 -1
- sphinx/ext/napoleon/__init__.py +12 -7
- sphinx/ext/napoleon/docstring.py +34 -32
- sphinx/ext/todo.py +10 -7
- sphinx/ext/viewcode.py +12 -11
- sphinx/extension.py +18 -8
- sphinx/highlighting.py +39 -20
- sphinx/io.py +17 -8
- sphinx/jinja2glue.py +16 -15
- sphinx/locale/__init__.py +30 -23
- sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ar/LC_MESSAGES/sphinx.po +818 -761
- sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bg/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bn/LC_MESSAGES/sphinx.po +835 -778
- sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ca/LC_MESSAGES/sphinx.po +864 -807
- sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cak/LC_MESSAGES/sphinx.po +816 -759
- sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cs/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cy/LC_MESSAGES/sphinx.po +819 -762
- sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/da/LC_MESSAGES/sphinx.po +838 -781
- sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de/LC_MESSAGES/sphinx.po +838 -781
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/el/LC_MESSAGES/sphinx.po +853 -796
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +856 -799
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eo/LC_MESSAGES/sphinx.po +820 -763
- sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es/LC_MESSAGES/sphinx.po +856 -799
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/et/LC_MESSAGES/sphinx.po +845 -788
- sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eu/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fa/LC_MESSAGES/sphinx.po +854 -797
- sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fi/LC_MESSAGES/sphinx.po +816 -759
- sphinx/locale/fr/LC_MESSAGES/sphinx.js +1 -1
- sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr/LC_MESSAGES/sphinx.po +904 -847
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/gl/LC_MESSAGES/sphinx.js +54 -54
- sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/gl/LC_MESSAGES/sphinx.po +1506 -1449
- sphinx/locale/he/LC_MESSAGES/sphinx.js +1 -1
- sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/he/LC_MESSAGES/sphinx.po +823 -766
- sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi/LC_MESSAGES/sphinx.po +853 -796
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hr/LC_MESSAGES/sphinx.po +844 -787
- sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hu/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/id/LC_MESSAGES/sphinx.po +854 -797
- sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/is/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/it/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ja/LC_MESSAGES/sphinx.po +853 -796
- sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ka/LC_MESSAGES/sphinx.po +848 -791
- sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ko/LC_MESSAGES/sphinx.po +855 -798
- sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lt/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lv/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/mk/LC_MESSAGES/sphinx.po +825 -768
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +27 -27
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +876 -818
- sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ne/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nl/LC_MESSAGES/sphinx.po +844 -787
- sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pl/LC_MESSAGES/sphinx.po +845 -788
- sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +908 -851
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ro/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ru/LC_MESSAGES/sphinx.po +838 -781
- sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/si/LC_MESSAGES/sphinx.po +823 -766
- sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sk/LC_MESSAGES/sphinx.po +854 -797
- sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sl/LC_MESSAGES/sphinx.po +832 -775
- sphinx/locale/sphinx.pot +813 -755
- sphinx/locale/sq/LC_MESSAGES/sphinx.js +1 -1
- sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sq/LC_MESSAGES/sphinx.po +865 -808
- sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr/LC_MESSAGES/sphinx.po +835 -778
- sphinx/locale/sr@latin/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr_RS/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/ta/LC_MESSAGES/sphinx.js +54 -54
- sphinx/locale/ta/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ta/LC_MESSAGES/sphinx.po +1530 -1473
- sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/te/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/tr/LC_MESSAGES/sphinx.po +853 -796
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +833 -776
- sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ur/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/vi/LC_MESSAGES/sphinx.po +837 -780
- sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/yue/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po +855 -798
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +811 -754
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +1 -1
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +879 -822
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +811 -754
- sphinx/parsers.py +7 -5
- sphinx/project.py +18 -11
- sphinx/pycode/__init__.py +6 -5
- sphinx/pycode/ast.py +23 -8
- sphinx/pycode/parser.py +6 -5
- sphinx/registry.py +12 -6
- sphinx/roles.py +103 -57
- sphinx/search/__init__.py +17 -18
- sphinx/search/da.py +2 -2
- sphinx/search/de.py +2 -2
- sphinx/search/en.py +1 -1
- sphinx/search/es.py +2 -2
- sphinx/search/fi.py +2 -2
- sphinx/search/fr.py +2 -2
- sphinx/search/hu.py +2 -2
- sphinx/search/it.py +2 -2
- sphinx/search/ja.py +13 -22
- sphinx/search/nl.py +2 -2
- sphinx/search/no.py +2 -2
- sphinx/search/pt.py +2 -2
- sphinx/search/ro.py +1 -1
- sphinx/search/ru.py +2 -2
- sphinx/search/sv.py +2 -2
- sphinx/search/tr.py +1 -1
- sphinx/search/zh.py +2 -3
- sphinx/templates/graphviz/graphviz.css +1 -1
- sphinx/testing/fixtures.py +41 -24
- sphinx/testing/path.py +1 -1
- sphinx/testing/util.py +142 -53
- sphinx/texinputs/sphinx.xdy +1 -1
- sphinx/texinputs/sphinxlatextables.sty +1 -1
- sphinx/texinputs/sphinxpackagesubstitutefont.sty +21 -0
- sphinx/themes/agogo/layout.html +4 -4
- sphinx/themes/agogo/static/agogo.css_t +1 -1
- sphinx/themes/agogo/theme.toml +22 -0
- sphinx/themes/basic/defindex.html +1 -1
- sphinx/themes/basic/domainindex.html +1 -1
- sphinx/themes/basic/genindex-single.html +1 -1
- sphinx/themes/basic/genindex-split.html +1 -1
- sphinx/themes/basic/genindex.html +1 -1
- sphinx/themes/basic/globaltoc.html +1 -1
- sphinx/themes/basic/layout.html +1 -1
- sphinx/themes/basic/localtoc.html +1 -1
- sphinx/themes/basic/page.html +1 -1
- sphinx/themes/basic/relations.html +1 -1
- sphinx/themes/basic/search.html +5 -20
- sphinx/themes/basic/searchbox.html +3 -3
- sphinx/themes/basic/searchfield.html +3 -3
- sphinx/themes/basic/sourcelink.html +1 -1
- sphinx/themes/basic/static/basic.css_t +1 -1
- sphinx/themes/basic/static/doctools.js +1 -1
- sphinx/themes/basic/static/language_data.js_t +2 -2
- sphinx/themes/basic/static/searchtools.js +105 -60
- sphinx/themes/basic/theme.toml +23 -0
- sphinx/themes/bizstyle/layout.html +1 -6
- sphinx/themes/bizstyle/static/bizstyle.css_t +1 -1
- sphinx/themes/bizstyle/static/bizstyle.js_t +1 -1
- sphinx/themes/bizstyle/static/css3-mediaqueries_src.js +3 -3
- sphinx/themes/bizstyle/theme.toml +12 -0
- sphinx/themes/classic/layout.html +1 -1
- sphinx/themes/classic/static/classic.css_t +1 -1
- sphinx/themes/classic/static/sidebar.js_t +1 -1
- sphinx/themes/classic/theme.toml +34 -0
- sphinx/themes/default/theme.toml +2 -0
- sphinx/themes/epub/epub-cover.html +1 -1
- sphinx/themes/epub/layout.html +1 -1
- sphinx/themes/epub/static/epub.css_t +1 -1
- sphinx/themes/epub/theme.toml +10 -0
- sphinx/themes/haiku/layout.html +3 -3
- sphinx/themes/haiku/static/haiku.css_t +2 -2
- sphinx/themes/haiku/theme.toml +16 -0
- sphinx/themes/nature/static/nature.css_t +1 -1
- sphinx/themes/nature/theme.toml +6 -0
- sphinx/themes/nonav/layout.html +1 -1
- sphinx/themes/nonav/static/nonav.css_t +1 -1
- sphinx/themes/nonav/theme.toml +10 -0
- sphinx/themes/pyramid/static/epub.css_t +1 -1
- sphinx/themes/pyramid/static/pyramid.css_t +1 -1
- sphinx/themes/pyramid/theme.toml +6 -0
- sphinx/themes/scrolls/artwork/logo.svg +1 -1
- sphinx/themes/scrolls/layout.html +2 -2
- sphinx/themes/scrolls/static/scrolls.css_t +1 -1
- sphinx/themes/scrolls/theme.toml +15 -0
- sphinx/themes/sphinxdoc/static/sphinxdoc.css_t +1 -1
- sphinx/themes/sphinxdoc/theme.toml +6 -0
- sphinx/themes/traditional/static/traditional.css_t +1 -1
- sphinx/themes/traditional/theme.toml +9 -0
- sphinx/theming.py +427 -131
- sphinx/transforms/__init__.py +21 -24
- sphinx/transforms/compact_bullet_list.py +5 -5
- sphinx/transforms/i18n.py +30 -28
- sphinx/transforms/post_transforms/__init__.py +9 -7
- sphinx/transforms/post_transforms/code.py +4 -1
- sphinx/transforms/post_transforms/images.py +17 -13
- sphinx/transforms/references.py +3 -1
- sphinx/util/__init__.py +15 -11
- sphinx/util/_io.py +34 -0
- sphinx/util/_pathlib.py +23 -18
- sphinx/util/build_phase.py +1 -0
- sphinx/util/cfamily.py +19 -11
- sphinx/util/console.py +101 -21
- sphinx/util/display.py +3 -2
- sphinx/util/docfields.py +12 -8
- sphinx/util/docutils.py +21 -35
- sphinx/util/exceptions.py +3 -2
- sphinx/util/fileutil.py +5 -5
- sphinx/util/http_date.py +9 -2
- sphinx/util/i18n.py +40 -9
- sphinx/util/inspect.py +317 -245
- sphinx/util/inventory.py +22 -5
- sphinx/util/logging.py +81 -7
- sphinx/util/matching.py +2 -1
- sphinx/util/math.py +1 -2
- sphinx/util/nodes.py +39 -29
- sphinx/util/osutil.py +25 -6
- sphinx/util/parallel.py +6 -1
- sphinx/util/requests.py +8 -5
- sphinx/util/rst.py +8 -6
- sphinx/util/tags.py +3 -3
- sphinx/util/template.py +8 -3
- sphinx/util/typing.py +76 -42
- sphinx/versioning.py +6 -2
- sphinx/writers/html.py +1 -1
- sphinx/writers/html5.py +17 -13
- sphinx/writers/latex.py +12 -12
- sphinx/writers/manpage.py +13 -7
- sphinx/writers/texinfo.py +13 -10
- sphinx/writers/text.py +13 -23
- sphinx/writers/xml.py +1 -1
- sphinx-7.2.5.dist-info/LICENSE → sphinx-7.3.0.dist-info/LICENSE.rst +1 -1
- {sphinx-7.2.5.dist-info → sphinx-7.3.0.dist-info}/METADATA +13 -12
- sphinx-7.3.0.dist-info/RECORD +581 -0
- sphinx/domains/c.py +0 -3906
- sphinx/domains/cpp.py +0 -8233
- sphinx/domains/python.py +0 -1769
- sphinx/themes/agogo/theme.conf +0 -20
- sphinx/themes/basic/theme.conf +0 -16
- sphinx/themes/bizstyle/theme.conf +0 -10
- sphinx/themes/classic/theme.conf +0 -32
- sphinx/themes/default/theme.conf +0 -2
- sphinx/themes/epub/theme.conf +0 -8
- sphinx/themes/haiku/theme.conf +0 -14
- sphinx/themes/nature/theme.conf +0 -4
- sphinx/themes/nonav/theme.conf +0 -8
- sphinx/themes/pyramid/theme.conf +0 -4
- sphinx/themes/scrolls/theme.conf +0 -13
- sphinx/themes/sphinxdoc/theme.conf +0 -4
- sphinx/themes/traditional/theme.conf +0 -7
- sphinx-7.2.5.dist-info/RECORD +0 -569
- {sphinx-7.2.5.dist-info → sphinx-7.3.0.dist-info}/WHEEL +0 -0
- {sphinx-7.2.5.dist-info → sphinx-7.3.0.dist-info}/entry_points.txt +0 -0
sphinx/testing/fixtures.py
CHANGED
|
@@ -7,26 +7,35 @@ import subprocess
|
|
|
7
7
|
import sys
|
|
8
8
|
from collections import namedtuple
|
|
9
9
|
from io import StringIO
|
|
10
|
-
from typing import TYPE_CHECKING
|
|
10
|
+
from typing import TYPE_CHECKING
|
|
11
11
|
|
|
12
12
|
import pytest
|
|
13
13
|
|
|
14
14
|
from sphinx.testing.util import SphinxTestApp, SphinxTestAppWrapperForSkipBuilding
|
|
15
15
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
|
-
from collections.abc import
|
|
17
|
+
from collections.abc import Callable, Iterator
|
|
18
18
|
from pathlib import Path
|
|
19
|
+
from typing import Any
|
|
19
20
|
|
|
20
21
|
DEFAULT_ENABLED_MARKERS = [
|
|
22
|
+
# The marker signature differs from the constructor signature
|
|
23
|
+
# since the way it is processed assumes keyword arguments for
|
|
24
|
+
# the 'testroot' and 'srcdir'.
|
|
21
25
|
(
|
|
22
|
-
'sphinx(
|
|
23
|
-
'
|
|
26
|
+
'sphinx('
|
|
27
|
+
'buildername="html", *, '
|
|
28
|
+
'testroot="root", srcdir=None, '
|
|
29
|
+
'confoverrides=None, freshenv=False, '
|
|
30
|
+
'warningiserror=False, tags=None, verbosity=0, parallel=0, '
|
|
31
|
+
'keep_going=False, builddir=None, docutils_conf=None'
|
|
32
|
+
'): arguments to initialize the sphinx test application.'
|
|
24
33
|
),
|
|
25
34
|
'test_params(shared_result=...): test parameters.',
|
|
26
35
|
]
|
|
27
36
|
|
|
28
37
|
|
|
29
|
-
def pytest_configure(config):
|
|
38
|
+
def pytest_configure(config: pytest.Config) -> None:
|
|
30
39
|
"""Register custom markers"""
|
|
31
40
|
for marker in DEFAULT_ENABLED_MARKERS:
|
|
32
41
|
config.addinivalue_line('markers', marker)
|
|
@@ -44,8 +53,8 @@ class SharedResult:
|
|
|
44
53
|
if key in self.cache:
|
|
45
54
|
return
|
|
46
55
|
data = {
|
|
47
|
-
'status': app_.
|
|
48
|
-
'warning': app_.
|
|
56
|
+
'status': app_.status.getvalue(),
|
|
57
|
+
'warning': app_.warning.getvalue(),
|
|
49
58
|
}
|
|
50
59
|
self.cache[key] = data
|
|
51
60
|
|
|
@@ -60,22 +69,25 @@ class SharedResult:
|
|
|
60
69
|
|
|
61
70
|
|
|
62
71
|
@pytest.fixture()
|
|
63
|
-
def app_params(
|
|
64
|
-
|
|
72
|
+
def app_params(
|
|
73
|
+
request: Any,
|
|
74
|
+
test_params: dict,
|
|
75
|
+
shared_result: SharedResult,
|
|
76
|
+
sphinx_test_tempdir: str,
|
|
77
|
+
rootdir: str,
|
|
78
|
+
) -> _app_params:
|
|
65
79
|
"""
|
|
66
80
|
Parameters that are specified by 'pytest.mark.sphinx' for
|
|
67
81
|
sphinx.application.Sphinx initialization
|
|
68
82
|
"""
|
|
69
|
-
|
|
70
83
|
# ##### process pytest.mark.sphinx
|
|
71
84
|
|
|
72
|
-
pargs = {}
|
|
85
|
+
pargs: dict[int, Any] = {}
|
|
73
86
|
kwargs: dict[str, Any] = {}
|
|
74
87
|
|
|
75
88
|
# to avoid stacking positional args
|
|
76
89
|
for info in reversed(list(request.node.iter_markers("sphinx"))):
|
|
77
|
-
|
|
78
|
-
pargs[i] = a
|
|
90
|
+
pargs |= dict(enumerate(info.args))
|
|
79
91
|
kwargs.update(info.kwargs)
|
|
80
92
|
|
|
81
93
|
args = [pargs[i] for i in sorted(pargs.keys())]
|
|
@@ -84,7 +96,7 @@ def app_params(request: Any, test_params: dict, shared_result: SharedResult,
|
|
|
84
96
|
if test_params['shared_result']:
|
|
85
97
|
if 'srcdir' in kwargs:
|
|
86
98
|
msg = 'You can not specify shared_result and srcdir in same time.'
|
|
87
|
-
|
|
99
|
+
pytest.fail(msg)
|
|
88
100
|
kwargs['srcdir'] = test_params['shared_result']
|
|
89
101
|
restore = shared_result.restore(test_params['shared_result'])
|
|
90
102
|
kwargs.update(restore)
|
|
@@ -130,8 +142,12 @@ def test_params(request: Any) -> dict:
|
|
|
130
142
|
|
|
131
143
|
|
|
132
144
|
@pytest.fixture()
|
|
133
|
-
def app(
|
|
134
|
-
|
|
145
|
+
def app(
|
|
146
|
+
test_params: dict,
|
|
147
|
+
app_params: tuple[dict, dict],
|
|
148
|
+
make_app: Callable,
|
|
149
|
+
shared_result: SharedResult,
|
|
150
|
+
) -> Iterator[SphinxTestApp]:
|
|
135
151
|
"""
|
|
136
152
|
Provides the 'sphinx.application.Sphinx' object
|
|
137
153
|
"""
|
|
@@ -155,7 +171,7 @@ def status(app: SphinxTestApp) -> StringIO:
|
|
|
155
171
|
"""
|
|
156
172
|
Back-compatibility for testing with previous @with_app decorator
|
|
157
173
|
"""
|
|
158
|
-
return app.
|
|
174
|
+
return app.status
|
|
159
175
|
|
|
160
176
|
|
|
161
177
|
@pytest.fixture()
|
|
@@ -163,20 +179,20 @@ def warning(app: SphinxTestApp) -> StringIO:
|
|
|
163
179
|
"""
|
|
164
180
|
Back-compatibility for testing with previous @with_app decorator
|
|
165
181
|
"""
|
|
166
|
-
return app.
|
|
182
|
+
return app.warning
|
|
167
183
|
|
|
168
184
|
|
|
169
185
|
@pytest.fixture()
|
|
170
|
-
def make_app(test_params: dict, monkeypatch: Any) ->
|
|
186
|
+
def make_app(test_params: dict, monkeypatch: Any) -> Iterator[Callable]:
|
|
171
187
|
"""
|
|
172
188
|
Provides make_app function to initialize SphinxTestApp instance.
|
|
173
189
|
if you want to initialize 'app' in your test function. please use this
|
|
174
190
|
instead of using SphinxTestApp class directory.
|
|
175
191
|
"""
|
|
176
192
|
apps = []
|
|
177
|
-
syspath = sys.path
|
|
193
|
+
syspath = sys.path.copy()
|
|
178
194
|
|
|
179
|
-
def make(*args, **kwargs):
|
|
195
|
+
def make(*args: Any, **kwargs: Any) -> SphinxTestApp:
|
|
180
196
|
status, warning = StringIO(), StringIO()
|
|
181
197
|
kwargs.setdefault('status', status)
|
|
182
198
|
kwargs.setdefault('warning', warning)
|
|
@@ -211,7 +227,8 @@ def if_graphviz_found(app: SphinxTestApp) -> None: # NoQA: PT004
|
|
|
211
227
|
graphviz_dot = getattr(app.config, 'graphviz_dot', '')
|
|
212
228
|
try:
|
|
213
229
|
if graphviz_dot:
|
|
214
|
-
|
|
230
|
+
# print the graphviz_dot version, to check that the binary is available
|
|
231
|
+
subprocess.run([graphviz_dot, '-V'], capture_output=True, check=False)
|
|
215
232
|
return
|
|
216
233
|
except OSError: # No such file or directory
|
|
217
234
|
pass
|
|
@@ -226,7 +243,7 @@ def sphinx_test_tempdir(tmp_path_factory: Any) -> Path:
|
|
|
226
243
|
|
|
227
244
|
|
|
228
245
|
@pytest.fixture()
|
|
229
|
-
def rollback_sysmodules(): # NoQA: PT004
|
|
246
|
+
def rollback_sysmodules() -> Iterator[None]: # NoQA: PT004
|
|
230
247
|
"""
|
|
231
248
|
Rollback sys.modules to its value before testing to unload modules
|
|
232
249
|
during tests.
|
|
@@ -234,8 +251,8 @@ def rollback_sysmodules(): # NoQA: PT004
|
|
|
234
251
|
For example, used in test_ext_autosummary.py to permit unloading the
|
|
235
252
|
target module to clear its cache.
|
|
236
253
|
"""
|
|
254
|
+
sysmodules = list(sys.modules)
|
|
237
255
|
try:
|
|
238
|
-
sysmodules = list(sys.modules)
|
|
239
256
|
yield
|
|
240
257
|
finally:
|
|
241
258
|
for modname in list(sys.modules):
|
sphinx/testing/path.py
CHANGED
|
@@ -150,7 +150,7 @@ class path(str):
|
|
|
150
150
|
os.utime(self, arg)
|
|
151
151
|
|
|
152
152
|
def open(self, mode: str = 'r', **kwargs: Any) -> IO:
|
|
153
|
-
return open(self, mode, **kwargs)
|
|
153
|
+
return open(self, mode, **kwargs) # NoQA: SIM115
|
|
154
154
|
|
|
155
155
|
def write_text(self, text: str, encoding: str = 'utf-8', **kwargs: Any) -> None:
|
|
156
156
|
"""
|
sphinx/testing/util.py
CHANGED
|
@@ -1,28 +1,34 @@
|
|
|
1
1
|
"""Sphinx test suite utilities"""
|
|
2
|
+
|
|
2
3
|
from __future__ import annotations
|
|
3
4
|
|
|
5
|
+
__all__ = ('SphinxTestApp', 'SphinxTestAppWrapperForSkipBuilding')
|
|
6
|
+
|
|
4
7
|
import contextlib
|
|
5
8
|
import os
|
|
6
|
-
import re
|
|
7
9
|
import sys
|
|
8
|
-
import
|
|
9
|
-
from
|
|
10
|
-
from
|
|
10
|
+
from io import StringIO
|
|
11
|
+
from types import MappingProxyType
|
|
12
|
+
from typing import TYPE_CHECKING
|
|
11
13
|
|
|
14
|
+
from defusedxml.ElementTree import parse as xml_parse
|
|
12
15
|
from docutils import nodes
|
|
13
16
|
from docutils.parsers.rst import directives, roles
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
import sphinx.application
|
|
19
|
+
import sphinx.locale
|
|
20
|
+
import sphinx.pycode
|
|
21
|
+
from sphinx.util.console import strip_colors
|
|
22
|
+
from sphinx.util.docutils import additional_nodes
|
|
17
23
|
|
|
18
24
|
if TYPE_CHECKING:
|
|
19
|
-
from
|
|
25
|
+
from collections.abc import Mapping
|
|
20
26
|
from pathlib import Path
|
|
27
|
+
from typing import Any
|
|
28
|
+
from xml.etree.ElementTree import ElementTree
|
|
21
29
|
|
|
22
30
|
from docutils.nodes import Node
|
|
23
31
|
|
|
24
|
-
__all__ = 'SphinxTestApp', 'SphinxTestAppWrapperForSkipBuilding'
|
|
25
|
-
|
|
26
32
|
|
|
27
33
|
def assert_node(node: Node, cls: Any = None, xpath: str = "", **kwargs: Any) -> None:
|
|
28
34
|
if cls:
|
|
@@ -64,38 +70,84 @@ def assert_node(node: Node, cls: Any = None, xpath: str = "", **kwargs: Any) ->
|
|
|
64
70
|
f'The node{xpath}[{key}] is not {value!r}: {node[key]!r}'
|
|
65
71
|
|
|
66
72
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
# keep this to restrict the API usage and to have a correct return type
|
|
74
|
+
def etree_parse(path: str | os.PathLike[str]) -> ElementTree:
|
|
75
|
+
"""Parse a file into a (safe) XML element tree."""
|
|
76
|
+
return xml_parse(path)
|
|
71
77
|
|
|
72
78
|
|
|
73
|
-
class SphinxTestApp(application.Sphinx):
|
|
74
|
-
"""
|
|
75
|
-
|
|
76
|
-
better default values for the initialization
|
|
79
|
+
class SphinxTestApp(sphinx.application.Sphinx):
|
|
80
|
+
"""A subclass of :class:`~sphinx.application.Sphinx` for tests.
|
|
81
|
+
|
|
82
|
+
The constructor uses some better default values for the initialization
|
|
83
|
+
parameters and supports arbitrary keywords stored in the :attr:`extras`
|
|
84
|
+
read-only mapping.
|
|
85
|
+
|
|
86
|
+
It is recommended to use::
|
|
87
|
+
|
|
88
|
+
@pytest.mark.sphinx('html')
|
|
89
|
+
def test(app):
|
|
90
|
+
app = ...
|
|
91
|
+
|
|
92
|
+
instead of::
|
|
93
|
+
|
|
94
|
+
def test():
|
|
95
|
+
app = SphinxTestApp('html', srcdir=srcdir)
|
|
96
|
+
|
|
97
|
+
In the former case, the 'app' fixture takes care of setting the source
|
|
98
|
+
directory, whereas in the latter, the user must provide it themselves.
|
|
77
99
|
"""
|
|
78
|
-
|
|
79
|
-
|
|
100
|
+
|
|
101
|
+
# see https://github.com/sphinx-doc/sphinx/pull/12089 for the
|
|
102
|
+
# discussion on how the signature of this class should be used
|
|
80
103
|
|
|
81
104
|
def __init__(
|
|
82
105
|
self,
|
|
106
|
+
/, # to allow 'self' as an extras
|
|
83
107
|
buildername: str = 'html',
|
|
84
108
|
srcdir: Path | None = None,
|
|
85
|
-
builddir: Path | None = None,
|
|
86
|
-
freshenv: bool = False,
|
|
87
|
-
confoverrides: dict | None = None,
|
|
88
|
-
status:
|
|
89
|
-
warning:
|
|
109
|
+
builddir: Path | None = None, # extra constructor argument
|
|
110
|
+
freshenv: bool = False, # argument is not in the same order as in the superclass
|
|
111
|
+
confoverrides: dict[str, Any] | None = None,
|
|
112
|
+
status: StringIO | None = None,
|
|
113
|
+
warning: StringIO | None = None,
|
|
90
114
|
tags: list[str] | None = None,
|
|
91
|
-
|
|
115
|
+
docutils_conf: str | None = None, # extra constructor argument
|
|
92
116
|
parallel: int = 0,
|
|
117
|
+
# additional arguments at the end to keep the signature
|
|
118
|
+
verbosity: int = 0, # argument is not in the same order as in the superclass
|
|
119
|
+
keep_going: bool = False,
|
|
120
|
+
warningiserror: bool = False, # argument is not in the same order as in the superclass
|
|
121
|
+
# unknown keyword arguments
|
|
122
|
+
**extras: Any,
|
|
93
123
|
) -> None:
|
|
94
124
|
assert srcdir is not None
|
|
95
125
|
|
|
126
|
+
if verbosity == -1:
|
|
127
|
+
quiet = True
|
|
128
|
+
verbosity = 0
|
|
129
|
+
else:
|
|
130
|
+
quiet = False
|
|
131
|
+
|
|
132
|
+
if status is None:
|
|
133
|
+
# ensure that :attr:`status` is a StringIO and not sys.stdout
|
|
134
|
+
# but allow the stream to be /dev/null by passing verbosity=-1
|
|
135
|
+
status = None if quiet else StringIO()
|
|
136
|
+
elif not isinstance(status, StringIO):
|
|
137
|
+
err = "%r must be an io.StringIO object, got: %s" % ('status', type(status))
|
|
138
|
+
raise TypeError(err)
|
|
139
|
+
|
|
140
|
+
if warning is None:
|
|
141
|
+
# ensure that :attr:`warning` is a StringIO and not sys.stderr
|
|
142
|
+
# but allow the stream to be /dev/null by passing verbosity=-1
|
|
143
|
+
warning = None if quiet else StringIO()
|
|
144
|
+
elif not isinstance(warning, StringIO):
|
|
145
|
+
err = '%r must be an io.StringIO object, got: %s' % ('warning', type(warning))
|
|
146
|
+
raise TypeError(err)
|
|
147
|
+
|
|
96
148
|
self.docutils_conf_path = srcdir / 'docutils.conf'
|
|
97
|
-
if
|
|
98
|
-
self.docutils_conf_path.write_text(
|
|
149
|
+
if docutils_conf is not None:
|
|
150
|
+
self.docutils_conf_path.write_text(docutils_conf, encoding='utf8')
|
|
99
151
|
|
|
100
152
|
if builddir is None:
|
|
101
153
|
builddir = srcdir / '_build'
|
|
@@ -107,35 +159,40 @@ class SphinxTestApp(application.Sphinx):
|
|
|
107
159
|
doctreedir.mkdir(parents=True, exist_ok=True)
|
|
108
160
|
if confoverrides is None:
|
|
109
161
|
confoverrides = {}
|
|
110
|
-
warningiserror = False
|
|
111
|
-
|
|
112
|
-
self._saved_path = sys.path[:]
|
|
113
|
-
self._saved_directives = directives._directives.copy() # type: ignore[attr-defined]
|
|
114
|
-
self._saved_roles = roles._roles.copy() # type: ignore[attr-defined]
|
|
115
162
|
|
|
116
|
-
self.
|
|
117
|
-
|
|
163
|
+
self._saved_path = sys.path.copy()
|
|
164
|
+
self.extras: Mapping[str, Any] = MappingProxyType(extras)
|
|
165
|
+
"""Extras keyword arguments."""
|
|
118
166
|
|
|
119
167
|
try:
|
|
120
|
-
super().__init__(
|
|
121
|
-
|
|
122
|
-
|
|
168
|
+
super().__init__(
|
|
169
|
+
srcdir, confdir, outdir, doctreedir, buildername,
|
|
170
|
+
confoverrides=confoverrides, status=status, warning=warning,
|
|
171
|
+
freshenv=freshenv, warningiserror=warningiserror, tags=tags,
|
|
172
|
+
verbosity=verbosity, parallel=parallel, keep_going=keep_going,
|
|
173
|
+
pdb=False,
|
|
174
|
+
)
|
|
123
175
|
except Exception:
|
|
124
176
|
self.cleanup()
|
|
125
177
|
raise
|
|
126
178
|
|
|
179
|
+
@property
|
|
180
|
+
def status(self) -> StringIO:
|
|
181
|
+
"""The in-memory text I/O for the application status messages."""
|
|
182
|
+
# sphinx.application.Sphinx uses StringIO for a quiet stream
|
|
183
|
+
assert isinstance(self._status, StringIO)
|
|
184
|
+
return self._status
|
|
185
|
+
|
|
186
|
+
@property
|
|
187
|
+
def warning(self) -> StringIO:
|
|
188
|
+
"""The in-memory text I/O for the application warning messages."""
|
|
189
|
+
# sphinx.application.Sphinx uses StringIO for a quiet stream
|
|
190
|
+
assert isinstance(self._warning, StringIO)
|
|
191
|
+
return self._warning
|
|
192
|
+
|
|
127
193
|
def cleanup(self, doctrees: bool = False) -> None:
|
|
128
|
-
ModuleAnalyzer.cache.clear()
|
|
129
|
-
locale.translators.clear()
|
|
130
194
|
sys.path[:] = self._saved_path
|
|
131
|
-
|
|
132
|
-
directives._directives = self._saved_directives # type: ignore[attr-defined]
|
|
133
|
-
roles._roles = self._saved_roles # type: ignore[attr-defined]
|
|
134
|
-
for method in dir(nodes.GenericNodeVisitor):
|
|
135
|
-
if method.startswith('visit_') and \
|
|
136
|
-
method not in self._saved_nodeclasses:
|
|
137
|
-
delattr(nodes.GenericNodeVisitor, 'visit_' + method[6:])
|
|
138
|
-
delattr(nodes.GenericNodeVisitor, 'depart_' + method[6:])
|
|
195
|
+
_clean_up_global_state()
|
|
139
196
|
with contextlib.suppress(FileNotFoundError):
|
|
140
197
|
os.remove(self.docutils_conf_path)
|
|
141
198
|
|
|
@@ -148,10 +205,10 @@ class SphinxTestApp(application.Sphinx):
|
|
|
148
205
|
|
|
149
206
|
|
|
150
207
|
class SphinxTestAppWrapperForSkipBuilding:
|
|
151
|
-
"""
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
208
|
+
"""A wrapper for SphinxTestApp.
|
|
209
|
+
|
|
210
|
+
This class is used to speed up the test by skipping ``app.build()``
|
|
211
|
+
if it has already been built and there are any output files.
|
|
155
212
|
"""
|
|
156
213
|
|
|
157
214
|
def __init__(self, app_: SphinxTestApp) -> None:
|
|
@@ -167,5 +224,37 @@ class SphinxTestAppWrapperForSkipBuilding:
|
|
|
167
224
|
# otherwise, we can use built cache
|
|
168
225
|
|
|
169
226
|
|
|
170
|
-
def
|
|
171
|
-
|
|
227
|
+
def _clean_up_global_state() -> None:
|
|
228
|
+
# clean up Docutils global state
|
|
229
|
+
directives._directives.clear() # type: ignore[attr-defined]
|
|
230
|
+
roles._roles.clear() # type: ignore[attr-defined]
|
|
231
|
+
for node in additional_nodes:
|
|
232
|
+
delattr(nodes.GenericNodeVisitor, f'visit_{node.__name__}')
|
|
233
|
+
delattr(nodes.GenericNodeVisitor, f'depart_{node.__name__}')
|
|
234
|
+
delattr(nodes.SparseNodeVisitor, f'visit_{node.__name__}')
|
|
235
|
+
delattr(nodes.SparseNodeVisitor, f'depart_{node.__name__}')
|
|
236
|
+
additional_nodes.clear()
|
|
237
|
+
|
|
238
|
+
# clean up Sphinx global state
|
|
239
|
+
sphinx.locale.translators.clear()
|
|
240
|
+
|
|
241
|
+
# clean up autodoc global state
|
|
242
|
+
sphinx.pycode.ModuleAnalyzer.cache.clear()
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
# deprecated name -> (object to return, canonical path or '', removal version)
|
|
246
|
+
_DEPRECATED_OBJECTS: dict[str, tuple[Any, str, tuple[int, int]]] = {
|
|
247
|
+
'strip_escseq': (strip_colors, 'sphinx.util.console.strip_colors', (9, 0)),
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def __getattr__(name: str) -> Any:
|
|
252
|
+
if name not in _DEPRECATED_OBJECTS:
|
|
253
|
+
msg = f'module {__name__!r} has no attribute {name!r}'
|
|
254
|
+
raise AttributeError(msg)
|
|
255
|
+
|
|
256
|
+
from sphinx.deprecation import _deprecation_warning
|
|
257
|
+
|
|
258
|
+
deprecated_object, canonical_name, remove = _DEPRECATED_OBJECTS[name]
|
|
259
|
+
_deprecation_warning(__name__, name, canonical_name, remove=remove)
|
|
260
|
+
return deprecated_object
|
sphinx/texinputs/sphinx.xdy
CHANGED
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
;; file, with a blank space after \IeC
|
|
100
100
|
|
|
101
101
|
;; Details of the syntax are explained at
|
|
102
|
-
;;
|
|
102
|
+
;; https://xindy.sourceforge.net/doc/manual-3.html
|
|
103
103
|
;; In absence of :string, "xindy uses an auto-detection mechanism to decide,
|
|
104
104
|
;; if the pattern is a regular expression or not". But it is not obvious to
|
|
105
105
|
;; guess, for example "\\_" is not detected as RE but "\\P\{\}" is, so for
|
|
@@ -564,7 +564,7 @@
|
|
|
564
564
|
% 99% or use case. Or perhaps some trick with storing in a \vbox and recovering
|
|
565
565
|
% via some \vsplit but this becomes complicated... perhaps in future.
|
|
566
566
|
%
|
|
567
|
-
% In passing we obtain baseline
|
|
567
|
+
% In passing we obtain baseline alignments across rows (only if
|
|
568
568
|
% \arraystretch is 1, as LaTeX's does not obey \arraystretch in "p"
|
|
569
569
|
% multi-line contents, only first and last line...)
|
|
570
570
|
%
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
%% a stub for obsoleted LaTeX package substitutefont
|
|
2
|
+
% The package substitutefont stopped being distributed with TeXLive
|
|
3
|
+
% around August 2023 and was moved to "obsolete" section.
|
|
4
|
+
% cf https://ctan.org/pkg/substitutefont
|
|
5
|
+
% Trying to load it raises a LaTeX build error since.
|
|
6
|
+
|
|
7
|
+
% The \substitutefont has a LaTeX kernel replacement
|
|
8
|
+
% \DeclareFontFamilySubstitution
|
|
9
|
+
% which was added to LaTeX 2020-02-02
|
|
10
|
+
% The aim of this stub is to do that replacement silently.
|
|
11
|
+
|
|
12
|
+
% change this info string if making any custom modification
|
|
13
|
+
\ProvidesPackage{sphinxpackagesubstitutefont}[2023/15/11 v7.3.0 substitutefont stub]
|
|
14
|
+
|
|
15
|
+
\ifdefined\DeclareFontFamilySubstitution
|
|
16
|
+
\def\substitutefont{\DeclareFontFamilySubstitution}
|
|
17
|
+
\else
|
|
18
|
+
\usepackage{substitutefont}
|
|
19
|
+
\fi
|
|
20
|
+
|
|
21
|
+
\endinput
|
sphinx/themes/agogo/layout.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Sphinx layout template for the agogo theme, originally written
|
|
6
6
|
by Andi Albrecht.
|
|
7
7
|
|
|
8
|
-
:copyright: Copyright 2007-
|
|
8
|
+
:copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
|
|
9
9
|
:license: BSD, see LICENSE for details.
|
|
10
10
|
#}
|
|
11
11
|
{%- extends "basic/layout.html" %}
|
|
@@ -39,13 +39,13 @@
|
|
|
39
39
|
{{ toctree(includehidden=True) }}
|
|
40
40
|
{%- endblock %}
|
|
41
41
|
{%- block sidebarsearch %}
|
|
42
|
-
<
|
|
42
|
+
<search role="search">
|
|
43
43
|
<h3 style="margin-top: 1.5em;">{{ _('Search') }}</h3>
|
|
44
44
|
<form class="search" action="{{ pathto('search') }}" method="get">
|
|
45
45
|
<input type="text" name="q" />
|
|
46
46
|
<input type="submit" value="{{ _('Go') }}" />
|
|
47
47
|
</form>
|
|
48
|
-
</
|
|
48
|
+
</search>
|
|
49
49
|
{%- endblock %}
|
|
50
50
|
{% endmacro %}
|
|
51
51
|
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
<div class="footer-wrapper">
|
|
77
77
|
<div class="footer">
|
|
78
78
|
<div class="left">
|
|
79
|
-
<div role="navigation" aria-label="related
|
|
79
|
+
<div role="navigation" aria-label="related navigation">
|
|
80
80
|
{%- for rellink in rellinks|reverse %}
|
|
81
81
|
<a href="{{ pathto(rellink[0])|e }}" title="{{ rellink[1]|striptags|e }}"
|
|
82
82
|
{{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
[theme]
|
|
2
|
+
inherit = "basic"
|
|
3
|
+
stylesheets = [
|
|
4
|
+
"agogo.css",
|
|
5
|
+
]
|
|
6
|
+
pygments_style = { default = "tango" }
|
|
7
|
+
|
|
8
|
+
[options]
|
|
9
|
+
bodyfont = "\"Verdana\", Arial, sans-serif"
|
|
10
|
+
headerfont = "\"Georgia\", \"Times New Roman\", serif"
|
|
11
|
+
pagewidth = "70em"
|
|
12
|
+
documentwidth = "50em"
|
|
13
|
+
rightsidebar = "true"
|
|
14
|
+
sidebarwidth = "20em"
|
|
15
|
+
bgcolor = "#eeeeec"
|
|
16
|
+
headerbg = "#555573 url(bgtop.png) top left repeat-x"
|
|
17
|
+
footerbg = "url(bgfooter.png) top left repeat-x"
|
|
18
|
+
linkcolor = "#ce5c00"
|
|
19
|
+
headercolor1 = "#204a87"
|
|
20
|
+
headercolor2 = "#3465a4"
|
|
21
|
+
headerlinkcolor = "#fcaf3e"
|
|
22
|
+
textalign = "justify"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Default template for the "index" page.
|
|
6
6
|
|
|
7
|
-
:copyright: Copyright 2007-
|
|
7
|
+
:copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
|
|
8
8
|
:license: BSD, see LICENSE for details.
|
|
9
9
|
#}{{ warn('Now base template defindex.html is deprecated.') }}
|
|
10
10
|
{%- extends "layout.html" %}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Template for domain indices (module index, ...).
|
|
6
6
|
|
|
7
|
-
:copyright: Copyright 2007-
|
|
7
|
+
:copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
|
|
8
8
|
:license: BSD, see LICENSE for details.
|
|
9
9
|
#}
|
|
10
10
|
{%- extends "layout.html" %}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Template for a "single" page of a split index.
|
|
6
6
|
|
|
7
|
-
:copyright: Copyright 2007-
|
|
7
|
+
:copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
|
|
8
8
|
:license: BSD, see LICENSE for details.
|
|
9
9
|
#}
|
|
10
10
|
{% macro indexentries(firstname, links) %}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Sphinx sidebar template: global table of contents.
|
|
6
6
|
|
|
7
|
-
:copyright: Copyright 2007-
|
|
7
|
+
:copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
|
|
8
8
|
:license: BSD, see LICENSE for details.
|
|
9
9
|
#}
|
|
10
10
|
<h3><a href="{{ pathto(root_doc)|e }}">{{ _('Table of Contents') }}</a></h3>
|
sphinx/themes/basic/layout.html
CHANGED
sphinx/themes/basic/page.html
CHANGED