Sphinx 8.0.1__py3-none-any.whl → 8.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Sphinx might be problematic. Click here for more details.

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 +206 -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 +10 -3
  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 +133 -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 +107 -39
  311. sphinx/texinputs/sphinxlatexadmonitions.sty +51 -35
  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.0.dist-info/LICENSE.rst +31 -0
  419. {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/METADATA +13 -11
  420. sphinx-8.1.0.dist-info/RECORD +598 -0
  421. sphinx-8.0.1.dist-info/LICENSE.rst +0 -67
  422. sphinx-8.0.1.dist-info/RECORD +0 -590
  423. {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/WHEEL +0 -0
  424. {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/entry_points.txt +0 -0
sphinx/cmd/build.py CHANGED
@@ -32,19 +32,23 @@ if TYPE_CHECKING:
32
32
  from typing import Protocol
33
33
 
34
34
  class SupportsWrite(Protocol):
35
- def write(self, text: str, /) -> int | None:
36
- ...
35
+ def write(self, text: str, /) -> int | None: ... # NoQA: E704
37
36
 
38
37
 
39
38
  def handle_exception(
40
- app: Sphinx | None, args: Any, exception: BaseException, stderr: TextIO = sys.stderr,
39
+ app: Sphinx | None,
40
+ args: Any,
41
+ exception: BaseException,
42
+ stderr: TextIO = sys.stderr,
41
43
  ) -> None:
42
44
  if isinstance(exception, bdb.BdbQuit):
43
45
  return
44
46
 
45
47
  if args.pdb:
46
- print(red(__('Exception occurred while building, starting debugger:')),
47
- file=stderr)
48
+ print(
49
+ red(__('Exception occurred while building, starting debugger:')),
50
+ file=stderr,
51
+ )
48
52
  traceback.print_exc()
49
53
  pdb.post_mortem(sys.exc_info()[2])
50
54
  else:
@@ -69,30 +73,60 @@ def handle_exception(
69
73
  print(red(__('Encoding error:')), file=stderr)
70
74
  print(terminal_safe(str(exception)), file=stderr)
71
75
  tbpath = save_traceback(app, exception)
72
- print(red(__('The full traceback has been saved in %s, if you want '
73
- 'to report the issue to the developers.') % tbpath),
74
- file=stderr)
75
- elif isinstance(exception, RuntimeError) and 'recursion depth' in str(exception):
76
+ print(
77
+ red(
78
+ __(
79
+ 'The full traceback has been saved in %s, if you want '
80
+ 'to report the issue to the developers.'
81
+ )
82
+ % tbpath
83
+ ),
84
+ file=stderr,
85
+ )
86
+ elif (
87
+ isinstance(exception, RuntimeError)
88
+ and 'recursion depth' in str(exception)
89
+ ): # fmt: skip
76
90
  print(red(__('Recursion error:')), file=stderr)
77
91
  print(terminal_safe(str(exception)), file=stderr)
78
92
  print(file=stderr)
79
- print(__('This can happen with very large or deeply nested source '
80
- 'files. You can carefully increase the default Python '
81
- 'recursion limit of 1000 in conf.py with e.g.:'), file=stderr)
93
+ print(
94
+ __(
95
+ 'This can happen with very large or deeply nested source '
96
+ 'files. You can carefully increase the default Python '
97
+ 'recursion limit of 1000 in conf.py with e.g.:'
98
+ ),
99
+ file=stderr,
100
+ )
82
101
  print(' import sys; sys.setrecursionlimit(1500)', file=stderr)
83
102
  else:
84
103
  print(red(__('Exception occurred:')), file=stderr)
85
104
  print(format_exception_cut_frames().rstrip(), file=stderr)
86
105
  tbpath = save_traceback(app, exception)
87
- print(red(__('The full traceback has been saved in %s, if you '
88
- 'want to report the issue to the developers.') % tbpath),
89
- file=stderr)
90
- print(__('Please also report this if it was a user error, so '
91
- 'that a better error message can be provided next time.'),
92
- file=stderr)
93
- print(__('A bug report can be filed in the tracker at '
94
- '<https://github.com/sphinx-doc/sphinx/issues>. Thanks!'),
95
- file=stderr)
106
+ print(
107
+ red(
108
+ __(
109
+ 'The full traceback has been saved in %s, if you '
110
+ 'want to report the issue to the developers.'
111
+ )
112
+ % tbpath
113
+ ),
114
+ file=stderr,
115
+ )
116
+ print(
117
+ __(
118
+ 'Please also report this if it was a user error, so '
119
+ 'that a better error message can be provided next time.'
120
+ ),
121
+ file=stderr,
122
+ )
123
+ print(
124
+ __(
125
+ 'A bug report can be filed in the tracker at '
126
+ '<https://github.com/sphinx-doc/sphinx/issues>. Thanks!'
127
+ ),
128
+ file=stderr,
129
+ )
96
130
 
97
131
 
98
132
  def jobs_argument(value: str) -> int:
@@ -106,7 +140,9 @@ def jobs_argument(value: str) -> int:
106
140
  else:
107
141
  jobs = int(value)
108
142
  if jobs <= 0:
109
- raise argparse.ArgumentTypeError(__('job number should be a positive number'))
143
+ raise argparse.ArgumentTypeError(
144
+ __('job number should be a positive number')
145
+ )
110
146
  else:
111
147
  return jobs
112
148
 
@@ -130,83 +166,206 @@ processing.
130
166
 
131
167
  By default, everything that is outdated is built. Output only for selected
132
168
  files can be built by specifying individual filenames.
133
- """))
134
-
135
- parser.add_argument('--version', action='version', dest='show_version',
136
- version=f'%(prog)s {__display_version__}')
137
-
138
- parser.add_argument('sourcedir', metavar='SOURCE_DIR',
139
- help=__('path to documentation source files'))
140
- parser.add_argument('outputdir', metavar='OUTPUT_DIR',
141
- help=__('path to output directory'))
142
- parser.add_argument('filenames', nargs='*',
143
- help=__('(optional) a list of specific files to rebuild. '
144
- 'Ignored if --write-all is specified'))
169
+ """),
170
+ )
171
+
172
+ parser.add_argument(
173
+ '--version',
174
+ action='version',
175
+ dest='show_version',
176
+ version=f'%(prog)s {__display_version__}',
177
+ )
178
+
179
+ parser.add_argument(
180
+ 'sourcedir', metavar='SOURCE_DIR', help=__('path to documentation source files')
181
+ )
182
+ parser.add_argument(
183
+ 'outputdir', metavar='OUTPUT_DIR', help=__('path to output directory')
184
+ )
185
+ parser.add_argument(
186
+ 'filenames',
187
+ nargs='*',
188
+ help=__(
189
+ '(optional) a list of specific files to rebuild. '
190
+ 'Ignored if --write-all is specified'
191
+ ),
192
+ )
145
193
 
146
194
  group = parser.add_argument_group(__('general options'))
147
- group.add_argument('--builder', '-b', metavar='BUILDER', dest='builder',
148
- default='html',
149
- help=__("builder to use (default: 'html')"))
150
- group.add_argument('--jobs', '-j', metavar='N', default=1, type=jobs_argument,
151
- dest='jobs',
152
- help=__('run in parallel with N processes, when possible. '
153
- "'auto' uses the number of CPU cores"))
154
- group.add_argument('--write-all', '-a', action='store_true', dest='force_all',
155
- help=__('write all files (default: only write new and '
156
- 'changed files)'))
157
- group.add_argument('--fresh-env', '-E', action='store_true', dest='freshenv',
158
- help=__("don't use a saved environment, always read "
159
- 'all files'))
195
+ group.add_argument(
196
+ '--builder',
197
+ '-b',
198
+ metavar='BUILDER',
199
+ dest='builder',
200
+ default='html',
201
+ help=__("builder to use (default: 'html')"),
202
+ )
203
+ group.add_argument(
204
+ '--jobs',
205
+ '-j',
206
+ metavar='N',
207
+ default=1,
208
+ type=jobs_argument,
209
+ dest='jobs',
210
+ help=__(
211
+ 'run in parallel with N processes, when possible. '
212
+ "'auto' uses the number of CPU cores"
213
+ ),
214
+ )
215
+ group.add_argument(
216
+ '--write-all',
217
+ '-a',
218
+ action='store_true',
219
+ dest='force_all',
220
+ help=__('write all files (default: only write new and ' 'changed files)'),
221
+ )
222
+ group.add_argument(
223
+ '--fresh-env',
224
+ '-E',
225
+ action='store_true',
226
+ dest='freshenv',
227
+ help=__("don't use a saved environment, always read " 'all files'),
228
+ )
160
229
 
161
230
  group = parser.add_argument_group(__('path options'))
162
- group.add_argument('--doctree-dir', '-d', metavar='PATH', dest='doctreedir',
163
- help=__('directory for doctree and environment files '
164
- '(default: OUTPUT_DIR/.doctrees)'))
165
- group.add_argument('--conf-dir', '-c', metavar='PATH', dest='confdir',
166
- help=__('directory for the configuration file (conf.py) '
167
- '(default: SOURCE_DIR)'))
231
+ group.add_argument(
232
+ '--doctree-dir',
233
+ '-d',
234
+ metavar='PATH',
235
+ dest='doctreedir',
236
+ help=__(
237
+ 'directory for doctree and environment files '
238
+ '(default: OUTPUT_DIR/.doctrees)'
239
+ ),
240
+ )
241
+ group.add_argument(
242
+ '--conf-dir',
243
+ '-c',
244
+ metavar='PATH',
245
+ dest='confdir',
246
+ help=__(
247
+ 'directory for the configuration file (conf.py) ' '(default: SOURCE_DIR)'
248
+ ),
249
+ )
168
250
 
169
251
  group = parser.add_argument_group('build configuration options')
170
- group.add_argument('--isolated', '-C', action='store_true', dest='noconfig',
171
- help=__('use no configuration file, only use settings from -D options'))
172
- group.add_argument('--define', '-D', metavar='setting=value', action='append',
173
- dest='define', default=[],
174
- help=__('override a setting in configuration file'))
175
- group.add_argument('--html-define', '-A', metavar='name=value', action='append',
176
- dest='htmldefine', default=[],
177
- help=__('pass a value into HTML templates'))
178
- group.add_argument('--tag', '-t', metavar='TAG', action='append',
179
- dest='tags', default=[],
180
- help=__('define tag: include "only" blocks with TAG'))
181
- group.add_argument('--nitpicky', '-n', action='store_true', dest='nitpicky',
182
- help=__('nitpicky mode: warn about all missing references'))
252
+ group.add_argument(
253
+ '--isolated',
254
+ '-C',
255
+ action='store_true',
256
+ dest='noconfig',
257
+ help=__('use no configuration file, only use settings from -D options'),
258
+ )
259
+ group.add_argument(
260
+ '--define',
261
+ '-D',
262
+ metavar='setting=value',
263
+ action='append',
264
+ dest='define',
265
+ default=[],
266
+ help=__('override a setting in configuration file'),
267
+ )
268
+ group.add_argument(
269
+ '--html-define',
270
+ '-A',
271
+ metavar='name=value',
272
+ action='append',
273
+ dest='htmldefine',
274
+ default=[],
275
+ help=__('pass a value into HTML templates'),
276
+ )
277
+ group.add_argument(
278
+ '--tag',
279
+ '-t',
280
+ metavar='TAG',
281
+ action='append',
282
+ dest='tags',
283
+ default=[],
284
+ help=__('define tag: include "only" blocks with TAG'),
285
+ )
286
+ group.add_argument(
287
+ '--nitpicky',
288
+ '-n',
289
+ action='store_true',
290
+ dest='nitpicky',
291
+ help=__('nitpicky mode: warn about all missing references'),
292
+ )
183
293
 
184
294
  group = parser.add_argument_group(__('console output options'))
185
- group.add_argument('--verbose', '-v', action='count', dest='verbosity',
186
- default=0,
187
- help=__('increase verbosity (can be repeated)'))
188
- group.add_argument('--quiet', '-q', action='store_true', dest='quiet',
189
- help=__('no output on stdout, just warnings on stderr'))
190
- group.add_argument('--silent', '-Q', action='store_true', dest='really_quiet',
191
- help=__('no output at all, not even warnings'))
192
- group.add_argument('--color', action='store_const', dest='color',
193
- const='yes', default='auto',
194
- help=__('do emit colored output (default: auto-detect)'))
195
- group.add_argument('--no-color', '-N', action='store_const', dest='color',
196
- const='no',
197
- help=__('do not emit colored output (default: auto-detect)'))
295
+ group.add_argument(
296
+ '--verbose',
297
+ '-v',
298
+ action='count',
299
+ dest='verbosity',
300
+ default=0,
301
+ help=__('increase verbosity (can be repeated)'),
302
+ )
303
+ group.add_argument(
304
+ '--quiet',
305
+ '-q',
306
+ action='store_true',
307
+ dest='quiet',
308
+ help=__('no output on stdout, just warnings on stderr'),
309
+ )
310
+ group.add_argument(
311
+ '--silent',
312
+ '-Q',
313
+ action='store_true',
314
+ dest='really_quiet',
315
+ help=__('no output at all, not even warnings'),
316
+ )
317
+ group.add_argument(
318
+ '--color',
319
+ action='store_const',
320
+ dest='color',
321
+ const='yes',
322
+ default='auto',
323
+ help=__('do emit colored output (default: auto-detect)'),
324
+ )
325
+ group.add_argument(
326
+ '--no-color',
327
+ '-N',
328
+ action='store_const',
329
+ dest='color',
330
+ const='no',
331
+ help=__('do not emit colored output (default: auto-detect)'),
332
+ )
198
333
 
199
334
  group = parser.add_argument_group(__('warning control options'))
200
- group.add_argument('--warning-file', '-w', metavar='FILE', dest='warnfile',
201
- help=__('write warnings (and errors) to given file'))
202
- group.add_argument('--fail-on-warning', '-W', action='store_true', dest='warningiserror',
203
- help=__('turn warnings into errors'))
204
- group.add_argument('--keep-going', action='store_true', dest='keep_going',
205
- help=__("with --fail-on-warning, keep going when getting warnings"))
206
- group.add_argument('--show-traceback', '-T', action='store_true', dest='traceback',
207
- help=__('show full traceback on exception'))
208
- group.add_argument('--pdb', '-P', action='store_true', dest='pdb',
209
- help=__('run Pdb on exception'))
335
+ group.add_argument(
336
+ '--warning-file',
337
+ '-w',
338
+ metavar='FILE',
339
+ dest='warnfile',
340
+ help=__('write warnings (and errors) to given file'),
341
+ )
342
+ group.add_argument(
343
+ '--fail-on-warning',
344
+ '-W',
345
+ action='store_true',
346
+ dest='warningiserror',
347
+ help=__('turn warnings into errors'),
348
+ )
349
+ group.add_argument('--keep-going', action='store_true', help=argparse.SUPPRESS)
350
+ group.add_argument(
351
+ '--show-traceback',
352
+ '-T',
353
+ action='store_true',
354
+ dest='traceback',
355
+ help=__('show full traceback on exception'),
356
+ )
357
+ group.add_argument(
358
+ '--pdb', '-P', action='store_true', dest='pdb', help=__('run Pdb on exception')
359
+ )
360
+ group.add_argument(
361
+ '--exception-on-warning',
362
+ action='store_true',
363
+ dest='exception_on_warning',
364
+ help=__('raise an exception on warnings'),
365
+ )
366
+
367
+ if parser.prog == '__main__.py':
368
+ parser.prog = 'sphinx-build'
210
369
 
211
370
  return parser
212
371
 
@@ -214,11 +373,13 @@ files can be built by specifying individual filenames.
214
373
  def make_main(argv: Sequence[str]) -> int:
215
374
  """Sphinx build "make mode" entry."""
216
375
  from sphinx.cmd import make_mode
376
+
217
377
  return make_mode.run_make_mode(argv[1:])
218
378
 
219
379
 
220
- def _parse_arguments(parser: argparse.ArgumentParser,
221
- argv: Sequence[str]) -> argparse.Namespace:
380
+ def _parse_arguments(
381
+ parser: argparse.ArgumentParser, argv: Sequence[str]
382
+ ) -> argparse.Namespace:
222
383
  args = parser.parse_args(argv)
223
384
  return args
224
385
 
@@ -238,7 +399,9 @@ def _parse_doctreedir(doctreedir: str, outputdir: str) -> str:
238
399
 
239
400
 
240
401
  def _validate_filenames(
241
- parser: argparse.ArgumentParser, force_all: bool, filenames: list[str],
402
+ parser: argparse.ArgumentParser,
403
+ force_all: bool,
404
+ filenames: list[str],
242
405
  ) -> None:
243
406
  if force_all and filenames:
244
407
  parser.error(__('cannot combine -a option and filenames'))
@@ -271,10 +434,9 @@ def _parse_logging(
271
434
  warnfile = path.abspath(warnfile)
272
435
  ensuredir(path.dirname(warnfile))
273
436
  # the caller is responsible for closing this file descriptor
274
- warnfp = open(warnfile, 'w', encoding="utf-8") # NoQA: SIM115
437
+ warnfp = open(warnfile, 'w', encoding='utf-8') # NoQA: SIM115
275
438
  except Exception as exc:
276
- parser.error(__('cannot open warning file %r: %s') % (
277
- warnfile, exc))
439
+ parser.error(__('cannot open warning file %r: %s') % (warnfile, exc))
278
440
  warning = TeeStripANSI(warning, warnfp) # type: ignore[assignment]
279
441
  error = warning
280
442
 
@@ -321,19 +483,34 @@ def build_main(argv: Sequence[str]) -> int:
321
483
  _validate_filenames(parser, args.force_all, args.filenames)
322
484
  _validate_colour_support(args.color)
323
485
  args.status, args.warning, args.error, warnfp = _parse_logging(
324
- parser, args.quiet, args.really_quiet, args.warnfile)
486
+ parser, args.quiet, args.really_quiet, args.warnfile
487
+ )
325
488
  args.confoverrides = _parse_confoverrides(
326
- parser, args.define, args.htmldefine, args.nitpicky)
489
+ parser, args.define, args.htmldefine, args.nitpicky
490
+ )
327
491
 
328
492
  app = None
329
493
  try:
330
494
  confdir = args.confdir or args.sourcedir
331
495
  with patch_docutils(confdir), docutils_namespace():
332
- app = Sphinx(args.sourcedir, args.confdir, args.outputdir,
333
- args.doctreedir, args.builder, args.confoverrides, args.status,
334
- args.warning, args.freshenv, args.warningiserror,
335
- args.tags, args.verbosity, args.jobs, args.keep_going,
336
- args.pdb)
496
+ app = Sphinx(
497
+ srcdir=args.sourcedir,
498
+ confdir=args.confdir,
499
+ outdir=args.outputdir,
500
+ doctreedir=args.doctreedir,
501
+ buildername=args.builder,
502
+ confoverrides=args.confoverrides,
503
+ status=args.status,
504
+ warning=args.warning,
505
+ freshenv=args.freshenv,
506
+ warningiserror=args.warningiserror,
507
+ tags=args.tags,
508
+ verbosity=args.verbosity,
509
+ parallel=args.jobs,
510
+ keep_going=False,
511
+ pdb=args.pdb,
512
+ exception_on_warning=args.exception_on_warning,
513
+ )
337
514
  app.build(args.force_all, args.filenames)
338
515
  return app.statuscode
339
516
  except (Exception, KeyboardInterrupt) as exc:
@@ -379,7 +556,9 @@ def main(argv: Sequence[str] = (), /) -> int:
379
556
  if argv[:1] == ['--bug-report']:
380
557
  return _bug_report_info()
381
558
  if argv[:1] == ['-M']:
382
- return make_main(argv)
559
+ from sphinx.cmd import make_mode
560
+
561
+ return make_mode.run_make_mode(argv[1:])
383
562
  else:
384
563
  return build_main(argv)
385
564