Sphinx 8.0.2__py3-none-any.whl → 8.1.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 (424) hide show
  1. sphinx/__init__.py +6 -3
  2. sphinx/_cli/__init__.py +40 -20
  3. sphinx/_cli/util/colour.py +5 -4
  4. sphinx/_cli/util/errors.py +28 -11
  5. sphinx/application.py +361 -38
  6. sphinx/builders/__init__.py +229 -83
  7. sphinx/builders/_epub_base.py +118 -71
  8. sphinx/builders/changes.py +39 -21
  9. sphinx/builders/dirhtml.py +4 -4
  10. sphinx/builders/dummy.py +2 -5
  11. sphinx/builders/epub3.py +43 -22
  12. sphinx/builders/gettext.py +43 -25
  13. sphinx/builders/html/__init__.py +284 -218
  14. sphinx/builders/html/_assets.py +62 -26
  15. sphinx/builders/html/_build_info.py +76 -0
  16. sphinx/builders/html/transforms.py +11 -9
  17. sphinx/builders/latex/__init__.py +139 -81
  18. sphinx/builders/latex/constants.py +7 -7
  19. sphinx/builders/latex/nodes.py +3 -2
  20. sphinx/builders/latex/theming.py +7 -5
  21. sphinx/builders/latex/transforms.py +27 -19
  22. sphinx/builders/linkcheck.py +146 -72
  23. sphinx/builders/manpage.py +30 -13
  24. sphinx/builders/singlehtml.py +22 -14
  25. sphinx/builders/texinfo.py +67 -37
  26. sphinx/builders/text.py +5 -5
  27. sphinx/builders/xml.py +6 -9
  28. sphinx/cmd/build.py +282 -103
  29. sphinx/cmd/make_mode.py +106 -63
  30. sphinx/cmd/quickstart.py +341 -145
  31. sphinx/config.py +45 -12
  32. sphinx/deprecation.py +8 -2
  33. sphinx/directives/__init__.py +28 -19
  34. sphinx/directives/code.py +86 -56
  35. sphinx/directives/other.py +50 -36
  36. sphinx/directives/patches.py +29 -19
  37. sphinx/domains/__init__.py +20 -120
  38. sphinx/domains/_domains_container.py +281 -0
  39. sphinx/domains/_index.py +110 -0
  40. sphinx/domains/c/__init__.py +3 -3
  41. sphinx/domains/c/_parser.py +10 -6
  42. sphinx/domains/changeset.py +5 -3
  43. sphinx/domains/citation.py +5 -3
  44. sphinx/domains/cpp/__init__.py +9 -11
  45. sphinx/domains/cpp/_parser.py +8 -7
  46. sphinx/domains/index.py +3 -3
  47. sphinx/domains/javascript.py +12 -7
  48. sphinx/domains/math.py +2 -2
  49. sphinx/domains/python/__init__.py +10 -5
  50. sphinx/domains/python/_object.py +1 -1
  51. sphinx/domains/rst.py +5 -5
  52. sphinx/domains/std/__init__.py +16 -11
  53. sphinx/environment/__init__.py +202 -146
  54. sphinx/environment/adapters/asset.py +3 -2
  55. sphinx/environment/adapters/indexentries.py +74 -33
  56. sphinx/environment/adapters/toctree.py +100 -43
  57. sphinx/environment/collectors/__init__.py +19 -8
  58. sphinx/environment/collectors/asset.py +47 -15
  59. sphinx/environment/collectors/dependencies.py +8 -4
  60. sphinx/environment/collectors/metadata.py +7 -2
  61. sphinx/environment/collectors/title.py +7 -2
  62. sphinx/environment/collectors/toctree.py +54 -22
  63. sphinx/errors.py +4 -1
  64. sphinx/events.py +314 -7
  65. sphinx/ext/apidoc.py +42 -18
  66. sphinx/ext/autodoc/__init__.py +52 -24
  67. sphinx/ext/autodoc/importer.py +6 -9
  68. sphinx/ext/autosectionlabel.py +1 -2
  69. sphinx/ext/autosummary/__init__.py +3 -1
  70. sphinx/ext/autosummary/generate.py +28 -14
  71. sphinx/ext/coverage.py +7 -7
  72. sphinx/ext/doctest.py +4 -8
  73. sphinx/ext/duration.py +6 -5
  74. sphinx/ext/inheritance_diagram.py +1 -1
  75. sphinx/ext/intersphinx/_cli.py +6 -4
  76. sphinx/ext/intersphinx/_load.py +77 -32
  77. sphinx/ext/intersphinx/_resolve.py +173 -79
  78. sphinx/ext/intersphinx/_shared.py +7 -5
  79. sphinx/ext/linkcode.py +7 -1
  80. sphinx/ext/mathjax.py +1 -2
  81. sphinx/ext/napoleon/__init__.py +37 -24
  82. sphinx/ext/napoleon/docstring.py +202 -134
  83. sphinx/ext/todo.py +5 -3
  84. sphinx/highlighting.py +9 -2
  85. sphinx/io.py +1 -1
  86. sphinx/jinja2glue.py +27 -6
  87. sphinx/locale/__init__.py +6 -2
  88. sphinx/locale/ar/LC_MESSAGES/sphinx.js +8 -1
  89. sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
  90. sphinx/locale/ar/LC_MESSAGES/sphinx.po +2246 -2288
  91. sphinx/locale/bg/LC_MESSAGES/sphinx.js +4 -1
  92. sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
  93. sphinx/locale/bg/LC_MESSAGES/sphinx.po +2113 -2159
  94. sphinx/locale/bn/LC_MESSAGES/sphinx.js +4 -1
  95. sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
  96. sphinx/locale/bn/LC_MESSAGES/sphinx.po +2349 -2395
  97. sphinx/locale/ca/LC_MESSAGES/sphinx.js +4 -1
  98. sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
  99. sphinx/locale/ca/LC_MESSAGES/sphinx.po +2846 -2892
  100. sphinx/locale/cak/LC_MESSAGES/sphinx.js +4 -1
  101. sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
  102. sphinx/locale/cak/LC_MESSAGES/sphinx.po +2213 -2259
  103. sphinx/locale/cs/LC_MESSAGES/sphinx.js +6 -1
  104. sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
  105. sphinx/locale/cs/LC_MESSAGES/sphinx.po +2225 -2269
  106. sphinx/locale/cy/LC_MESSAGES/sphinx.js +6 -1
  107. sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
  108. sphinx/locale/cy/LC_MESSAGES/sphinx.po +2403 -2447
  109. sphinx/locale/da/LC_MESSAGES/sphinx.js +4 -1
  110. sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
  111. sphinx/locale/da/LC_MESSAGES/sphinx.po +2214 -2260
  112. sphinx/locale/de/LC_MESSAGES/sphinx.js +4 -1
  113. sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
  114. sphinx/locale/de/LC_MESSAGES/sphinx.po +2230 -2276
  115. sphinx/locale/de_DE/LC_MESSAGES/sphinx.js +4 -1
  116. sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
  117. sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +2113 -2159
  118. sphinx/locale/el/LC_MESSAGES/sphinx.js +4 -1
  119. sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
  120. sphinx/locale/el/LC_MESSAGES/sphinx.po +2619 -2665
  121. sphinx/locale/en_DE/LC_MESSAGES/sphinx.js +4 -1
  122. sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
  123. sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +2113 -2159
  124. sphinx/locale/en_FR/LC_MESSAGES/sphinx.js +4 -1
  125. sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
  126. sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +2113 -2159
  127. sphinx/locale/en_GB/LC_MESSAGES/sphinx.js +4 -1
  128. sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
  129. sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +2519 -2565
  130. sphinx/locale/en_HK/LC_MESSAGES/sphinx.js +4 -1
  131. sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
  132. sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +2113 -2159
  133. sphinx/locale/eo/LC_MESSAGES/sphinx.js +4 -1
  134. sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
  135. sphinx/locale/eo/LC_MESSAGES/sphinx.po +2232 -2278
  136. sphinx/locale/es/LC_MESSAGES/sphinx.js +5 -1
  137. sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
  138. sphinx/locale/es/LC_MESSAGES/sphinx.po +2516 -2561
  139. sphinx/locale/es_CO/LC_MESSAGES/sphinx.js +5 -1
  140. sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
  141. sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +2114 -2159
  142. sphinx/locale/et/LC_MESSAGES/sphinx.js +4 -1
  143. sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
  144. sphinx/locale/et/LC_MESSAGES/sphinx.po +2317 -2363
  145. sphinx/locale/eu/LC_MESSAGES/sphinx.js +4 -1
  146. sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
  147. sphinx/locale/eu/LC_MESSAGES/sphinx.po +2218 -2264
  148. sphinx/locale/fa/LC_MESSAGES/sphinx.js +4 -1
  149. sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
  150. sphinx/locale/fa/LC_MESSAGES/sphinx.po +2505 -2551
  151. sphinx/locale/fi/LC_MESSAGES/sphinx.js +4 -1
  152. sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
  153. sphinx/locale/fi/LC_MESSAGES/sphinx.po +2303 -2349
  154. sphinx/locale/fr/LC_MESSAGES/sphinx.js +6 -2
  155. sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
  156. sphinx/locale/fr/LC_MESSAGES/sphinx.po +2863 -2908
  157. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.js +5 -1
  158. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
  159. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +2114 -2159
  160. sphinx/locale/gl/LC_MESSAGES/sphinx.js +4 -1
  161. sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
  162. sphinx/locale/gl/LC_MESSAGES/sphinx.po +2571 -2617
  163. sphinx/locale/he/LC_MESSAGES/sphinx.js +5 -1
  164. sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
  165. sphinx/locale/he/LC_MESSAGES/sphinx.po +2307 -2352
  166. sphinx/locale/hi/LC_MESSAGES/sphinx.js +4 -1
  167. sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
  168. sphinx/locale/hi/LC_MESSAGES/sphinx.po +2580 -2626
  169. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.js +4 -1
  170. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
  171. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +2113 -2159
  172. sphinx/locale/hr/LC_MESSAGES/sphinx.js +5 -1
  173. sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
  174. sphinx/locale/hr/LC_MESSAGES/sphinx.po +2238 -2283
  175. sphinx/locale/hu/LC_MESSAGES/sphinx.js +4 -1
  176. sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
  177. sphinx/locale/hu/LC_MESSAGES/sphinx.po +2228 -2274
  178. sphinx/locale/id/LC_MESSAGES/sphinx.js +3 -1
  179. sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
  180. sphinx/locale/id/LC_MESSAGES/sphinx.po +2787 -2834
  181. sphinx/locale/is/LC_MESSAGES/sphinx.js +4 -1
  182. sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
  183. sphinx/locale/is/LC_MESSAGES/sphinx.po +2224 -2270
  184. sphinx/locale/it/LC_MESSAGES/sphinx.js +5 -1
  185. sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
  186. sphinx/locale/it/LC_MESSAGES/sphinx.po +2231 -2276
  187. sphinx/locale/ja/LC_MESSAGES/sphinx.js +3 -1
  188. sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
  189. sphinx/locale/ja/LC_MESSAGES/sphinx.po +2507 -2554
  190. sphinx/locale/ka/LC_MESSAGES/sphinx.js +4 -1
  191. sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
  192. sphinx/locale/ka/LC_MESSAGES/sphinx.po +2428 -2474
  193. sphinx/locale/ko/LC_MESSAGES/sphinx.js +3 -1
  194. sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
  195. sphinx/locale/ko/LC_MESSAGES/sphinx.po +2516 -2563
  196. sphinx/locale/lt/LC_MESSAGES/sphinx.js +6 -1
  197. sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
  198. sphinx/locale/lt/LC_MESSAGES/sphinx.po +2425 -2469
  199. sphinx/locale/lv/LC_MESSAGES/sphinx.js +5 -1
  200. sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
  201. sphinx/locale/lv/LC_MESSAGES/sphinx.po +2362 -2407
  202. sphinx/locale/mk/LC_MESSAGES/sphinx.js +4 -1
  203. sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
  204. sphinx/locale/mk/LC_MESSAGES/sphinx.po +2121 -2167
  205. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +4 -1
  206. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
  207. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +2220 -2266
  208. sphinx/locale/ne/LC_MESSAGES/sphinx.js +4 -1
  209. sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
  210. sphinx/locale/ne/LC_MESSAGES/sphinx.po +2221 -2267
  211. sphinx/locale/nl/LC_MESSAGES/sphinx.js +4 -1
  212. sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
  213. sphinx/locale/nl/LC_MESSAGES/sphinx.po +2240 -2286
  214. sphinx/locale/pl/LC_MESSAGES/sphinx.js +6 -1
  215. sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
  216. sphinx/locale/pl/LC_MESSAGES/sphinx.po +2319 -2363
  217. sphinx/locale/pt/LC_MESSAGES/sphinx.js +5 -1
  218. sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
  219. sphinx/locale/pt/LC_MESSAGES/sphinx.po +2114 -2159
  220. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +5 -1
  221. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
  222. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +2854 -2899
  223. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js +5 -1
  224. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
  225. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +2224 -2269
  226. sphinx/locale/ro/LC_MESSAGES/sphinx.js +5 -1
  227. sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
  228. sphinx/locale/ro/LC_MESSAGES/sphinx.po +2226 -2271
  229. sphinx/locale/ru/LC_MESSAGES/sphinx.js +8 -3
  230. sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
  231. sphinx/locale/ru/LC_MESSAGES/sphinx.po +2841 -2885
  232. sphinx/locale/si/LC_MESSAGES/sphinx.js +4 -1
  233. sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
  234. sphinx/locale/si/LC_MESSAGES/sphinx.po +2294 -2340
  235. sphinx/locale/sk/LC_MESSAGES/sphinx.js +6 -1
  236. sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
  237. sphinx/locale/sk/LC_MESSAGES/sphinx.po +2497 -2541
  238. sphinx/locale/sl/LC_MESSAGES/sphinx.js +6 -1
  239. sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
  240. sphinx/locale/sl/LC_MESSAGES/sphinx.po +2331 -2375
  241. sphinx/locale/sphinx.pot +2121 -2167
  242. sphinx/locale/sq/LC_MESSAGES/sphinx.js +4 -1
  243. sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
  244. sphinx/locale/sq/LC_MESSAGES/sphinx.po +2855 -2901
  245. sphinx/locale/sr/LC_MESSAGES/sphinx.js +5 -1
  246. sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
  247. sphinx/locale/sr/LC_MESSAGES/sphinx.po +2203 -2248
  248. sphinx/locale/sr@latin/LC_MESSAGES/sphinx.mo +0 -0
  249. sphinx/locale/sr_RS/LC_MESSAGES/sphinx.mo +0 -0
  250. sphinx/locale/sv/LC_MESSAGES/sphinx.js +4 -1
  251. sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
  252. sphinx/locale/sv/LC_MESSAGES/sphinx.po +2423 -2469
  253. sphinx/locale/te/LC_MESSAGES/sphinx.js +4 -1
  254. sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
  255. sphinx/locale/te/LC_MESSAGES/sphinx.po +2113 -2159
  256. sphinx/locale/tr/LC_MESSAGES/sphinx.js +4 -1
  257. sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
  258. sphinx/locale/tr/LC_MESSAGES/sphinx.po +2443 -2489
  259. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +6 -1
  260. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
  261. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +2329 -2373
  262. sphinx/locale/ur/LC_MESSAGES/sphinx.js +4 -1
  263. sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
  264. sphinx/locale/ur/LC_MESSAGES/sphinx.po +2113 -2159
  265. sphinx/locale/vi/LC_MESSAGES/sphinx.js +3 -1
  266. sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
  267. sphinx/locale/vi/LC_MESSAGES/sphinx.po +2199 -2246
  268. sphinx/locale/yue/LC_MESSAGES/sphinx.js +3 -1
  269. sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
  270. sphinx/locale/yue/LC_MESSAGES/sphinx.po +2112 -2159
  271. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.js +3 -1
  272. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
  273. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +2112 -2159
  274. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +3 -1
  275. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
  276. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +2845 -2892
  277. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.js +3 -1
  278. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
  279. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +2112 -2159
  280. sphinx/parsers.py +3 -1
  281. sphinx/project.py +6 -2
  282. sphinx/pycode/__init__.py +11 -4
  283. sphinx/pycode/ast.py +58 -58
  284. sphinx/pycode/parser.py +49 -28
  285. sphinx/pygments_styles.py +49 -49
  286. sphinx/registry.py +8 -3
  287. sphinx/roles.py +136 -13
  288. sphinx/search/__init__.py +146 -87
  289. sphinx/search/da.py +2 -4
  290. sphinx/search/de.py +2 -4
  291. sphinx/search/en.py +4 -4
  292. sphinx/search/es.py +2 -4
  293. sphinx/search/fi.py +2 -4
  294. sphinx/search/fr.py +2 -4
  295. sphinx/search/hu.py +2 -4
  296. sphinx/search/it.py +2 -4
  297. sphinx/search/ja.py +55 -32
  298. sphinx/search/nl.py +2 -4
  299. sphinx/search/no.py +2 -4
  300. sphinx/search/pt.py +2 -4
  301. sphinx/search/ro.py +0 -2
  302. sphinx/search/ru.py +2 -4
  303. sphinx/search/sv.py +2 -4
  304. sphinx/search/tr.py +0 -2
  305. sphinx/search/zh.py +18 -13
  306. sphinx/templates/graphviz/graphviz.css +0 -7
  307. sphinx/testing/fixtures.py +6 -5
  308. sphinx/testing/path.py +7 -5
  309. sphinx/testing/util.py +63 -29
  310. sphinx/texinputs/sphinx.sty +115 -50
  311. sphinx/texinputs/sphinxlatexadmonitions.sty +56 -38
  312. sphinx/texinputs/sphinxlatexcontainers.sty +1 -1
  313. sphinx/texinputs/sphinxlatexgraphics.sty +3 -2
  314. sphinx/texinputs/sphinxlatexindbibtoc.sty +1 -1
  315. sphinx/texinputs/sphinxlatexlists.sty +1 -1
  316. sphinx/texinputs/sphinxlatexliterals.sty +4 -1
  317. sphinx/texinputs/sphinxlatexnumfig.sty +22 -9
  318. sphinx/texinputs/sphinxlatexobjects.sty +1 -1
  319. sphinx/texinputs/sphinxlatexshadowbox.sty +72 -10
  320. sphinx/texinputs/sphinxlatexstyleheadings.sty +7 -2
  321. sphinx/texinputs/sphinxlatexstylepage.sty +2 -8
  322. sphinx/texinputs/sphinxlatexstyletext.sty +2 -4
  323. sphinx/texinputs/sphinxlatextables.sty +1 -1
  324. sphinx/texinputs/sphinxoptionsgeometry.sty +1 -1
  325. sphinx/texinputs/sphinxoptionshyperref.sty +1 -1
  326. sphinx/themes/agogo/layout.html +1 -10
  327. sphinx/themes/agogo/static/agogo.css.jinja +0 -7
  328. sphinx/themes/basic/defindex.html +1 -8
  329. sphinx/themes/basic/domainindex.html +1 -9
  330. sphinx/themes/basic/genindex-single.html +1 -9
  331. sphinx/themes/basic/genindex-split.html +1 -9
  332. sphinx/themes/basic/genindex.html +1 -9
  333. sphinx/themes/basic/globaltoc.html +1 -9
  334. sphinx/themes/basic/layout.html +1 -9
  335. sphinx/themes/basic/localtoc.html +1 -9
  336. sphinx/themes/basic/page.html +1 -9
  337. sphinx/themes/basic/relations.html +1 -9
  338. sphinx/themes/basic/search.html +1 -9
  339. sphinx/themes/basic/searchbox.html +1 -9
  340. sphinx/themes/basic/searchfield.html +4 -10
  341. sphinx/themes/basic/sourcelink.html +1 -9
  342. sphinx/themes/basic/static/basic.css.jinja +2 -13
  343. sphinx/themes/basic/static/doctools.js +0 -7
  344. sphinx/themes/basic/static/language_data.js.jinja +0 -7
  345. sphinx/themes/basic/static/searchtools.js +25 -13
  346. sphinx/themes/bizstyle/layout.html +1 -9
  347. sphinx/themes/bizstyle/static/bizstyle.css.jinja +0 -7
  348. sphinx/themes/bizstyle/static/bizstyle.js.jinja +5 -11
  349. sphinx/themes/classic/layout.html +1 -9
  350. sphinx/themes/classic/static/classic.css.jinja +0 -7
  351. sphinx/themes/classic/static/sidebar.js.jinja +0 -6
  352. sphinx/themes/epub/epub-cover.html +1 -9
  353. sphinx/themes/epub/layout.html +1 -9
  354. sphinx/themes/epub/static/epub.css.jinja +0 -7
  355. sphinx/themes/haiku/layout.html +1 -9
  356. sphinx/themes/haiku/static/haiku.css.jinja +0 -6
  357. sphinx/themes/nature/static/nature.css.jinja +0 -7
  358. sphinx/themes/nonav/layout.html +1 -9
  359. sphinx/themes/nonav/static/nonav.css.jinja +0 -7
  360. sphinx/themes/pyramid/static/epub.css.jinja +0 -7
  361. sphinx/themes/pyramid/static/pyramid.css.jinja +0 -7
  362. sphinx/themes/scrolls/layout.html +1 -10
  363. sphinx/themes/scrolls/static/scrolls.css.jinja +0 -7
  364. sphinx/themes/sphinxdoc/static/sphinxdoc.css.jinja +2 -7
  365. sphinx/themes/traditional/static/traditional.css.jinja +0 -7
  366. sphinx/theming.py +18 -6
  367. sphinx/transforms/__init__.py +56 -35
  368. sphinx/transforms/compact_bullet_list.py +3 -2
  369. sphinx/transforms/i18n.py +132 -50
  370. sphinx/transforms/post_transforms/__init__.py +94 -43
  371. sphinx/transforms/post_transforms/code.py +7 -6
  372. sphinx/transforms/post_transforms/images.py +71 -54
  373. sphinx/transforms/references.py +1 -2
  374. sphinx/util/__init__.py +23 -194
  375. sphinx/util/_files.py +80 -0
  376. sphinx/util/_importer.py +27 -0
  377. sphinx/util/_io.py +1 -2
  378. sphinx/util/_lines.py +26 -0
  379. sphinx/util/_pathlib.py +5 -2
  380. sphinx/util/_serialise.py +53 -0
  381. sphinx/util/_timestamps.py +2 -1
  382. sphinx/util/_uri.py +16 -0
  383. sphinx/util/cfamily.py +48 -25
  384. sphinx/util/console.py +1 -0
  385. sphinx/util/display.py +1 -1
  386. sphinx/util/docfields.py +125 -45
  387. sphinx/util/docstrings.py +1 -1
  388. sphinx/util/docutils.py +118 -44
  389. sphinx/util/exceptions.py +11 -5
  390. sphinx/util/fileutil.py +53 -32
  391. sphinx/util/http_date.py +9 -7
  392. sphinx/util/i18n.py +49 -16
  393. sphinx/util/images.py +7 -6
  394. sphinx/util/inspect.py +29 -12
  395. sphinx/util/inventory.py +47 -29
  396. sphinx/util/logging.py +58 -85
  397. sphinx/util/matching.py +3 -3
  398. sphinx/util/math.py +1 -1
  399. sphinx/util/nodes.py +176 -108
  400. sphinx/util/osutil.py +13 -10
  401. sphinx/util/parallel.py +5 -4
  402. sphinx/util/parsing.py +5 -3
  403. sphinx/util/png.py +3 -3
  404. sphinx/util/requests.py +8 -4
  405. sphinx/util/rst.py +5 -3
  406. sphinx/util/tags.py +5 -2
  407. sphinx/util/template.py +26 -11
  408. sphinx/util/texescape.py +2 -2
  409. sphinx/util/typing.py +89 -38
  410. sphinx/versioning.py +3 -1
  411. sphinx/writers/html.py +22 -7
  412. sphinx/writers/html5.py +113 -64
  413. sphinx/writers/latex.py +408 -221
  414. sphinx/writers/manpage.py +25 -15
  415. sphinx/writers/texinfo.py +94 -82
  416. sphinx/writers/text.py +87 -53
  417. sphinx/writers/xml.py +5 -4
  418. sphinx-8.1.1.dist-info/LICENSE.rst +31 -0
  419. {sphinx-8.0.2.dist-info → sphinx-8.1.1.dist-info}/METADATA +13 -11
  420. sphinx-8.1.1.dist-info/RECORD +598 -0
  421. sphinx-8.0.2.dist-info/LICENSE.rst +0 -67
  422. sphinx-8.0.2.dist-info/RECORD +0 -590
  423. {sphinx-8.0.2.dist-info → sphinx-8.1.1.dist-info}/WHEEL +0 -0
  424. {sphinx-8.0.2.dist-info → sphinx-8.1.1.dist-info}/entry_points.txt +0 -0
