Sphinx 7.3.6__py3-none-any.whl → 7.4.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 (357) hide show
  1. sphinx/__init__.py +5 -6
  2. sphinx/_cli/__init__.py +296 -0
  3. sphinx/_cli/util/__init__.py +0 -0
  4. sphinx/_cli/util/colour.py +103 -0
  5. sphinx/_cli/util/errors.py +165 -0
  6. sphinx/application.py +78 -43
  7. sphinx/builders/__init__.py +59 -15
  8. sphinx/builders/_epub_base.py +11 -5
  9. sphinx/builders/changes.py +2 -2
  10. sphinx/builders/epub3.py +2 -2
  11. sphinx/builders/gettext.py +10 -10
  12. sphinx/builders/html/__init__.py +56 -54
  13. sphinx/builders/latex/__init__.py +5 -5
  14. sphinx/builders/latex/constants.py +5 -0
  15. sphinx/builders/linkcheck.py +73 -38
  16. sphinx/builders/texinfo.py +1 -1
  17. sphinx/cmd/build.py +1 -1
  18. sphinx/cmd/quickstart.py +11 -11
  19. sphinx/config.py +57 -38
  20. sphinx/directives/__init__.py +7 -9
  21. sphinx/directives/code.py +12 -15
  22. sphinx/directives/other.py +12 -15
  23. sphinx/directives/patches.py +26 -0
  24. sphinx/domains/__init__.py +1 -1
  25. sphinx/domains/c/__init__.py +5 -5
  26. sphinx/domains/c/_ast.py +436 -12
  27. sphinx/domains/c/_symbol.py +89 -134
  28. sphinx/domains/changeset.py +3 -4
  29. sphinx/domains/cpp/__init__.py +5 -6
  30. sphinx/domains/cpp/_ast.py +822 -25
  31. sphinx/domains/cpp/_symbol.py +3 -0
  32. sphinx/domains/javascript.py +3 -6
  33. sphinx/domains/math.py +3 -2
  34. sphinx/domains/python/__init__.py +45 -6
  35. sphinx/domains/python/_object.py +7 -5
  36. sphinx/domains/rst.py +2 -2
  37. sphinx/domains/std/__init__.py +95 -14
  38. sphinx/environment/__init__.py +35 -15
  39. sphinx/environment/adapters/indexentries.py +71 -24
  40. sphinx/environment/adapters/toctree.py +1 -1
  41. sphinx/environment/collectors/__init__.py +18 -4
  42. sphinx/environment/collectors/asset.py +4 -4
  43. sphinx/environment/collectors/toctree.py +27 -14
  44. sphinx/events.py +7 -6
  45. sphinx/ext/apidoc.py +377 -170
  46. sphinx/ext/autodoc/__init__.py +13 -13
  47. sphinx/ext/autodoc/directive.py +10 -13
  48. sphinx/ext/autodoc/mock.py +10 -7
  49. sphinx/ext/autodoc/preserve_defaults.py +1 -1
  50. sphinx/ext/autodoc/typehints.py +2 -2
  51. sphinx/ext/autosummary/__init__.py +15 -9
  52. sphinx/ext/autosummary/generate.py +270 -154
  53. sphinx/ext/coverage.py +108 -18
  54. sphinx/ext/duration.py +10 -3
  55. sphinx/ext/extlinks.py +3 -2
  56. sphinx/ext/graphviz.py +3 -3
  57. sphinx/ext/ifconfig.py +1 -2
  58. sphinx/ext/imgconverter.py +1 -0
  59. sphinx/ext/imgmath.py +7 -6
  60. sphinx/ext/inheritance_diagram.py +3 -3
  61. sphinx/ext/intersphinx/__init__.py +81 -0
  62. sphinx/ext/intersphinx/__main__.py +10 -0
  63. sphinx/ext/intersphinx/_cli.py +44 -0
  64. sphinx/ext/intersphinx/_load.py +253 -0
  65. sphinx/ext/{intersphinx.py → intersphinx/_resolve.py} +17 -368
  66. sphinx/ext/intersphinx/_shared.py +53 -0
  67. sphinx/ext/mathjax.py +1 -1
  68. sphinx/ext/todo.py +2 -2
  69. sphinx/io.py +2 -6
  70. sphinx/locale/__init__.py +1 -5
  71. sphinx/locale/ar/LC_MESSAGES/sphinx.js +1 -1
  72. sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
  73. sphinx/locale/ar/LC_MESSAGES/sphinx.po +678 -471
  74. sphinx/locale/bg/LC_MESSAGES/sphinx.js +1 -1
  75. sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
  76. sphinx/locale/bg/LC_MESSAGES/sphinx.po +684 -476
  77. sphinx/locale/bn/LC_MESSAGES/sphinx.js +1 -1
  78. sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
  79. sphinx/locale/bn/LC_MESSAGES/sphinx.po +679 -472
  80. sphinx/locale/ca/LC_MESSAGES/sphinx.js +1 -1
  81. sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
  82. sphinx/locale/ca/LC_MESSAGES/sphinx.po +681 -474
  83. sphinx/locale/cak/LC_MESSAGES/sphinx.js +1 -1
  84. sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
  85. sphinx/locale/cak/LC_MESSAGES/sphinx.po +678 -471
  86. sphinx/locale/cs/LC_MESSAGES/sphinx.js +1 -1
  87. sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
  88. sphinx/locale/cs/LC_MESSAGES/sphinx.po +679 -472
  89. sphinx/locale/cy/LC_MESSAGES/sphinx.js +1 -1
  90. sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
  91. sphinx/locale/cy/LC_MESSAGES/sphinx.po +679 -472
  92. sphinx/locale/da/LC_MESSAGES/sphinx.js +1 -1
  93. sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
  94. sphinx/locale/da/LC_MESSAGES/sphinx.po +679 -472
  95. sphinx/locale/de/LC_MESSAGES/sphinx.js +1 -1
  96. sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
  97. sphinx/locale/de/LC_MESSAGES/sphinx.po +679 -472
  98. sphinx/locale/de_DE/LC_MESSAGES/sphinx.js +1 -1
  99. sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
  100. sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +678 -471
  101. sphinx/locale/el/LC_MESSAGES/sphinx.js +1 -1
  102. sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
  103. sphinx/locale/el/LC_MESSAGES/sphinx.po +701 -494
  104. sphinx/locale/en_DE/LC_MESSAGES/sphinx.js +1 -1
  105. sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
  106. sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +700 -493
  107. sphinx/locale/en_FR/LC_MESSAGES/sphinx.js +1 -1
  108. sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
  109. sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +700 -493
  110. sphinx/locale/en_GB/LC_MESSAGES/sphinx.js +1 -1
  111. sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
  112. sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +701 -494
  113. sphinx/locale/en_HK/LC_MESSAGES/sphinx.js +1 -1
  114. sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
  115. sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +700 -493
  116. sphinx/locale/eo/LC_MESSAGES/sphinx.js +1 -1
  117. sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
  118. sphinx/locale/eo/LC_MESSAGES/sphinx.po +701 -494
  119. sphinx/locale/es/LC_MESSAGES/sphinx.js +1 -1
  120. sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
  121. sphinx/locale/es/LC_MESSAGES/sphinx.po +701 -494
  122. sphinx/locale/es_CO/LC_MESSAGES/sphinx.js +1 -1
  123. sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
  124. sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +700 -493
  125. sphinx/locale/et/LC_MESSAGES/sphinx.js +1 -1
  126. sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
  127. sphinx/locale/et/LC_MESSAGES/sphinx.po +701 -494
  128. sphinx/locale/eu/LC_MESSAGES/sphinx.js +1 -1
  129. sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
  130. sphinx/locale/eu/LC_MESSAGES/sphinx.po +701 -494
  131. sphinx/locale/fa/LC_MESSAGES/sphinx.js +1 -1
  132. sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
  133. sphinx/locale/fa/LC_MESSAGES/sphinx.po +701 -494
  134. sphinx/locale/fi/LC_MESSAGES/sphinx.js +1 -1
  135. sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
  136. sphinx/locale/fi/LC_MESSAGES/sphinx.po +700 -493
  137. sphinx/locale/fr/LC_MESSAGES/sphinx.js +1 -1
  138. sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
  139. sphinx/locale/fr/LC_MESSAGES/sphinx.po +725 -518
  140. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.js +1 -1
  141. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
  142. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +700 -493
  143. sphinx/locale/gl/LC_MESSAGES/sphinx.js +1 -1
  144. sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
  145. sphinx/locale/gl/LC_MESSAGES/sphinx.po +701 -494
  146. sphinx/locale/he/LC_MESSAGES/sphinx.js +1 -1
  147. sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
  148. sphinx/locale/he/LC_MESSAGES/sphinx.po +700 -493
  149. sphinx/locale/hi/LC_MESSAGES/sphinx.js +1 -1
  150. sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
  151. sphinx/locale/hi/LC_MESSAGES/sphinx.po +701 -494
  152. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.js +1 -1
  153. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
  154. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +700 -493
  155. sphinx/locale/hr/LC_MESSAGES/sphinx.js +1 -1
  156. sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
  157. sphinx/locale/hr/LC_MESSAGES/sphinx.po +701 -494
  158. sphinx/locale/hu/LC_MESSAGES/sphinx.js +1 -1
  159. sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
  160. sphinx/locale/hu/LC_MESSAGES/sphinx.po +701 -494
  161. sphinx/locale/id/LC_MESSAGES/sphinx.js +1 -1
  162. sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
  163. sphinx/locale/id/LC_MESSAGES/sphinx.po +701 -494
  164. sphinx/locale/is/LC_MESSAGES/sphinx.js +1 -1
  165. sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
  166. sphinx/locale/is/LC_MESSAGES/sphinx.po +700 -493
  167. sphinx/locale/it/LC_MESSAGES/sphinx.js +1 -1
  168. sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
  169. sphinx/locale/it/LC_MESSAGES/sphinx.po +708 -500
  170. sphinx/locale/ja/LC_MESSAGES/sphinx.js +1 -1
  171. sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
  172. sphinx/locale/ja/LC_MESSAGES/sphinx.po +701 -494
  173. sphinx/locale/ka/LC_MESSAGES/sphinx.js +1 -1
  174. sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
  175. sphinx/locale/ka/LC_MESSAGES/sphinx.po +700 -493
  176. sphinx/locale/ko/LC_MESSAGES/sphinx.js +1 -1
  177. sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
  178. sphinx/locale/ko/LC_MESSAGES/sphinx.po +701 -494
  179. sphinx/locale/lt/LC_MESSAGES/sphinx.js +1 -1
  180. sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
  181. sphinx/locale/lt/LC_MESSAGES/sphinx.po +701 -494
  182. sphinx/locale/lv/LC_MESSAGES/sphinx.js +1 -1
  183. sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
  184. sphinx/locale/lv/LC_MESSAGES/sphinx.po +701 -494
  185. sphinx/locale/mk/LC_MESSAGES/sphinx.js +1 -1
  186. sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
  187. sphinx/locale/mk/LC_MESSAGES/sphinx.po +700 -493
  188. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +1 -1
  189. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
  190. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +701 -494
  191. sphinx/locale/ne/LC_MESSAGES/sphinx.js +1 -1
  192. sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
  193. sphinx/locale/ne/LC_MESSAGES/sphinx.po +701 -494
  194. sphinx/locale/nl/LC_MESSAGES/sphinx.js +1 -1
  195. sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
  196. sphinx/locale/nl/LC_MESSAGES/sphinx.po +701 -494
  197. sphinx/locale/pl/LC_MESSAGES/sphinx.js +1 -1
  198. sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
  199. sphinx/locale/pl/LC_MESSAGES/sphinx.po +701 -494
  200. sphinx/locale/pt/LC_MESSAGES/sphinx.js +1 -1
  201. sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
  202. sphinx/locale/pt/LC_MESSAGES/sphinx.po +700 -493
  203. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +1 -1
  204. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
  205. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +705 -498
  206. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js +1 -1
  207. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
  208. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +701 -494
  209. sphinx/locale/ro/LC_MESSAGES/sphinx.js +1 -1
  210. sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
  211. sphinx/locale/ro/LC_MESSAGES/sphinx.po +701 -494
  212. sphinx/locale/ru/LC_MESSAGES/sphinx.js +1 -1
  213. sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
  214. sphinx/locale/ru/LC_MESSAGES/sphinx.po +890 -680
  215. sphinx/locale/si/LC_MESSAGES/sphinx.js +1 -1
  216. sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
  217. sphinx/locale/si/LC_MESSAGES/sphinx.po +700 -493
  218. sphinx/locale/sk/LC_MESSAGES/sphinx.js +1 -1
  219. sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
  220. sphinx/locale/sk/LC_MESSAGES/sphinx.po +701 -494
  221. sphinx/locale/sl/LC_MESSAGES/sphinx.js +1 -1
  222. sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
  223. sphinx/locale/sl/LC_MESSAGES/sphinx.po +701 -494
  224. sphinx/locale/sphinx.pot +702 -494
  225. sphinx/locale/sq/LC_MESSAGES/sphinx.js +1 -1
  226. sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
  227. sphinx/locale/sq/LC_MESSAGES/sphinx.po +704 -497
  228. sphinx/locale/sr/LC_MESSAGES/sphinx.js +1 -1
  229. sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
  230. sphinx/locale/sr/LC_MESSAGES/sphinx.po +700 -493
  231. sphinx/locale/sr@latin/LC_MESSAGES/sphinx.mo +0 -0
  232. sphinx/locale/sr_RS/LC_MESSAGES/sphinx.mo +0 -0
  233. sphinx/locale/sv/LC_MESSAGES/sphinx.js +1 -1
  234. sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
  235. sphinx/locale/sv/LC_MESSAGES/sphinx.po +701 -494
  236. sphinx/locale/ta/LC_MESSAGES/sphinx.po +1016 -808
  237. sphinx/locale/te/LC_MESSAGES/sphinx.js +1 -1
  238. sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
  239. sphinx/locale/te/LC_MESSAGES/sphinx.po +700 -493
  240. sphinx/locale/tr/LC_MESSAGES/sphinx.js +1 -1
  241. sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
  242. sphinx/locale/tr/LC_MESSAGES/sphinx.po +701 -494
  243. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +1 -1
  244. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
  245. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +701 -494
  246. sphinx/locale/ur/LC_MESSAGES/sphinx.js +1 -1
  247. sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
  248. sphinx/locale/ur/LC_MESSAGES/sphinx.po +700 -493
  249. sphinx/locale/vi/LC_MESSAGES/sphinx.js +1 -1
  250. sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
  251. sphinx/locale/vi/LC_MESSAGES/sphinx.po +701 -494
  252. sphinx/locale/yue/LC_MESSAGES/sphinx.js +1 -1
  253. sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
  254. sphinx/locale/yue/LC_MESSAGES/sphinx.po +700 -493
  255. sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po +704 -496
  256. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.js +1 -1
  257. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
  258. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +700 -493
  259. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +1 -1
  260. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
  261. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +729 -522
  262. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.js +1 -1
  263. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
  264. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +700 -493
  265. sphinx/roles.py +1 -1
  266. sphinx/search/__init__.py +17 -9
  267. sphinx/templates/quickstart/{root_doc.rst_t → root_doc.rst.jinja} +7 -10
  268. sphinx/testing/fixtures.py +22 -20
  269. sphinx/testing/path.py +6 -2
  270. sphinx/testing/util.py +8 -13
  271. sphinx/texinputs/sphinx.sty +449 -332
  272. sphinx/texinputs/sphinxlatexadmonitions.sty +209 -66
  273. sphinx/texinputs/sphinxlatexliterals.sty +9 -16
  274. sphinx/texinputs/sphinxlatexstyletext.sty +4 -38
  275. sphinx/texinputs/sphinxlatextables.sty +6 -14
  276. sphinx/texinputs/sphinxpackageboxes.sty +15 -42
  277. sphinx/texinputs/sphinxpackagefootnote.sty +4 -3
  278. sphinx/themes/agogo/layout.html +3 -3
  279. sphinx/themes/basic/genindex-single.html +2 -1
  280. sphinx/themes/basic/layout.html +3 -6
  281. sphinx/themes/basic/static/searchtools.js +4 -3
  282. sphinx/themes/haiku/layout.html +4 -4
  283. sphinx/themes/pyramid/layout.html +1 -1
  284. sphinx/themes/scrolls/layout.html +2 -2
  285. sphinx/theming.py +42 -7
  286. sphinx/transforms/__init__.py +34 -20
  287. sphinx/transforms/i18n.py +8 -7
  288. sphinx/transforms/post_transforms/__init__.py +1 -1
  289. sphinx/transforms/post_transforms/images.py +7 -10
  290. sphinx/util/_pathlib.py +2 -2
  291. sphinx/util/cfamily.py +52 -30
  292. sphinx/util/console.py +1 -1
  293. sphinx/util/display.py +16 -11
  294. sphinx/util/docutils.py +88 -40
  295. sphinx/util/fileutil.py +15 -3
  296. sphinx/util/images.py +1 -0
  297. sphinx/util/inspect.py +66 -22
  298. sphinx/util/inventory.py +15 -0
  299. sphinx/util/logging.py +14 -21
  300. sphinx/util/math.py +3 -1
  301. sphinx/util/nodes.py +9 -12
  302. sphinx/util/osutil.py +5 -5
  303. sphinx/util/parsing.py +93 -0
  304. sphinx/util/tags.py +71 -47
  305. sphinx/util/typing.py +261 -143
  306. sphinx/versioning.py +17 -17
  307. sphinx/writers/html5.py +26 -19
  308. sphinx/writers/latex.py +58 -28
  309. sphinx/writers/manpage.py +4 -3
  310. sphinx/writers/texinfo.py +19 -14
  311. {sphinx-7.3.6.dist-info → sphinx-7.4.0.dist-info}/METADATA +21 -20
  312. sphinx-7.4.0.dist-info/RECORD +591 -0
  313. sphinx-7.3.6.dist-info/RECORD +0 -581
  314. /sphinx/templates/apidoc/{module.rst_t → module.rst.jinja} +0 -0
  315. /sphinx/templates/apidoc/{package.rst_t → package.rst.jinja} +0 -0
  316. /sphinx/templates/apidoc/{toc.rst_t → toc.rst.jinja} +0 -0
  317. /sphinx/templates/epub3/{content.opf_t → content.opf.jinja} +0 -0
  318. /sphinx/templates/epub3/{nav.xhtml_t → nav.xhtml.jinja} +0 -0
  319. /sphinx/templates/epub3/{toc.ncx_t → toc.ncx.jinja} +0 -0
  320. /sphinx/templates/gettext/{message.pot_t → message.pot.jinja} +0 -0
  321. /sphinx/templates/imgmath/{preview.tex_t → preview.tex.jinja} +0 -0
  322. /sphinx/templates/imgmath/{template.tex_t → template.tex.jinja} +0 -0
  323. /sphinx/templates/latex/{latex.tex_t → latex.tex.jinja} +0 -0
  324. /sphinx/templates/latex/{longtable.tex_t → longtable.tex.jinja} +0 -0
  325. /sphinx/templates/latex/{sphinxmessages.sty_t → sphinxmessages.sty.jinja} +0 -0
  326. /sphinx/templates/latex/{tabular.tex_t → tabular.tex.jinja} +0 -0
  327. /sphinx/templates/latex/{tabulary.tex_t → tabulary.tex.jinja} +0 -0
  328. /sphinx/templates/quickstart/{Makefile_t → Makefile.jinja} +0 -0
  329. /sphinx/templates/quickstart/{Makefile.new_t → Makefile.new.jinja} +0 -0
  330. /sphinx/templates/quickstart/{conf.py_t → conf.py.jinja} +0 -0
  331. /sphinx/templates/quickstart/{make.bat_t → make.bat.jinja} +0 -0
  332. /sphinx/templates/quickstart/{make.bat.new_t → make.bat.new.jinja} +0 -0
  333. /sphinx/texinputs/{Makefile_t → Makefile.jinja} +0 -0
  334. /sphinx/texinputs/{latexmkjarc_t → latexmkjarc.jinja} +0 -0
  335. /sphinx/texinputs/{latexmkrc_t → latexmkrc.jinja} +0 -0
  336. /sphinx/texinputs/{make.bat_t → make.bat.jinja} +0 -0
  337. /sphinx/texinputs_win/{Makefile_t → Makefile.jinja} +0 -0
  338. /sphinx/themes/agogo/static/{agogo.css_t → agogo.css.jinja} +0 -0
  339. /sphinx/themes/basic/static/{basic.css_t → basic.css.jinja} +0 -0
  340. /sphinx/themes/basic/static/{documentation_options.js_t → documentation_options.js.jinja} +0 -0
  341. /sphinx/themes/basic/static/{language_data.js_t → language_data.js.jinja} +0 -0
  342. /sphinx/themes/bizstyle/static/{bizstyle.css_t → bizstyle.css.jinja} +0 -0
  343. /sphinx/themes/bizstyle/static/{bizstyle.js_t → bizstyle.js.jinja} +0 -0
  344. /sphinx/themes/classic/static/{classic.css_t → classic.css.jinja} +0 -0
  345. /sphinx/themes/classic/static/{sidebar.js_t → sidebar.js.jinja} +0 -0
  346. /sphinx/themes/epub/static/{epub.css_t → epub.css.jinja} +0 -0
  347. /sphinx/themes/haiku/static/{haiku.css_t → haiku.css.jinja} +0 -0
  348. /sphinx/themes/nature/static/{nature.css_t → nature.css.jinja} +0 -0
  349. /sphinx/themes/nonav/static/{nonav.css_t → nonav.css.jinja} +0 -0
  350. /sphinx/themes/pyramid/static/{epub.css_t → epub.css.jinja} +0 -0
  351. /sphinx/themes/pyramid/static/{pyramid.css_t → pyramid.css.jinja} +0 -0
  352. /sphinx/themes/scrolls/static/{scrolls.css_t → scrolls.css.jinja} +0 -0
  353. /sphinx/themes/sphinxdoc/static/{sphinxdoc.css_t → sphinxdoc.css.jinja} +0 -0
  354. /sphinx/themes/traditional/static/{traditional.css_t → traditional.css.jinja} +0 -0
  355. {sphinx-7.3.6.dist-info → sphinx-7.4.0.dist-info}/LICENSE.rst +0 -0
  356. {sphinx-7.3.6.dist-info → sphinx-7.4.0.dist-info}/WHEEL +0 -0
  357. {sphinx-7.3.6.dist-info → sphinx-7.4.0.dist-info}/entry_points.txt +0 -0
