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
sphinx/writers/html5.py
CHANGED
|
@@ -40,7 +40,7 @@ def multiply_length(length: str, scale: int) -> str:
|
|
|
40
40
|
return length
|
|
41
41
|
amount, unit = matched.groups()
|
|
42
42
|
result = float(amount) * scale / 100
|
|
43
|
-
return f
|
|
43
|
+
return f'{int(result)}{unit}'
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
@@ -168,7 +168,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
168
168
|
self.param_group_index = 0
|
|
169
169
|
# Counts as what we call a parameter group either a required parameter, or a
|
|
170
170
|
# set of contiguous optional ones.
|
|
171
|
-
self.list_is_required_param = [
|
|
171
|
+
self.list_is_required_param = [
|
|
172
|
+
isinstance(c, parameter_group) for c in node.children
|
|
173
|
+
]
|
|
172
174
|
# How many required parameters are left.
|
|
173
175
|
self.required_params_left = sum(self.list_is_required_param)
|
|
174
176
|
self.param_separator = node.child_text_separator
|
|
@@ -205,7 +207,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
205
207
|
#
|
|
206
208
|
def visit_desc_parameter(self, node: Element) -> None:
|
|
207
209
|
on_separate_line = self.multi_line_parameter_list
|
|
208
|
-
if on_separate_line and not (
|
|
210
|
+
if on_separate_line and not (
|
|
211
|
+
self.is_first_param and self.optional_param_level > 0
|
|
212
|
+
):
|
|
209
213
|
self.body.append(self.starttag(node, 'dd', ''))
|
|
210
214
|
if self.is_first_param:
|
|
211
215
|
self.is_first_param = False
|
|
@@ -223,13 +227,18 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
223
227
|
self.body.append('</em>')
|
|
224
228
|
is_required = self.list_is_required_param[self.param_group_index]
|
|
225
229
|
if self.multi_line_parameter_list:
|
|
226
|
-
|
|
230
|
+
len_lirp = len(self.list_is_required_param)
|
|
231
|
+
is_last_group = self.param_group_index + 1 == len_lirp
|
|
227
232
|
next_is_required = (
|
|
228
233
|
not is_last_group
|
|
229
234
|
and self.list_is_required_param[self.param_group_index + 1]
|
|
230
|
-
)
|
|
235
|
+
) # fmt: skip
|
|
231
236
|
opt_param_left_at_level = self.params_left_at_level > 0
|
|
232
|
-
if
|
|
237
|
+
if (
|
|
238
|
+
opt_param_left_at_level
|
|
239
|
+
or is_required
|
|
240
|
+
and (is_last_group or next_is_required)
|
|
241
|
+
):
|
|
233
242
|
self.body.append(self.param_separator)
|
|
234
243
|
self.body.append('</dd>\n')
|
|
235
244
|
|
|
@@ -246,8 +255,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
246
255
|
self.depart_desc_parameter(node)
|
|
247
256
|
|
|
248
257
|
def visit_desc_optional(self, node: Element) -> None:
|
|
249
|
-
self.params_left_at_level = sum(
|
|
250
|
-
|
|
258
|
+
self.params_left_at_level = sum(
|
|
259
|
+
isinstance(c, addnodes.desc_parameter) for c in node.children
|
|
260
|
+
)
|
|
251
261
|
self.optional_param_level += 1
|
|
252
262
|
self.max_optional_param_level = self.optional_param_level
|
|
253
263
|
if self.multi_line_parameter_list:
|
|
@@ -310,12 +320,16 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
310
320
|
atts['class'] += ' external'
|
|
311
321
|
if 'refuri' in node:
|
|
312
322
|
atts['href'] = node['refuri'] or '#'
|
|
313
|
-
if
|
|
323
|
+
if (
|
|
324
|
+
self.settings.cloak_email_addresses
|
|
325
|
+
and atts['href'].startswith('mailto:')
|
|
326
|
+
): # fmt: skip
|
|
314
327
|
atts['href'] = self.cloak_mailto(atts['href'])
|
|
315
328
|
self.in_mailto = True
|
|
316
329
|
else:
|
|
317
|
-
assert
|
|
318
|
-
|
|
330
|
+
assert (
|
|
331
|
+
'refid' in node
|
|
332
|
+
), 'References must have "refuri" or "refid" attribute.'
|
|
319
333
|
atts['href'] = '#' + node['refid']
|
|
320
334
|
if not isinstance(node.parent, nodes.TextElement):
|
|
321
335
|
assert len(node) == 1 and isinstance(node[0], nodes.image) # NoQA: PT018
|
|
@@ -329,8 +343,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
329
343
|
self.body.append(self.starttag(node, 'a', '', **atts))
|
|
330
344
|
|
|
331
345
|
if node.get('secnumber'):
|
|
332
|
-
self.body.append(
|
|
333
|
-
|
|
346
|
+
self.body.append(
|
|
347
|
+
('%s' + self.secnumber_suffix) % '.'.join(map(str, node['secnumber']))
|
|
348
|
+
)
|
|
334
349
|
|
|
335
350
|
def visit_number_reference(self, node: Element) -> None:
|
|
336
351
|
self.visit_reference(node)
|
|
@@ -344,8 +359,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
344
359
|
|
|
345
360
|
# overwritten
|
|
346
361
|
def visit_admonition(self, node: Element, name: str = '') -> None:
|
|
347
|
-
self.body.append(self.starttag(
|
|
348
|
-
node, 'div', CLASS=('admonition ' + name)))
|
|
362
|
+
self.body.append(self.starttag(node, 'div', CLASS=('admonition ' + name)))
|
|
349
363
|
if name:
|
|
350
364
|
node.insert(0, nodes.title(name, admonitionlabels[name]))
|
|
351
365
|
|
|
@@ -365,9 +379,10 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
365
379
|
if isinstance(node.parent, nodes.section):
|
|
366
380
|
if self.builder.name == 'singlehtml':
|
|
367
381
|
docname = self.docnames[-1]
|
|
368
|
-
anchorname = "{}/#{
|
|
382
|
+
anchorname = f"{docname}/#{node.parent['ids'][0]}"
|
|
369
383
|
if anchorname not in self.builder.secnumbers:
|
|
370
|
-
|
|
384
|
+
# try first heading which has no anchor
|
|
385
|
+
anchorname = f'{docname}/'
|
|
371
386
|
else:
|
|
372
387
|
anchorname = '#' + node.parent['ids'][0]
|
|
373
388
|
if anchorname not in self.builder.secnumbers:
|
|
@@ -381,13 +396,15 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
381
396
|
def add_secnumber(self, node: Element) -> None:
|
|
382
397
|
secnumber = self.get_secnumber(node)
|
|
383
398
|
if secnumber:
|
|
384
|
-
self.body.append(
|
|
385
|
-
|
|
399
|
+
self.body.append(
|
|
400
|
+
'<span class="section-number">%s</span>'
|
|
401
|
+
% ('.'.join(map(str, secnumber)) + self.secnumber_suffix)
|
|
402
|
+
)
|
|
386
403
|
|
|
387
404
|
def add_fignumber(self, node: Element) -> None:
|
|
388
405
|
def append_fignumber(figtype: str, figure_id: str) -> None:
|
|
389
406
|
if self.builder.name == 'singlehtml':
|
|
390
|
-
key = f
|
|
407
|
+
key = f'{self.docnames[-1]}/{figtype}'
|
|
391
408
|
else:
|
|
392
409
|
key = figtype
|
|
393
410
|
|
|
@@ -402,7 +419,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
402
419
|
self.body.append(prefix % '.'.join(map(str, numbers)) + ' ')
|
|
403
420
|
self.body.append('</span>')
|
|
404
421
|
|
|
405
|
-
figtype = self.builder.env.domains
|
|
422
|
+
figtype = self.builder.env.domains.standard_domain.get_enumerable_node_type(
|
|
423
|
+
node
|
|
424
|
+
)
|
|
406
425
|
if figtype:
|
|
407
426
|
if len(node['ids']) == 0:
|
|
408
427
|
msg = __('Any IDs not assigned for %s node') % node.tagname
|
|
@@ -466,8 +485,13 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
466
485
|
|
|
467
486
|
# overwritten
|
|
468
487
|
def visit_title(self, node: Element) -> None:
|
|
469
|
-
if
|
|
470
|
-
|
|
488
|
+
if (
|
|
489
|
+
isinstance(node.parent, addnodes.compact_paragraph)
|
|
490
|
+
and node.parent.get('toctree')
|
|
491
|
+
): # fmt: skip
|
|
492
|
+
self.body.append(
|
|
493
|
+
self.starttag(node, 'p', '', CLASS='caption', ROLE='heading')
|
|
494
|
+
)
|
|
471
495
|
self.body.append('<span class="caption-text">')
|
|
472
496
|
self.context.append('</span></p>\n')
|
|
473
497
|
else:
|
|
@@ -478,11 +502,11 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
478
502
|
self.body.append('<span class="caption-text">')
|
|
479
503
|
# Partially revert https://sourceforge.net/p/docutils/code/9562/
|
|
480
504
|
if (
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
505
|
+
isinstance(node.parent, nodes.topic)
|
|
506
|
+
and self.settings.toc_backlinks
|
|
507
|
+
and 'contents' in node.parent['classes']
|
|
508
|
+
and self.body[-1].startswith('<a ')
|
|
509
|
+
# TODO: only remove for EPUB
|
|
486
510
|
):
|
|
487
511
|
# remove <a class="reference internal" href="#top">
|
|
488
512
|
self.body.pop()
|
|
@@ -490,17 +514,22 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
490
514
|
|
|
491
515
|
def depart_title(self, node: Element) -> None:
|
|
492
516
|
close_tag = self.context[-1]
|
|
493
|
-
if (
|
|
494
|
-
|
|
517
|
+
if (
|
|
518
|
+
self.config.html_permalinks
|
|
519
|
+
and self.builder.add_permalinks
|
|
520
|
+
and node.parent.hasattr('ids')
|
|
521
|
+
and node.parent['ids']
|
|
522
|
+
):
|
|
495
523
|
# add permalink anchor
|
|
496
524
|
if close_tag.startswith('</h'):
|
|
497
525
|
self.add_permalink_ref(node.parent, _('Link to this heading'))
|
|
498
526
|
elif close_tag.startswith('</a></h'):
|
|
499
|
-
self.body.append(
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
527
|
+
self.body.append(
|
|
528
|
+
'</a><a class="headerlink" href="#%s" ' % node.parent['ids'][0]
|
|
529
|
+
+ 'title="{}">{}'.format(
|
|
530
|
+
_('Link to this heading'), self.config.html_permalinks_icon
|
|
531
|
+
)
|
|
532
|
+
)
|
|
504
533
|
elif isinstance(node.parent, nodes.table):
|
|
505
534
|
self.body.append('</span>')
|
|
506
535
|
self.add_permalink_ref(node.parent, _('Link to this table'))
|
|
@@ -520,7 +549,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
520
549
|
__('unsupported rubric heading level: %s'),
|
|
521
550
|
level,
|
|
522
551
|
type='html',
|
|
523
|
-
location=node
|
|
552
|
+
location=node,
|
|
524
553
|
)
|
|
525
554
|
super().visit_rubric(node)
|
|
526
555
|
else:
|
|
@@ -549,16 +578,24 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
549
578
|
linenos = self.config.html_codeblock_linenos_style
|
|
550
579
|
|
|
551
580
|
highlighted = self.highlighter.highlight_block(
|
|
552
|
-
node.rawsource,
|
|
553
|
-
|
|
581
|
+
node.rawsource,
|
|
582
|
+
lang,
|
|
583
|
+
opts=opts,
|
|
584
|
+
linenos=linenos,
|
|
585
|
+
location=node,
|
|
586
|
+
**highlight_args,
|
|
587
|
+
)
|
|
588
|
+
starttag = self.starttag(
|
|
589
|
+
node, 'div', suffix='', CLASS='highlight-%s notranslate' % lang
|
|
554
590
|
)
|
|
555
|
-
starttag = self.starttag(node, 'div', suffix='',
|
|
556
|
-
CLASS='highlight-%s notranslate' % lang)
|
|
557
591
|
self.body.append(starttag + highlighted + '</div>\n')
|
|
558
592
|
raise nodes.SkipNode
|
|
559
593
|
|
|
560
594
|
def visit_caption(self, node: Element) -> None:
|
|
561
|
-
if
|
|
595
|
+
if (
|
|
596
|
+
isinstance(node.parent, nodes.container)
|
|
597
|
+
and node.parent.get('literal_block')
|
|
598
|
+
): # fmt: skip
|
|
562
599
|
self.body.append('<div class="code-block-caption">')
|
|
563
600
|
else:
|
|
564
601
|
super().visit_caption(node)
|
|
@@ -569,14 +606,20 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
569
606
|
self.body.append('</span>')
|
|
570
607
|
|
|
571
608
|
# append permalink if available
|
|
572
|
-
if
|
|
609
|
+
if (
|
|
610
|
+
isinstance(node.parent, nodes.container)
|
|
611
|
+
and node.parent.get('literal_block')
|
|
612
|
+
): # fmt: skip
|
|
573
613
|
self.add_permalink_ref(node.parent, _('Link to this code'))
|
|
574
614
|
elif isinstance(node.parent, nodes.figure):
|
|
575
615
|
self.add_permalink_ref(node.parent, _('Link to this image'))
|
|
576
616
|
elif node.parent.get('toctree'):
|
|
577
617
|
self.add_permalink_ref(node.parent.parent, _('Link to this toctree'))
|
|
578
618
|
|
|
579
|
-
if
|
|
619
|
+
if (
|
|
620
|
+
isinstance(node.parent, nodes.container)
|
|
621
|
+
and node.parent.get('literal_block')
|
|
622
|
+
): # fmt: skip
|
|
580
623
|
self.body.append('</div>\n')
|
|
581
624
|
else:
|
|
582
625
|
super().depart_caption(node)
|
|
@@ -594,26 +637,29 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
594
637
|
# overwritten
|
|
595
638
|
def visit_literal(self, node: Element) -> None:
|
|
596
639
|
if 'kbd' in node['classes']:
|
|
597
|
-
self.body.append(
|
|
598
|
-
|
|
640
|
+
self.body.append(
|
|
641
|
+
self.starttag(node, 'kbd', '', CLASS='docutils literal notranslate')
|
|
642
|
+
)
|
|
599
643
|
return
|
|
600
|
-
lang = node.get(
|
|
644
|
+
lang = node.get('language', None)
|
|
601
645
|
if 'code' not in node['classes'] or not lang:
|
|
602
|
-
self.body.append(
|
|
603
|
-
|
|
646
|
+
self.body.append(
|
|
647
|
+
self.starttag(node, 'code', '', CLASS='docutils literal notranslate')
|
|
648
|
+
)
|
|
604
649
|
self.protect_literal_text += 1
|
|
605
650
|
return
|
|
606
651
|
|
|
607
652
|
opts = self.config.highlight_options.get(lang, {})
|
|
608
653
|
highlighted = self.highlighter.highlight_block(
|
|
609
|
-
node.astext(), lang, opts=opts, location=node, nowrap=True
|
|
654
|
+
node.astext(), lang, opts=opts, location=node, nowrap=True
|
|
655
|
+
)
|
|
610
656
|
starttag = self.starttag(
|
|
611
657
|
node,
|
|
612
|
-
|
|
613
|
-
suffix=
|
|
614
|
-
CLASS=
|
|
658
|
+
'code',
|
|
659
|
+
suffix='',
|
|
660
|
+
CLASS='docutils literal highlight highlight-%s' % lang,
|
|
615
661
|
)
|
|
616
|
-
self.body.append(starttag + highlighted.strip() +
|
|
662
|
+
self.body.append(starttag + highlighted.strip() + '</code>')
|
|
617
663
|
raise nodes.SkipNode
|
|
618
664
|
|
|
619
665
|
def depart_literal(self, node: Element) -> None:
|
|
@@ -651,8 +697,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
651
697
|
pass
|
|
652
698
|
|
|
653
699
|
def visit_centered(self, node: Element) -> None:
|
|
654
|
-
self.body.append(self.starttag(node, 'p', CLASS=
|
|
655
|
-
'<strong>')
|
|
700
|
+
self.body.append(self.starttag(node, 'p', CLASS='centered') + '<strong>')
|
|
656
701
|
|
|
657
702
|
def depart_centered(self, node: Element) -> None:
|
|
658
703
|
self.body.append('</strong></p>')
|
|
@@ -664,8 +709,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
664
709
|
pass
|
|
665
710
|
|
|
666
711
|
def visit_download_reference(self, node: Element) -> None:
|
|
667
|
-
atts = {'class': 'reference download',
|
|
668
|
-
'download': ''}
|
|
712
|
+
atts = {'class': 'reference download', 'download': ''}
|
|
669
713
|
|
|
670
714
|
if not self.builder.download_support:
|
|
671
715
|
self.context.append('')
|
|
@@ -676,8 +720,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
676
720
|
self.context.append('</a>')
|
|
677
721
|
elif 'filename' in node:
|
|
678
722
|
atts['class'] += ' internal'
|
|
679
|
-
atts['href'] = posixpath.join(
|
|
680
|
-
|
|
723
|
+
atts['href'] = posixpath.join(
|
|
724
|
+
self.builder.dlpath, urllib.parse.quote(node['filename'])
|
|
725
|
+
)
|
|
681
726
|
self.body.append(self.starttag(node, 'a', '', **atts))
|
|
682
727
|
self.context.append('</a>')
|
|
683
728
|
else:
|
|
@@ -698,8 +743,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
698
743
|
olduri = node['uri']
|
|
699
744
|
# rewrite the URI if the environment knows about it
|
|
700
745
|
if olduri in self.builder.images:
|
|
701
|
-
node['uri'] = posixpath.join(
|
|
702
|
-
|
|
746
|
+
node['uri'] = posixpath.join(
|
|
747
|
+
self.builder.imgpath, urllib.parse.quote(self.builder.images[olduri])
|
|
748
|
+
)
|
|
703
749
|
|
|
704
750
|
if 'scale' in node:
|
|
705
751
|
# Try to figure out image height and width. Docutils does that too,
|
|
@@ -873,7 +919,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
873
919
|
|
|
874
920
|
atts = {}
|
|
875
921
|
classes = [cls.strip(' \t\n') for cls in self.settings.table_style.split(',')]
|
|
876
|
-
classes.insert(0,
|
|
922
|
+
classes.insert(0, 'docutils') # compat
|
|
877
923
|
|
|
878
924
|
# set align-default if align not specified to give a default style
|
|
879
925
|
classes.append('align-%s' % node.get('align', 'default'))
|
|
@@ -942,6 +988,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
942
988
|
def visit_footnote_reference(self, node: Element) -> None:
|
|
943
989
|
href = '#' + node['refid']
|
|
944
990
|
classes = ['footnote-reference', self.settings.footnote_references]
|
|
945
|
-
self.body.append(
|
|
946
|
-
|
|
991
|
+
self.body.append(
|
|
992
|
+
self.starttag(
|
|
993
|
+
node, 'a', suffix='', classes=classes, role='doc-noteref', href=href
|
|
994
|
+
)
|
|
995
|
+
)
|
|
947
996
|
self.body.append('<span class="fn-bracket">[</span>')
|