sphinx/application.py CHANGED
@@ -10,15 +10,11 @@ import os
10
10
  import pickle
11
11
  import sys
12
12
  from collections import deque
13
- from collections.abc import Callable, Collection, Sequence # NoQA: TCH003
14
13
  from io import StringIO
15
14
  from os import path
16
- from typing import IO, TYPE_CHECKING, Any, Literal
15
+ from typing import TYPE_CHECKING, overload
17
16
 
18
- from docutils.nodes import TextElement # NoQA: TCH002
19
17
  from docutils.parsers.rst import Directive, roles
20
- from docutils.transforms import Transform # NoQA: TCH002
21
- from pygments.lexer import Lexer # NoQA: TCH002
22
18
 
23
19
  import sphinx
24
20
  from sphinx import locale, package_dir
@@ -41,14 +37,22 @@ from sphinx.util.osutil import ensuredir, relpath
41
37
  from sphinx.util.tags import Tags
42
38
 
43
39
  if TYPE_CHECKING:
40
+ from collections.abc import Callable, Collection, Iterable, Sequence, Set
41
+ from pathlib import Path
42
+ from typing import IO, Any, Final, Literal
43
+
44
44
  from docutils import nodes
45
45
  from docutils.nodes import Element, Node
46
46
  from docutils.parsers import Parser