sphinx/writers/html5.py CHANGED
@@ -59,7 +59,6 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
59
59
 
60
60
  self.highlighter = self.builder.highlighter
61
61
  self.docnames = [self.builder.current_docname] # for singlehtml builder
62
- self.manpages_url = self.config.manpages_url
63
62
  self.protect_literal_text = 0
64
63
  self.secnumber_suffix = self.config.html_secnumber_suffix
65
64
  self.param_separator = ''
@@ -325,6 +324,8 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
325
324
  atts['title'] = node['reftitle']
326
325
  if 'target' in node:
327
326
  atts['target'] = node['target']
327
+ if 'rel' in node:
328
+ atts['rel'] = node['rel']
328
329
  self.body.append(self.starttag(node, 'a', '', **atts))
329
330
 
330
331
  if node.get('secnumber'):
@@ -508,6 +509,30 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
508
509
 
509
510
  super().depart_title(node)
510
511
 
512
+ # overwritten
513
+ def visit_rubric(self, node: Element) -> None:
514
+ if "level" in node:
515
+ level = node["level"]
516
+ if level in (1, 2, 3, 4, 5, 6):
517
+ self.body.append(self.starttag(node, f'h{level}', '', CLASS='rubric'))
518
+ else:
519
+ logger.warning(
520
+ __('unsupported rubric heading level: %s'),
521
+ level,
522
+ type='html',
523
+ location=node
524
+ )
525
+ super().visit_rubric(node)
526
+ else:
527
+ super().visit_rubric(node)
528
+
529
+ # overwritten
530
+ def depart_rubric(self, node: Element) -> None:
531
+ if level := node.get("level"):
532
+ self.body.append(f'</h{level}>\n')
533
+ else:
534
+ super().depart_rubric(node)
535
+
511
536
  # overwritten
