Sphinx 7.2.6__py3-none-any.whl → 7.3.1__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.

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