47
+ from docutils.transforms import Transform
48
+ from pygments.lexer import Lexer
47
49
 
50
+ from sphinx import addnodes
48
51
  from sphinx.builders import Builder
49
52
  from sphinx.domains import Domain, Index
50
53
  from sphinx.environment.collectors import EnvironmentCollector
51
- from sphinx.ext.autodoc import Documenter
54
+ from sphinx.ext.autodoc import Documenter, _AutodocProcessDocstringListener
55
+ from sphinx.ext.todo import todo_node
52
56
  from sphinx.extension import Extension
53
57
  from sphinx.roles import XRefRole
54
58
  from sphinx.search import SearchLanguage
@@ -134,7 +138,7 @@ class Sphinx:
134
138
  :ivar outdir: Directory for storing build documents.
135
139
  """
136
140
 
137
- warningiserror: bool
141
+ warningiserror: Final = False
138
142
  _warncount: int
139
143
 
140
144
  def __init__(self, srcdir: str | os.PathLike[str], confdir: str | os.PathLike[str] | None,
@@ -144,7 +148,7 @@ class Sphinx:
144
148
  freshenv: bool = False, warningiserror: bool = False,
145
149
  tags: Sequence[str] = (),
146
150
  verbosity: int = 0, parallel: int = 0, keep_going: bool = False,
147
- pdb: bool = False) -> None:
151
+ pdb: bool = False, exception_on_warning: bool = False) -> None:
148
152
  """Initialize the Sphinx application.