512
537
  def visit_literal_block(self, node: Element) -> None:
513
538
  if node.rawsource != node.astext():
@@ -694,24 +719,6 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
694
719
  if 'height' not in node:
695
720
  node['height'] = str(size[1])
696
721
 
697
- uri = node['uri']
698
- if uri.lower().endswith(('svg', 'svgz')):
699
- atts = {'src': uri}
700
- if 'width' in node:
701
- atts['width'] = node['width']
702
- if 'height' in node:
703
- atts['height'] = node['height']
704
- if 'scale' in node:
705
- if 'width' in atts:
706
- atts['width'] = multiply_length(atts['width'], node['scale'])
707
- if 'height' in atts:
708
- atts['height'] = multiply_length(atts['height'], node['scale'])
709
- atts['alt'] = node.get('alt', uri)
710
- if 'align' in node:
711
- atts['class'] = 'align-%s' % node['align']
712
- self.body.append(self.emptytag(node, 'img', '', **atts))
713
- return
714
-
715
722
  super().visit_image(node)
716
723
 
717
724
  # overwritten
sphinx/writers/latex.py CHANGED
@@ -332,8 +332,8 @@ class LaTeXTranslator(SphinxTranslator):
332
332
  self.top_sectionlevel = \
333
333
  self.sectionnames.index(self.config.latex_toplevel_sectioning)
