Sphinx 8.0.2__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.
- sphinx/__init__.py +6 -3
- sphinx/_cli/__init__.py +40 -20
- sphinx/_cli/util/colour.py +5 -4
- sphinx/_cli/util/errors.py +28 -11
- sphinx/application.py +361 -38
- sphinx/builders/__init__.py +229 -83
- sphinx/builders/_epub_base.py +118 -71
- sphinx/builders/changes.py +39 -21
- sphinx/builders/dirhtml.py +4 -4
- sphinx/builders/dummy.py +2 -5
- sphinx/builders/epub3.py +43 -22
- sphinx/builders/gettext.py +43 -25
- sphinx/builders/html/__init__.py +284 -218
- sphinx/builders/html/_assets.py +62 -26
- sphinx/builders/html/_build_info.py +76 -0
- sphinx/builders/html/transforms.py +11 -9
- sphinx/builders/latex/__init__.py +139 -81
- sphinx/builders/latex/constants.py +7 -7
- sphinx/builders/latex/nodes.py +3 -2
- sphinx/builders/latex/theming.py +7 -5
- sphinx/builders/latex/transforms.py +27 -19
- sphinx/builders/linkcheck.py +146 -72
- sphinx/builders/manpage.py +30 -13
- sphinx/builders/singlehtml.py +22 -14
- sphinx/builders/texinfo.py +67 -37
- sphinx/builders/text.py +5 -5
- sphinx/builders/xml.py +6 -9
- sphinx/cmd/build.py +282 -103
- sphinx/cmd/make_mode.py +106 -63
- sphinx/cmd/quickstart.py +341 -145
- sphinx/config.py +45 -12
- sphinx/deprecation.py +8 -2
- sphinx/directives/__init__.py +28 -19
- sphinx/directives/code.py +86 -56
- sphinx/directives/other.py +50 -36
- sphinx/directives/patches.py +29 -19
- sphinx/domains/__init__.py +20 -120
- sphinx/domains/_domains_container.py +281 -0
- sphinx/domains/_index.py +110 -0
- sphinx/domains/c/__init__.py +3 -3
- sphinx/domains/c/_parser.py +10 -6
- sphinx/domains/changeset.py +5 -3
- sphinx/domains/citation.py +5 -3
- sphinx/domains/cpp/__init__.py +9 -11
- sphinx/domains/cpp/_parser.py +8 -7
- sphinx/domains/index.py +3 -3
- sphinx/domains/javascript.py +12 -7
- sphinx/domains/math.py +2 -2
- sphinx/domains/python/__init__.py +10 -5
- sphinx/domains/python/_object.py +1 -1
- sphinx/domains/rst.py +5 -5
- sphinx/domains/std/__init__.py +16 -11
- sphinx/environment/__init__.py +206 -146
- sphinx/environment/adapters/asset.py +3 -2
- sphinx/environment/adapters/indexentries.py +74 -33
- sphinx/environment/adapters/toctree.py +100 -43
- sphinx/environment/collectors/__init__.py +19 -8
- sphinx/environment/collectors/asset.py +47 -15
- sphinx/environment/collectors/dependencies.py +8 -4
- sphinx/environment/collectors/metadata.py +7 -2
- sphinx/environment/collectors/title.py +7 -2
- sphinx/environment/collectors/toctree.py +54 -22
- sphinx/errors.py +4 -1
- sphinx/events.py +314 -7
- sphinx/ext/apidoc.py +42 -18
- sphinx/ext/autodoc/__init__.py +52 -24
- sphinx/ext/autodoc/importer.py +6 -9
- sphinx/ext/autosectionlabel.py +1 -2
- sphinx/ext/autosummary/__init__.py +3 -1
- sphinx/ext/autosummary/generate.py +28 -14
- sphinx/ext/coverage.py +7 -7
- sphinx/ext/doctest.py +4 -8
- sphinx/ext/duration.py +6 -5
- sphinx/ext/inheritance_diagram.py +1 -1
- sphinx/ext/intersphinx/_cli.py +6 -4
- sphinx/ext/intersphinx/_load.py +77 -32
- sphinx/ext/intersphinx/_resolve.py +173 -79
- sphinx/ext/intersphinx/_shared.py +7 -5
- sphinx/ext/linkcode.py +7 -1
- sphinx/ext/mathjax.py +1 -2
- sphinx/ext/napoleon/__init__.py +37 -24
- sphinx/ext/napoleon/docstring.py +202 -134
- sphinx/ext/todo.py +5 -3
- sphinx/highlighting.py +9 -2
- sphinx/io.py +1 -1
- sphinx/jinja2glue.py +27 -6
- sphinx/locale/__init__.py +6 -2
- sphinx/locale/ar/LC_MESSAGES/sphinx.js +8 -1
- sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ar/LC_MESSAGES/sphinx.po +2246 -2288
- sphinx/locale/bg/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bg/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/bn/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bn/LC_MESSAGES/sphinx.po +2349 -2395
- sphinx/locale/ca/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ca/LC_MESSAGES/sphinx.po +2846 -2892
- sphinx/locale/cak/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cak/LC_MESSAGES/sphinx.po +2213 -2259
- sphinx/locale/cs/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cs/LC_MESSAGES/sphinx.po +2225 -2269
- sphinx/locale/cy/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cy/LC_MESSAGES/sphinx.po +2403 -2447
- sphinx/locale/da/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/da/LC_MESSAGES/sphinx.po +2214 -2260
- sphinx/locale/de/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de/LC_MESSAGES/sphinx.po +2230 -2276
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/el/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/el/LC_MESSAGES/sphinx.po +2619 -2665
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +2519 -2565
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/eo/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eo/LC_MESSAGES/sphinx.po +2232 -2278
- sphinx/locale/es/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es/LC_MESSAGES/sphinx.po +2516 -2561
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/et/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/et/LC_MESSAGES/sphinx.po +2317 -2363
- sphinx/locale/eu/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eu/LC_MESSAGES/sphinx.po +2218 -2264
- sphinx/locale/fa/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fa/LC_MESSAGES/sphinx.po +2505 -2551
- sphinx/locale/fi/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fi/LC_MESSAGES/sphinx.po +2303 -2349
- sphinx/locale/fr/LC_MESSAGES/sphinx.js +6 -2
- sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr/LC_MESSAGES/sphinx.po +2863 -2908
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/gl/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/gl/LC_MESSAGES/sphinx.po +2571 -2617
- sphinx/locale/he/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/he/LC_MESSAGES/sphinx.po +2307 -2352
- sphinx/locale/hi/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi/LC_MESSAGES/sphinx.po +2580 -2626
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/hr/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hr/LC_MESSAGES/sphinx.po +2238 -2283
- sphinx/locale/hu/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hu/LC_MESSAGES/sphinx.po +2228 -2274
- sphinx/locale/id/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/id/LC_MESSAGES/sphinx.po +2787 -2834
- sphinx/locale/is/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/is/LC_MESSAGES/sphinx.po +2224 -2270
- sphinx/locale/it/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/it/LC_MESSAGES/sphinx.po +2231 -2276
- sphinx/locale/ja/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ja/LC_MESSAGES/sphinx.po +2507 -2554
- sphinx/locale/ka/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ka/LC_MESSAGES/sphinx.po +2428 -2474
- sphinx/locale/ko/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ko/LC_MESSAGES/sphinx.po +2516 -2563
- sphinx/locale/lt/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lt/LC_MESSAGES/sphinx.po +2425 -2469
- sphinx/locale/lv/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lv/LC_MESSAGES/sphinx.po +2362 -2407
- sphinx/locale/mk/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/mk/LC_MESSAGES/sphinx.po +2121 -2167
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +2220 -2266
- sphinx/locale/ne/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ne/LC_MESSAGES/sphinx.po +2221 -2267
- sphinx/locale/nl/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nl/LC_MESSAGES/sphinx.po +2240 -2286
- sphinx/locale/pl/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pl/LC_MESSAGES/sphinx.po +2319 -2363
- sphinx/locale/pt/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +2854 -2899
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +2224 -2269
- sphinx/locale/ro/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ro/LC_MESSAGES/sphinx.po +2226 -2271
- sphinx/locale/ru/LC_MESSAGES/sphinx.js +8 -3
- sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ru/LC_MESSAGES/sphinx.po +2841 -2885
- sphinx/locale/si/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/si/LC_MESSAGES/sphinx.po +2294 -2340
- sphinx/locale/sk/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sk/LC_MESSAGES/sphinx.po +2497 -2541
- sphinx/locale/sl/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sl/LC_MESSAGES/sphinx.po +2331 -2375
- sphinx/locale/sphinx.pot +2121 -2167
- sphinx/locale/sq/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sq/LC_MESSAGES/sphinx.po +2855 -2901
- sphinx/locale/sr/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr/LC_MESSAGES/sphinx.po +2203 -2248
- sphinx/locale/sr@latin/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr_RS/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.po +2423 -2469
- sphinx/locale/te/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/te/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/tr/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/tr/LC_MESSAGES/sphinx.po +2443 -2489
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +2329 -2373
- sphinx/locale/ur/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ur/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/vi/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/vi/LC_MESSAGES/sphinx.po +2199 -2246
- sphinx/locale/yue/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/yue/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +2845 -2892
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/parsers.py +3 -1
- sphinx/project.py +6 -2
- sphinx/pycode/__init__.py +11 -4
- sphinx/pycode/ast.py +58 -58
- sphinx/pycode/parser.py +49 -28
- sphinx/pygments_styles.py +49 -49
- sphinx/registry.py +8 -3
- sphinx/roles.py +133 -13
- sphinx/search/__init__.py +146 -87
- sphinx/search/da.py +2 -4
- sphinx/search/de.py +2 -4
- sphinx/search/en.py +4 -4
- sphinx/search/es.py +2 -4
- sphinx/search/fi.py +2 -4
- sphinx/search/fr.py +2 -4
- sphinx/search/hu.py +2 -4
- sphinx/search/it.py +2 -4
- sphinx/search/ja.py +55 -32
- sphinx/search/nl.py +2 -4
- sphinx/search/no.py +2 -4
- sphinx/search/pt.py +2 -4
- sphinx/search/ro.py +0 -2
- sphinx/search/ru.py +2 -4
- sphinx/search/sv.py +2 -4
- sphinx/search/tr.py +0 -2
- sphinx/search/zh.py +18 -13
- sphinx/templates/graphviz/graphviz.css +0 -7
- sphinx/testing/fixtures.py +6 -5
- sphinx/testing/path.py +7 -5
- sphinx/testing/util.py +63 -29
- sphinx/texinputs/sphinx.sty +107 -39
- sphinx/texinputs/sphinxlatexadmonitions.sty +51 -35
- sphinx/texinputs/sphinxlatexcontainers.sty +1 -1
- sphinx/texinputs/sphinxlatexgraphics.sty +3 -2
- sphinx/texinputs/sphinxlatexindbibtoc.sty +1 -1
- sphinx/texinputs/sphinxlatexlists.sty +1 -1
- sphinx/texinputs/sphinxlatexliterals.sty +4 -1
- sphinx/texinputs/sphinxlatexnumfig.sty +22 -9
- sphinx/texinputs/sphinxlatexobjects.sty +1 -1
- sphinx/texinputs/sphinxlatexshadowbox.sty +72 -10
- sphinx/texinputs/sphinxlatexstyleheadings.sty +7 -2
- sphinx/texinputs/sphinxlatexstylepage.sty +2 -8
- sphinx/texinputs/sphinxlatexstyletext.sty +2 -4
- sphinx/texinputs/sphinxlatextables.sty +1 -1
- sphinx/texinputs/sphinxoptionsgeometry.sty +1 -1
- sphinx/texinputs/sphinxoptionshyperref.sty +1 -1
- sphinx/themes/agogo/layout.html +1 -10
- sphinx/themes/agogo/static/agogo.css.jinja +0 -7
- sphinx/themes/basic/defindex.html +1 -8
- sphinx/themes/basic/domainindex.html +1 -9
- sphinx/themes/basic/genindex-single.html +1 -9
- sphinx/themes/basic/genindex-split.html +1 -9
- sphinx/themes/basic/genindex.html +1 -9
- sphinx/themes/basic/globaltoc.html +1 -9
- sphinx/themes/basic/layout.html +1 -9
- sphinx/themes/basic/localtoc.html +1 -9
- sphinx/themes/basic/page.html +1 -9
- sphinx/themes/basic/relations.html +1 -9
- sphinx/themes/basic/search.html +1 -9
- sphinx/themes/basic/searchbox.html +1 -9
- sphinx/themes/basic/searchfield.html +4 -10
- sphinx/themes/basic/sourcelink.html +1 -9
- sphinx/themes/basic/static/basic.css.jinja +2 -13
- sphinx/themes/basic/static/doctools.js +0 -7
- sphinx/themes/basic/static/language_data.js.jinja +0 -7
- sphinx/themes/basic/static/searchtools.js +25 -13
- sphinx/themes/bizstyle/layout.html +1 -9
- sphinx/themes/bizstyle/static/bizstyle.css.jinja +0 -7
- sphinx/themes/bizstyle/static/bizstyle.js.jinja +5 -11
- sphinx/themes/classic/layout.html +1 -9
- sphinx/themes/classic/static/classic.css.jinja +0 -7
- sphinx/themes/classic/static/sidebar.js.jinja +0 -6
- sphinx/themes/epub/epub-cover.html +1 -9
- sphinx/themes/epub/layout.html +1 -9
- sphinx/themes/epub/static/epub.css.jinja +0 -7
- sphinx/themes/haiku/layout.html +1 -9
- sphinx/themes/haiku/static/haiku.css.jinja +0 -6
- sphinx/themes/nature/static/nature.css.jinja +0 -7
- sphinx/themes/nonav/layout.html +1 -9
- sphinx/themes/nonav/static/nonav.css.jinja +0 -7
- sphinx/themes/pyramid/static/epub.css.jinja +0 -7
- sphinx/themes/pyramid/static/pyramid.css.jinja +0 -7
- sphinx/themes/scrolls/layout.html +1 -10
- sphinx/themes/scrolls/static/scrolls.css.jinja +0 -7
- sphinx/themes/sphinxdoc/static/sphinxdoc.css.jinja +2 -7
- sphinx/themes/traditional/static/traditional.css.jinja +0 -7
- sphinx/theming.py +18 -6
- sphinx/transforms/__init__.py +56 -35
- sphinx/transforms/compact_bullet_list.py +3 -2
- sphinx/transforms/i18n.py +132 -50
- sphinx/transforms/post_transforms/__init__.py +94 -43
- sphinx/transforms/post_transforms/code.py +7 -6
- sphinx/transforms/post_transforms/images.py +71 -54
- sphinx/transforms/references.py +1 -2
- sphinx/util/__init__.py +23 -194
- sphinx/util/_files.py +80 -0
- sphinx/util/_importer.py +27 -0
- sphinx/util/_io.py +1 -2
- sphinx/util/_lines.py +26 -0
- sphinx/util/_pathlib.py +5 -2
- sphinx/util/_serialise.py +53 -0
- sphinx/util/_timestamps.py +2 -1
- sphinx/util/_uri.py +16 -0
- sphinx/util/cfamily.py +48 -25
- sphinx/util/console.py +1 -0
- sphinx/util/display.py +1 -1
- sphinx/util/docfields.py +125 -45
- sphinx/util/docstrings.py +1 -1
- sphinx/util/docutils.py +118 -44
- sphinx/util/exceptions.py +11 -5
- sphinx/util/fileutil.py +53 -32
- sphinx/util/http_date.py +9 -7
- sphinx/util/i18n.py +49 -16
- sphinx/util/images.py +7 -6
- sphinx/util/inspect.py +29 -12
- sphinx/util/inventory.py +47 -29
- sphinx/util/logging.py +58 -85
- sphinx/util/matching.py +3 -3
- sphinx/util/math.py +1 -1
- sphinx/util/nodes.py +176 -108
- sphinx/util/osutil.py +13 -10
- sphinx/util/parallel.py +5 -4
- sphinx/util/parsing.py +5 -3
- sphinx/util/png.py +3 -3
- sphinx/util/requests.py +8 -4
- sphinx/util/rst.py +5 -3
- sphinx/util/tags.py +5 -2
- sphinx/util/template.py +26 -11
- sphinx/util/texescape.py +2 -2
- sphinx/util/typing.py +89 -38
- sphinx/versioning.py +3 -1
- sphinx/writers/html.py +22 -7
- sphinx/writers/html5.py +113 -64
- sphinx/writers/latex.py +408 -221
- sphinx/writers/manpage.py +25 -15
- sphinx/writers/texinfo.py +94 -82
- sphinx/writers/text.py +87 -53
- sphinx/writers/xml.py +5 -4
- sphinx-8.1.0.dist-info/LICENSE.rst +31 -0
- {sphinx-8.0.2.dist-info → sphinx-8.1.0.dist-info}/METADATA +13 -11
- sphinx-8.1.0.dist-info/RECORD +598 -0
- sphinx-8.0.2.dist-info/LICENSE.rst +0 -67
- sphinx-8.0.2.dist-info/RECORD +0 -590
- {sphinx-8.0.2.dist-info → sphinx-8.1.0.dist-info}/WHEEL +0 -0
- {sphinx-8.0.2.dist-info → sphinx-8.1.0.dist-info}/entry_points.txt +0 -0
sphinx/search/es.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
spanish_stopwords = parse_stop_word(
|
|
9
|
+
spanish_stopwords = parse_stop_word("""
|
|
12
10
|
|source: https://snowball.tartarus.org/algorithms/spanish/stop.txt
|
|
13
11
|
de | from, of
|
|
14
12
|
la | the, her
|
|
@@ -347,7 +345,7 @@ tenida
|
|
|
347
345
|
tenidos
|
|
348
346
|
tenidas
|
|
349
347
|
tened
|
|
350
|
-
|
|
348
|
+
""")
|
|
351
349
|
|
|
352
350
|
|
|
353
351
|
class SearchSpanish(SearchLanguage):
|
sphinx/search/fi.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
finnish_stopwords = parse_stop_word(
|
|
9
|
+
finnish_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/finnish/stop.txt
|
|
13
11
|
| forms of BE
|
|
14
12
|
|
|
@@ -97,7 +95,7 @@ kun | when
|
|
|
97
95
|
niin | so
|
|
98
96
|
nyt | now
|
|
99
97
|
itse | self
|
|
100
|
-
|
|
98
|
+
""")
|
|
101
99
|
|
|
102
100
|
|
|
103
101
|
class SearchFinnish(SearchLanguage):
|
sphinx/search/fr.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
french_stopwords = parse_stop_word(
|
|
9
|
+
french_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/french/stop.txt
|
|
13
11
|
au | a + le
|
|
14
12
|
aux | a + les
|
|
@@ -183,7 +181,7 @@ quelle | which
|
|
|
183
181
|
quelles | which
|
|
184
182
|
sans | without
|
|
185
183
|
soi | oneself
|
|
186
|
-
|
|
184
|
+
""")
|
|
187
185
|
|
|
188
186
|
|
|
189
187
|
class SearchFrench(SearchLanguage):
|
sphinx/search/hu.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
hungarian_stopwords = parse_stop_word(
|
|
9
|
+
hungarian_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/hungarian/stop.txt
|
|
13
11
|
| prepared by Anna Tordai
|
|
14
12
|
a
|
|
@@ -210,7 +208,7 @@ vissza
|
|
|
210
208
|
vele
|
|
211
209
|
viszont
|
|
212
210
|
volna
|
|
213
|
-
|
|
211
|
+
""")
|
|
214
212
|
|
|
215
213
|
|
|
216
214
|
class SearchHungarian(SearchLanguage):
|
sphinx/search/it.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
italian_stopwords = parse_stop_word(
|
|
9
|
+
italian_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/italian/stop.txt
|
|
13
11
|
ad | a (to) before vowel
|
|
14
12
|
al | a + il
|
|
@@ -300,7 +298,7 @@ stessi
|
|
|
300
298
|
stesse
|
|
301
299
|
stessimo
|
|
302
300
|
stessero
|
|
303
|
-
|
|
301
|
+
""")
|
|
304
302
|
|
|
305
303
|
|
|
306
304
|
class SearchItalian(SearchLanguage):
|
sphinx/search/ja.py
CHANGED
|
@@ -17,19 +17,21 @@ from typing import Any
|
|
|
17
17
|
|
|
18
18
|
try:
|
|
19
19
|
import MeCab # type: ignore[import-not-found]
|
|
20
|
+
|
|
20
21
|
native_module = True
|
|
21
22
|
except ImportError:
|
|
22
23
|
native_module = False
|
|
23
24
|
|
|
24
25
|
try:
|
|
25
26
|
import janome.tokenizer # type: ignore[import-not-found]
|
|
27
|
+
|
|
26
28
|
janome_module = True
|
|
27
29
|
except ImportError:
|
|
28
30
|
janome_module = False
|
|
29
31
|
|
|
30
32
|
from sphinx.errors import ExtensionError, SphinxError
|
|
31
33
|
from sphinx.search import SearchLanguage
|
|
32
|
-
from sphinx.util import import_object
|
|
34
|
+
from sphinx.util._importer import import_object
|
|
33
35
|
|
|
34
36
|
|
|
35
37
|
class BaseSplitter:
|
|
@@ -61,7 +63,8 @@ class MecabSplitter(BaseSplitter):
|
|
|
61
63
|
result = self.native.parse(input)
|
|
62
64
|
else:
|
|
63
65
|
result = self.ctypes_libmecab.mecab_sparse_tostr(
|
|
64
|
-
self.ctypes_mecab, input.encode(self.dict_encode)
|
|
66
|
+
self.ctypes_mecab, input.encode(self.dict_encode)
|
|
67
|
+
)
|
|
65
68
|
return result.split(' ')
|
|
66
69
|
|
|
67
70
|
def init_native(self, options: dict[str, str]) -> None:
|
|
@@ -89,7 +92,8 @@ class MecabSplitter(BaseSplitter):
|
|
|
89
92
|
if os.path.exists(lib):
|
|
90
93
|
libpath = lib
|
|
91
94
|
if libpath is None:
|
|
92
|
-
|
|
95
|
+
msg = 'MeCab dynamic library is not available'
|
|
96
|
+
raise RuntimeError(msg)
|
|
93
97
|
|
|
94
98
|
param = 'mecab -Owakati'
|
|
95
99
|
dict = options.get('dict')
|
|
@@ -101,11 +105,15 @@ class MecabSplitter(BaseSplitter):
|
|
|
101
105
|
self.ctypes_libmecab = ctypes.CDLL(libpath)
|
|
102
106
|
self.ctypes_libmecab.mecab_new2.argtypes = (ctypes.c_char_p,)
|
|
103
107
|
self.ctypes_libmecab.mecab_new2.restype = ctypes.c_void_p
|
|
104
|
-
self.ctypes_libmecab.mecab_sparse_tostr.argtypes = (
|
|
108
|
+
self.ctypes_libmecab.mecab_sparse_tostr.argtypes = (
|
|
109
|
+
ctypes.c_void_p,
|
|
110
|
+
ctypes.c_char_p,
|
|
111
|
+
)
|
|
105
112
|
self.ctypes_libmecab.mecab_sparse_tostr.restype = ctypes.c_char_p
|
|
106
113
|
self.ctypes_mecab = self.ctypes_libmecab.mecab_new2(param.encode(fs_enc))
|
|
107
114
|
if self.ctypes_mecab is None:
|
|
108
|
-
|
|
115
|
+
msg = 'mecab initialization failed'
|
|
116
|
+
raise SphinxError(msg)
|
|
109
117
|
|
|
110
118
|
def __del__(self) -> None:
|
|
111
119
|
if self.ctypes_libmecab:
|
|
@@ -121,8 +129,11 @@ class JanomeSplitter(BaseSplitter):
|
|
|
121
129
|
|
|
122
130
|
def init_tokenizer(self) -> None:
|
|
123
131
|
if not janome_module:
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
msg = 'Janome is not available'
|
|
133
|
+
raise RuntimeError(msg)
|
|
134
|
+
self.tokenizer = janome.tokenizer.Tokenizer(
|
|
135
|
+
udic=self.user_dict, udic_enc=self.user_dict_enc
|
|
136
|
+
)
|
|
126
137
|
|
|
127
138
|
def split(self, input: str) -> list[str]:
|
|
128
139
|
result = ' '.join(token.surface for token in self.tokenizer.tokenize(input))
|
|
@@ -130,14 +141,18 @@ class JanomeSplitter(BaseSplitter):
|
|
|
130
141
|
|
|
131
142
|
|
|
132
143
|
class DefaultSplitter(BaseSplitter):
|
|
133
|
-
patterns_ = {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
144
|
+
patterns_ = {
|
|
145
|
+
re.compile(pattern): value
|
|
146
|
+
for pattern, value in {
|
|
147
|
+
'[一二三四五六七八九十百千万億兆]': 'M',
|
|
148
|
+
'[一-龠々〆ヵヶ]': 'H',
|
|
149
|
+
'[ぁ-ん]': 'I',
|
|
150
|
+
'[ァ-ヴーア-ン゙ー]': 'K',
|
|
151
|
+
'[a-zA-Za-zA-Z]': 'A',
|
|
152
|
+
'[0-90-9]': 'N',
|
|
153
|
+
}.items()
|
|
154
|
+
}
|
|
155
|
+
# fmt: off
|
|
141
156
|
BIAS__ = -332
|
|
142
157
|
BC1__ = {'HH': 6, 'II': 2461, 'KH': 406, 'OH': -1378}
|
|
143
158
|
BC2__ = {'AA': -3267, 'AI': 2744, 'AN': -878, 'HH': -4070, 'HM': -1711,
|
|
@@ -398,6 +413,7 @@ class DefaultSplitter(BaseSplitter):
|
|
|
398
413
|
'委': 798, '学': -960, '市': 887, '広': -695, '後': 535, '業': -697,
|
|
399
414
|
'相': 753, '社': -507, '福': 974, '空': -822, '者': 1811, '連': 463,
|
|
400
415
|
'郎': 1082, '1': -270, 'E1': 306, 'ル': -673, 'ン': -496}
|
|
416
|
+
# fmt: on
|
|
401
417
|
|
|
402
418
|
# ctype_
|
|
403
419
|
def ctype_(self, char: str) -> str:
|
|
@@ -427,18 +443,18 @@ class DefaultSplitter(BaseSplitter):
|
|
|
427
443
|
|
|
428
444
|
for i in range(4, len(seg) - 3):
|
|
429
445
|
score = self.BIAS__
|
|
430
|
-
w1 = seg[i-3]
|
|
431
|
-
w2 = seg[i-2]
|
|
432
|
-
w3 = seg[i-1]
|
|
446
|
+
w1 = seg[i - 3]
|
|
447
|
+
w2 = seg[i - 2]
|
|
448
|
+
w3 = seg[i - 1]
|
|
433
449
|
w4 = seg[i]
|
|
434
|
-
w5 = seg[i+1]
|
|
435
|
-
w6 = seg[i+2]
|
|
436
|
-
c1 = ctype[i-3]
|
|
437
|
-
c2 = ctype[i-2]
|
|
438
|
-
c3 = ctype[i-1]
|
|
450
|
+
w5 = seg[i + 1]
|
|
451
|
+
w6 = seg[i + 2]
|
|
452
|
+
c1 = ctype[i - 3]
|
|
453
|
+
c2 = ctype[i - 2]
|
|
454
|
+
c3 = ctype[i - 1]
|
|
439
455
|
c4 = ctype[i]
|
|
440
|
-
c5 = ctype[i+1]
|
|
441
|
-
c6 = ctype[i+2]
|
|
456
|
+
c5 = ctype[i + 1]
|
|
457
|
+
c6 = ctype[i + 2]
|
|
442
458
|
score += self.ts_(self.UP1__, p1)
|
|
443
459
|
score += self.ts_(self.UP2__, p2)
|
|
444
460
|
score += self.ts_(self.UP3__, p3)
|
|
@@ -470,7 +486,7 @@ class DefaultSplitter(BaseSplitter):
|
|
|
470
486
|
score += self.ts_(self.TC2__, c2 + c3 + c4)
|
|
471
487
|
score += self.ts_(self.TC3__, c3 + c4 + c5)
|
|
472
488
|
score += self.ts_(self.TC4__, c4 + c5 + c6)
|
|
473
|
-
#
|
|
489
|
+
# score += self.ts_(self.TC5__, c4 + c5 + c6)
|
|
474
490
|
score += self.ts_(self.UQ1__, p1 + c1)
|
|
475
491
|
score += self.ts_(self.UQ2__, p2 + c2)
|
|
476
492
|
score += self.ts_(self.UQ1__, p3 + c3)
|
|
@@ -501,16 +517,23 @@ class SearchJapanese(SearchLanguage):
|
|
|
501
517
|
Japanese search implementation: uses no stemmer, but word splitting is quite
|
|
502
518
|
complicated.
|
|
503
519
|
"""
|
|
520
|
+
|
|
504
521
|
lang = 'ja'
|
|
505
522
|
language_name = 'Japanese'
|
|
506
523
|
|
|
507
524
|
def init(self, options: dict[str, str]) -> None:
|
|
508
|
-
dotted_path = options.get('type'
|
|
509
|
-
|
|
510
|
-
self.splitter =
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
525
|
+
dotted_path = options.get('type')
|
|
526
|
+
if dotted_path is None:
|
|
527
|
+
self.splitter = DefaultSplitter(options)
|
|
528
|
+
else:
|
|
529
|
+
try:
|
|
530
|
+
splitter_cls = import_object(
|
|
531
|
+
dotted_path, "html_search_options['type'] setting"
|
|
532
|
+
)
|
|
533
|
+
self.splitter = splitter_cls(options)
|
|
534
|
+
except ExtensionError as exc:
|
|
535
|
+
msg = f"Splitter module {dotted_path!r} can't be imported"
|
|
536
|
+
raise ExtensionError(msg) from exc
|
|
514
537
|
|
|
515
538
|
def split(self, input: str) -> list[str]:
|
|
516
539
|
return self.splitter.split(input)
|
sphinx/search/nl.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
dutch_stopwords = parse_stop_word(
|
|
9
|
+
dutch_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/dutch/stop.txt
|
|
13
11
|
de | the
|
|
14
12
|
en | and
|
|
@@ -111,7 +109,7 @@ uw | your
|
|
|
111
109
|
iemand | somebody
|
|
112
110
|
geweest | been; past participle of 'be'
|
|
113
111
|
andere | other
|
|
114
|
-
|
|
112
|
+
""")
|
|
115
113
|
|
|
116
114
|
|
|
117
115
|
class SearchDutch(SearchLanguage):
|
sphinx/search/no.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
norwegian_stopwords = parse_stop_word(
|
|
9
|
+
norwegian_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/norwegian/stop.txt
|
|
13
11
|
og | and
|
|
14
12
|
i | in
|
|
@@ -186,7 +184,7 @@ verte | become *
|
|
|
186
184
|
vort | become *
|
|
187
185
|
varte | became *
|
|
188
186
|
vart | became *
|
|
189
|
-
|
|
187
|
+
""")
|
|
190
188
|
|
|
191
189
|
|
|
192
190
|
class SearchNorwegian(SearchLanguage):
|
sphinx/search/pt.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
portuguese_stopwords = parse_stop_word(
|
|
9
|
+
portuguese_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/portuguese/stop.txt
|
|
13
11
|
de | of, from
|
|
14
12
|
a | the; to, at; her
|
|
@@ -245,7 +243,7 @@ terão
|
|
|
245
243
|
teria
|
|
246
244
|
teríamos
|
|
247
245
|
teriam
|
|
248
|
-
|
|
246
|
+
""")
|
|
249
247
|
|
|
250
248
|
|
|
251
249
|
class SearchPortuguese(SearchLanguage):
|
sphinx/search/ro.py
CHANGED
sphinx/search/ru.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
russian_stopwords = parse_stop_word(
|
|
9
|
+
russian_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/russian/stop.txt
|
|
13
11
|
и | and
|
|
14
12
|
в | in/into
|
|
@@ -235,7 +233,7 @@ russian_stopwords = parse_stop_word('''
|
|
|
235
233
|
| можн
|
|
236
234
|
| нужн
|
|
237
235
|
| нельзя
|
|
238
|
-
|
|
236
|
+
""")
|
|
239
237
|
|
|
240
238
|
|
|
241
239
|
class SearchRussian(SearchLanguage):
|
sphinx/search/sv.py
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Dict
|
|
6
|
-
|
|
7
5
|
import snowballstemmer
|
|
8
6
|
|
|
9
7
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
10
8
|
|
|
11
|
-
swedish_stopwords = parse_stop_word(
|
|
9
|
+
swedish_stopwords = parse_stop_word("""
|
|
12
10
|
| source: https://snowball.tartarus.org/algorithms/swedish/stop.txt
|
|
13
11
|
och | and
|
|
14
12
|
det | it, this/that
|
|
@@ -124,7 +122,7 @@ våra | our
|
|
|
124
122
|
ert | your
|
|
125
123
|
era | your
|
|
126
124
|
vilkas | whose
|
|
127
|
-
|
|
125
|
+
""")
|
|
128
126
|
|
|
129
127
|
|
|
130
128
|
class SearchSwedish(SearchLanguage):
|
sphinx/search/tr.py
CHANGED
sphinx/search/zh.py
CHANGED
|
@@ -11,11 +11,13 @@ from sphinx.search import SearchLanguage
|
|
|
11
11
|
|
|
12
12
|
try:
|
|
13
13
|
import jieba # type: ignore[import-not-found]
|
|
14
|
+
|
|
14
15
|
JIEBA = True
|
|
15
16
|
except ImportError:
|
|
16
17
|
JIEBA = False
|
|
17
18
|
|
|
18
|
-
english_stopwords = set(
|
|
19
|
+
english_stopwords = set(
|
|
20
|
+
"""
|
|
19
21
|
a and are as at
|
|
20
22
|
be but by
|
|
21
23
|
for
|
|
@@ -25,7 +27,8 @@ of on or
|
|
|
25
27
|
such
|
|
26
28
|
that the their then there these they this to
|
|
27
29
|
was will with
|
|
28
|
-
""".split()
|
|
30
|
+
""".split()
|
|
31
|
+
)
|
|
29
32
|
|
|
30
33
|
js_porter_stemmer = """
|
|
31
34
|
/**
|
|
@@ -224,7 +227,10 @@ class SearchChinese(SearchLanguage):
|
|
|
224
227
|
js_stemmer_code = js_porter_stemmer
|
|
225
228
|
stopwords = english_stopwords
|
|
226
229
|
latin1_letters = re.compile(r'[a-zA-Z0-9_]+')
|
|
227
|
-
|
|
230
|
+
|
|
231
|
+
def __init__(self, options: dict[str, str]) -> None:
|
|
232
|
+
super().__init__(options)
|
|
233
|
+
self.latin_terms: set[str] = set()
|
|
228
234
|
|
|
229
235
|
def init(self, options: dict[str, str]) -> None:
|
|
230
236
|
if JIEBA:
|
|
@@ -235,13 +241,13 @@ class SearchChinese(SearchLanguage):
|
|
|
235
241
|
self.stemmer = snowballstemmer.stemmer('english')
|
|
236
242
|
|
|
237
243
|
def split(self, input: str) -> list[str]:
|
|
238
|
-
chinese: list[str] = []
|
|
239
244
|
if JIEBA:
|
|
240
|
-
chinese = list(jieba.cut_for_search(input))
|
|
245
|
+
chinese: list[str] = list(jieba.cut_for_search(input))
|
|
246
|
+
else:
|
|
247
|
+
chinese = []
|
|
241
248
|
|
|
242
|
-
latin1 =
|
|
243
|
-
|
|
244
|
-
self.latin_terms.extend(latin1)
|
|
249
|
+
latin1 = [term.strip() for term in self.latin1_letters.findall(input)]
|
|
250
|
+
self.latin_terms.update(latin1)
|
|
245
251
|
return chinese + latin1
|
|
246
252
|
|
|
247
253
|
def word_filter(self, stemmed_word: str) -> bool:
|
|
@@ -251,11 +257,10 @@ class SearchChinese(SearchLanguage):
|
|
|
251
257
|
# Don't stem Latin words that are long enough to be relevant for search
|
|
252
258
|
# if not stemmed, but would be too short after being stemmed
|
|
253
259
|
# avoids some issues with acronyms
|
|
260
|
+
stemmed = self.stemmer.stemWord(word.lower())
|
|
254
261
|
should_not_be_stemmed = (
|
|
255
|
-
word in self.latin_terms
|
|
256
|
-
|
|
257
|
-
len(self.stemmer.stemWord(word.lower())) < 3
|
|
258
|
-
)
|
|
262
|
+
len(word) >= 3 > len(stemmed) and word in self.latin_terms
|
|
263
|
+
) # fmt: skip
|
|
259
264
|
if should_not_be_stemmed:
|
|
260
265
|
return word.lower()
|
|
261
|
-
return
|
|
266
|
+
return stemmed
|
sphinx/testing/fixtures.py
CHANGED
|
@@ -28,7 +28,7 @@ DEFAULT_ENABLED_MARKERS = [
|
|
|
28
28
|
'testroot="root", srcdir=None, '
|
|
29
29
|
'confoverrides=None, freshenv=False, '
|
|
30
30
|
'warningiserror=False, tags=None, verbosity=0, parallel=0, '
|
|
31
|
-
'
|
|
31
|
+
'builddir=None, docutils_conf=None'
|
|
32
32
|
'): arguments to initialize the sphinx test application.'
|
|
33
33
|
),
|
|
34
34
|
'test_params(shared_result=...): test parameters.',
|
|
@@ -42,7 +42,7 @@ def pytest_configure(config: pytest.Config) -> None:
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
@pytest.fixture(scope='session')
|
|
45
|
-
def rootdir() ->
|
|
45
|
+
def rootdir() -> Path | None:
|
|
46
46
|
return None
|
|
47
47
|
|
|
48
48
|
|
|
@@ -74,7 +74,7 @@ def app_params(
|
|
|
74
74
|
test_params: dict[str, Any],
|
|
75
75
|
shared_result: SharedResult,
|
|
76
76
|
sphinx_test_tempdir: str,
|
|
77
|
-
rootdir:
|
|
77
|
+
rootdir: Path,
|
|
78
78
|
) -> _app_params:
|
|
79
79
|
"""
|
|
80
80
|
Parameters that are specified by 'pytest.mark.sphinx' for
|
|
@@ -86,7 +86,7 @@ def app_params(
|
|
|
86
86
|
kwargs: dict[str, Any] = {}
|
|
87
87
|
|
|
88
88
|
# to avoid stacking positional args
|
|
89
|
-
for info in reversed(list(request.node.iter_markers(
|
|
89
|
+
for info in reversed(list(request.node.iter_markers('sphinx'))):
|
|
90
90
|
pargs |= dict(enumerate(info.args))
|
|
91
91
|
kwargs.update(info.kwargs)
|
|
92
92
|
|
|
@@ -203,6 +203,7 @@ def make_app(test_params: dict[str, Any]) -> Iterator[Callable[[], SphinxTestApp
|
|
|
203
203
|
app_ = SphinxTestApp(*args, **kwargs)
|
|
204
204
|
apps.append(app_)
|
|
205
205
|
return app_
|
|
206
|
+
|
|
206
207
|
yield make
|
|
207
208
|
|
|
208
209
|
sys.path[:] = syspath
|
|
@@ -239,7 +240,7 @@ def if_graphviz_found(app: SphinxTestApp) -> None: # NoQA: PT004
|
|
|
239
240
|
|
|
240
241
|
|
|
241
242
|
@pytest.fixture(scope='session')
|
|
242
|
-
def sphinx_test_tempdir(tmp_path_factory:
|
|
243
|
+
def sphinx_test_tempdir(tmp_path_factory: pytest.TempPathFactory) -> Path:
|
|
243
244
|
"""Temporary directory."""
|
|
244
245
|
return tmp_path_factory.getbasetemp()
|
|
245
246
|
|
sphinx/testing/path.py
CHANGED
|
@@ -12,9 +12,11 @@ if TYPE_CHECKING:
|
|
|
12
12
|
import builtins
|
|
13
13
|
from collections.abc import Callable
|
|
14
14
|
|
|
15
|
-
warnings.warn(
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
warnings.warn(
|
|
16
|
+
"'sphinx.testing.path' is deprecated. " "Use 'os.path' or 'pathlib' instead.",
|
|
17
|
+
RemovedInSphinx90Warning,
|
|
18
|
+
stacklevel=2,
|
|
19
|
+
)
|
|
18
20
|
|
|
19
21
|
FILESYSTEMENCODING = sys.getfilesystemencoding() or sys.getdefaultencoding()
|
|
20
22
|
|
|
@@ -86,7 +88,7 @@ class path(str):
|
|
|
86
88
|
def rmtree(
|
|
87
89
|
self,
|
|
88
90
|
ignore_errors: bool = False,
|
|
89
|
-
onerror:
|
|
91
|
+
onerror: Callable[[Callable[..., Any], str, Any], object] | None = None,
|
|
90
92
|
) -> None:
|
|
91
93
|
"""
|
|
92
94
|
Removes the file or directory and any files or directories it may
|
|
@@ -178,7 +180,7 @@ class path(str):
|
|
|
178
180
|
with open(self, mode='rb') as f:
|
|
179
181
|
return f.read()
|
|
180
182
|
|
|
181
|
-
def write_bytes(self, bytes:
|
|
183
|
+
def write_bytes(self, bytes: bytes, append: bool = False) -> None:
|
|
182
184
|
"""
|
|
183
185
|
Writes the given `bytes` to the file.
|
|
184
186
|
|