149
153
 
150
154
  :param srcdir: The path to the source directory.
@@ -163,8 +167,9 @@ class Sphinx:
163
167
  :param verbosity: The verbosity level.
164
168
  :param parallel: The maximum number of parallel jobs to use
165
169
  when reading/writing documents.
166
- :param keep_going: If true, continue processing when an error occurs.
170
+ :param keep_going: Unused.
167
171
  :param pdb: If true, enable the Python debugger on an exception.
172
+ :param exception_on_warning: If true, raise an exception on warnings.
168
173
  """
169
174
  self.phase = BuildPhase.INITIALIZATION
170
175
  self.verbosity = verbosity
@@ -203,19 +208,17 @@ class Sphinx:
203
208
  else:
204
209
  self._warning = warning
205
210
  self._warncount = 0
206
- self.keep_going = warningiserror and keep_going
207
- if self.keep_going:
208
- self.warningiserror = False
209
- else:
210
- self.warningiserror = warningiserror
211
+ self.keep_going = bool(warningiserror) # Unused
212
+ self._fail_on_warnings = bool(warningiserror)
211
213
  self.pdb = pdb
214
+ self._exception_on_warning = exception_on_warning
212
215
  logging.setup(self, self._status, self._warning)
213
216
 
214
217
  self.events = EventManager(self)
215
218
 
216
219
  # keep last few messages for traceback
217
220
  # This will be filled by sphinx.util.logging.LastMessagesWriter
218
- self.messagelog: deque = deque(maxlen=10)
221
+ self.messagelog: deque[str] = deque(maxlen=10)
219
222
 
220
223
  # say hello to the world
221
224
  logger.info(bold(__('Running Sphinx v%s')), sphinx.__display_version__)
@@ -386,26 +389,31 @@ class Sphinx:
386
389
  self.events.emit('build-finished', err)
387
390
  raise
388
391
 
389
- if self._warncount and self.keep_going:
390
- self.statuscode = 1
391
-
392
- status = (__('succeeded') if self.statuscode == 0
393
- else __('finished with problems'))
394
- if self._warncount:
395
- if self.warningiserror:
396
- if self._warncount == 1:
397
- msg = __('build %s, %s warning (with warnings treated as errors).')
398
- else:
399
- msg = __('build %s, %s warnings (with warnings treated as errors).')
392
+ if self._warncount == 0:
393
+ if self.statuscode != 0:
394
+ logger.info(bold(__('build finished with problems.')))
400
395
  else:
401
- if self._warncount == 1:
402
- msg = __('build %s, %s warning.')
403
- else:
404
- msg = __('build %s, %s warnings.')
405
-
406
- logger.info(bold(msg), status, self._warncount)
396
+ logger.info(bold(__('build succeeded.')))
397
+ elif self._warncount == 1:
398
+ if self._fail_on_warnings:
399
+ self.statuscode = 1
400
+ msg = __('build finished with problems, 1 warning '
401
+ '(with warnings treated as errors).')
402
+ elif self.statuscode != 0:
403
+ msg = __('build finished with problems, 1 warning.')
404
+ else:
405
+ msg = __('build succeeded, 1 warning.')
406
+ logger.info(bold(msg))
407
407
  else:
408
- logger.info(bold(__('build %s.')), status)
408
+ if self._fail_on_warnings:
409
+ self.statuscode = 1
410
+ msg = __('build finished with problems, %s warnings '
411
+ '(with warnings treated as errors).')
412
+ elif self.statuscode != 0:
413
+ msg = __('build finished with problems, %s warnings.')
414
+ else:
415
+ msg = __('build succeeded, %s warnings.')
416
+ logger.info(bold(msg), self._warncount)
409
417
 
410
418
  if self.statuscode == 0 and self.builder.epilog:
411
419
  logger.info('')
@@ -450,6 +458,319 @@ class Sphinx:
450
458
  req = f'{major}.{minor}'
451
459
  raise VersionRequirementError(req)
452
460
 
461
+ # ---- Core events -------------------------------------------------------
462
+
463
+ @overload
464
+ def connect(
465
+ self,
466
+ event: Literal['config-inited'],
467
+ callback: Callable[[Sphinx, Config], None],
468
+ priority: int = 500
469
+ ) -> int:
470
+ ...
471
+
472
+ @overload
473
+ def connect(
474
+ self,
475
+ event: Literal['builder-inited'],
476
+ callback: Callable[[Sphinx], None],
477
+ priority: int = 500
478
+ ) -> int:
479
+ ...
480
+
481
+ @overload
482
+ def connect(
483
+ self,
484
+ event: Literal['env-get-outdated'],
485
+ callback: Callable[
486
+ [Sphinx, BuildEnvironment, Set[str], Set[str], Set[str]], Sequence[str]
487
+ ],
488
+ priority: int = 500
489
+ ) -> int:
490
+ ...
491
+
492
+ @overload
493
+ def connect(
494
+ self,
495
+ event: Literal['env-before-read-docs'],
496
+ callback: Callable[[Sphinx, BuildEnvironment, list[str]], None],
497
+ priority: int = 500
498
+ ) -> int:
499
+ ...
500
+
501
+ @overload
502
+ def connect(
503
+ self,
504
+ event: Literal['env-purge-doc'],
505
+ callback: Callable[[Sphinx, BuildEnvironment, str], None],
506
+ priority: int = 500
507
+ ) -> int:
508
+ ...
509
+
510
+ @overload
511
+ def connect(
512
+ self,
513
+ event: Literal['source-read'],
514
+ callback: Callable[[Sphinx, str, list[str]], None],
515
+ priority: int = 500
516
+ ) -> int:
517
+ ...
518
+
519
+ @overload
520
+ def connect(
521
+ self,
522
+ event: Literal['include-read'],
523
+ callback: Callable[[Sphinx, Path, str, list[str]], None],
524
+ priority: int = 500
525
+ ) -> int:
526
+ ...
527
+
528
+ @overload
529
+ def connect(
530
+ self,
531
+ event: Literal['doctree-read'],
532
+ callback: Callable[[Sphinx, nodes.document], None],
533
+ priority: int = 500
534
+ ) -> int:
535
+ ...
536
+
537
+ @overload
538
+ def connect(
539
+ self,
540
+ event: Literal['env-merge-info'],
541
+ callback: Callable[
542
+ [Sphinx, BuildEnvironment, list[str], BuildEnvironment], None
543
+ ],
544
+ priority: int = 500
545
+ ) -> int:
546
+ ...
547
+
548
+ @overload
549
+ def connect(
550
+ self,
551
+ event: Literal['env-updated'],
552
+ callback: Callable[[Sphinx, BuildEnvironment], str],
553
+ priority: int = 500
554
+ ) -> int:
555
+ ...
556
+
557
+ @overload
558
+ def connect(
559
+ self,
560
+ event: Literal['env-get-updated'],
561
+ callback: Callable[[Sphinx, BuildEnvironment], Iterable[str]],
562
+ priority: int = 500
563
+ ) -> int:
564
+ ...
565
+
566
+ @overload
567
+ def connect(
568
+ self,
569
+ event: Literal['env-check-consistency'],
570
+ callback: Callable[[Sphinx, BuildEnvironment], None],
571
+ priority: int = 500
572
+ ) -> int:
573
+ ...
574
+
575
+ @overload
576
+ def connect(
577
+ self,
578
+ event: Literal['write-started'],
579
+ callback: Callable[[Sphinx, Builder], None],
580
+ priority: int = 500
581
+ ) -> int:
582
+ ...
583
+
584
+ @overload
585
+ def connect(
586
+ self,
587
+ event: Literal['doctree-resolved'],
588
+ callback: Callable[[Sphinx, nodes.document, str], None],
589
+ priority: int = 500
590
+ ) -> int:
591
+ ...
592
+
593
+ @overload
594
+ def connect(
595
+ self,
596
+ event: Literal['missing-reference'],
597
+ callback: Callable[
598
+ [Sphinx, BuildEnvironment, addnodes.pending_xref, nodes.TextElement],
599
+ nodes.reference | None,
600
+ ],
601
+ priority: int = 500
602
+ ) -> int:
603
+ ...
604
+
605
+ @overload
606
+ def connect(
607
+ self,
608
+ event: Literal['warn-missing-reference'],
609
+ callback: Callable[[Sphinx, Domain, addnodes.pending_xref], bool | None],
610
+ priority: int = 500
611
+ ) -> int:
612
+ ...
613
+
614
+ @overload
615
+ def connect(
616
+ self,
617
+ event: Literal['build-finished'],
618
+ callback: Callable[[Sphinx, Exception | None], None],
619
+ priority: int = 500
620
+ ) -> int:
621
+ ...
622
+
623
+ # ---- Events from builtin builders --------------------------------------
624
+
625
+ @overload
626
+ def connect(
627
+ self,
628
+ event: Literal['html-collect-pages'],
629
+ callback: Callable[[Sphinx], Iterable[tuple[str, dict[str, Any], str]]],
630
+ priority: int = 500
631
+ ) -> int:
632
+ ...
633
+
634
+ @overload
635
+ def connect(
636
+ self,
637
+ event: Literal['html-page-context'],
638
+ callback: Callable[
639
+ [Sphinx, str, str, dict[str, Any], nodes.document], str | None
640
+ ],
641
+ priority: int = 500
642
+ ) -> int:
643
+ ...
644
+
645
+ @overload
646
+ def connect(
647
+ self,
648
+ event: Literal['linkcheck-process-uri'],
649
+ callback: Callable[[Sphinx, str], str | None],
650
+ priority: int = 500
651
+ ) -> int:
652
+ ...
653
+
654
+ # ---- Events from builtin extensions-- ----------------------------------
655
+
656
+ @overload
657
+ def connect(
658
+ self,
659
+ event: Literal['object-description-transform'],
660
+ callback: Callable[[Sphinx, str, str, addnodes.desc_content], None],
661
+ priority: int = 500
662
+ ) -> int:
663
+ ...
664
+
665
+ # ---- Events from first-party extensions --------------------------------
666
+
667
+ @overload
668
+ def connect(
669
+ self,
670
+ event: Literal['autodoc-process-docstring'],
671
+ callback: _AutodocProcessDocstringListener,
672
+ priority: int = 500
673
+ ) -> int:
674
+ ...
675
+
676
+ @overload
677
+ def connect(
678
+ self,
679
+ event: Literal['autodoc-before-process-signature'],
680
+ callback: Callable[[Sphinx, Any, bool], None],
681
+ priority: int = 500
682
+ ) -> int:
683
+ ...
684
+
685
+ @overload
686
+ def connect(
687
+ self,
688
+ event: Literal['autodoc-process-signature'],
689
+ callback: Callable[
690
+ [
691
+ Sphinx,
692
+ Literal['module', 'class', 'exception', 'function', 'method', 'attribute'],
693
+ str,
694
+ Any,
695
+ dict[str, bool],
696
+ str | None,
697
+ str | None,
698
+ ],
699
+ tuple[str | None, str | None] | None,
700
+ ],
701
+ priority: int = 500
702
+ ) -> int:
703
+ ...
704
+
705
+ @overload
706
+ def connect(
707
+ self,
708
+ event: Literal['autodoc-process-bases'],
709
+ callback: Callable[[Sphinx, str, Any, dict[str, bool], list[str]], None],
710
+ priority: int = 500
711
+ ) -> int:
712
+ ...
713
+
714
+ @overload
715
+ def connect(
716
+ self,
717
+ event: Literal['autodoc-skip-member'],
718
+ callback: Callable[
719
+ [
720
+ Sphinx,
721
+ Literal['module', 'class', 'exception', 'function', 'method', 'attribute'],
722
+ str,
723
+ Any,
724
+ bool,
725
+ dict[str, bool],
726
+ ],
727
+ bool,
728
+ ],
729
+ priority: int = 500
730
+ ) -> int:
731
+ ...
732
+
733
+ @overload
734
+ def connect(
735
+ self,
736
+ event: Literal['todo-defined'],
737
+ callback: Callable[[Sphinx, todo_node], None],
738
+ priority: int = 500,
739
+ ) -> int:
740
+ ...
741
+
742
+ @overload
743
+ def connect(
744
+ self,
745
+ event: Literal['viewcode-find-source'],
746
+ callback: Callable[
747
+ [Sphinx, str],
748
+ tuple[str, dict[str, tuple[Literal['class', 'def', 'other'], int, int]]],
749
+ ],
750
+ priority: int = 500,
751
+ ) -> int:
752
+ ...
753
+
754
+ @overload
755
+ def connect(
756
+ self,
757
+ event: Literal['viewcode-follow-imported'],
758
+ callback: Callable[[Sphinx, str, str], str | None],
759
+ priority: int = 500,
760
+ ) -> int:
761
+ ...
762
+
763
+ # ---- Catch-all ---------------------------------------------------------
764
+
765
+ @overload
766
+ def connect(
767
+ self,
768
+ event: str,
769
+ callback: Callable[..., Any],
770
+ priority: int = 500
771
+ ) -> int:
772
+ ...
773
+
453
774
  # event interface
454
775
  def connect(self, event: str, callback: Callable, priority: int = 500) -> int:
455
776
  """Register *callback* to be called when *event* is emitted.