334
334
  except ValueError:
335
- logger.warning(__('unknown %r toplevel_sectioning for class %r') %
336
- (self.config.latex_toplevel_sectioning, self.theme.docclass))
335
+ logger.warning(__('unknown %r toplevel_sectioning for class %r'),
336
+ self.config.latex_toplevel_sectioning, self.theme.docclass)
337
337
 
338
338
  if self.config.numfig:
339
339
  self.numfig_secnum_depth = self.config.numfig_secnum_depth
@@ -437,7 +437,7 @@ class LaTeXTranslator(SphinxTranslator):
437
437
  'body': ''.join(self.body),
438
438
  'indices': self.generate_indices(),
439
439
  })
440
- return self.render('latex.tex_t', self.elements)
440
+ return self.render('latex.tex.jinja', self.elements)
441
441
 
442
442
  def hypertarget(self, id: str, withdoc: bool = True, anchor: bool = True) -> str:
443
443
  if withdoc:
@@ -497,20 +497,23 @@ class LaTeXTranslator(SphinxTranslator):
497
497
 
498
498
  ret = []
499
499
  # latex_domain_indices can be False/True or a list of index names
500
- indices_config = self.config.latex_domain_indices
501
- if indices_config:
502
- for domain in self.builder.env.domains.values():
503
- for indexcls in domain.indices:
504
- indexname = f'{domain.name}-{indexcls.name}'
505
- if isinstance(indices_config, list):
506
- if indexname not in indices_config:
507
- continue
508
- content, collapsed = indexcls(domain).generate(
509
- self.builder.docnames)
510
- if not content:
500
+ if indices_config := self.config.latex_domain_indices:
501
+ if not isinstance(indices_config, bool):
502
+ check_names = True
503
+ indices_config = frozenset(indices_config)
504
+ else:
505
+ check_names = False
506
+ for domain_name in sorted(self.builder.env.domains):
507
+ domain = self.builder.env.domains[domain_name]
508
+ for index_cls in domain.indices:
509
+ index_name = f'{domain.name}-{index_cls.name}'
510
+ if check_names and index_name not in indices_config:
511
511
  continue
