Sphinx 8.1.2__py3-none-any.whl → 8.2.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 -4
- sphinx/__main__.py +2 -0
- sphinx/_cli/__init__.py +2 -5
- sphinx/_cli/util/colour.py +34 -11
- sphinx/_cli/util/errors.py +128 -61
- sphinx/addnodes.py +51 -35
- sphinx/application.py +362 -230
- sphinx/builders/__init__.py +87 -64
- sphinx/builders/_epub_base.py +65 -56
- sphinx/builders/changes.py +17 -23
- sphinx/builders/dirhtml.py +8 -13
- sphinx/builders/epub3.py +70 -38
- sphinx/builders/gettext.py +93 -73
- sphinx/builders/html/__init__.py +240 -186
- sphinx/builders/html/_assets.py +9 -2
- sphinx/builders/html/_build_info.py +3 -0
- sphinx/builders/latex/__init__.py +64 -54
- sphinx/builders/latex/constants.py +14 -11
- sphinx/builders/latex/nodes.py +2 -0
- sphinx/builders/latex/theming.py +8 -9
- sphinx/builders/latex/transforms.py +7 -5
- sphinx/builders/linkcheck.py +193 -149
- sphinx/builders/manpage.py +17 -17
- sphinx/builders/singlehtml.py +28 -16
- sphinx/builders/texinfo.py +28 -21
- sphinx/builders/text.py +10 -15
- sphinx/builders/xml.py +10 -19
- sphinx/cmd/build.py +49 -119
- sphinx/cmd/make_mode.py +35 -31
- sphinx/cmd/quickstart.py +78 -62
- sphinx/config.py +265 -163
- sphinx/directives/__init__.py +51 -54
- sphinx/directives/admonitions.py +107 -0
- sphinx/directives/code.py +24 -19
- sphinx/directives/other.py +21 -42
- sphinx/directives/patches.py +28 -16
- sphinx/domains/__init__.py +54 -31
- sphinx/domains/_domains_container.py +22 -17
- sphinx/domains/_index.py +5 -8
- sphinx/domains/c/__init__.py +366 -245
- sphinx/domains/c/_ast.py +378 -256
- sphinx/domains/c/_ids.py +89 -31
- sphinx/domains/c/_parser.py +283 -214
- sphinx/domains/c/_symbol.py +269 -198
- sphinx/domains/changeset.py +39 -24
- sphinx/domains/citation.py +54 -24
- sphinx/domains/cpp/__init__.py +517 -362
- sphinx/domains/cpp/_ast.py +999 -682
- sphinx/domains/cpp/_ids.py +133 -65
- sphinx/domains/cpp/_parser.py +746 -588
- sphinx/domains/cpp/_symbol.py +692 -489
- sphinx/domains/index.py +10 -8
- sphinx/domains/javascript.py +152 -74
- sphinx/domains/math.py +50 -40
- sphinx/domains/python/__init__.py +402 -211
- sphinx/domains/python/_annotations.py +134 -61
- sphinx/domains/python/_object.py +155 -68
- sphinx/domains/rst.py +94 -49
- sphinx/domains/std/__init__.py +510 -249
- sphinx/environment/__init__.py +345 -61
- sphinx/environment/adapters/asset.py +7 -1
- sphinx/environment/adapters/indexentries.py +15 -20
- sphinx/environment/adapters/toctree.py +19 -9
- sphinx/environment/collectors/__init__.py +3 -1
- sphinx/environment/collectors/asset.py +18 -15
- sphinx/environment/collectors/dependencies.py +8 -10
- sphinx/environment/collectors/metadata.py +6 -4
- sphinx/environment/collectors/title.py +3 -1
- sphinx/environment/collectors/toctree.py +4 -4
- sphinx/errors.py +1 -3
- sphinx/events.py +4 -4
- sphinx/ext/apidoc/__init__.py +66 -0
- sphinx/ext/apidoc/__main__.py +9 -0
- sphinx/ext/apidoc/_cli.py +356 -0
- sphinx/ext/apidoc/_extension.py +262 -0
- sphinx/ext/apidoc/_generate.py +356 -0
- sphinx/ext/apidoc/_shared.py +99 -0
- sphinx/ext/autodoc/__init__.py +837 -483
- sphinx/ext/autodoc/directive.py +57 -21
- sphinx/ext/autodoc/importer.py +184 -67
- sphinx/ext/autodoc/mock.py +25 -10
- sphinx/ext/autodoc/preserve_defaults.py +17 -9
- sphinx/ext/autodoc/type_comment.py +56 -29
- sphinx/ext/autodoc/typehints.py +49 -26
- sphinx/ext/autosectionlabel.py +28 -11
- sphinx/ext/autosummary/__init__.py +281 -142
- sphinx/ext/autosummary/generate.py +121 -51
- sphinx/ext/coverage.py +152 -91
- sphinx/ext/doctest.py +169 -101
- sphinx/ext/duration.py +12 -6
- sphinx/ext/extlinks.py +33 -21
- sphinx/ext/githubpages.py +8 -8
- sphinx/ext/graphviz.py +175 -109
- sphinx/ext/ifconfig.py +11 -6
- sphinx/ext/imgconverter.py +48 -25
- sphinx/ext/imgmath.py +127 -97
- sphinx/ext/inheritance_diagram.py +177 -103
- sphinx/ext/intersphinx/__init__.py +22 -13
- sphinx/ext/intersphinx/__main__.py +3 -1
- sphinx/ext/intersphinx/_cli.py +18 -14
- sphinx/ext/intersphinx/_load.py +91 -82
- sphinx/ext/intersphinx/_resolve.py +108 -74
- sphinx/ext/intersphinx/_shared.py +2 -2
- sphinx/ext/linkcode.py +28 -12
- sphinx/ext/mathjax.py +60 -29
- sphinx/ext/napoleon/__init__.py +19 -7
- sphinx/ext/napoleon/docstring.py +229 -231
- sphinx/ext/todo.py +44 -49
- sphinx/ext/viewcode.py +105 -57
- sphinx/extension.py +3 -1
- sphinx/highlighting.py +13 -7
- sphinx/io.py +9 -13
- sphinx/jinja2glue.py +29 -26
- sphinx/locale/__init__.py +8 -9
- sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ar/LC_MESSAGES/sphinx.po +2155 -2050
- sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bg/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bn/LC_MESSAGES/sphinx.po +2175 -2070
- sphinx/locale/ca/LC_MESSAGES/sphinx.js +3 -3
- sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ca/LC_MESSAGES/sphinx.po +2690 -2585
- sphinx/locale/ca@valencia/LC_MESSAGES/sphinx.js +63 -0
- sphinx/locale/ca@valencia/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ca@valencia/LC_MESSAGES/sphinx.po +4216 -0
- sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cak/LC_MESSAGES/sphinx.po +2096 -1991
- sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cs/LC_MESSAGES/sphinx.po +2248 -2143
- sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cy/LC_MESSAGES/sphinx.po +2201 -2096
- sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/da/LC_MESSAGES/sphinx.po +2282 -2177
- sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de/LC_MESSAGES/sphinx.po +2261 -2156
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/el/LC_MESSAGES/sphinx.po +2604 -2499
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +2631 -2526
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eo/LC_MESSAGES/sphinx.po +2078 -1973
- sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es/LC_MESSAGES/sphinx.po +2633 -2528
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/et/LC_MESSAGES/sphinx.po +2449 -2344
- sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eu/LC_MESSAGES/sphinx.po +2241 -2136
- sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fa/LC_MESSAGES/sphinx.po +504 -500
- sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fi/LC_MESSAGES/sphinx.po +499 -495
- sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr/LC_MESSAGES/sphinx.po +513 -509
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +499 -495
- sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/gl/LC_MESSAGES/sphinx.po +2644 -2539
- sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/he/LC_MESSAGES/sphinx.po +499 -495
- sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi/LC_MESSAGES/sphinx.po +504 -500
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +499 -495
- sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hr/LC_MESSAGES/sphinx.po +501 -497
- sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hu/LC_MESSAGES/sphinx.po +499 -495
- sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/id/LC_MESSAGES/sphinx.po +2609 -2504
- sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/is/LC_MESSAGES/sphinx.po +499 -495
- sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/it/LC_MESSAGES/sphinx.po +2265 -2160
- sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ja/LC_MESSAGES/sphinx.po +2621 -2516
- sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ka/LC_MESSAGES/sphinx.po +2567 -2462
- sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ko/LC_MESSAGES/sphinx.po +2631 -2526
- sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lt/LC_MESSAGES/sphinx.po +2214 -2109
- sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lv/LC_MESSAGES/sphinx.po +2218 -2113
- sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/mk/LC_MESSAGES/sphinx.po +2088 -1983
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +2247 -2142
- sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ne/LC_MESSAGES/sphinx.po +2227 -2122
- sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nl/LC_MESSAGES/sphinx.po +2316 -2211
- sphinx/locale/pl/LC_MESSAGES/sphinx.js +2 -2
- sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pl/LC_MESSAGES/sphinx.po +2442 -2336
- sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +2657 -2552
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +2243 -2138
- sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ro/LC_MESSAGES/sphinx.po +2244 -2139
- sphinx/locale/ru/LC_MESSAGES/sphinx.js +1 -1
- sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ru/LC_MESSAGES/sphinx.po +2660 -2555
- sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/si/LC_MESSAGES/sphinx.po +2134 -2029
- sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sk/LC_MESSAGES/sphinx.po +2614 -2509
- sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sl/LC_MESSAGES/sphinx.po +2167 -2062
- sphinx/locale/sphinx.pot +2069 -1964
- sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sq/LC_MESSAGES/sphinx.po +2661 -2556
- sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr/LC_MESSAGES/sphinx.po +2213 -2108
- sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.po +2229 -2124
- sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/te/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/tr/LC_MESSAGES/sphinx.po +2608 -2503
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +2167 -2062
- sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ur/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/vi/LC_MESSAGES/sphinx.po +2204 -2099
- sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/yue/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +2659 -2554
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +2045 -1940
- sphinx/parsers.py +8 -7
- sphinx/project.py +2 -2
- sphinx/pycode/__init__.py +31 -21
- sphinx/pycode/ast.py +6 -3
- sphinx/pycode/parser.py +14 -8
- sphinx/pygments_styles.py +4 -5
- sphinx/registry.py +192 -92
- sphinx/roles.py +58 -7
- sphinx/search/__init__.py +75 -54
- sphinx/search/en.py +11 -13
- sphinx/search/fi.py +1 -1
- sphinx/search/ja.py +8 -6
- sphinx/search/nl.py +1 -1
- sphinx/search/zh.py +19 -21
- sphinx/testing/fixtures.py +26 -29
- sphinx/testing/path.py +26 -62
- sphinx/testing/restructuredtext.py +14 -8
- sphinx/testing/util.py +21 -19
- sphinx/texinputs/make.bat.jinja +50 -50
- sphinx/texinputs/sphinx.sty +4 -3
- sphinx/texinputs/sphinxlatexadmonitions.sty +1 -1
- sphinx/texinputs/sphinxlatexobjects.sty +29 -10
- sphinx/themes/basic/static/searchtools.js +8 -5
- sphinx/theming.py +49 -61
- sphinx/transforms/__init__.py +17 -38
- sphinx/transforms/compact_bullet_list.py +5 -3
- sphinx/transforms/i18n.py +8 -21
- sphinx/transforms/post_transforms/__init__.py +142 -93
- sphinx/transforms/post_transforms/code.py +5 -5
- sphinx/transforms/post_transforms/images.py +28 -24
- sphinx/transforms/references.py +3 -1
- sphinx/util/__init__.py +109 -60
- sphinx/util/_files.py +39 -23
- sphinx/util/_importer.py +4 -1
- sphinx/util/_inventory_file_reader.py +76 -0
- sphinx/util/_io.py +2 -2
- sphinx/util/_lines.py +6 -3
- sphinx/util/_pathlib.py +40 -2
- sphinx/util/build_phase.py +2 -0
- sphinx/util/cfamily.py +19 -14
- sphinx/util/console.py +44 -179
- sphinx/util/display.py +9 -10
- sphinx/util/docfields.py +140 -122
- sphinx/util/docstrings.py +1 -1
- sphinx/util/docutils.py +118 -77
- sphinx/util/fileutil.py +25 -26
- sphinx/util/http_date.py +2 -0
- sphinx/util/i18n.py +77 -64
- sphinx/util/images.py +8 -6
- sphinx/util/inspect.py +147 -38
- sphinx/util/inventory.py +215 -116
- sphinx/util/logging.py +33 -33
- sphinx/util/matching.py +12 -4
- sphinx/util/nodes.py +18 -13
- sphinx/util/osutil.py +38 -39
- sphinx/util/parallel.py +22 -13
- sphinx/util/parsing.py +2 -1
- sphinx/util/png.py +6 -2
- sphinx/util/requests.py +33 -2
- sphinx/util/rst.py +3 -2
- sphinx/util/tags.py +1 -1
- sphinx/util/template.py +18 -10
- sphinx/util/texescape.py +8 -6
- sphinx/util/typing.py +148 -122
- sphinx/versioning.py +3 -3
- sphinx/writers/html.py +3 -1
- sphinx/writers/html5.py +63 -52
- sphinx/writers/latex.py +83 -67
- sphinx/writers/manpage.py +19 -38
- sphinx/writers/texinfo.py +47 -47
- sphinx/writers/text.py +50 -32
- sphinx/writers/xml.py +11 -8
- {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/LICENSE.rst +1 -1
- {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/METADATA +25 -15
- sphinx-8.2.0.dist-info/RECORD +606 -0
- {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/WHEEL +1 -1
- sphinx/builders/html/transforms.py +0 -90
- sphinx/ext/apidoc.py +0 -721
- sphinx/util/exceptions.py +0 -74
- sphinx-8.1.2.dist-info/RECORD +0 -598
- {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/entry_points.txt +0 -0
sphinx/writers/html5.py
CHANGED
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import os
|
|
6
5
|
import posixpath
|
|
7
6
|
import re
|
|
8
7
|
import urllib.parse
|
|
9
|
-
from
|
|
10
|
-
from typing import TYPE_CHECKING, cast
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
11
9
|
|
|
12
10
|
from docutils import nodes
|
|
13
11
|
from docutils.writers.html5_polyglot import HTMLTranslator as BaseTranslator
|
|
@@ -44,9 +42,7 @@ def multiply_length(length: str, scale: int) -> str:
|
|
|
44
42
|
|
|
45
43
|
|
|
46
44
|
class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
47
|
-
"""
|
|
48
|
-
Our custom HTML translator.
|
|
49
|
-
"""
|
|
45
|
+
"""Our custom HTML translator."""
|
|
50
46
|
|
|
51
47
|
builder: StandaloneHTMLBuilder
|
|
52
48
|
# Override docutils.writers.html5_polyglot:HTMLTranslator
|
|
@@ -66,6 +62,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
66
62
|
self._table_row_indices = [0]
|
|
67
63
|
self._fieldlist_row_indices = [0]
|
|
68
64
|
self.required_params_left = 0
|
|
65
|
+
self._has_maths_elements: bool = False
|
|
69
66
|
|
|
70
67
|
def visit_start_of_file(self, node: Element) -> None:
|
|
71
68
|
# only occurs in the single-file builder
|
|
@@ -175,6 +172,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
175
172
|
self.required_params_left = sum(self.list_is_required_param)
|
|
176
173
|
self.param_separator = node.child_text_separator
|
|
177
174
|
self.multi_line_parameter_list = node.get('multi_line_parameter_list', False)
|
|
175
|
+
self.trailing_comma = node.get('multi_line_trailing_comma', False)
|
|
178
176
|
if self.multi_line_parameter_list:
|
|
179
177
|
self.body.append('\n\n')
|
|
180
178
|
self.body.append(self.starttag(node, 'dl'))
|
|
@@ -201,10 +199,11 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
201
199
|
|
|
202
200
|
# If required parameters are still to come, then put the comma after
|
|
203
201
|
# the parameter. Otherwise, put the comma before. This ensures that
|
|
204
|
-
# signatures like the following render correctly
|
|
202
|
+
# signatures like the following render correctly:
|
|
205
203
|
#
|
|
206
204
|
# foo([a, ]b, c[, d])
|
|
207
205
|
#
|
|
206
|
+
# See: https://github.com/sphinx-doc/sphinx/issues/1001
|
|
208
207
|
def visit_desc_parameter(self, node: Element) -> None:
|
|
209
208
|
on_separate_line = self.multi_line_parameter_list
|
|
210
209
|
if on_separate_line and not (
|
|
@@ -232,14 +231,15 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
232
231
|
next_is_required = (
|
|
233
232
|
not is_last_group
|
|
234
233
|
and self.list_is_required_param[self.param_group_index + 1]
|
|
235
|
-
)
|
|
234
|
+
)
|
|
236
235
|
opt_param_left_at_level = self.params_left_at_level > 0
|
|
237
236
|
if (
|
|
238
237
|
opt_param_left_at_level
|
|
239
238
|
or is_required
|
|
240
239
|
and (is_last_group or next_is_required)
|
|
241
240
|
):
|
|
242
|
-
self.
|
|
241
|
+
if not is_last_group or opt_param_left_at_level or self.trailing_comma:
|
|
242
|
+
self.body.append(self.param_separator)
|
|
243
243
|
self.body.append('</dd>\n')
|
|
244
244
|
|
|
245
245
|
elif self.required_params_left:
|
|
@@ -282,19 +282,26 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
282
282
|
|
|
283
283
|
def depart_desc_optional(self, node: Element) -> None:
|
|
284
284
|
self.optional_param_level -= 1
|
|
285
|
+
level = self.optional_param_level
|
|
285
286
|
if self.multi_line_parameter_list:
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
max_level = self.max_optional_param_level
|
|
288
|
+
len_lirp = len(self.list_is_required_param)
|
|
289
|
+
is_last_group = self.param_group_index + 1 == len_lirp
|
|
290
|
+
# If it's the first time we go down one level, add the separator before the
|
|
291
|
+
# bracket, except if this is the last parameter and the parameter list
|
|
292
|
+
# should not feature a trailing comma.
|
|
293
|
+
if level == max_level - 1 and (
|
|
294
|
+
not is_last_group or level > 0 or self.trailing_comma
|
|
295
|
+
):
|
|
289
296
|
self.body.append(self.param_separator)
|
|
290
297
|
self.body.append('<span class="optional">]</span>')
|
|
291
298
|
# End the line if we have just closed the last bracket of this
|
|
292
299
|
# optional parameter group.
|
|
293
|
-
if
|
|
300
|
+
if level == 0:
|
|
294
301
|
self.body.append('</dd>\n')
|
|
295
302
|
else:
|
|
296
303
|
self.body.append('<span class="optional">]</span>')
|
|
297
|
-
if
|
|
304
|
+
if level == 0:
|
|
298
305
|
self.param_group_index += 1
|
|
299
306
|
|
|
300
307
|
def visit_desc_annotation(self, node: Element) -> None:
|
|
@@ -327,9 +334,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
327
334
|
atts['href'] = self.cloak_mailto(atts['href'])
|
|
328
335
|
self.in_mailto = True
|
|
329
336
|
else:
|
|
330
|
-
assert (
|
|
331
|
-
'refid'
|
|
332
|
-
)
|
|
337
|
+
assert 'refid' in node, (
|
|
338
|
+
'References must have "refuri" or "refid" attribute.'
|
|
339
|
+
)
|
|
333
340
|
atts['href'] = '#' + node['refid']
|
|
334
341
|
if not isinstance(node.parent, nodes.TextElement):
|
|
335
342
|
assert len(node) == 1 and isinstance(node[0], nodes.image) # NoQA: PT018
|
|
@@ -359,12 +366,21 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
359
366
|
|
|
360
367
|
# overwritten
|
|
361
368
|
def visit_admonition(self, node: Element, name: str = '') -> None:
|
|
362
|
-
|
|
369
|
+
attributes = {}
|
|
370
|
+
tag_name = 'div'
|
|
371
|
+
if collapsible := node.get('collapsible'):
|
|
372
|
+
tag_name = 'details'
|
|
373
|
+
if collapsible == 'open':
|
|
374
|
+
attributes['open'] = 'open'
|
|
375
|
+
self.body.append(
|
|
376
|
+
self.starttag(node, tag_name, CLASS=f'admonition {name}', **attributes)
|
|
377
|
+
)
|
|
378
|
+
self.context.append(f'</{tag_name}>\n')
|
|
363
379
|
if name:
|
|
364
380
|
node.insert(0, nodes.title(name, admonitionlabels[name]))
|
|
365
381
|
|
|
366
382
|
def depart_admonition(self, node: Element | None = None) -> None:
|
|
367
|
-
self.body.append(
|
|
383
|
+
self.body.append(self.context.pop())
|
|
368
384
|
|
|
369
385
|
def visit_seealso(self, node: Element) -> None:
|
|
370
386
|
self.visit_admonition(node, 'seealso')
|
|
@@ -379,7 +395,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
379
395
|
if isinstance(node.parent, nodes.section):
|
|
380
396
|
if self.builder.name == 'singlehtml':
|
|
381
397
|
docname = self.docnames[-1]
|
|
382
|
-
anchorname = f
|
|
398
|
+
anchorname = f'{docname}/#{node.parent["ids"][0]}'
|
|
383
399
|
if anchorname not in self.builder.secnumbers:
|
|
384
400
|
# try first heading which has no anchor
|
|
385
401
|
anchorname = f'{docname}/'
|
|
@@ -419,9 +435,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
419
435
|
self.body.append(prefix % '.'.join(map(str, numbers)) + ' ')
|
|
420
436
|
self.body.append('</span>')
|
|
421
437
|
|
|
422
|
-
figtype = self.
|
|
423
|
-
node
|
|
424
|
-
)
|
|
438
|
+
figtype = self._domains.standard_domain.get_enumerable_node_type(node)
|
|
425
439
|
if figtype:
|
|
426
440
|
if len(node['ids']) == 0:
|
|
427
441
|
msg = __('Any IDs not assigned for %s node') % node.tagname
|
|
@@ -494,6 +508,15 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
494
508
|
)
|
|
495
509
|
self.body.append('<span class="caption-text">')
|
|
496
510
|
self.context.append('</span></p>\n')
|
|
511
|
+
elif (
|
|
512
|
+
isinstance(node.parent, nodes.Admonition)
|
|
513
|
+
and isinstance(node.parent, nodes.Element)
|
|
514
|
+
and 'collapsible' in node.parent
|
|
515
|
+
):
|
|
516
|
+
self.body.append(
|
|
517
|
+
self.starttag(node, 'summary', '', CLASS='admonition-title')
|
|
518
|
+
)
|
|
519
|
+
self.context.append('</summary>\n')
|
|
497
520
|
else:
|
|
498
521
|
super().visit_title(node)
|
|
499
522
|
self.add_secnumber(node)
|
|
@@ -671,24 +694,9 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
671
694
|
|
|
672
695
|
def visit_productionlist(self, node: Element) -> None:
|
|
673
696
|
self.body.append(self.starttag(node, 'pre'))
|
|
674
|
-
productionlist = cast(Iterable[addnodes.production], node)
|
|
675
|
-
names = (production['tokenname'] for production in productionlist)
|
|
676
|
-
maxlen = max(len(name) for name in names)
|
|
677
|
-
lastname = None
|
|
678
|
-
for production in productionlist:
|
|
679
|
-
if production['tokenname']:
|
|
680
|
-
lastname = production['tokenname'].ljust(maxlen)
|
|
681
|
-
self.body.append(self.starttag(production, 'strong', ''))
|
|
682
|
-
self.body.append(lastname + '</strong> ::= ')
|
|
683
|
-
elif lastname is not None:
|
|
684
|
-
self.body.append('%s ' % (' ' * len(lastname)))
|
|
685
|
-
production.walkabout(self)
|
|
686
|
-
self.body.append('\n')
|
|
687
|
-
self.body.append('</pre>\n')
|
|
688
|
-
raise nodes.SkipNode
|
|
689
697
|
|
|
690
698
|
def depart_productionlist(self, node: Element) -> None:
|
|
691
|
-
|
|
699
|
+
self.body.append('</pre>\n')
|
|
692
700
|
|
|
693
701
|
def visit_production(self, node: Element) -> None:
|
|
694
702
|
pass
|
|
@@ -752,8 +760,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
752
760
|
# but it tries the final file name, which does not necessarily exist
|
|
753
761
|
# yet at the time the HTML file is written.
|
|
754
762
|
if not ('width' in node and 'height' in node):
|
|
755
|
-
|
|
756
|
-
size = get_image_size(path)
|
|
763
|
+
size = get_image_size(self.builder.srcdir / olduri)
|
|
757
764
|
if size is None:
|
|
758
765
|
logger.warning(
|
|
759
766
|
__('Could not obtain image size. :scale: option is ignored.'),
|
|
@@ -820,7 +827,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
820
827
|
if token.strip():
|
|
821
828
|
# protect literal text from line wrapping
|
|
822
829
|
self.body.append('<span class="pre">%s</span>' % token)
|
|
823
|
-
elif token in ' \n':
|
|
830
|
+
elif token in {' ', '\n'}:
|
|
824
831
|
# allow breaks at whitespace
|
|
825
832
|
self.body.append(token)
|
|
826
833
|
else:
|
|
@@ -899,8 +906,8 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
899
906
|
|
|
900
907
|
def visit_abbreviation(self, node: Element) -> None:
|
|
901
908
|
attrs = {}
|
|
902
|
-
if node.
|
|
903
|
-
attrs['title'] =
|
|
909
|
+
if explanation := node.get('explanation', ''):
|
|
910
|
+
attrs['title'] = explanation
|
|
904
911
|
self.body.append(self.starttag(node, 'abbr', '', **attrs))
|
|
905
912
|
|
|
906
913
|
def depart_abbreviation(self, node: Element) -> None:
|
|
@@ -957,29 +964,33 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # type: ignore[misc]
|
|
|
957
964
|
else:
|
|
958
965
|
node['classes'].append('field-odd')
|
|
959
966
|
|
|
960
|
-
def visit_math(self, node:
|
|
967
|
+
def visit_math(self, node: nodes.math, math_env: str = '') -> None:
|
|
968
|
+
self._has_maths_elements = True
|
|
969
|
+
|
|
961
970
|
# see validate_math_renderer
|
|
962
971
|
name: str = self.builder.math_renderer_name # type: ignore[assignment]
|
|
963
|
-
visit, _ = self.builder.
|
|
972
|
+
visit, _ = self.builder.env._registry.html_inline_math_renderers[name]
|
|
964
973
|
visit(self, node)
|
|
965
974
|
|
|
966
|
-
def depart_math(self, node:
|
|
975
|
+
def depart_math(self, node: nodes.math, math_env: str = '') -> None:
|
|
967
976
|
# see validate_math_renderer
|
|
968
977
|
name: str = self.builder.math_renderer_name # type: ignore[assignment]
|
|
969
|
-
_, depart = self.builder.
|
|
978
|
+
_, depart = self.builder.env._registry.html_inline_math_renderers[name]
|
|
970
979
|
if depart:
|
|
971
980
|
depart(self, node)
|
|
972
981
|
|
|
973
|
-
def visit_math_block(self, node:
|
|
982
|
+
def visit_math_block(self, node: nodes.math_block, math_env: str = '') -> None:
|
|
983
|
+
self._has_maths_elements = True
|
|
984
|
+
|
|
974
985
|
# see validate_math_renderer
|
|
975
986
|
name: str = self.builder.math_renderer_name # type: ignore[assignment]
|
|
976
|
-
visit, _ = self.builder.
|
|
987
|
+
visit, _ = self.builder.env._registry.html_block_math_renderers[name]
|
|
977
988
|
visit(self, node)
|
|
978
989
|
|
|
979
|
-
def depart_math_block(self, node:
|
|
990
|
+
def depart_math_block(self, node: nodes.math_block, math_env: str = '') -> None:
|
|
980
991
|
# see validate_math_renderer
|
|
981
992
|
name: str = self.builder.math_renderer_name # type: ignore[assignment]
|
|
982
|
-
_, depart = self.builder.
|
|
993
|
+
_, depart = self.builder.env._registry.html_block_math_renderers[name]
|
|
983
994
|
if depart:
|
|
984
995
|
depart(self, node)
|
|
985
996
|
|