@@ -845,7 +1166,7 @@ class Sphinx:
845
1166
 
846
1167
  def add_object_type(self, directivename: str, rolename: str, indextemplate: str = '',
847
1168
  parse_node: Callable | None = None,
848
- ref_nodeclass: type[TextElement] | None = None,
1169
+ ref_nodeclass: type[nodes.TextElement] | None = None,
849
1170
  objname: str = '', doc_field_types: Sequence = (),
850
1171
  override: bool = False,
851
1172
  ) -> None:
@@ -912,9 +1233,11 @@ class Sphinx:
912
1233
  ref_nodeclass, objname, doc_field_types,
913
1234
  override=override)
914
1235
 
915
- def add_crossref_type(self, directivename: str, rolename: str, indextemplate: str = '',
916
- ref_nodeclass: type[TextElement] | None = None, objname: str = '',
917
- override: bool = False) -> None:
1236
+ def add_crossref_type(
1237
+ self, directivename: str, rolename: str, indextemplate: str = '',
1238
+ ref_nodeclass: type[nodes.TextElement] | None = None, objname: str = '',
1239
+ override: bool = False,
1240
+ ) -> None:
918
1241
  """Register a new crossref object type.
919
1242
 
920
1243
  This method is very similar to :meth:`~Sphinx.add_object_type` except that the
@@ -1385,7 +1708,7 @@ class TemplateBridge:
1385
1708
  """
1386
1709
  return 0
1387
1710
 
1388
- def render(self, template: str, context: dict) -> None:
1711
+ def render(self, template: str, context: dict[str, Any]) -> None:
1389
1712
  """Called by the builder to render a template given as a filename with
1390
1713
  a specified context (a Python dictionary).
1391
1714
  """