512
- ret.append(r'\renewcommand{\indexname}{%s}' % indexcls.localname + CR)
513
- generate(content, collapsed)
512
+ content, collapsed = index_cls(domain).generate(
513
+ self.builder.docnames)
514
+ if content:
515
+ ret.append(r'\renewcommand{\indexname}{%s}' % index_cls.localname + CR)
516
+ generate(content, collapsed)
514
517
 
515
518
  return ''.join(ret)
516
519
 
@@ -521,6 +524,12 @@ class LaTeXTranslator(SphinxTranslator):
521
524
  template_name)
522
525
  if path.exists(template):
523
526
  return renderer.render(template, variables)
527
+ elif template.endswith('.jinja'):
528
+ legacy_template = template.removesuffix('.jinja') + '_t'
529
+ if path.exists(legacy_template):
530
+ logger.warning(__('template %s not found; loading from legacy %s instead'),
531
+ template_name, legacy_template)
532
+ return renderer.render(legacy_template, variables)
524
533
 
525
534
  return renderer.render(template_name, variables)
526
535
 
@@ -715,19 +724,21 @@ class LaTeXTranslator(SphinxTranslator):
715
724
  return e.get('multi_line_parameter_list')
716
725
 
717
726
  self.has_tp_list = False
727
+ self.orphan_tp_list = False
718
728
 
