Sphinx 8.0.1__py3-none-any.whl → 8.1.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 +6 -3
- sphinx/_cli/__init__.py +40 -20
- sphinx/_cli/util/colour.py +5 -4
- sphinx/_cli/util/errors.py +28 -11
- sphinx/application.py +361 -38
- sphinx/builders/__init__.py +229 -83
- sphinx/builders/_epub_base.py +118 -71
- sphinx/builders/changes.py +39 -21
- sphinx/builders/dirhtml.py +4 -4
- sphinx/builders/dummy.py +2 -5
- sphinx/builders/epub3.py +43 -22
- sphinx/builders/gettext.py +43 -25
- sphinx/builders/html/__init__.py +284 -218
- sphinx/builders/html/_assets.py +62 -26
- sphinx/builders/html/_build_info.py +76 -0
- sphinx/builders/html/transforms.py +11 -9
- sphinx/builders/latex/__init__.py +139 -81
- sphinx/builders/latex/constants.py +7 -7
- sphinx/builders/latex/nodes.py +3 -2
- sphinx/builders/latex/theming.py +7 -5
- sphinx/builders/latex/transforms.py +27 -19
- sphinx/builders/linkcheck.py +146 -72
- sphinx/builders/manpage.py +30 -13
- sphinx/builders/singlehtml.py +22 -14
- sphinx/builders/texinfo.py +67 -37
- sphinx/builders/text.py +5 -5
- sphinx/builders/xml.py +6 -9
- sphinx/cmd/build.py +282 -103
- sphinx/cmd/make_mode.py +106 -63
- sphinx/cmd/quickstart.py +341 -145
- sphinx/config.py +45 -12
- sphinx/deprecation.py +8 -2
- sphinx/directives/__init__.py +28 -19
- sphinx/directives/code.py +86 -56
- sphinx/directives/other.py +50 -36
- sphinx/directives/patches.py +29 -19
- sphinx/domains/__init__.py +20 -120
- sphinx/domains/_domains_container.py +281 -0
- sphinx/domains/_index.py +110 -0
- sphinx/domains/c/__init__.py +3 -3
- sphinx/domains/c/_parser.py +10 -6
- sphinx/domains/changeset.py +5 -3
- sphinx/domains/citation.py +5 -3
- sphinx/domains/cpp/__init__.py +9 -11
- sphinx/domains/cpp/_parser.py +8 -7
- sphinx/domains/index.py +3 -3
- sphinx/domains/javascript.py +12 -7
- sphinx/domains/math.py +2 -2
- sphinx/domains/python/__init__.py +10 -5
- sphinx/domains/python/_object.py +1 -1
- sphinx/domains/rst.py +5 -5
- sphinx/domains/std/__init__.py +16 -11
- sphinx/environment/__init__.py +206 -146
- sphinx/environment/adapters/asset.py +3 -2
- sphinx/environment/adapters/indexentries.py +74 -33
- sphinx/environment/adapters/toctree.py +100 -43
- sphinx/environment/collectors/__init__.py +19 -8
- sphinx/environment/collectors/asset.py +47 -15
- sphinx/environment/collectors/dependencies.py +8 -4
- sphinx/environment/collectors/metadata.py +7 -2
- sphinx/environment/collectors/title.py +7 -2
- sphinx/environment/collectors/toctree.py +54 -22
- sphinx/errors.py +4 -1
- sphinx/events.py +314 -7
- sphinx/ext/apidoc.py +42 -18
- sphinx/ext/autodoc/__init__.py +52 -24
- sphinx/ext/autodoc/importer.py +6 -9
- sphinx/ext/autosectionlabel.py +1 -2
- sphinx/ext/autosummary/__init__.py +3 -1
- sphinx/ext/autosummary/generate.py +28 -14
- sphinx/ext/coverage.py +7 -7
- sphinx/ext/doctest.py +4 -8
- sphinx/ext/duration.py +6 -5
- sphinx/ext/inheritance_diagram.py +1 -1
- sphinx/ext/intersphinx/_cli.py +6 -4
- sphinx/ext/intersphinx/_load.py +77 -32
- sphinx/ext/intersphinx/_resolve.py +173 -79
- sphinx/ext/intersphinx/_shared.py +7 -5
- sphinx/ext/linkcode.py +7 -1
- sphinx/ext/mathjax.py +1 -2
- sphinx/ext/napoleon/__init__.py +37 -24
- sphinx/ext/napoleon/docstring.py +202 -134
- sphinx/ext/todo.py +5 -3
- sphinx/highlighting.py +10 -3
- sphinx/io.py +1 -1
- sphinx/jinja2glue.py +27 -6
- sphinx/locale/__init__.py +6 -2
- sphinx/locale/ar/LC_MESSAGES/sphinx.js +8 -1
- sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ar/LC_MESSAGES/sphinx.po +2246 -2288
- sphinx/locale/bg/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bg/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/bn/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bn/LC_MESSAGES/sphinx.po +2349 -2395
- sphinx/locale/ca/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ca/LC_MESSAGES/sphinx.po +2846 -2892
- sphinx/locale/cak/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cak/LC_MESSAGES/sphinx.po +2213 -2259
- sphinx/locale/cs/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cs/LC_MESSAGES/sphinx.po +2225 -2269
- sphinx/locale/cy/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cy/LC_MESSAGES/sphinx.po +2403 -2447
- sphinx/locale/da/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/da/LC_MESSAGES/sphinx.po +2214 -2260
- sphinx/locale/de/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de/LC_MESSAGES/sphinx.po +2230 -2276
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/el/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/el/LC_MESSAGES/sphinx.po +2619 -2665
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +2519 -2565
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/eo/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eo/LC_MESSAGES/sphinx.po +2232 -2278
- sphinx/locale/es/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es/LC_MESSAGES/sphinx.po +2516 -2561
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/et/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/et/LC_MESSAGES/sphinx.po +2317 -2363
- sphinx/locale/eu/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eu/LC_MESSAGES/sphinx.po +2218 -2264
- sphinx/locale/fa/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fa/LC_MESSAGES/sphinx.po +2505 -2551
- sphinx/locale/fi/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fi/LC_MESSAGES/sphinx.po +2303 -2349
- sphinx/locale/fr/LC_MESSAGES/sphinx.js +6 -2
- sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr/LC_MESSAGES/sphinx.po +2863 -2908
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/gl/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/gl/LC_MESSAGES/sphinx.po +2571 -2617
- sphinx/locale/he/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/he/LC_MESSAGES/sphinx.po +2307 -2352
- sphinx/locale/hi/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi/LC_MESSAGES/sphinx.po +2580 -2626
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/hr/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hr/LC_MESSAGES/sphinx.po +2238 -2283
- sphinx/locale/hu/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hu/LC_MESSAGES/sphinx.po +2228 -2274
- sphinx/locale/id/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/id/LC_MESSAGES/sphinx.po +2787 -2834
- sphinx/locale/is/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/is/LC_MESSAGES/sphinx.po +2224 -2270
- sphinx/locale/it/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/it/LC_MESSAGES/sphinx.po +2231 -2276
- sphinx/locale/ja/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ja/LC_MESSAGES/sphinx.po +2507 -2554
- sphinx/locale/ka/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ka/LC_MESSAGES/sphinx.po +2428 -2474
- sphinx/locale/ko/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ko/LC_MESSAGES/sphinx.po +2516 -2563
- sphinx/locale/lt/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lt/LC_MESSAGES/sphinx.po +2425 -2469
- sphinx/locale/lv/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lv/LC_MESSAGES/sphinx.po +2362 -2407
- sphinx/locale/mk/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/mk/LC_MESSAGES/sphinx.po +2121 -2167
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +2220 -2266
- sphinx/locale/ne/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ne/LC_MESSAGES/sphinx.po +2221 -2267
- sphinx/locale/nl/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nl/LC_MESSAGES/sphinx.po +2240 -2286
- sphinx/locale/pl/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pl/LC_MESSAGES/sphinx.po +2319 -2363
- sphinx/locale/pt/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +2854 -2899
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +2224 -2269
- sphinx/locale/ro/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ro/LC_MESSAGES/sphinx.po +2226 -2271
- sphinx/locale/ru/LC_MESSAGES/sphinx.js +8 -3
- sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ru/LC_MESSAGES/sphinx.po +2841 -2885
- sphinx/locale/si/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/si/LC_MESSAGES/sphinx.po +2294 -2340
- sphinx/locale/sk/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sk/LC_MESSAGES/sphinx.po +2497 -2541
- sphinx/locale/sl/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sl/LC_MESSAGES/sphinx.po +2331 -2375
- sphinx/locale/sphinx.pot +2121 -2167
- sphinx/locale/sq/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sq/LC_MESSAGES/sphinx.po +2855 -2901
- sphinx/locale/sr/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr/LC_MESSAGES/sphinx.po +2203 -2248
- 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.js +4 -1
- sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.po +2423 -2469
- sphinx/locale/te/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/te/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/tr/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/tr/LC_MESSAGES/sphinx.po +2443 -2489
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +2329 -2373
- sphinx/locale/ur/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ur/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/vi/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/vi/LC_MESSAGES/sphinx.po +2199 -2246
- sphinx/locale/yue/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/yue/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +2845 -2892
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/parsers.py +3 -1
- sphinx/project.py +6 -2
- sphinx/pycode/__init__.py +11 -4
- sphinx/pycode/ast.py +58 -58
- sphinx/pycode/parser.py +49 -28
- sphinx/pygments_styles.py +49 -49
- sphinx/registry.py +8 -3
- sphinx/roles.py +133 -13
- sphinx/search/__init__.py +146 -87
- sphinx/search/da.py +2 -4
- sphinx/search/de.py +2 -4
- sphinx/search/en.py +4 -4
- sphinx/search/es.py +2 -4
- sphinx/search/fi.py +2 -4
- sphinx/search/fr.py +2 -4
- sphinx/search/hu.py +2 -4
- sphinx/search/it.py +2 -4
- sphinx/search/ja.py +55 -32
- sphinx/search/nl.py +2 -4
- sphinx/search/no.py +2 -4
- sphinx/search/pt.py +2 -4
- sphinx/search/ro.py +0 -2
- sphinx/search/ru.py +2 -4
- sphinx/search/sv.py +2 -4
- sphinx/search/tr.py +0 -2
- sphinx/search/zh.py +18 -13
- sphinx/templates/graphviz/graphviz.css +0 -7
- sphinx/testing/fixtures.py +6 -5
- sphinx/testing/path.py +7 -5
- sphinx/testing/util.py +63 -29
- sphinx/texinputs/sphinx.sty +107 -39
- sphinx/texinputs/sphinxlatexadmonitions.sty +51 -35
- sphinx/texinputs/sphinxlatexcontainers.sty +1 -1
- sphinx/texinputs/sphinxlatexgraphics.sty +3 -2
- sphinx/texinputs/sphinxlatexindbibtoc.sty +1 -1
- sphinx/texinputs/sphinxlatexlists.sty +1 -1
- sphinx/texinputs/sphinxlatexliterals.sty +4 -1
- sphinx/texinputs/sphinxlatexnumfig.sty +22 -9
- sphinx/texinputs/sphinxlatexobjects.sty +1 -1
- sphinx/texinputs/sphinxlatexshadowbox.sty +72 -10
- sphinx/texinputs/sphinxlatexstyleheadings.sty +7 -2
- sphinx/texinputs/sphinxlatexstylepage.sty +2 -8
- sphinx/texinputs/sphinxlatexstyletext.sty +2 -4
- sphinx/texinputs/sphinxlatextables.sty +1 -1
- sphinx/texinputs/sphinxoptionsgeometry.sty +1 -1
- sphinx/texinputs/sphinxoptionshyperref.sty +1 -1
- sphinx/themes/agogo/layout.html +1 -10
- sphinx/themes/agogo/static/agogo.css.jinja +0 -7
- sphinx/themes/basic/defindex.html +1 -8
- sphinx/themes/basic/domainindex.html +1 -9
- sphinx/themes/basic/genindex-single.html +1 -9
- sphinx/themes/basic/genindex-split.html +1 -9
- sphinx/themes/basic/genindex.html +1 -9
- sphinx/themes/basic/globaltoc.html +1 -9
- sphinx/themes/basic/layout.html +1 -9
- sphinx/themes/basic/localtoc.html +1 -9
- sphinx/themes/basic/page.html +1 -9
- sphinx/themes/basic/relations.html +1 -9
- sphinx/themes/basic/search.html +1 -9
- sphinx/themes/basic/searchbox.html +1 -9
- sphinx/themes/basic/searchfield.html +4 -10
- sphinx/themes/basic/sourcelink.html +1 -9
- sphinx/themes/basic/static/basic.css.jinja +2 -13
- sphinx/themes/basic/static/doctools.js +0 -7
- sphinx/themes/basic/static/language_data.js.jinja +0 -7
- sphinx/themes/basic/static/searchtools.js +25 -13
- sphinx/themes/bizstyle/layout.html +1 -9
- sphinx/themes/bizstyle/static/bizstyle.css.jinja +0 -7
- sphinx/themes/bizstyle/static/bizstyle.js.jinja +5 -11
- sphinx/themes/classic/layout.html +1 -9
- sphinx/themes/classic/static/classic.css.jinja +0 -7
- sphinx/themes/classic/static/sidebar.js.jinja +0 -6
- sphinx/themes/epub/epub-cover.html +1 -9
- sphinx/themes/epub/layout.html +1 -9
- sphinx/themes/epub/static/epub.css.jinja +0 -7
- sphinx/themes/haiku/layout.html +1 -9
- sphinx/themes/haiku/static/haiku.css.jinja +0 -6
- sphinx/themes/nature/static/nature.css.jinja +0 -7
- sphinx/themes/nonav/layout.html +1 -9
- sphinx/themes/nonav/static/nonav.css.jinja +0 -7
- sphinx/themes/pyramid/static/epub.css.jinja +0 -7
- sphinx/themes/pyramid/static/pyramid.css.jinja +0 -7
- sphinx/themes/scrolls/layout.html +1 -10
- sphinx/themes/scrolls/static/scrolls.css.jinja +0 -7
- sphinx/themes/sphinxdoc/static/sphinxdoc.css.jinja +2 -7
- sphinx/themes/traditional/static/traditional.css.jinja +0 -7
- sphinx/theming.py +18 -6
- sphinx/transforms/__init__.py +56 -35
- sphinx/transforms/compact_bullet_list.py +3 -2
- sphinx/transforms/i18n.py +132 -50
- sphinx/transforms/post_transforms/__init__.py +94 -43
- sphinx/transforms/post_transforms/code.py +7 -6
- sphinx/transforms/post_transforms/images.py +71 -54
- sphinx/transforms/references.py +1 -2
- sphinx/util/__init__.py +23 -194
- sphinx/util/_files.py +80 -0
- sphinx/util/_importer.py +27 -0
- sphinx/util/_io.py +1 -2
- sphinx/util/_lines.py +26 -0
- sphinx/util/_pathlib.py +5 -2
- sphinx/util/_serialise.py +53 -0
- sphinx/util/_timestamps.py +2 -1
- sphinx/util/_uri.py +16 -0
- sphinx/util/cfamily.py +48 -25
- sphinx/util/console.py +1 -0
- sphinx/util/display.py +1 -1
- sphinx/util/docfields.py +125 -45
- sphinx/util/docstrings.py +1 -1
- sphinx/util/docutils.py +118 -44
- sphinx/util/exceptions.py +11 -5
- sphinx/util/fileutil.py +53 -32
- sphinx/util/http_date.py +9 -7
- sphinx/util/i18n.py +49 -16
- sphinx/util/images.py +7 -6
- sphinx/util/inspect.py +29 -12
- sphinx/util/inventory.py +47 -29
- sphinx/util/logging.py +58 -85
- sphinx/util/matching.py +3 -3
- sphinx/util/math.py +1 -1
- sphinx/util/nodes.py +176 -108
- sphinx/util/osutil.py +13 -10
- sphinx/util/parallel.py +5 -4
- sphinx/util/parsing.py +5 -3
- sphinx/util/png.py +3 -3
- sphinx/util/requests.py +8 -4
- sphinx/util/rst.py +5 -3
- sphinx/util/tags.py +5 -2
- sphinx/util/template.py +26 -11
- sphinx/util/texescape.py +2 -2
- sphinx/util/typing.py +89 -38
- sphinx/versioning.py +3 -1
- sphinx/writers/html.py +22 -7
- sphinx/writers/html5.py +113 -64
- sphinx/writers/latex.py +408 -221
- sphinx/writers/manpage.py +25 -15
- sphinx/writers/texinfo.py +94 -82
- sphinx/writers/text.py +87 -53
- sphinx/writers/xml.py +5 -4
- sphinx-8.1.0.dist-info/LICENSE.rst +31 -0
- {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/METADATA +13 -11
- sphinx-8.1.0.dist-info/RECORD +598 -0
- sphinx-8.0.1.dist-info/LICENSE.rst +0 -67
- sphinx-8.0.1.dist-info/RECORD +0 -590
- {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/WHEEL +0 -0
- {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, overload
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from collections.abc import Iterable, Iterator, Mapping, Set
|
|
7
|
+
from typing import Any, Final, Literal, NoReturn
|
|
8
|
+
|
|
9
|
+
from docutils import nodes
|
|
10
|
+
from typing_extensions import Self
|
|
11
|
+
|
|
12
|
+
from sphinx.domains import Domain
|
|
13
|
+
from sphinx.domains.c import CDomain
|
|
14
|
+
from sphinx.domains.changeset import ChangeSetDomain
|
|
15
|
+
from sphinx.domains.citation import CitationDomain
|
|
16
|
+
from sphinx.domains.cpp import CPPDomain
|
|
17
|
+
from sphinx.domains.index import IndexDomain
|
|
18
|
+
from sphinx.domains.javascript import JavaScriptDomain
|
|
19
|
+
from sphinx.domains.math import MathDomain
|
|
20
|
+
from sphinx.domains.python import PythonDomain
|
|
21
|
+
from sphinx.domains.rst import ReSTDomain
|
|
22
|
+
from sphinx.domains.std import StandardDomain
|
|
23
|
+
from sphinx.environment import BuildEnvironment
|
|
24
|
+
from sphinx.ext.duration import DurationDomain
|
|
25
|
+
from sphinx.ext.todo import TodoDomain
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class _DomainsContainer:
|
|
29
|
+
"""Container for domain instances.
|
|
30
|
+
|
|
31
|
+
This class is private, including its name, constructor, and all methods.
|
|
32
|
+
Any or all of these will change without notice or warning in any release.
|
|
33
|
+
|
|
34
|
+
The public interface is restricted to:
|
|
35
|
+
|
|
36
|
+
* the``domains.['<domain-name>']`` mapping interface
|
|
37
|
+
* the ``domains.<core-domain-name>`` attributes for core domains.
|
|
38
|
+
* the `.get()``, ``.keys()``, ``.items()``, and ``.values()`` methods.
|
|
39
|
+
|
|
40
|
+
Additionally, this class supports ``iter`` and ``len``,
|
|
41
|
+
and provides membership testing via the ``in`` operator.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
__slots__ = (
|
|
45
|
+
'_domain_instances',
|
|
46
|
+
'c_domain',
|
|
47
|
+
'changeset_domain',
|
|
48
|
+
'citation_domain',
|
|
49
|
+
'cpp_domain',
|
|
50
|
+
'index_domain',
|
|
51
|
+
'javascript_domain',
|
|
52
|
+
'math_domain',
|
|
53
|
+
'python_domain',
|
|
54
|
+
'restructuredtext_domain',
|
|
55
|
+
'standard_domain',
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
#: First-party domains in :mod:`sphinx.domains`
|
|
59
|
+
_core_domains: Final = frozenset({
|
|
60
|
+
'std',
|
|
61
|
+
# Language-specific domains
|
|
62
|
+
'c',
|
|
63
|
+
'cpp',
|
|
64
|
+
'js',
|
|
65
|
+
'py',
|
|
66
|
+
'rst',
|
|
67
|
+
# Other core domains
|
|
68
|
+
'changeset',
|
|
69
|
+
'citation',
|
|
70
|
+
'index',
|
|
71
|
+
'math',
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
@classmethod
|
|
75
|
+
def _from_environment(cls, env: BuildEnvironment, /) -> Self:
|
|
76
|
+
create_domains = env.app.registry.create_domains
|
|
77
|
+
# Initialise domains
|
|
78
|
+
if domains := {domain.name: domain for domain in create_domains(env)}:
|
|
79
|
+
return cls(**domains) # type: ignore[arg-type]
|
|
80
|
+
|
|
81
|
+
return cls._from_environment_default(env=env)
|
|
82
|
+
|
|
83
|
+
@classmethod
|
|
84
|
+
def _from_environment_default(cls, *, env: BuildEnvironment) -> Self:
|
|
85
|
+
"""Return a default instance with every domain we require."""
|
|
86
|
+
from sphinx.domains.c import CDomain
|
|
87
|
+
from sphinx.domains.changeset import ChangeSetDomain
|
|
88
|
+
from sphinx.domains.citation import CitationDomain
|
|
89
|
+
from sphinx.domains.cpp import CPPDomain
|
|
90
|
+
from sphinx.domains.index import IndexDomain
|
|
91
|
+
from sphinx.domains.javascript import JavaScriptDomain
|
|
92
|
+
from sphinx.domains.math import MathDomain
|
|
93
|
+
from sphinx.domains.python import PythonDomain
|
|
94
|
+
from sphinx.domains.rst import ReSTDomain
|
|
95
|
+
from sphinx.domains.std import StandardDomain
|
|
96
|
+
|
|
97
|
+
return cls(
|
|
98
|
+
c=CDomain(env),
|
|
99
|
+
changeset=ChangeSetDomain(env),
|
|
100
|
+
citation=CitationDomain(env),
|
|
101
|
+
cpp=CPPDomain(env),
|
|
102
|
+
index=IndexDomain(env),
|
|
103
|
+
js=JavaScriptDomain(env),
|
|
104
|
+
math=MathDomain(env),
|
|
105
|
+
py=PythonDomain(env),
|
|
106
|
+
rst=ReSTDomain(env),
|
|
107
|
+
std=StandardDomain(env),
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
def __init__(
|
|
111
|
+
self,
|
|
112
|
+
*,
|
|
113
|
+
c: CDomain,
|
|
114
|
+
cpp: CPPDomain,
|
|
115
|
+
js: JavaScriptDomain,
|
|
116
|
+
py: PythonDomain,
|
|
117
|
+
rst: ReSTDomain,
|
|
118
|
+
std: StandardDomain,
|
|
119
|
+
changeset: ChangeSetDomain,
|
|
120
|
+
citation: CitationDomain,
|
|
121
|
+
index: IndexDomain,
|
|
122
|
+
math: MathDomain,
|
|
123
|
+
**domains: Domain,
|
|
124
|
+
) -> None:
|
|
125
|
+
# All domains, including core.
|
|
126
|
+
# Implemented as a dict for backwards compatibility.
|
|
127
|
+
self._domain_instances: Mapping[str, Domain] = {
|
|
128
|
+
'c': c,
|
|
129
|
+
'changeset': changeset,
|
|
130
|
+
'citation': citation,
|
|
131
|
+
'cpp': cpp,
|
|
132
|
+
'index': index,
|
|
133
|
+
'js': js,
|
|
134
|
+
'math': math,
|
|
135
|
+
'py': py,
|
|
136
|
+
'rst': rst,
|
|
137
|
+
'std': std,
|
|
138
|
+
**domains,
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
# Provide typed attributes for the core domains
|
|
142
|
+
self.standard_domain: StandardDomain = std
|
|
143
|
+
self.c_domain: CDomain = c
|
|
144
|
+
self.cpp_domain: CPPDomain = cpp
|
|
145
|
+
self.javascript_domain: JavaScriptDomain = js
|
|
146
|
+
self.python_domain: PythonDomain = py
|
|
147
|
+
self.restructuredtext_domain: ReSTDomain = rst
|
|
148
|
+
self.changeset_domain: ChangeSetDomain = changeset
|
|
149
|
+
self.citation_domain: CitationDomain = citation
|
|
150
|
+
self.index_domain: IndexDomain = index
|
|
151
|
+
self.math_domain: MathDomain = math
|
|
152
|
+
|
|
153
|
+
for domain_name, domain in self._domain_instances.items():
|
|
154
|
+
# invariant from ``_DomainsContainer._from_environment``
|
|
155
|
+
if domain_name != domain.name:
|
|
156
|
+
msg = f'Domain name mismatch in {domain!r}: {domain_name!r} != {domain.name!r}'
|
|
157
|
+
raise ValueError(msg)
|
|
158
|
+
|
|
159
|
+
def _setup(self) -> None:
|
|
160
|
+
for domain in self._domain_instances.values():
|
|
161
|
+
domain.setup()
|
|
162
|
+
|
|
163
|
+
def _process_doc(
|
|
164
|
+
self, env: BuildEnvironment, docname: str, document: nodes.document
|
|
165
|
+
) -> None:
|
|
166
|
+
for domain in self._domain_instances.values():
|
|
167
|
+
domain.process_doc(env, docname, document)
|
|
168
|
+
|
|
169
|
+
def _clear_doc(self, docname: str) -> None:
|
|
170
|
+
for domain in self._domain_instances.values():
|
|
171
|
+
domain.clear_doc(docname)
|
|
172
|
+
|
|
173
|
+
def _merge_domain_data(
|
|
174
|
+
self, docnames: Set[str], domain_data: dict[str, Any]
|
|
175
|
+
) -> None:
|
|
176
|
+
for domain_name, domain in self._domain_instances.items():
|
|
177
|
+
domain.merge_domaindata(docnames, domain_data[domain_name])
|
|
178
|
+
|
|
179
|
+
def _check_consistency(self) -> None:
|
|
180
|
+
for domain in self._domain_instances.values():
|
|
181
|
+
domain.check_consistency()
|
|
182
|
+
|
|
183
|
+
def __contains__(self, key: str) -> bool:
|
|
184
|
+
return key in self._domain_instances
|
|
185
|
+
|
|
186
|
+
def __eq__(self, other: object) -> bool:
|
|
187
|
+
if not isinstance(other, _DomainsContainer):
|
|
188
|
+
return NotImplemented
|
|
189
|
+
return self._domain_instances == other._domain_instances
|
|
190
|
+
|
|
191
|
+
def __setattr__(self, key: str, value: object) -> None:
|
|
192
|
+
if key in self._core_domains:
|
|
193
|
+
msg = f'{self.__class__.__name__!r} object does not support assignment to {key!r}'
|
|
194
|
+
raise TypeError(msg)
|
|
195
|
+
super().__setattr__(key, value)
|
|
196
|
+
|
|
197
|
+
def __delattr__(self, key: str) -> None:
|
|
198
|
+
if key in self._core_domains:
|
|
199
|
+
msg = f'{self.__class__.__name__!r} object does not support deletion of {key!r}'
|
|
200
|
+
raise TypeError(msg)
|
|
201
|
+
super().__delattr__(key)
|
|
202
|
+
|
|
203
|
+
# Mapping interface: builtin domains
|
|
204
|
+
|
|
205
|
+
@overload
|
|
206
|
+
def __getitem__(self, key: Literal['c']) -> CDomain: ... # NoQA: E704
|
|
207
|
+
|
|
208
|
+
@overload
|
|
209
|
+
def __getitem__(self, key: Literal['cpp']) -> CPPDomain: ... # NoQA: E704
|
|
210
|
+
|
|
211
|
+
@overload
|
|
212
|
+
def __getitem__(self, key: Literal['changeset']) -> ChangeSetDomain: ... # NoQA: E704
|
|
213
|
+
|
|
214
|
+
@overload
|
|
215
|
+
def __getitem__(self, key: Literal['citation']) -> CitationDomain: ... # NoQA: E704
|
|
216
|
+
|
|
217
|
+
@overload
|
|
218
|
+
def __getitem__(self, key: Literal['index']) -> IndexDomain: ... # NoQA: E704
|
|
219
|
+
|
|
220
|
+
@overload
|
|
221
|
+
def __getitem__(self, key: Literal['js']) -> JavaScriptDomain: ... # NoQA: E704
|
|
222
|
+
|
|
223
|
+
@overload
|
|
224
|
+
def __getitem__(self, key: Literal['math']) -> MathDomain: ... # NoQA: E704
|
|
225
|
+
|
|
226
|
+
@overload
|
|
227
|
+
def __getitem__(self, key: Literal['py']) -> PythonDomain: ... # NoQA: E704
|
|
228
|
+
|
|
229
|
+
@overload
|
|
230
|
+
def __getitem__(self, key: Literal['rst']) -> ReSTDomain: ... # NoQA: E704
|
|
231
|
+
|
|
232
|
+
@overload
|
|
233
|
+
def __getitem__(self, key: Literal['std']) -> StandardDomain: ... # NoQA: E704
|
|
234
|
+
|
|
235
|
+
# Mapping interface: first-party domains
|
|
236
|
+
|
|
237
|
+
@overload
|
|
238
|
+
def __getitem__(self, key: Literal['duration']) -> DurationDomain: ... # NoQA: E704
|
|
239
|
+
|
|
240
|
+
@overload
|
|
241
|
+
def __getitem__(self, key: Literal['todo']) -> TodoDomain: ... # NoQA: E704
|
|
242
|
+
|
|
243
|
+
# Mapping interface: third-party domains
|
|
244
|
+
|
|
245
|
+
@overload
|
|
246
|
+
def __getitem__(self, key: str) -> Domain: ... # NoQA: E704
|
|
247
|
+
|
|
248
|
+
def __getitem__(self, key: str) -> Domain:
|
|
249
|
+
if domain := getattr(self, key, None):
|
|
250
|
+
return domain
|
|
251
|
+
return self._domain_instances[key]
|
|
252
|
+
|
|
253
|
+
def __setitem__(self, key: str, value: Domain) -> NoReturn:
|
|
254
|
+
msg = f'{self.__class__.__name__!r} object does not support item assignment'
|
|
255
|
+
raise TypeError(msg)
|
|
256
|
+
|
|
257
|
+
def __delitem__(self, key: str) -> NoReturn:
|
|
258
|
+
msg = f'{self.__class__.__name__!r} object does not support item deletion'
|
|
259
|
+
raise TypeError(msg)
|
|
260
|
+
|
|
261
|
+
def __iter__(self) -> Iterator[str]:
|
|
262
|
+
return iter(self._domain_instances.keys())
|
|
263
|
+
|
|
264
|
+
def __len__(self) -> int:
|
|
265
|
+
return len(self._domain_instances)
|
|
266
|
+
|
|
267
|
+
def get(self, key: str, default: Domain | None = None) -> Domain | None:
|
|
268
|
+
return self._domain_instances.get(key, default)
|
|
269
|
+
|
|
270
|
+
def keys(self) -> Iterable[str]:
|
|
271
|
+
return self._domain_instances.keys()
|
|
272
|
+
|
|
273
|
+
def items(self) -> Iterable[tuple[str, Domain]]:
|
|
274
|
+
return self._domain_instances.items()
|
|
275
|
+
|
|
276
|
+
def values(self) -> Iterable[Domain]:
|
|
277
|
+
return self._domain_instances.values()
|
|
278
|
+
|
|
279
|
+
def sorted(self) -> Iterable[Domain]:
|
|
280
|
+
for _domain_name, domain in sorted(self._domain_instances.items()):
|
|
281
|
+
yield domain
|
sphinx/domains/_index.py
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""Domain indices."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from typing import TYPE_CHECKING, NamedTuple
|
|
7
|
+
|
|
8
|
+
from sphinx.errors import SphinxError
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from collections.abc import Iterable
|
|
12
|
+
|
|
13
|
+
from sphinx.domains import Domain
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class IndexEntry(NamedTuple):
|
|
17
|
+
"""
|
|
18
|
+
An index entry.
|
|
19
|
+
|
|
20
|
+
.. note::
|
|
21
|
+
|
|
22
|
+
The *qualifier* and *description* are not rendered for some output formats,
|
|
23
|
+
such as LaTeX.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
#: The name of the index entry to be displayed.
|
|
27
|
+
name: str
|
|
28
|
+
|
|
29
|
+
#: The sub-entry related type. One of:
|
|
30
|
+
#:
|
|
31
|
+
#: ``0``
|
|
32
|
+
#: A normal entry.
|
|
33
|
+
#: ``1``
|
|
34
|
+
#: An entry with sub-entries.
|
|
35
|
+
#: ``2``
|
|
36
|
+
#: A sub-entry.
|
|
37
|
+
subtype: int
|
|
38
|
+
|
|
39
|
+
#: *docname* where the entry is located.
|
|
40
|
+
docname: str
|
|
41
|
+
|
|
42
|
+
#: Anchor for the entry within `docname`
|
|
43
|
+
anchor: str
|
|
44
|
+
|
|
45
|
+
#: Extra info for the entry.
|
|
46
|
+
extra: str
|
|
47
|
+
|
|
48
|
+
#: Qualifier for the description.
|
|
49
|
+
qualifier: str
|
|
50
|
+
|
|
51
|
+
#: Description for the entry.
|
|
52
|
+
descr: str
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class Index(ABC):
|
|
56
|
+
"""
|
|
57
|
+
An Index is the description for a domain-specific index. To add an index to
|
|
58
|
+
a domain, subclass Index, overriding the three name attributes:
|
|
59
|
+
|
|
60
|
+
* `name` is an identifier used for generating file names.
|
|
61
|
+
It is also used for a hyperlink target for the index. Therefore, users can
|
|
62
|
+
refer the index page using ``ref`` role and a string which is combined
|
|
63
|
+
domain name and ``name`` attribute (ex. ``:ref:`py-modindex```).
|
|
64
|
+
* `localname` is the section title for the index.
|
|
65
|
+
* `shortname` is a short name for the index, for use in the relation bar in
|
|
66
|
+
HTML output. Can be empty to disable entries in the relation bar.
|
|
67
|
+
|
|
68
|
+
and providing a :meth:`generate()` method. Then, add the index class to
|
|
69
|
+
your domain's `indices` list. Extensions can add indices to existing
|
|
70
|
+
domains using :meth:`~sphinx.application.Sphinx.add_index_to_domain()`.
|
|
71
|
+
|
|
72
|
+
.. versionchanged:: 3.0
|
|
73
|
+
|
|
74
|
+
Index pages can be referred by domain name and index name via
|
|
75
|
+
:rst:role:`ref` role.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
name: str
|
|
79
|
+
localname: str
|
|
80
|
+
shortname: str | None = None
|
|
81
|
+
|
|
82
|
+
def __init__(self, domain: Domain) -> None:
|
|
83
|
+
if not self.name or self.localname is None:
|
|
84
|
+
msg = f'Index subclass {self.__class__.__name__} has no valid name or localname'
|
|
85
|
+
raise SphinxError(msg)
|
|
86
|
+
self.domain = domain
|
|
87
|
+
|
|
88
|
+
@abstractmethod
|
|
89
|
+
def generate(
|
|
90
|
+
self,
|
|
91
|
+
docnames: Iterable[str] | None = None,
|
|
92
|
+
) -> tuple[list[tuple[str, list[IndexEntry]]], bool]:
|
|
93
|
+
"""Get entries for the index.
|
|
94
|
+
|
|
95
|
+
If ``docnames`` is given, restrict to entries referring to these
|
|
96
|
+
docnames.
|
|
97
|
+
|
|
98
|
+
The return value is a tuple of ``(content, collapse)``:
|
|
99
|
+
|
|
100
|
+
``collapse``
|
|
101
|
+
A boolean that determines if sub-entries should start collapsed (for
|
|
102
|
+
output formats that support collapsing sub-entries).
|
|
103
|
+
|
|
104
|
+
``content``:
|
|
105
|
+
A sequence of ``(letter, entries)`` tuples, where ``letter`` is the
|
|
106
|
+
"heading" for the given ``entries``, usually the starting letter, and
|
|
107
|
+
``entries`` is a sequence of single entries.
|
|
108
|
+
Each entry is an :py:class:`IndexEntry`.
|
|
109
|
+
"""
|
|
110
|
+
raise NotImplementedError
|
sphinx/domains/c/__init__.py
CHANGED
|
@@ -33,7 +33,7 @@ from sphinx.util.docutils import SphinxDirective, SphinxRole
|
|
|
33
33
|
from sphinx.util.nodes import make_refnode
|
|
34
34
|
|
|
35
35
|
if TYPE_CHECKING:
|
|
36
|
-
from collections.abc import Iterator
|
|
36
|
+
from collections.abc import Iterator, Set
|
|
37
37
|
|
|
38
38
|
from docutils.nodes import Element, Node, TextElement, system_message
|
|
39
39
|
|
|
@@ -526,7 +526,7 @@ class AliasTransform(SphinxTransform):
|
|
|
526
526
|
node.replace_self(signode)
|
|
527
527
|
continue
|
|
528
528
|
|
|
529
|
-
rootSymbol: Symbol = self.env.domains
|
|
529
|
+
rootSymbol: Symbol = self.env.domains.c_domain.data['root_symbol']
|
|
530
530
|
parentSymbol: Symbol | None = rootSymbol.direct_lookup(parentKey)
|
|
531
531
|
if not parentSymbol:
|
|
532
532
|
logger.debug("Target: %s", sig)
|
|
@@ -745,7 +745,7 @@ class CDomain(Domain):
|
|
|
745
745
|
def process_field_xref(self, pnode: pending_xref) -> None:
|
|
746
746
|
pnode.attributes.update(self.env.ref_context)
|
|
747
747
|
|
|
748
|
-
def merge_domaindata(self, docnames:
|
|
748
|
+
def merge_domaindata(self, docnames: Set[str], otherdata: dict[str, Any]) -> None:
|
|
749
749
|
if Symbol.debug_show_tree:
|
|
750
750
|
logger.debug("merge_domaindata:")
|
|
751
751
|
logger.debug("\tself:")
|
sphinx/domains/c/_parser.py
CHANGED
|
@@ -495,9 +495,11 @@ class DefinitionParser(BaseParser):
|
|
|
495
495
|
self.fail("Expected identifier in nested name, "
|
|
496
496
|
"got keyword: %s" % identifier)
|
|
497
497
|
if self.matched_text in self.config.c_extra_keywords:
|
|
498
|
-
msg =
|
|
499
|
-
|
|
500
|
-
|
|
498
|
+
msg = (
|
|
499
|
+
'Expected identifier, got user-defined keyword: %s.'
|
|
500
|
+
' Remove it from c_extra_keywords to allow it as identifier.\n'
|
|
501
|
+
'Currently c_extra_keywords is %s.'
|
|
502
|
+
)
|
|
501
503
|
self.fail(msg % (self.matched_text,
|
|
502
504
|
str(self.config.c_extra_keywords)))
|
|
503
505
|
ident = ASTIdentifier(identifier)
|
|
@@ -670,9 +672,11 @@ class DefinitionParser(BaseParser):
|
|
|
670
672
|
self.fail("Expected identifier, "
|
|
671
673
|
"got keyword: %s" % self.matched_text)
|
|
672
674
|
if self.matched_text in self.config.c_extra_keywords:
|
|
673
|
-
msg =
|
|
674
|
-
|
|
675
|
-
|
|
675
|
+
msg = (
|
|
676
|
+
'Expected identifier, got user-defined keyword: %s. '
|
|
677
|
+
'Remove it from c_extra_keywords to allow it as identifier.\n'
|
|
678
|
+
'Currently c_extra_keywords is %s.'
|
|
679
|
+
)
|
|
676
680
|
self.fail(msg % (self.matched_text,
|
|
677
681
|
str(self.config.c_extra_keywords)))
|
|
678
682
|
identifier = ASTIdentifier(self.matched_text)
|
sphinx/domains/changeset.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Any, ClassVar, NamedTuple
|
|
5
|
+
from typing import TYPE_CHECKING, Any, ClassVar, NamedTuple
|
|
6
6
|
|
|
7
7
|
from docutils import nodes
|
|
8
8
|
|
|
@@ -12,6 +12,8 @@ from sphinx.locale import _
|
|
|
12
12
|
from sphinx.util.docutils import SphinxDirective
|
|
13
13
|
|
|
14
14
|
if TYPE_CHECKING:
|
|
15
|
+
from collections.abc import Set
|
|
16
|
+
|
|
15
17
|
from docutils.nodes import Node
|
|
16
18
|
|
|
17
19
|
from sphinx.application import Sphinx
|
|
@@ -96,7 +98,7 @@ class VersionChange(SphinxDirective):
|
|
|
96
98
|
translatable=False)
|
|
97
99
|
node.append(para)
|
|
98
100
|
|
|
99
|
-
domain =
|
|
101
|
+
domain = self.env.domains.changeset_domain
|
|
100
102
|
domain.note_changeset(node)
|
|
101
103
|
|
|
102
104
|
ret: list[Node] = [node]
|
|
@@ -132,7 +134,7 @@ class ChangeSetDomain(Domain):
|
|
|
132
134
|
if changeset.docname == docname:
|
|
133
135
|
changes.remove(changeset)
|
|
134
136
|
|
|
135
|
-
def merge_domaindata(self, docnames:
|
|
137
|
+
def merge_domaindata(self, docnames: Set[str], otherdata: dict[str, Any]) -> None:
|
|
136
138
|
# XXX duplicates?
|
|
137
139
|
for version, otherchanges in otherdata['changes'].items():
|
|
138
140
|
changes = self.changesets.setdefault(version, [])
|
sphinx/domains/citation.py
CHANGED
|
@@ -14,6 +14,8 @@ from sphinx.util import logging
|
|
|
14
14
|
from sphinx.util.nodes import copy_source_info, make_refnode
|
|
15
15
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
|
+
from collections.abc import Set
|
|
18
|
+
|
|
17
19
|
from docutils.nodes import Element
|
|
18
20
|
|
|
19
21
|
from sphinx.application import Sphinx
|
|
@@ -53,7 +55,7 @@ class CitationDomain(Domain):
|
|
|
53
55
|
elif docname in docnames:
|
|
54
56
|
docnames.remove(docname)
|
|
55
57
|
|
|
56
|
-
def merge_domaindata(self, docnames:
|
|
58
|
+
def merge_domaindata(self, docnames: Set[str], otherdata: dict[str, Any]) -> None:
|
|
57
59
|
# XXX duplicates?
|
|
58
60
|
for key, data in otherdata['citations'].items():
|
|
59
61
|
if data[0] in docnames:
|
|
@@ -108,7 +110,7 @@ class CitationDefinitionTransform(SphinxTransform):
|
|
|
108
110
|
default_priority = 619
|
|
109
111
|
|
|
110
112
|
def apply(self, **kwargs: Any) -> None:
|
|
111
|
-
domain =
|
|
113
|
+
domain = self.env.domains.citation_domain
|
|
112
114
|
for node in self.document.findall(nodes.citation):
|
|
113
115
|
# register citation node to domain
|
|
114
116
|
node['docname'] = self.env.docname
|
|
@@ -128,7 +130,7 @@ class CitationReferenceTransform(SphinxTransform):
|
|
|
128
130
|
default_priority = 619
|
|
129
131
|
|
|
130
132
|
def apply(self, **kwargs: Any) -> None:
|
|
131
|
-
domain =
|
|
133
|
+
domain = self.env.domains.citation_domain
|
|
132
134
|
for node in self.document.findall(nodes.citation_reference):
|
|
133
135
|
target = node.astext()
|
|
134
136
|
ref = pending_xref(target, refdomain='citation', reftype='ref',
|
sphinx/domains/cpp/__init__.py
CHANGED
|
@@ -37,7 +37,7 @@ from sphinx.util.docutils import SphinxDirective, SphinxRole
|
|
|
37
37
|
from sphinx.util.nodes import make_refnode
|
|
38
38
|
|
|
39
39
|
if TYPE_CHECKING:
|
|
40
|
-
from collections.abc import Iterator
|
|
40
|
+
from collections.abc import Iterator, Set
|
|
41
41
|
|
|
42
42
|
from docutils.nodes import Element, Node, TextElement, system_message
|
|
43
43
|
|
|
@@ -661,7 +661,7 @@ class AliasTransform(SphinxTransform):
|
|
|
661
661
|
node.replace_self(signode)
|
|
662
662
|
continue
|
|
663
663
|
|
|
664
|
-
rootSymbol: Symbol = self.env.domains
|
|
664
|
+
rootSymbol: Symbol = self.env.domains.cpp_domain.data['root_symbol']
|
|
665
665
|
parentSymbol: Symbol = rootSymbol.direct_lookup(parentKey)
|
|
666
666
|
if not parentSymbol:
|
|
667
667
|
logger.debug("Target: %s", sig)
|
|
@@ -784,10 +784,9 @@ class CPPXRefRole(XRefRole):
|
|
|
784
784
|
if refnode['reftype'] == 'any':
|
|
785
785
|
# Assume the removal part of fix_parens for :any: refs.
|
|
786
786
|
# The addition part is done with the reference is resolved.
|
|
787
|
-
if not has_explicit_title
|
|
788
|
-
title = title
|
|
789
|
-
|
|
790
|
-
target = target[:-2]
|
|
787
|
+
if not has_explicit_title:
|
|
788
|
+
title = title.removesuffix('()')
|
|
789
|
+
target = target.removesuffix('()')
|
|
791
790
|
# TODO: should this really be here?
|
|
792
791
|
if not has_explicit_title:
|
|
793
792
|
target = target.lstrip('~') # only has a meaning for the title
|
|
@@ -934,7 +933,7 @@ class CPPDomain(Domain):
|
|
|
934
933
|
def process_field_xref(self, pnode: pending_xref) -> None:
|
|
935
934
|
pnode.attributes.update(self.env.ref_context)
|
|
936
935
|
|
|
937
|
-
def merge_domaindata(self, docnames:
|
|
936
|
+
def merge_domaindata(self, docnames: Set[str], otherdata: dict[str, Any]) -> None:
|
|
938
937
|
if Symbol.debug_show_tree:
|
|
939
938
|
logger.debug("merge_domaindata:")
|
|
940
939
|
logger.debug("\tself:")
|
|
@@ -1036,8 +1035,7 @@ class CPPDomain(Domain):
|
|
|
1036
1035
|
raise NoUri(txtName, typ)
|
|
1037
1036
|
return None, None
|
|
1038
1037
|
|
|
1039
|
-
|
|
1040
|
-
typ = typ[4:]
|
|
1038
|
+
typ = typ.removeprefix('cpp:')
|
|
1041
1039
|
declTyp = s.declaration.objectType
|
|
1042
1040
|
|
|
1043
1041
|
def checkType() -> bool:
|
|
@@ -1093,8 +1091,8 @@ class CPPDomain(Domain):
|
|
|
1093
1091
|
if typ == 'any' and displayName.endswith('()'):
|
|
1094
1092
|
addParen += 1
|
|
1095
1093
|
elif typ == 'func':
|
|
1096
|
-
if
|
|
1097
|
-
title = title
|
|
1094
|
+
if not displayName.endswith('()'):
|
|
1095
|
+
title = title.removesuffix('()')
|
|
1098
1096
|
else:
|
|
1099
1097
|
if displayName.endswith('()'):
|
|
1100
1098
|
addParen += 1
|
sphinx/domains/cpp/_parser.py
CHANGED
|
@@ -1263,7 +1263,7 @@ class DefinitionParser(BaseParser):
|
|
|
1263
1263
|
if self.skip_string('('):
|
|
1264
1264
|
expr = self._parse_constant_expression(inTemplate=False)
|
|
1265
1265
|
if not expr:
|
|
1266
|
-
self.fail("Expected constant expression after '('"
|
|
1266
|
+
self.fail("Expected constant expression after '('"
|
|
1267
1267
|
" in explicit specifier.")
|
|
1268
1268
|
self.skip_ws()
|
|
1269
1269
|
if not self.skip_string(')'):
|
|
@@ -1972,13 +1972,14 @@ class DefinitionParser(BaseParser):
|
|
|
1972
1972
|
if numArgs > numParams:
|
|
1973
1973
|
numExtra = numArgs - numParams
|
|
1974
1974
|
if not fullSpecShorthand and not isMemberInstantiation:
|
|
1975
|
-
msg =
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1975
|
+
msg = (
|
|
1976
|
+
f'Too many template argument lists compared to parameter lists. '
|
|
1977
|
+
f'Argument lists: {numArgs:d}, Parameter lists: {numParams:d}, '
|
|
1978
|
+
f'Extra empty parameters lists prepended: {numExtra:d}. '
|
|
1979
|
+
'Declaration:\n\t'
|
|
1980
|
+
)
|
|
1980
1981
|
if templatePrefix:
|
|
1981
|
-
msg += "
|
|
1982
|
+
msg += f"{templatePrefix}\n\t"
|
|
1982
1983
|
msg += str(nestedName)
|
|
1983
1984
|
self.warn(msg)
|
|
1984
1985
|
|
sphinx/domains/index.py
CHANGED
|
@@ -15,7 +15,7 @@ from sphinx.util.index_entries import split_index_msg
|
|
|
15
15
|
from sphinx.util.nodes import process_index_entry
|
|
16
16
|
|
|
17
17
|
if TYPE_CHECKING:
|
|
18
|
-
from collections.abc import
|
|
18
|
+
from collections.abc import Set
|
|
19
19
|
|
|
20
20
|
from docutils.nodes import Node, system_message
|
|
21
21
|
|
|
@@ -28,7 +28,7 @@ logger = logging.getLogger(__name__)
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class IndexDomain(Domain):
|
|
31
|
-
"""
|
|
31
|
+
"""Index domain."""
|
|
32
32
|
|
|
33
33
|
name = 'index'
|
|
34
34
|
label = 'index'
|
|
@@ -40,7 +40,7 @@ class IndexDomain(Domain):
|
|
|
40
40
|
def clear_doc(self, docname: str) -> None:
|
|
41
41
|
self.entries.pop(docname, None)
|
|
42
42
|
|
|
43
|
-
def merge_domaindata(self, docnames:
|
|
43
|
+
def merge_domaindata(self, docnames: Set[str], otherdata: dict[str, Any]) -> None:
|
|
44
44
|
for docname in docnames:
|
|
45
45
|
self.entries[docname] = otherdata['entries'][docname]
|
|
46
46
|
|