719
729
  for child in node:
720
730
  if isinstance(child, addnodes.desc_type_parameter_list):
721
731
  self.has_tp_list = True
722
- # recall that return annotations must follow an argument list,
723
- # so signatures of the form "foo[tp_list] -> retann" will not
724
- # be encountered (if they should, the `domains.python.py_sig_re`
725
- # pattern must be modified accordingly)
726
- arglist = next_sibling(child)
727
- assert isinstance(arglist, addnodes.desc_parameterlist)
728
- # tp_list + arglist: \macro{name}{tp_list}{arglist}{return}
729
732
  multi_tp_list = has_multi_line(child)
730
- multi_arglist = has_multi_line(arglist)
733
+ arglist = next_sibling(child)
734
+ if isinstance(arglist, addnodes.desc_parameterlist):
735
+ # tp_list + arglist: \macro{name}{tp_list}{arglist}{retann}
736
+ multi_arglist = has_multi_line(arglist)
737
+ else:
738
+ # orphan tp_list: \macro{name}{tp_list}{}{retann}
739
+ # see: https://github.com/sphinx-doc/sphinx/issues/12543
740
+ self.orphan_tp_list = True
741
+ multi_arglist = False
731
742
 
732
743
  if multi_tp_list:
733
744
  if multi_arglist:
@@ -742,7 +753,7 @@ class LaTeXTranslator(SphinxTranslator):
742
753
  break
743
754
 
744
755
  if isinstance(child, addnodes.desc_parameterlist):
745
- # arglist only: \macro{name}{arglist}{return}
756
+ # arglist only: \macro{name}{arglist}{retann}
746
757
  if has_multi_line(child):
747
758
  self.body.append(CR + r'\pysigwithonelineperarg{')
748
759
  else:
@@ -848,7 +859,13 @@ class LaTeXTranslator(SphinxTranslator):
848
859
  self.multi_line_parameter_list = node.get('multi_line_parameter_list', False)
849
860
 
850
861
  def visit_desc_parameterlist(self, node: Element) -> None:
851
- if not self.has_tp_list:
862
+ if self.has_tp_list:
863
+ if self.orphan_tp_list:
864
+ # close type parameters list (#2)
865
+ self.body.append('}{')
866
+ # empty parameters list argument (#3)
867
+ return
868
+ else:
852
869
  # close name argument (#1), open parameters list argument (#2)
853
870
  self.body.append('}{')
854
871
  self._visit_sig_parameter_list(node, addnodes.desc_parameter)
@@ -958,7 +975,20 @@ class LaTeXTranslator(SphinxTranslator):
958
975
  def visit_rubric(self, node: Element) -> None:
959
976
  if len(node) == 1 and node.astext() in ('Footnotes', _('Footnotes')):
960
977
  raise nodes.SkipNode
961
- self.body.append(r'\subsubsection*{')
978
+ tag = 'subsubsection'
979
+ if "level" in node:
980
+ level = node["level"]
981
+ try:
982
+ tag = self.sectionnames[self.top_sectionlevel - 1 + level]
983
+ except Exception:
984
+ logger.warning(
985
+ __('unsupported rubric heading level: %s'),
986
+ level,
987
+ type='latex',
988
+ location=node
989
+ )
990
+
991
+ self.body.append(rf'\{tag}*{{')
962
992
  self.context.append('}' + CR)
963
993
  self.in_title = 1
964
994
 
@@ -1033,7 +1063,7 @@ class LaTeXTranslator(SphinxTranslator):
1033
1063
  assert self.table is not None
1034
1064
  labels = self.hypertarget_to(node)
1035
1065
  table_type = self.table.get_table_type()
1036
- table = self.render(table_type + '.tex_t',
1066
+ table = self.render(table_type + '.tex.jinja',
1037
1067
  {'table': self.table, 'labels': labels})
1038
1068
  self.body.append(BLANKLINE)
1039
1069
  self.body.append(table)
sphinx/writers/manpage.py CHANGED
@@ -309,7 +309,8 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
309
309
  # overwritten -- don't visit inner marked up nodes
310
310
  def visit_reference(self, node: Element) -> None:
311
311
  uri = node.get('refuri', '')
312
- if uri:
312
+ is_safe_to_click = uri.startswith(('mailto:', 'http:', 'https:', 'ftp:'))
313
+ if is_safe_to_click:
313
314
  # OSC 8 link start (using groff's device control directive).
314
315
  self.body.append(fr"\X'tty: link {uri}'")
315
316
 
@@ -319,7 +320,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
319
320
  self.visit_Text(node)
320
321
  self.body.append(self.defs['reference'][1])
321
322
 
322
- if uri.startswith(('mailto:', 'http:', 'https:', 'ftp:')):
323
+ if uri and not uri.startswith('#'):
323
324
  # if configured, put the URL after the link
324
325
  if self.config.man_show_urls and node.astext() != uri:
325
326
  if uri.startswith('mailto:'):
@@ -328,7 +329,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
328
329
  ' <',
329
330
  self.defs['strong'][0], uri, self.defs['strong'][1],
330
331
  '>'])
331
- if uri:
332
+ if is_safe_to_click:
332
333
  # OSC 8 link end.
333
334
  self.body.append(r"\X'tty: link'")
334
335
  raise nodes.SkipNode
sphinx/writers/texinfo.py CHANGED
@@ -476,20 +476,25 @@ class TexinfoTranslator(SphinxTranslator):
476
476
  ret.append('@end menu\n')
477
477
  return ''.join(ret)
478
478
 
479
- indices_config = self.config.texinfo_domain_indices
480
- if indices_config:
481
- for domain in self.builder.env.domains.values():
482
- for indexcls in domain.indices:
483
- indexname = f'{domain.name}-{indexcls.name}'
484
- if isinstance(indices_config, list):
485
- if indexname not in indices_config:
486
- continue
487
- content, collapsed = indexcls(domain).generate(
488
- self.builder.docnames)
489
- if not content:
479
+ if indices_config := self.config.texinfo_domain_indices:
480
+ if not isinstance(indices_config, bool):
481
+ check_names = True
482
+ indices_config = frozenset(indices_config)
483
+ else:
484
+ check_names = False
485
+ for domain_name in sorted(self.builder.env.domains):
486
+ domain = self.builder.env.domains[domain_name]
487
+ for index_cls in domain.indices:
488
+ index_name = f'{domain.name}-{index_cls.name}'
489
+ if check_names and index_name not in indices_config:
490
490
  continue
491
- self.indices.append((indexcls.localname,
492
- generate(content, collapsed)))
491
+ content, collapsed = index_cls(domain).generate(
492
+ self.builder.docnames)
493
+ if content:
494
+ self.indices.append((
495
+ index_cls.localname,
496
+ generate(content, collapsed),
497
+ ))
493
498
  # only add the main Index if it's not empty
494
499
  domain = cast(IndexDomain, self.builder.env.get_domain('index'))
495
500
  for docname in self.builder.docnames:
@@ -691,7 +696,7 @@ class TexinfoTranslator(SphinxTranslator):
691
696
  # cases for the sake of appearance
692
697
  if isinstance(node.parent, (nodes.title, addnodes.desc_type)):
693
698
  return
694
- if isinstance(node[0], nodes.image):
699
+ if len(node) != 0 and isinstance(node[0], nodes.image):
695
700
  return
696
701
  name = node.get('name', node.astext()).strip()
697
702
  uri = node.get('refuri', '')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Sphinx
3
- Version: 7.3.6
3
+ Version: 7.4.0
4
4
  Summary: Python documentation generator
5
5
  Author-email: Georg Brandl <georg@python.org>
6
6
  Requires-Python: >=3.9
@@ -48,32 +48,33 @@ Requires-Dist: sphinxcontrib-jsmath
48
48
  Requires-Dist: sphinxcontrib-htmlhelp>=2.0.0
49
49
  Requires-Dist: sphinxcontrib-serializinghtml>=1.1.9
50
50
  Requires-Dist: sphinxcontrib-qthelp
51
- Requires-Dist: Jinja2>=3.0
52
- Requires-Dist: Pygments>=2.14
53
- Requires-Dist: docutils>=0.18.1,<0.22
54
- Requires-Dist: snowballstemmer>=2.0
55
- Requires-Dist: babel>=2.9
51
+ Requires-Dist: Jinja2>=3.1
52
+ Requires-Dist: Pygments>=2.17
53
+ Requires-Dist: docutils>=0.20,<0.22
54
+ Requires-Dist: snowballstemmer>=2.2
55
+ Requires-Dist: babel>=2.13
56
56
  Requires-Dist: alabaster~=0.7.14
57
57
  Requires-Dist: imagesize>=1.3
58
- Requires-Dist: requests>=2.25.0
59
- Requires-Dist: packaging>=21.0
60
- Requires-Dist: importlib-metadata>=4.8; python_version < '3.10'
58
+ Requires-Dist: requests>=2.30.0
59
+ Requires-Dist: packaging>=23.0
60
+ Requires-Dist: importlib-metadata>=6.0; python_version < '3.10'
61
61
  Requires-Dist: tomli>=2; python_version < '3.11'
62
- Requires-Dist: colorama>=0.4.5; sys_platform == 'win32'
62
+ Requires-Dist: colorama>=0.4.6; sys_platform == 'win32'
63
63
  Requires-Dist: sphinxcontrib-websupport ; extra == "docs"
64
- Requires-Dist: flake8>=3.5.0 ; extra == "lint"
65
- Requires-Dist: ruff==0.3.7 ; extra == "lint"
66
- Requires-Dist: mypy==1.9.0 ; extra == "lint"
67
- Requires-Dist: sphinx-lint ; extra == "lint"
68
- Requires-Dist: types-docutils ; extra == "lint"
69
- Requires-Dist: types-requests ; extra == "lint"
70
- Requires-Dist: importlib_metadata ; extra == "lint"
71
- Requires-Dist: tomli ; extra == "lint"
64
+ Requires-Dist: flake8>=6.0 ; extra == "lint"
65
+ Requires-Dist: ruff==0.5.2 ; extra == "lint"
66
+ Requires-Dist: mypy==1.10.1 ; extra == "lint"
67
+ Requires-Dist: sphinx-lint>=0.9 ; extra == "lint"
68
+ Requires-Dist: types-docutils==0.21.0.20240711 ; extra == "lint"
69
+ Requires-Dist: types-requests>=2.30.0 ; extra == "lint"
70
+ Requires-Dist: importlib-metadata>=6.0 ; extra == "lint"
71
+ Requires-Dist: tomli>=2 ; extra == "lint"
72
72
  Requires-Dist: pytest>=6.0 ; extra == "lint"
73
- Requires-Dist: pytest>=6.0 ; extra == "test"
73
+ Requires-Dist: pytest>=8.0 ; extra == "test"
74
74
  Requires-Dist: defusedxml>=0.7.1 ; extra == "test"
75
75
  Requires-Dist: cython>=3.0 ; extra == "test"
76
- Requires-Dist: setuptools>=67.0 ; extra == "test"
76
+ Requires-Dist: setuptools>=70.0 ; extra == "test"
77
+ Requires-Dist: typing_extensions>=4.9 ; extra == "test"
77
78
  Project-URL: Changelog, https://www.sphinx-doc.org/en/master/changes.html
78
79
  Project-URL: Code, https://github.com/sphinx-doc/sphinx
79
80
  Project-URL: Download, https://pypi.org/project/Sphinx/