From 8acb3ee3b4be8f39e61cdd81dffb6be1a21ae5d3 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Mon, 24 Aug 2026 15:19:57 -0400 Subject: [PATCH 01/13] remove dependency on mkdocs-gen-files, etc. --- docs/reference/markdown/blockparser.md | 1 + docs/reference/markdown/blockprocessors.md | 1 + docs/reference/markdown/extensions/abbr.md | 3 + .../markdown/extensions/admonition.md | 3 + .../markdown/extensions/attr_list.md | 3 + .../markdown/extensions/codehilite.md | 3 + .../reference/markdown/extensions/def_list.md | 3 + docs/reference/markdown/extensions/extra.md | 3 + .../markdown/extensions/fenced_code.md | 3 + .../markdown/extensions/footnotes.md | 3 + docs/reference/markdown/extensions/index.md | 1 + .../markdown/extensions/legacy_attrs.md | 3 + .../markdown/extensions/legacy_em.md | 3 + .../markdown/extensions/md_in_html.md | 3 + docs/reference/markdown/extensions/meta.md | 3 + docs/reference/markdown/extensions/nl2br.md | 3 + .../markdown/extensions/sane_lists.md | 3 + docs/reference/markdown/extensions/smarty.md | 3 + docs/reference/markdown/extensions/tables.md | 3 + docs/reference/markdown/extensions/toc.md | 3 + .../markdown/extensions/wikilinks.md | 3 + docs/reference/markdown/htmlparser.md | 1 + docs/reference/markdown/index.md | 6 ++ docs/reference/markdown/inlinepatterns.md | 1 + docs/reference/markdown/postprocessors.md | 1 + docs/reference/markdown/preprocessors.md | 1 + docs/reference/markdown/serializers.md | 1 + docs/reference/markdown/test_tools.md | 1 + docs/reference/markdown/treeprocessors.md | 1 + docs/reference/markdown/util.md | 1 + mkdocs.yml | 38 ++++++++--- pyproject.toml | 7 +-- scripts/gen_ref_nav.py | 63 ------------------- 33 files changed, 104 insertions(+), 75 deletions(-) create mode 100644 docs/reference/markdown/blockparser.md create mode 100644 docs/reference/markdown/blockprocessors.md create mode 100644 docs/reference/markdown/extensions/abbr.md create mode 100644 docs/reference/markdown/extensions/admonition.md create mode 100644 docs/reference/markdown/extensions/attr_list.md create mode 100644 docs/reference/markdown/extensions/codehilite.md create mode 100644 docs/reference/markdown/extensions/def_list.md create mode 100644 docs/reference/markdown/extensions/extra.md create mode 100644 docs/reference/markdown/extensions/fenced_code.md create mode 100644 docs/reference/markdown/extensions/footnotes.md create mode 100644 docs/reference/markdown/extensions/index.md create mode 100644 docs/reference/markdown/extensions/legacy_attrs.md create mode 100644 docs/reference/markdown/extensions/legacy_em.md create mode 100644 docs/reference/markdown/extensions/md_in_html.md create mode 100644 docs/reference/markdown/extensions/meta.md create mode 100644 docs/reference/markdown/extensions/nl2br.md create mode 100644 docs/reference/markdown/extensions/sane_lists.md create mode 100644 docs/reference/markdown/extensions/smarty.md create mode 100644 docs/reference/markdown/extensions/tables.md create mode 100644 docs/reference/markdown/extensions/toc.md create mode 100644 docs/reference/markdown/extensions/wikilinks.md create mode 100644 docs/reference/markdown/htmlparser.md create mode 100644 docs/reference/markdown/index.md create mode 100644 docs/reference/markdown/inlinepatterns.md create mode 100644 docs/reference/markdown/postprocessors.md create mode 100644 docs/reference/markdown/preprocessors.md create mode 100644 docs/reference/markdown/serializers.md create mode 100644 docs/reference/markdown/test_tools.md create mode 100644 docs/reference/markdown/treeprocessors.md create mode 100644 docs/reference/markdown/util.md delete mode 100755 scripts/gen_ref_nav.py diff --git a/docs/reference/markdown/blockparser.md b/docs/reference/markdown/blockparser.md new file mode 100644 index 000000000..39e1355be --- /dev/null +++ b/docs/reference/markdown/blockparser.md @@ -0,0 +1 @@ +::: markdown.blockparser \ No newline at end of file diff --git a/docs/reference/markdown/blockprocessors.md b/docs/reference/markdown/blockprocessors.md new file mode 100644 index 000000000..a40e9932b --- /dev/null +++ b/docs/reference/markdown/blockprocessors.md @@ -0,0 +1 @@ +::: markdown.blockprocessors \ No newline at end of file diff --git a/docs/reference/markdown/extensions/abbr.md b/docs/reference/markdown/extensions/abbr.md new file mode 100644 index 000000000..06e538824 --- /dev/null +++ b/docs/reference/markdown/extensions/abbr.md @@ -0,0 +1,3 @@ +::: markdown.extensions.abbr + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/admonition.md b/docs/reference/markdown/extensions/admonition.md new file mode 100644 index 000000000..c1e0f127c --- /dev/null +++ b/docs/reference/markdown/extensions/admonition.md @@ -0,0 +1,3 @@ +::: markdown.extensions.admonition + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/attr_list.md b/docs/reference/markdown/extensions/attr_list.md new file mode 100644 index 000000000..6e6fff9ca --- /dev/null +++ b/docs/reference/markdown/extensions/attr_list.md @@ -0,0 +1,3 @@ +::: markdown.extensions.attr_list + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/codehilite.md b/docs/reference/markdown/extensions/codehilite.md new file mode 100644 index 000000000..9f6739ffa --- /dev/null +++ b/docs/reference/markdown/extensions/codehilite.md @@ -0,0 +1,3 @@ +::: markdown.extensions.codehilite + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/def_list.md b/docs/reference/markdown/extensions/def_list.md new file mode 100644 index 000000000..aa6ed3153 --- /dev/null +++ b/docs/reference/markdown/extensions/def_list.md @@ -0,0 +1,3 @@ +::: markdown.extensions.def_list + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/extra.md b/docs/reference/markdown/extensions/extra.md new file mode 100644 index 000000000..c0c35503a --- /dev/null +++ b/docs/reference/markdown/extensions/extra.md @@ -0,0 +1,3 @@ +::: markdown.extensions.extra + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/fenced_code.md b/docs/reference/markdown/extensions/fenced_code.md new file mode 100644 index 000000000..d99235661 --- /dev/null +++ b/docs/reference/markdown/extensions/fenced_code.md @@ -0,0 +1,3 @@ +::: markdown.extensions.fenced_code + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/footnotes.md b/docs/reference/markdown/extensions/footnotes.md new file mode 100644 index 000000000..8dcb3f0fe --- /dev/null +++ b/docs/reference/markdown/extensions/footnotes.md @@ -0,0 +1,3 @@ +::: markdown.extensions.footnotes + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/index.md b/docs/reference/markdown/extensions/index.md new file mode 100644 index 000000000..e243f7c8f --- /dev/null +++ b/docs/reference/markdown/extensions/index.md @@ -0,0 +1 @@ +::: markdown.extensions \ No newline at end of file diff --git a/docs/reference/markdown/extensions/legacy_attrs.md b/docs/reference/markdown/extensions/legacy_attrs.md new file mode 100644 index 000000000..4515f5bc9 --- /dev/null +++ b/docs/reference/markdown/extensions/legacy_attrs.md @@ -0,0 +1,3 @@ +::: markdown.extensions.legacy_attrs + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/legacy_em.md b/docs/reference/markdown/extensions/legacy_em.md new file mode 100644 index 000000000..c2bfb7ce8 --- /dev/null +++ b/docs/reference/markdown/extensions/legacy_em.md @@ -0,0 +1,3 @@ +::: markdown.extensions.legacy_em + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/md_in_html.md b/docs/reference/markdown/extensions/md_in_html.md new file mode 100644 index 000000000..77d8959fe --- /dev/null +++ b/docs/reference/markdown/extensions/md_in_html.md @@ -0,0 +1,3 @@ +::: markdown.extensions.md_in_html + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/meta.md b/docs/reference/markdown/extensions/meta.md new file mode 100644 index 000000000..ab24e2d8b --- /dev/null +++ b/docs/reference/markdown/extensions/meta.md @@ -0,0 +1,3 @@ +::: markdown.extensions.meta + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/nl2br.md b/docs/reference/markdown/extensions/nl2br.md new file mode 100644 index 000000000..46ab1b456 --- /dev/null +++ b/docs/reference/markdown/extensions/nl2br.md @@ -0,0 +1,3 @@ +::: markdown.extensions.nl2br + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/sane_lists.md b/docs/reference/markdown/extensions/sane_lists.md new file mode 100644 index 000000000..68920f0a6 --- /dev/null +++ b/docs/reference/markdown/extensions/sane_lists.md @@ -0,0 +1,3 @@ +::: markdown.extensions.sane_lists + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/smarty.md b/docs/reference/markdown/extensions/smarty.md new file mode 100644 index 000000000..3f78d3160 --- /dev/null +++ b/docs/reference/markdown/extensions/smarty.md @@ -0,0 +1,3 @@ +::: markdown.extensions.smarty + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/tables.md b/docs/reference/markdown/extensions/tables.md new file mode 100644 index 000000000..b31dff995 --- /dev/null +++ b/docs/reference/markdown/extensions/tables.md @@ -0,0 +1,3 @@ +::: markdown.extensions.tables + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/toc.md b/docs/reference/markdown/extensions/toc.md new file mode 100644 index 000000000..4312ee7c2 --- /dev/null +++ b/docs/reference/markdown/extensions/toc.md @@ -0,0 +1,3 @@ +::: markdown.extensions.toc + options: + inherited_members: false diff --git a/docs/reference/markdown/extensions/wikilinks.md b/docs/reference/markdown/extensions/wikilinks.md new file mode 100644 index 000000000..abea948de --- /dev/null +++ b/docs/reference/markdown/extensions/wikilinks.md @@ -0,0 +1,3 @@ +::: markdown.extensions.wikilinks + options: + inherited_members: false diff --git a/docs/reference/markdown/htmlparser.md b/docs/reference/markdown/htmlparser.md new file mode 100644 index 000000000..ee144f591 --- /dev/null +++ b/docs/reference/markdown/htmlparser.md @@ -0,0 +1 @@ +::: markdown.htmlparser \ No newline at end of file diff --git a/docs/reference/markdown/index.md b/docs/reference/markdown/index.md new file mode 100644 index 000000000..b4913c052 --- /dev/null +++ b/docs/reference/markdown/index.md @@ -0,0 +1,6 @@ +::: markdown + options: + summary: + attributes: true + classes: true + functions: true diff --git a/docs/reference/markdown/inlinepatterns.md b/docs/reference/markdown/inlinepatterns.md new file mode 100644 index 000000000..81edcdee5 --- /dev/null +++ b/docs/reference/markdown/inlinepatterns.md @@ -0,0 +1 @@ +::: markdown.inlinepatterns \ No newline at end of file diff --git a/docs/reference/markdown/postprocessors.md b/docs/reference/markdown/postprocessors.md new file mode 100644 index 000000000..24d16161a --- /dev/null +++ b/docs/reference/markdown/postprocessors.md @@ -0,0 +1 @@ +::: markdown.postprocessors \ No newline at end of file diff --git a/docs/reference/markdown/preprocessors.md b/docs/reference/markdown/preprocessors.md new file mode 100644 index 000000000..619be2f76 --- /dev/null +++ b/docs/reference/markdown/preprocessors.md @@ -0,0 +1 @@ +::: markdown.preprocessors \ No newline at end of file diff --git a/docs/reference/markdown/serializers.md b/docs/reference/markdown/serializers.md new file mode 100644 index 000000000..f14b4eabe --- /dev/null +++ b/docs/reference/markdown/serializers.md @@ -0,0 +1 @@ +::: markdown.serializers \ No newline at end of file diff --git a/docs/reference/markdown/test_tools.md b/docs/reference/markdown/test_tools.md new file mode 100644 index 000000000..48541fccd --- /dev/null +++ b/docs/reference/markdown/test_tools.md @@ -0,0 +1 @@ +::: markdown.test_tools \ No newline at end of file diff --git a/docs/reference/markdown/treeprocessors.md b/docs/reference/markdown/treeprocessors.md new file mode 100644 index 000000000..57b730e36 --- /dev/null +++ b/docs/reference/markdown/treeprocessors.md @@ -0,0 +1 @@ +::: markdown.treeprocessors \ No newline at end of file diff --git a/docs/reference/markdown/util.md b/docs/reference/markdown/util.md new file mode 100644 index 000000000..2b1a2291e --- /dev/null +++ b/docs/reference/markdown/util.md @@ -0,0 +1 @@ +::: markdown.util \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 36059af11..91043a130 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -45,7 +45,37 @@ nav: - WikiLinks: extensions/wikilinks.md - Extension API: extensions/api.md - Test Tools: test_tools.md - - API Reference: reference/ + - API Reference: + - markdown: reference/markdown/index.md + - markdown.preprocessors: reference/markdown/preprocessors.md + - markdown.blockparser: reference/markdown/blockparser.md + - markdown.blockprocessors: reference/markdown/blockprocessors.md + - markdown.treeprocessors: reference/markdown/treeprocessors.md + - markdown.inlinepatterns: reference/markdown/inlinepatterns.md + - markdown.postprocessors: reference/markdown/postprocessors.md + - markdown.serializers: reference/markdown/serializers.md + - markdown.util: reference/markdown/util.md + - markdown.htmlparser: reference/markdown/htmlparser.md + - markdown.test_tools: reference/markdown/test_tools.md + - markdown.extensions: reference/markdown/extensions/index.md + - markdown.extensions.abbr: reference/markdown/extensions/abbr.md + - markdown.extensions.admonition: reference/markdown/extensions/admonition.md + - markdown.extensions.attr_list: reference/markdown/extensions/attr_list.md + - markdown.extensions.codehilite: reference/markdown/extensions/codehilite.md + - markdown.extensions.def_list: reference/markdown/extensions/def_list.md + - markdown.extensions.extra: reference/markdown/extensions/extra.md + - markdown.extensions.fenced_code: reference/markdown/extensions/fenced_code.md + - markdown.extensions.footnotes: reference/markdown/extensions/footnotes.md + - markdown.extensions.legacy_attrs: reference/markdown/extensions/legacy_attrs.md + - markdown.extensions.legacy_em: reference/markdown/extensions/legacy_em.md + - markdown.extensions.md_in_html: reference/markdown/extensions/md_in_html.md + - markdown.extensions.meta: reference/markdown/extensions/meta.md + - markdown.extensions.nl2br: reference/markdown/extensions/nl2br.md + - markdown.extensions.sane_lists: reference/markdown/extensions/sane_lists.md + - markdown.extensions.smarty: reference/markdown/extensions/smarty.md + - markdown.extensions.tables: reference/markdown/extensions/tables.md + - markdown.extensions.toc: reference/markdown/extensions/toc.md + - markdown.extensions.wikilinks: reference/markdown/extensions/wikilinks.md - Contributing to Python-Markdown: contributing.md - Changelog: changelog.md - Authors: authors.md @@ -72,12 +102,6 @@ markdown_extensions: plugins: - search -- gen-files: - scripts: - - scripts/gen_ref_nav.py -- literate-nav: - nav_file: SUMMARY.md -- section-index - mkdocstrings: custom_templates: docs/templates handlers: diff --git a/pyproject.toml b/pyproject.toml index b539dd951..ef1ce78a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,13 +50,10 @@ testing = [ 'pyyaml' ] docs = [ - 'mkdocs>=1.6', + 'mkdocs==1.6.1', 'mkdocs-nature>=0.6', 'mdx_gh_links>=0.2', - "mkdocstrings[python]>=0.28.3", - "mkdocs-gen-files", - "mkdocs-section-index", - "mkdocs-literate-nav", + "mkdocstrings[python]>=0.28.3" ] [project.urls] diff --git a/scripts/gen_ref_nav.py b/scripts/gen_ref_nav.py deleted file mode 100755 index 601d01e73..000000000 --- a/scripts/gen_ref_nav.py +++ /dev/null @@ -1,63 +0,0 @@ -"""Generate the code reference pages and navigation.""" - -import textwrap -import yaml -from pathlib import Path - -import mkdocs_gen_files - -nav = mkdocs_gen_files.Nav() - -per_module_options = { - "markdown": {"summary": {"attributes": True, "functions": True, "classes": True}} -} - -base_path = Path(__file__).resolve().parent.parent - -modules = [ - base_path.joinpath("markdown", "__init__.py"), - base_path.joinpath("markdown", "preprocessors.py"), - base_path.joinpath("markdown", "blockparser.py"), - base_path.joinpath("markdown", "blockprocessors.py"), - base_path.joinpath("markdown", "treeprocessors.py"), - base_path.joinpath("markdown", "inlinepatterns.py"), - base_path.joinpath("markdown", "postprocessors.py"), - base_path.joinpath("markdown", "serializers.py"), - base_path.joinpath("markdown", "util.py"), - base_path.joinpath("markdown", "htmlparser.py"), - base_path.joinpath("markdown", "test_tools.py"), - *sorted(base_path.joinpath("markdown", "extensions").rglob("*.py")), -] - -for src_path in modules: - path = src_path.relative_to(base_path) - module_path = path.with_suffix("") - doc_path = path.with_suffix(".md") - full_doc_path = Path("reference", doc_path) - - parts = tuple(module_path.parts) - - if parts[-1] == "__init__": - parts = parts[:-1] - doc_path = doc_path.with_name("index.md") - full_doc_path = full_doc_path.with_name("index.md") - elif parts[-1].startswith("_"): - continue - - nav_parts = [f"{part}" for part in parts] - nav[nav_parts] = doc_path.as_posix() - - with mkdocs_gen_files.open(full_doc_path, "w") as fd: - ident = ".".join(parts) - fd.write(f"::: {ident}") - if ident in per_module_options: - yaml_options = yaml.dump({"options": per_module_options[ident]}) - fd.write(f"\n{textwrap.indent(yaml_options, prefix=' ')}") - elif ident.startswith("markdown.extensions."): - yaml_options = yaml.dump({"options": {"inherited_members": False}}) - fd.write(f"\n{textwrap.indent(yaml_options, prefix=' ')}") - - mkdocs_gen_files.set_edit_path(full_doc_path, ".." / path) - -with mkdocs_gen_files.open("reference/SUMMARY.md", "w") as nav_file: - nav_file.writelines(nav.build_literate_nav()) From f3ac4399d5b68993f8fabbf809f405f2f644e9ae Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Tue, 25 Aug 2026 15:34:54 -0400 Subject: [PATCH 02/13] Switch doc generator to Zensical --- docs/authors.md | 2 + docs/change_log/release-2.5.md | 2 - docs/changelog.md | 2 + docs/cli.md | 5 +- docs/contributing.md | 10 +- docs/extensions/abbreviations.md | 4 +- docs/extensions/admonition.md | 4 +- docs/extensions/api.md | 9 +- docs/extensions/attr_list.md | 6 +- docs/extensions/code_hilite.md | 33 +- docs/extensions/definition_lists.md | 4 +- docs/extensions/extra.md | 4 +- docs/extensions/fenced_code_blocks.md | 8 +- docs/extensions/footnotes.md | 4 +- docs/extensions/index.md | 6 +- docs/extensions/legacy_attrs.md | 4 +- docs/extensions/legacy_em.md | 4 +- docs/extensions/md_in_html.md | 6 +- docs/extensions/meta_data.md | 4 +- docs/extensions/nl2br.md | 4 +- docs/extensions/sane_lists.md | 4 +- docs/extensions/smarty.md | 6 +- docs/extensions/tables.md | 6 +- docs/extensions/toc.md | 4 +- docs/extensions/wikilinks.md | 4 +- docs/index.md | 4 +- docs/install.md | 2 + docs/reference.md | 78 +-- docs/sanitization.md | 2 + docs/test_tools.md | 4 +- mkdocs.yml | 128 +++-- pyproject.toml | 10 +- uv.lock | 712 ++++++++++++++++++++++++++ 33 files changed, 958 insertions(+), 131 deletions(-) create mode 100644 uv.lock diff --git a/docs/authors.md b/docs/authors.md index b9291728b..df2267bc9 100644 --- a/docs/authors.md +++ b/docs/authors.md @@ -1,4 +1,6 @@ +--- title: Authors +--- Primary Authors =============== diff --git a/docs/change_log/release-2.5.md b/docs/change_log/release-2.5.md index 095f17d26..1ce3ae96d 100644 --- a/docs/change_log/release-2.5.md +++ b/docs/change_log/release-2.5.md @@ -14,8 +14,6 @@ Backwards-incompatible Changes * Python-Markdown no longer supports Python version 2.6. You must be using Python versions 2.7, 3.2, 3.3, or 3.4. -[importlib]: https://pypi.org/project/importlib/ - * The `force_linenos` configuration key on the [CodeHilite Extension] has been **deprecated** and will raise a `KeyError` if provided. In the previous release (2.4), it was issuing a `DeprecationWarning`. The [`linenums`][linenums] keyword should be used diff --git a/docs/changelog.md b/docs/changelog.md index ea02e6d3d..b37754295 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,7 @@ +--- title: Changelog toc_depth: 2 +--- # Python-Markdown Changelog diff --git a/docs/cli.md b/docs/cli.md index 5bbe5b4af..44219a8d0 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -1,4 +1,6 @@ +--- title: Command Line +--- Using Python-Markdown on the Command Line ========================================= @@ -158,7 +160,6 @@ dependencies. The format of your configuration file is automatically detected. [YAML]: https://yaml.org/ [JSON]: https://json.org/ [PyYAML]: https://pyyaml.org/ -[2.5 release notes]: change_log/release-2.5.md ## Using the `markdown_py` Command @@ -201,7 +202,7 @@ path. markdown text files will not likely be in that directory, so it is much more convenient to have `markdown_py` on your path. -!!!Note +!!! tip Python-Markdown uses `"markdown_py"` as a script name because the Perl implementation has already taken the more obvious name "markdown". Additionally, the default Python configuration on some systems would cause a diff --git a/docs/contributing.md b/docs/contributing.md index 011e3cb61..747855633 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -148,7 +148,7 @@ repeatedly opens unproductive issues or requests, they may be blocked from contributing to the project as it is disruptive and disrespectful of the maintainers' time. -!!! Note +!!! info This policy was largely inspired by the Astropy Project's [Usage of Generative AI] policy. @@ -411,7 +411,7 @@ coverage run --source=markdown -m unittest discover tests coverage report --show-missing ``` -!!! note +!!! tip Some tests require the [PyTidyLib] library, which depends on the [HTML Tidy] library. If you do not have PyTidyLib installed, the tests which depend upon @@ -436,7 +436,7 @@ pip install tox Then, to run all configured test environments, simply call the command `tox` with no arguments. See help (`tox -h`) for more options. -!!! note +!!! tip The tox environments expect that some dependencies are already installed on your system. For example, by default, any Python version specific @@ -448,7 +448,7 @@ with no arguments. See help (`tox -h`) for more options. dependencies may differ significantly from system to system and is outside the scope of this guide. -!!! seealso "See Also" +!!! info "See Also" Python-Markdown provides [test tools] which simply test Markdown syntax. Understanding those tools will often help in understanding why a test may be @@ -523,7 +523,7 @@ following steps: Bump version to X.X.X - !!! note + !!! tip For the checks to run properly the `release`{ .label .release } label must be set on GitHub before creating the pull request. If the label diff --git a/docs/extensions/abbreviations.md b/docs/extensions/abbreviations.md index 1bfa13a09..95f95f86a 100644 --- a/docs/extensions/abbreviations.md +++ b/docs/extensions/abbreviations.md @@ -1,4 +1,6 @@ +--- title: Abbreviations Extension +--- Abbreviations ============= @@ -11,7 +13,7 @@ Specifically, any defined abbreviation is wrapped in an `` tag. The Abbreviations extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/admonition.md b/docs/extensions/admonition.md index c9a71161d..f29697756 100644 --- a/docs/extensions/admonition.md +++ b/docs/extensions/admonition.md @@ -1,4 +1,6 @@ +--- title: Admonition Extension +--- Admonition ========== @@ -12,7 +14,7 @@ This extension is included in the standard Markdown library. [rST]: http://docutils.sourceforge.net/docs/ref/rst/directives.html#specific-admonitions -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/api.md b/docs/extensions/api.md index b1846e3e2..7826b0c2f 100644 --- a/docs/extensions/api.md +++ b/docs/extensions/api.md @@ -1,4 +1,6 @@ -title: Extensions API +--- +title: Extensions API +--- # Writing Extensions for Python-Markdown @@ -826,15 +828,10 @@ A few things to note about the above linked collections. [tutorial]: https://github.com/Python-Markdown/markdown/wiki/Tutorial-1---Writing-Extensions-for-Python-Markdown [workingwithetree]: #working_with_et [Integrating your code into Markdown]: #integrating_into_markdown -[extendMarkdown]: #extendmarkdown [Registry]: #registry -[registerExtension]: #registerextension -[Config Settings]: #configsettings -[makeExtension]: #makeextension [ElementTree]: https://docs.python.org/3/library/xml.etree.elementtree.html [Available Extensions]: index.md [Footnotes]: https://github.com/Python-Markdown/markdown/blob/master/markdown/extensions/footnotes.py -[Definition Lists]: https://github.com/Python-Markdown/markdown/blob/master/markdown/extensions/definition_lists [library reference]: ../reference.md [setuptools]: https://packaging.python.org/key_projects/#setuptools [Entry points]: https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins diff --git a/docs/extensions/attr_list.md b/docs/extensions/attr_list.md index 04d9eba25..8856e1f42 100644 --- a/docs/extensions/attr_list.md +++ b/docs/extensions/attr_list.md @@ -1,4 +1,6 @@ +--- title: Attribute Lists Extension +--- # Attribute Lists @@ -9,7 +11,7 @@ HTML elements in markdown's output. This extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or @@ -116,7 +118,7 @@ The above results in the following output:

A hash style header

``` -!!! seealso "See Also" +!!! info "See Also" By default, the [Fenced Code Blocks](./fenced_code_blocks.md#attributes) extension includes limited support for attribute lists. To get [full support](./fenced_code_blocks.md#keyvalue-pairs), both extensions must be enabled. diff --git a/docs/extensions/code_hilite.md b/docs/extensions/code_hilite.md index 322ab8b21..b04cd6cf0 100644 --- a/docs/extensions/code_hilite.md +++ b/docs/extensions/code_hilite.md @@ -1,4 +1,6 @@ +--- title: CodeHilite Extension +--- # CodeHilite @@ -11,7 +13,7 @@ Python-Markdown code blocks using [Pygments][]. This extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or @@ -66,7 +68,7 @@ See Pygments' excellent [documentation] for more details. If no language is defined, Pygments will attempt to guess the language. When that fails, the code block will not be highlighted. -!!! seealso "See Also" +!!! info "See Also" GitHub user [richeland] has provided a number of different [CSS style sheets][rich] which work with Pygments along with a [preview] of each theme. @@ -89,7 +91,7 @@ blocks, with one exception. The highlighter needs to know what language to use f the code block. There are three ways to tell the highlighter what language the code block contains and each one has a different result. -!!! Note +!!! tip The format of the language identifier only effects the display of line numbers if `linenums` is set to `None` (the default). If set to `True` or `False` (see [Usage](#usage) below) the format of the identifier has no effect on the @@ -110,8 +112,10 @@ from that and line numbers are used. Will result in: - #!/usr/bin/python - # Code goes here ... +``` python +#!/usr/bin/python +# Code goes here ... +``` ### Shebang (no path) @@ -126,8 +130,9 @@ block before processing. Line numbers are used. Will result in: - #!python - # Code goes here ... +``` python +# Code goes here ... +``` ### Colons @@ -142,8 +147,9 @@ before processing and line numbers are not used. Will result in: - :::python - # Code goes here ... +``` python +# Code goes here ... +``` Certain lines can be selected for emphasis with the colon syntax. When using Pygments' default CSS styles, emphasized lines have a yellow background. @@ -158,12 +164,13 @@ This is useful to direct the reader's attention to specific lines. Will result in: - :::python hl_lines="1 3" +``` python hl_lines="1 3" # This line is emphasized # This line isn't # This line is emphasized +``` -!!! Note +!!! tip `hl_lines` is named for Pygments' option meaning "highlighted lines". ### When No Language is Defined @@ -187,7 +194,7 @@ Lets see the source for that: ``` -!!! Note +!!! tip When no language is defined, the Pygments highlighting engine will try to guess the language (unless `guess_lang` is set to `False`). Upon failure, the same behavior will happen as described above. @@ -225,7 +232,7 @@ The following options are provided to configure the output: * **`pygments_style`**{ #pygments_style }: Pygments HTML Formatter Style (`ColorScheme`). Defaults to `default`. - !!! Note + !!! tip This is useful only when `noclasses` is set to `True`, otherwise the CSS styles must be provided by the end user. diff --git a/docs/extensions/definition_lists.md b/docs/extensions/definition_lists.md index 94b721f6d..c33341b2e 100644 --- a/docs/extensions/definition_lists.md +++ b/docs/extensions/definition_lists.md @@ -1,4 +1,6 @@ +--- title: Definition Lists Extension +--- Definition Lists ================ @@ -11,7 +13,7 @@ Markdown documents. This extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/extra.md b/docs/extensions/extra.md index 8328dfff2..88271b9c8 100644 --- a/docs/extensions/extra.md +++ b/docs/extensions/extra.md @@ -1,4 +1,6 @@ +--- title: Extra Extension +--- # Python-Markdown Extra @@ -20,7 +22,7 @@ The supported extensions include: See each individual extension for syntax documentation. Extra and all its supported extensions are included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/fenced_code_blocks.md b/docs/extensions/fenced_code_blocks.md index b744c0bf8..5eba4c0d9 100644 --- a/docs/extensions/fenced_code_blocks.md +++ b/docs/extensions/fenced_code_blocks.md @@ -1,4 +1,6 @@ +--- title: Fenced Code Blocks Extension +--- # Fenced Code Blocks @@ -9,7 +11,7 @@ indented code blocks. This extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or @@ -227,7 +229,7 @@ as well as any options accepted by the relevant [lexer][lexer] (each language ha don't have options that are all that useful in this context, there are a few important exceptions. For example, the [PHP lexer's] `startinline` option eliminates the need to start each code fragment with ` output.html See the [Command Line docs](../cli.md) or use the `--help` option for more details. -!!! seealso "See Also" +!!! info "See Also" If you would like to write your own extensions, see the [Extension API](api.md) for details. @@ -75,7 +77,7 @@ Extension | Entry Point | Dot Notation [Table of Contents]: toc.md [WikiLinks]: wikilinks.md -!!! Note +!!! info "Note" All of the included extensions are in __maintenance mode__. We will continue to fix bugs and keep them up-to-date with the core parser, but diff --git a/docs/extensions/legacy_attrs.md b/docs/extensions/legacy_attrs.md index 4313e70ed..8873987f2 100644 --- a/docs/extensions/legacy_attrs.md +++ b/docs/extensions/legacy_attrs.md @@ -1,4 +1,6 @@ +--- title: Legacy Attributes Extension +--- # Legacy Attributes @@ -11,7 +13,7 @@ users have never made use of the syntax and it has been deprecated in favor of [Attribute Lists](attr_list.md). This extension restores the legacy behavior for users who have existing documents which use the syntax. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/legacy_em.md b/docs/extensions/legacy_em.md index 8f9ebb94b..b99ef48a3 100644 --- a/docs/extensions/legacy_em.md +++ b/docs/extensions/legacy_em.md @@ -1,4 +1,6 @@ +--- title: Legacy EM Extension +--- # Legacy EM @@ -17,7 +19,7 @@ of the reference implementation. Therefore, this extension can be used to better match the reference implementation. With the extension enabled, the above input would result in this output: `connectedwords_`. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/md_in_html.md b/docs/extensions/md_in_html.md index 75476fdc7..a3a2dccba 100644 --- a/docs/extensions/md_in_html.md +++ b/docs/extensions/md_in_html.md @@ -1,4 +1,6 @@ +--- title: Markdown in HTML Extension +--- # Markdown in HTML @@ -6,7 +8,7 @@ title: Markdown in HTML Extension An extension that parses Markdown inside of HTML tags. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or @@ -31,7 +33,7 @@ preserved. The `markdown` attribute can be assigned one of three values: [`"1"`](#markdown1), [`"block"`](#block), or [`"span"`](#span). -!!! note +!!! tip The expressions "block-level" and "span-level" as used in this document refer to an element's designation according to the HTML specification. Whereas the `"span"` and `"block"` values assigned to the `markdown` diff --git a/docs/extensions/meta_data.md b/docs/extensions/meta_data.md index 242e2fb33..786e769d7 100644 --- a/docs/extensions/meta_data.md +++ b/docs/extensions/meta_data.md @@ -1,4 +1,6 @@ +--- title: Meta-Data Extension +--- Meta-Data ========= @@ -16,7 +18,7 @@ This extension is included in the standard Markdown library. [MultiMarkdown]: https://fletcherpenney.net/multimarkdown/#metadata -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/nl2br.md b/docs/extensions/nl2br.md index 968dc1c75..7bb908706 100644 --- a/docs/extensions/nl2br.md +++ b/docs/extensions/nl2br.md @@ -1,4 +1,6 @@ +--- title: New Line to Break Extension +--- New-Line-to-Break Extension =========================== @@ -11,7 +13,7 @@ hard breaks; like StackOverflow and [GitHub][] flavored Markdown do. [Github]: https://github.github.com/github-flavored-markdown/ -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/sane_lists.md b/docs/extensions/sane_lists.md index 414d33d4f..f2c6946aa 100644 --- a/docs/extensions/sane_lists.md +++ b/docs/extensions/sane_lists.md @@ -1,4 +1,6 @@ +--- title: Sane Lists Extension +--- Sane Lists ========== @@ -11,7 +13,7 @@ to be less surprising. This extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/smarty.md b/docs/extensions/smarty.md index 8dfb9b1b2..bdab3e6e2 100644 --- a/docs/extensions/smarty.md +++ b/docs/extensions/smarty.md @@ -1,4 +1,6 @@ +--- title: SmartyPants Extension +--- SmartyPants =========== @@ -38,7 +40,7 @@ extension_configs = { } ``` -!!! note +!!! tip This extension re-implements the Python [SmartyPants] library by integrating it into the markdown parser. While this does not provide any additional features, @@ -50,7 +52,7 @@ extension_configs = { [SmartyPants]: https://pythonhosted.org/smartypants/ [CodeHilite]: code_hilite.md -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/tables.md b/docs/extensions/tables.md index da44359d9..6a4f86440 100644 --- a/docs/extensions/tables.md +++ b/docs/extensions/tables.md @@ -1,4 +1,6 @@ +--- title: Tables Extension +--- Tables ====== @@ -10,7 +12,7 @@ The Tables extension adds the ability to create tables in Markdown documents. This extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or @@ -62,7 +64,7 @@ will be rendered as: ``` -!!! seealso "See Also" +!!! info "See Also" The [Attribute Lists](./attr_list.md) extension includes support for defining attributes on table cells. Usage diff --git a/docs/extensions/toc.md b/docs/extensions/toc.md index 9c7432057..178fdb8de 100644 --- a/docs/extensions/toc.md +++ b/docs/extensions/toc.md @@ -1,4 +1,6 @@ +--- title: Table of Contents Extension +--- Table of Contents ================= @@ -11,7 +13,7 @@ document and adds it into the resulting HTML document. This extension is included in the standard Markdown library. -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/extensions/wikilinks.md b/docs/extensions/wikilinks.md index aff9ea6e7..117c3a3bf 100644 --- a/docs/extensions/wikilinks.md +++ b/docs/extensions/wikilinks.md @@ -1,4 +1,6 @@ +--- title: WikiLinks Extension +--- # WikiLinks @@ -11,7 +13,7 @@ This extension is included in the standard Markdown library. [WikiLinks]: https://en.wikipedia.org/wiki/Wikilink -!!! Note +!!! info "Note" This extension is in __maintenance mode__. We will continue to fix bugs and keep it up-to-date with the core parser, but no new features or diff --git a/docs/index.md b/docs/index.md index 320e7188a..55ae99041 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,6 @@ +--- title: Python-Markdown +--- Python-Markdown =============== @@ -28,7 +30,7 @@ The Python-Markdown project is developed with the following goals in mind: * Provide an [Extension API](extensions/api.md) which makes it possible to change and/or extend the behavior of the parser. -!!! Note +!!! info "Note" *This is not a CommonMark implementation*; nor is it trying to be! Python-Markdown was developed long before the CommonMark specification was diff --git a/docs/install.md b/docs/install.md index 25530d60c..d74bc8f94 100644 --- a/docs/install.md +++ b/docs/install.md @@ -1,4 +1,6 @@ +--- title: Installation +--- # Installing Python-Markdown diff --git a/docs/reference.md b/docs/reference.md index 7edb54dd1..76b1b6488 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -1,4 +1,6 @@ +--- title: Library Reference +--- # Using Markdown as a Python Library @@ -42,21 +44,23 @@ __text__{: #text } : The source Unicode string. (required) - !!! note "Important" + !!! tip "Important" Python-Markdown expects a **Unicode** string as input (some simple ASCII binary strings *may* work only by coincidence) and returns output as a Unicode string. Do not pass binary strings to it! If your input is encoded, (e.g. as UTF-8), it is your responsibility to decode it. For example: - :::python - with open("some_file.txt", "r", encoding="utf-8") as input_file: - text = input_file.read() - html = markdown.markdown(text) + ``` python + with open("some_file.txt", "r", encoding="utf-8") as input_file: + text = input_file.read() + html = markdown.markdown(text) + ``` If you want to write the output to disk, you *must* encode it yourself: - :::python - with open("some_file.html", "w", encoding="utf-8", errors="xmlcharrefreplace") as output_file: - output_file.write(html) + ``` python + with open("some_file.html", "w", encoding="utf-8", errors="xmlcharrefreplace") as output_file: + output_file.write(html) + ``` __extensions__{: #extensions } @@ -71,10 +75,11 @@ __extensions__{: #extensions } The list of extensions may contain instances of extensions and/or strings of extension names. - :::python - extensions=[MyExtClass(), 'myext', 'path.to.my.ext:MyExtClass'] + ``` python + extensions=[MyExtClass(), 'myext', 'path.to.my.ext:MyExtClass'] + ``` - !!! note + !!! tip The preferred method is to pass in an instance of an extension. Strings should only be used when it is impossible to import the Extension Class directly (from the command line or in a template). @@ -84,12 +89,13 @@ __extensions__{: #extensions } defined when initiating the class instance rather than using the [`extension_configs`](#extension_configs) keyword. For example: - :::python - from markdown.extensions import Extension - class MyExtClass(Extension): - # define your extension here... + ``` python + from markdown.extensions import Extension + class MyExtClass(Extension): + # define your extension here... - markdown.markdown(text, extensions=[MyExtClass(option='value')]) + markdown.markdown(text, extensions=[MyExtClass(option='value')]) + ``` If an extension name is provided as a string, the string must either be the registered entry point of any installed extension or the importable path @@ -101,8 +107,9 @@ __extensions__{: #extensions } name `myext` assigned to it and the extension is properly installed, then do the following: - :::python - markdown.markdown(text, extensions=['myext']) + ``` python + markdown.markdown(text, extensions=['myext']) + ``` If an extension does not have a registered entry point, Python's dot notation may be used instead. The extension must be installed as a @@ -112,13 +119,15 @@ __extensions__{: #extensions } Therefore, if you were to import the class like this: - :::python - from path.to.module import MyExtClass + ``` python + from path.to.module import MyExtClass + ``` Then load the extension as follows: - :::python - markdown.markdown(text, extensions=['path.to.module:MyExtClass']) + ``` python + markdown.markdown(text, extensions=['path.to.module:MyExtClass']) + ``` If only one extension is defined within a module and the module includes a `makeExtension` function which returns an instance of the extension, then @@ -130,7 +139,7 @@ __extensions__{: #extensions } configuration settings to the extension by using the [`extension_configs`](#extension_configs) keyword. - !!! seealso "See Also" + !!! info "See Also" See the documentation of the [Extension API](extensions/api.md) for assistance in creating extensions. @@ -142,23 +151,24 @@ __extension_configs__{: #extension_configs } (as a string). When loading extensions as class instances, pass the configuration settings directly to the class when initializing it. - !!! Note + !!! tip The preferred method is to pass in an instance of an extension, which does not require use of the `extension_configs` keyword at all. See the [extensions](#extensions) keyword for details. The dictionary of configuration settings must be in the following format: - :::python - extension_configs = { - 'extension_name_1': { - 'option_1': 'value_1', - 'option_2': 'value_2' - }, - 'extension_name_2': { - 'option_1': 'value_1' - } + ``` python + extension_configs = { + 'extension_name_1': { + 'option_1': 'value_1', + 'option_2': 'value_2' + }, + 'extension_name_2': { + 'option_1': 'value_1' } + } + ``` When specifying the extension name, be sure to use the exact same string as is used in the [extensions](#extensions) keyword to load the @@ -228,7 +238,7 @@ __encoding__{: #encoding } Defaults to `"utf-8"`. The same encoding will always be used for input and output. The `xmlcharrefreplace` error handler is used when encoding the output. - !!! Note + !!! tip This is the only place that decoding and encoding of Unicode takes place in Python-Markdown. If this rather naive solution does not meet your specific needs, it is suggested that you write your own code diff --git a/docs/sanitization.md b/docs/sanitization.md index fe5af6a6f..367600ccd 100644 --- a/docs/sanitization.md +++ b/docs/sanitization.md @@ -1,4 +1,6 @@ +--- title: Sanitization and Security +--- # Sanitizing HTML Output diff --git a/docs/test_tools.md b/docs/test_tools.md index ba8a0a8da..3834b7cfd 100644 --- a/docs/test_tools.md +++ b/docs/test_tools.md @@ -1,4 +1,6 @@ +--- title: Test Tools +--- # Test Tools @@ -165,7 +167,7 @@ sub-directories and run all `unittest` tests that it finds, including `markdown.test_tools.LegacyTestCase` subclasses. Normal [unittest] discovery rules apply. -!!! seealso "See Also" +!!! info "See Also" See the [Contributing Guide] for instructions on setting up a [development environment] for running the tests. diff --git a/mkdocs.yml b/mkdocs.yml index 91043a130..6fa39fd83 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,21 +1,59 @@ site_name: Python-Markdown site_url: https://Python-Markdown.github.io/ repo_url: https://github.com/Python-Markdown/markdown +repo_name: Python-Markdown/markdown site_author: "The Python-Markdown Project" -copyright: "Copyright © 2010-2023" +copyright: "Copyright © 2010-2026 The Python-Markdown Project" use_directory_urls: true watch: [markdown, scripts] theme: - name: nature - icon: py.png - release: !!python/name:markdown.__version__ - issue_tracker: https://github.com/Python-Markdown/markdown/issues + variant: modern + logo: py.png + favicon: favicon.ico + features: + # - navigation.tabs + - navigation.path + - navigation.indexes + - navigation.footer + - navigation.top + - content.action.edit + - content.action.view + - content.code.copy + - content.footnote.tooltips + - search.highlight + + palette: -extra_css: - - custom.css - - mkdocstrings.css + # Palette toggle for automatic mode + - media: "(prefers-color-scheme)" + toggle: + icon: lucide/sun-moon + name: Switch to light mode + + + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: lucide/sun + name: Switch to dark mode + primary: green + accent: light green + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: lucide/moon + name: Switch to system preference + primary: green + accent: light green + +# extra_css: +# - custom.css +# - mkdocstrings.css nav: - Python-Markdown: index.md @@ -23,26 +61,26 @@ nav: - Library Reference: reference.md - Command Line: cli.md - Sanitization and Security: sanitization.md - - Extensions: extensions/index.md - - Officially Supported Extensions: - - Abbreviations: extensions/abbreviations.md - - Admonition: extensions/admonition.md - - Attribute Lists: extensions/attr_list.md - - CodeHilite: extensions/code_hilite.md - - Definition Lists: extensions/definition_lists.md - - Extra: extensions/extra.md - - Fenced Code Blocks: extensions/fenced_code_blocks.md - - Footnotes: extensions/footnotes.md - - Legacy Attributes: extensions/legacy_attrs.md - - Legacy Emphasis: extensions/legacy_em.md - - Meta-Data: extensions/meta_data.md - - New Line to Break: extensions/nl2br.md - - Markdown in HTML: extensions/md_in_html.md - - Sane Lists: extensions/sane_lists.md - - SmartyPants: extensions/smarty.md - - Table of Contents: extensions/toc.md - - Tables: extensions/tables.md - - WikiLinks: extensions/wikilinks.md + - Extensions: + - extensions/index.md + - Abbreviations: extensions/abbreviations.md + - Admonition: extensions/admonition.md + - Attribute Lists: extensions/attr_list.md + - CodeHilite: extensions/code_hilite.md + - Definition Lists: extensions/definition_lists.md + - Extra: extensions/extra.md + - Fenced Code Blocks: extensions/fenced_code_blocks.md + - Footnotes: extensions/footnotes.md + - Legacy Attributes: extensions/legacy_attrs.md + - Legacy Emphasis: extensions/legacy_em.md + - Meta-Data: extensions/meta_data.md + - New Line to Break: extensions/nl2br.md + - Markdown in HTML: extensions/md_in_html.md + - Sane Lists: extensions/sane_lists.md + - SmartyPants: extensions/smarty.md + - Table of Contents: extensions/toc.md + - Tables: extensions/tables.md + - WikiLinks: extensions/wikilinks.md - Extension API: extensions/api.md - Test Tools: test_tools.md - API Reference: @@ -80,25 +118,39 @@ nav: - Changelog: changelog.md - Authors: authors.md -not_in_nav: | - change_log/ - validation: - omitted_files: warn - absolute_links: warn - unrecognized_links: warn - anchors: warn + invalid_links: true + invalid_link_anchors: true + unresolved_references: false + unresolved_footnotes: true + unused_definitions: true + unused_footnotes: true + shadowed_definitions: true + shadowed_footnotes: true markdown_extensions: - - extra + - abbr - admonition + - attr_list + - def_list + - footnotes + - md_in_html - smarty - - codehilite - toc: - permalink: true + permalink: "ยง" - mdx_gh_links: user: Python-Markdown repo: markdown + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + plugins: - search diff --git a/pyproject.toml b/pyproject.toml index ef1ce78a4..164f84270 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,10 +50,12 @@ testing = [ 'pyyaml' ] docs = [ - 'mkdocs==1.6.1', - 'mkdocs-nature>=0.6', - 'mdx_gh_links>=0.2', - "mkdocstrings[python]>=0.28.3" + 'zensical==0.0.57', + 'mdx_gh_links==0.2', + 'mkdocstrings==1.0.6', + 'mkdocstrings-python==1.16.8', + 'pygments==2.21.0', + 'pymdown-extensions==11.0.2' ] [project.urls] diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..550983a54 --- /dev/null +++ b/uv.lock @@ -0,0 +1,712 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "coverage" +version = "7.15.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/c3/4f2195f512fb172aa425a8803a874b2baa9ba7f80ff7b6080998761fc701/coverage-7.15.4.tar.gz", hash = "sha256:0548198fff07ccf4faf469520bce1c2eceb1ce3e62891921138dec10907f9d00", size = 936952, upload-time = "2026-08-06T13:50:24.442Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/70/b052a519a584663a7bd052841a2debe11c8309ec49a7786340003f9c0a02/coverage-7.15.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0be6daac4cce6b8c8dc65886bae1b082ddbca4da8e5cbb5e15166acf253e264", size = 222245, upload-time = "2026-08-06T13:46:55.253Z" }, + { url = "https://files.pythonhosted.org/packages/67/39/892fa511aba3d1c3c8f49509a0ff5c71eab9f9f88d08e1a38da395821660/coverage-7.15.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b24e078eabcd6a9caa8b0713f9bc1eeb310bcc960a29d45a3b4fcd4b16d5b11d", size = 222762, upload-time = "2026-08-06T13:46:57.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/95/b2c724ce1e64bc23cb5b1d7eeffa9548dc3d811f7a6297b2d01607f4e062/coverage-7.15.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cfe20cc8cf8821d4fe54f89106cbf06aa27f37b5bbe3535568065a81539b4150", size = 249498, upload-time = "2026-08-06T13:46:59.012Z" }, + { url = "https://files.pythonhosted.org/packages/0b/4f/b1973f67a1382af65b572a31ed692f8e490a6ad707191eab59148376832a/coverage-7.15.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:83cf06cdd687677742caff1a9134833b7a8b75f111519d2cb0e0ba1b9a851e15", size = 251328, upload-time = "2026-08-06T13:47:00.764Z" }, + { url = "https://files.pythonhosted.org/packages/a2/09/03efa6722a132abcac91b32a60b64b240dd707c189c64eee697e48992c96/coverage-7.15.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8fa4de68e2a752468ff14b4e15db7def689a71be759e826a31ccecbef69c5fd0", size = 253194, upload-time = "2026-08-06T13:47:01.976Z" }, + { url = "https://files.pythonhosted.org/packages/45/63/8299201d9c80fb65551ce99c966cab83d706ec4066ac999bef08201346de/coverage-7.15.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4dff9daa47d83120c3ec38ce921214242944a832aa04e903e50b5b7ebac8972d", size = 255106, upload-time = "2026-08-06T13:47:03.281Z" }, + { url = "https://files.pythonhosted.org/packages/ee/16/26fd8a691eb8d9a230128685f6d23309d7402cb030aa553001788c8c50fc/coverage-7.15.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a093fd37229918976f602aa07aa59e0973cde82186f220c8e197f721f5be0ce4", size = 250177, upload-time = "2026-08-06T13:47:04.713Z" }, + { url = "https://files.pythonhosted.org/packages/ad/ef/3c7556f33783a0a566e01443ca62bd8eb2cdfe22d271efdc02e08beb5654/coverage-7.15.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:317db01a2cb02552fd67e2b1cca77a4b528a2a277176c5e0bf2cecbb639d3f54", size = 251234, upload-time = "2026-08-06T13:47:06.104Z" }, + { url = "https://files.pythonhosted.org/packages/29/49/640a34043edac950738f36a3567832db5731d4cb2ed84b59cdb89c6bccbf/coverage-7.15.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8ee3838dcb656602c3b51e16aed9bfb0822f8d8d6d1c5966d32ec8c104be8e20", size = 249237, upload-time = "2026-08-06T13:47:07.467Z" }, + { url = "https://files.pythonhosted.org/packages/48/f5/e80f212669dd1be954ff844f883ef11a437ef4fd0089c6e0effc7b66b15d/coverage-7.15.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:425920379052ff1fe465268f3361d35804a241bbdd5a1b592c8cb60df4c52325", size = 253050, upload-time = "2026-08-06T13:47:08.748Z" }, + { url = "https://files.pythonhosted.org/packages/c7/e9/e5da0fe39f7fde1bca9edc09c60921bb5fdba4cec7db5bbad41ddfd8c230/coverage-7.15.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:69bb2400abef928e365ea7d4d9925169ada78ed2295546780002d4b65de3df88", size = 249508, upload-time = "2026-08-06T13:47:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/7d/38/41bf25774a0c8bba6b467f917cb1c9a0a2605e02dc93aad489fc7050ed59/coverage-7.15.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:81661f82d302484e3119e7c80c519c02fa9bcc2a6b339baf67d67bc89c580f04", size = 250110, upload-time = "2026-08-06T13:47:11.35Z" }, + { url = "https://files.pythonhosted.org/packages/89/6e/26f2e54b79acc29d179ee4272922625aedb69198c4eb61f7ff4f098f3c78/coverage-7.15.4-cp310-cp310-win32.whl", hash = "sha256:cb476b2e828ecb71cb6b6a928d23fd20a7ddb501188022dae1c37499149cc338", size = 224294, upload-time = "2026-08-06T13:47:12.753Z" }, + { url = "https://files.pythonhosted.org/packages/7b/06/9a318fc3ae040d4d6cb2d86101c6aa963fab20899a5c58666adf52cde0ca/coverage-7.15.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fc2130bf37df31852a8384f12601563a45a0024bccc6624f38355cba7a8d360", size = 224919, upload-time = "2026-08-06T13:47:14.17Z" }, + { url = "https://files.pythonhosted.org/packages/2a/66/edcec7d7a0b524aa8923e22925fde6fe50ce005a113dca13ae1581455c4c/coverage-7.15.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbac5abad70df71019988f83f26ac7092ff2642975def4429e98dc7585ef3490", size = 222367, upload-time = "2026-08-06T13:47:15.578Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c6/ab8de429e2e8548faf58ec7e1674a4ce00414b4113942d3fe87109cf0f68/coverage-7.15.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:357a173465c7ce028d07a95cc2b63b5bf59f50ecdd5ad75c5cbb78ada984048e", size = 222874, upload-time = "2026-08-06T13:47:16.961Z" }, + { url = "https://files.pythonhosted.org/packages/be/c4/3b7b49587e8a6b9af79b3eb468d443d6042b6d65b47aa26586846a0d6566/coverage-7.15.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:21b803935e2efc3acebe9697197a294fccf5dc4e5382bd6369542ff7a7d2a1d7", size = 253287, upload-time = "2026-08-06T13:47:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/fb/65/ec03b743a2a229c72cc1eff3e57be9d3564e9c6b4d5aba2d70744a3fc0d8/coverage-7.15.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7a2b580774a4786c1053157c0165e04476e03ff293993d7c148eee784a94bae6", size = 255199, upload-time = "2026-08-06T13:47:19.765Z" }, + { url = "https://files.pythonhosted.org/packages/41/4b/5163729e4b6582d61975cfd3ccab45b4ec53e21cf156d9941cb025188468/coverage-7.15.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9464451c4efffe8d47ace5a540b10b0dc10e879066290f8600872b7f54a419d", size = 257308, upload-time = "2026-08-06T13:47:21.206Z" }, + { url = "https://files.pythonhosted.org/packages/86/08/2167a0f08fb87d702fa423a48578a32865464b7c9e1db3911ad7812ab414/coverage-7.15.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de602f34123c2f4af1c1869c6dbbbd60da6d5983bf01937367295d135cccbfce", size = 259268, upload-time = "2026-08-06T13:47:22.503Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e5/68eebae3053dbd48508edea559c21b23fbdf3460784f91370c83a86a6acd/coverage-7.15.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6879ded16a27f3eeca19b900c147e81616e7054db451471a611b2755ee5249f7", size = 253392, upload-time = "2026-08-06T13:47:23.88Z" }, + { url = "https://files.pythonhosted.org/packages/1a/46/fd4ced40a2b691c774e515c9b69500bfa64c7960b67fcee4b2f6fad97fc3/coverage-7.15.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:986be58c3ab54aae8d3496a6225eea74f760fdbe739b38bd442c7e8d133aa53b", size = 255001, upload-time = "2026-08-06T13:47:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/53/25/ae2e5fa710bb6957a9aadeb9e3598d3b3e4af6587ce857ad42e8639a3f30/coverage-7.15.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c6103639613fe6c1e989082948419bc77a2d26b6c825c99d7fad25f7d3d87afc", size = 253061, upload-time = "2026-08-06T13:47:26.845Z" }, + { url = "https://files.pythonhosted.org/packages/d7/31/67ddc0365db2c6e93ac8580bc4bbc50f65273262f973f63ebcdbc15c0495/coverage-7.15.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d3af93dddb5659276c63bc16ac6466ac2033a70ca816097bbc06345b8ccdf571", size = 256831, upload-time = "2026-08-06T13:47:28.217Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/82b8fd18f57fb13f12d98fe874995bb2c4f9f17be8aff762c426323fdb96/coverage-7.15.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b10075e5421d04265766a6d1dac809bbeb8a946fbb23c8f82c227409b2190719", size = 252781, upload-time = "2026-08-06T13:47:29.712Z" }, + { url = "https://files.pythonhosted.org/packages/0a/eb/6c74ef4dd12b252e573c49bdef9e2ac265bf3dbb79b8d7feb3266e084e9e/coverage-7.15.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a67a9f78b2942d87ba8ce3059c642164d2aedd65337377fb52fe9803656bc5c7", size = 253692, upload-time = "2026-08-06T13:47:31.192Z" }, + { url = "https://files.pythonhosted.org/packages/5a/66/eb9aed1c3fd2d36ee00eb173f434b14fa607fc056739c9a89ff4244010ea/coverage-7.15.4-cp311-cp311-win32.whl", hash = "sha256:69484d1aca26e322e1c3ce03f09341e84524ababad2d7202161738d83cc9f82e", size = 224461, upload-time = "2026-08-06T13:47:32.572Z" }, + { url = "https://files.pythonhosted.org/packages/e2/6d/81fa4161dfb3ed9d74e40d58647eff83a56b7612e78352581280fce2f477/coverage-7.15.4-cp311-cp311-win_amd64.whl", hash = "sha256:63fd6fcd1dd6e158f7eb78606e72933b3f6d01e7b747f99c6c12d764307a0fdc", size = 224937, upload-time = "2026-08-06T13:47:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c1/d8dacf683c6cad3cf85ce68fd3774a6774ec402128822fdfaed920f11e6a/coverage-7.15.4-cp311-cp311-win_arm64.whl", hash = "sha256:ea82116c9893fa89e929b7f197ee5a1950a76e91cc5c85ba503fc02379d04890", size = 224479, upload-time = "2026-08-06T13:47:36.118Z" }, + { url = "https://files.pythonhosted.org/packages/1d/48/bc8d4ba7b37551a767bd863f15b3f80182b271c2f55975356f5f7dbe94c2/coverage-7.15.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4fedd1f7f428f9fe83b1ead5e7cc87a43427be31aadafbac3ac0636dc7abb22", size = 222543, upload-time = "2026-08-06T13:47:37.562Z" }, + { url = "https://files.pythonhosted.org/packages/20/dd/88d6f83f1fffc974a3691a34a97951c5b12df7512a6782c5963883cbc058/coverage-7.15.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37e2f0cdf58e2e1fed4e4d5a8f8786ae2f7eb80b478016876667dc4a01d60a97", size = 222905, upload-time = "2026-08-06T13:47:38.927Z" }, + { url = "https://files.pythonhosted.org/packages/bd/5c/54ee0d4748585bb0acab9891cd8d92f2d3593165b4e59fc9de113bfb3140/coverage-7.15.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fb55d0e70bb15f2e81477613627286581414693d74ac7963c93a790dd453ca9d", size = 254407, upload-time = "2026-08-06T13:47:40.488Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3f/f0642a372f494bd0d7dad3b497083b910194a5f1c88be2c94fef707c3b59/coverage-7.15.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:899b9da30f3c6c336566e3707495bb23e8302d39d862f01fa78c48b99b9437e2", size = 257145, upload-time = "2026-08-06T13:47:41.931Z" }, + { url = "https://files.pythonhosted.org/packages/71/17/8b46d0ed68251016002ec972c8fc0119961a765d0984cafb8bf317c43758/coverage-7.15.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d15715e8c46552827e5e4f30a35575a2dbcad14454cf3284c54483946bd16931", size = 258257, upload-time = "2026-08-06T13:47:43.527Z" }, + { url = "https://files.pythonhosted.org/packages/30/b8/8498a0e72d0adbe15477dd07463d2b3bb2c9f6a4815e8589e50939e2c3ae/coverage-7.15.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:002a438859f7b430bc99afeaf01a6d187dad1d0dc907b64cdeffc632a5db8fd8", size = 260517, upload-time = "2026-08-06T13:47:45.121Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/7dce19c3bdb1e3dd63e769508216500edad81bd5f69a26d724e32aceaf78/coverage-7.15.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e4193a04b518f7968f3099755f5509ee7cccc6dc2b92a6b14841934d22e222c9", size = 254785, upload-time = "2026-08-06T13:47:46.541Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b1/e1494703c675a2561723cd9b89f45c9168782c31280c611b1f767851e57c/coverage-7.15.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e98dcc55d572b38e69d117da7e8e8efb8500f1f5eaf81ecd460a63220790b839", size = 256176, upload-time = "2026-08-06T13:47:48.155Z" }, + { url = "https://files.pythonhosted.org/packages/73/76/a5629d270fb638a43a4b10466f51e2f49d532c1aa4da2913cbbb150bbe0a/coverage-7.15.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:af6c538498ce66c10d3fd541c2a8d5b03da5850355add34e6cba564210cb9e72", size = 254321, upload-time = "2026-08-06T13:47:49.757Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4f/9c44447218435d5766b911534f9d798144a5560f85e9a54ebe5f3f5d19f9/coverage-7.15.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d10025d96ea89fc2f73714dbc4cbd433fe012c1ac9e23f895d7728b238b6e52", size = 258390, upload-time = "2026-08-06T13:47:51.248Z" }, + { url = "https://files.pythonhosted.org/packages/de/36/c1e127616fb3fa18a9ff71e76c417f2fd7424332a4870015ac224ef4c039/coverage-7.15.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d802e1947603162ded419bff83ac7489820355d2b856dfb09206574e3a37ac0c", size = 253894, upload-time = "2026-08-06T13:47:52.816Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b9/fdb92c8ae7a8bb9b850cc253b7b3b9c8526f68130002048b5671cd510d09/coverage-7.15.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c2de40895718f91951b86712b4c5b694acaf9a0a49be13874896f599a1eed3f4", size = 255763, upload-time = "2026-08-06T13:47:54.296Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/a7d51b2587c7bdb76e71b0896d2565bf7d60436b5122fc83e511adb1f7cd/coverage-7.15.4-cp312-cp312-win32.whl", hash = "sha256:5c3431b2161279b7db5c2a1aa58ae02e5cb8c3c42d93a5094be3f5537bd5b11b", size = 224597, upload-time = "2026-08-06T13:47:56.074Z" }, + { url = "https://files.pythonhosted.org/packages/49/b9/5c5f80cc55f5acaaca6dee677626bfcec8c87204a7809b438b08e84f4571/coverage-7.15.4-cp312-cp312-win_amd64.whl", hash = "sha256:6befeab5fb2b51c958ca4ac6c5d141a1e8240f4f76e46350f1911963deda49cd", size = 225135, upload-time = "2026-08-06T13:47:57.52Z" }, + { url = "https://files.pythonhosted.org/packages/47/e4/2a4561f89ff6bf7c925c287d0f2cce8bdf139c3a33735c87e3203401cf94/coverage-7.15.4-cp312-cp312-win_arm64.whl", hash = "sha256:67bc345491ab55b837277d76f5775d057e8c7f1ac44d890d8c2c82adde258c6f", size = 224515, upload-time = "2026-08-06T13:47:58.977Z" }, + { url = "https://files.pythonhosted.org/packages/f1/84/651a9310859673aaa3b3203f1aa1641ca60fcf2494683e1c9474c7172780/coverage-7.15.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c705b28feb2775dc82a25f1d473a370bc37ff93f5177f4e29ce2425f560f6921", size = 222565, upload-time = "2026-08-06T13:48:00.796Z" }, + { url = "https://files.pythonhosted.org/packages/82/f9/4dcf700137e8af550670f4d74d1b63828ce93e1e2b05e5f10710eb2ea987/coverage-7.15.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ff205ab5e3ecc670f6a4dd19d9cbf12ede53dd41cfc1e15716ec961ea6d314e", size = 222936, upload-time = "2026-08-06T13:48:02.391Z" }, + { url = "https://files.pythonhosted.org/packages/07/4a/612ff1e780b3fbfd637486f542f84adc5503873d8b5d279dec1ffeef9414/coverage-7.15.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5172326e861a38b48b48befca15e0f477a26b283337a33a739c8fed229934e36", size = 253926, upload-time = "2026-08-06T13:48:04.382Z" }, + { url = "https://files.pythonhosted.org/packages/b0/04/d1cff1c2ead4708a6a79c01d3736b6a25bd38a36678398f72a8dd33dfad9/coverage-7.15.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:12b59c90084e3234fb11184886bf4a40f4f16a8c8f867be2e087b81f8e8868d4", size = 256523, upload-time = "2026-08-06T13:48:05.996Z" }, + { url = "https://files.pythonhosted.org/packages/b9/80/d34e13fb4b293cbdb9665838cf5522077b8ad14ef947550631a4bced36a5/coverage-7.15.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349062d66f00b40fa2c1c222438bad25fabf755631b5d82937fe985c8008615c", size = 257759, upload-time = "2026-08-06T13:48:08.036Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e7/2c5fe7636fdb0732fe0f09f308a5b066864078b7fc61f6678e8478554f2e/coverage-7.15.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4256ced708e598e05209bc1a8ab4074e04a51dba4c62fb45926a229af675ace7", size = 259890, upload-time = "2026-08-06T13:48:09.834Z" }, + { url = "https://files.pythonhosted.org/packages/92/28/9689f0858dfff59c2ea688938ab9fa2925631235df67126a42b6c5c70ae1/coverage-7.15.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d80f974b20782d9612c8b4c9beeca867074c7cf4079d1419843fa25a26428b25", size = 254121, upload-time = "2026-08-06T13:48:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/785077c230c157243eb5aa9a26c3be260ecd02001bead54a3cada3df8e03/coverage-7.15.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e179f19bfe1d31f8eeeaa12990194d761c4f62f0759661000bca6cd8729f40b", size = 255891, upload-time = "2026-08-06T13:48:13.209Z" }, + { url = "https://files.pythonhosted.org/packages/d4/90/e20371b17b40f912f21305c2db2f30efa3de306f7320fc916804872c85a4/coverage-7.15.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8bc16bb47b7679670eceff71d78bfb7d6e5b143f6c2cd117487ec7c75e0d4b78", size = 253859, upload-time = "2026-08-06T13:48:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/05/49/25371987ee459a5f67c0427fb75c74f9358e65f2c71fe75bf41c1b6c5fcb/coverage-7.15.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1cd685005cd2c4200adfc14cf39a603b9320efab3f18a8f7f156d20c9cc3345f", size = 258011, upload-time = "2026-08-06T13:48:16.464Z" }, + { url = "https://files.pythonhosted.org/packages/30/6e/32e67467f6154bf4f1c4f63b05acc5097cba4237d45bbeeea446b52e8ac1/coverage-7.15.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:337399ad2c93b3acd2a937627dae8b3e86b66707cd3d3e856347999aadf1ef8d", size = 253676, upload-time = "2026-08-06T13:48:18.493Z" }, + { url = "https://files.pythonhosted.org/packages/03/c1/8b24192e89286399765155251f99ee9f070a9d637109018ac23d99b99f6f/coverage-7.15.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:96e257121228ec5cd2bb919276e94ac11074471bc37d68dbae0e8308cce15fff", size = 255453, upload-time = "2026-08-06T13:48:20.057Z" }, + { url = "https://files.pythonhosted.org/packages/16/6f/8b41ebdf67c87854e17c035336a90f1cfbad0c14c2a584301be6ff148718/coverage-7.15.4-cp313-cp313-win32.whl", hash = "sha256:c65a9e0dfc6143491879da4e13b5e30f8be192055de508d737fb14601edbd22c", size = 224605, upload-time = "2026-08-06T13:48:21.655Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e2/2946c7f0b42b152ecb21ff1bdad72e3d301e790c0c487e4a86e8c9f69347/coverage-7.15.4-cp313-cp313-win_amd64.whl", hash = "sha256:2ff8f5e9b8f7a94f0c11c45631eee103dbcb7d63274edd12c56efe1be690b3b4", size = 225148, upload-time = "2026-08-06T13:48:23.376Z" }, + { url = "https://files.pythonhosted.org/packages/9e/83/3f4a69957f48ae7a0aba76c34743f88963d607b19e03f3f8e66f91cae0f9/coverage-7.15.4-cp313-cp313-win_arm64.whl", hash = "sha256:6e0a8a5083b096487d6cfced94cdd514d8f5db6f113610fb36c0620edb1028cf", size = 224536, upload-time = "2026-08-06T13:48:25.117Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ac/748cf29eeb2d6be34a3176ce26a4f49e38085ee08e8935f05f6f26ed7e0f/coverage-7.15.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:770e9325ab5ea6d56f77e59b29ecfe0ac20b57a82a601876f90494a4dda0386f", size = 222608, upload-time = "2026-08-06T13:48:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/0b/02/1abbf5c984677b0aa439cdacaccbf38d248939d8ef8fe1cc7a50d73edb77/coverage-7.15.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d12b33a3a50a1676b7784dc8d00a0c6d66a9f2add4b85a041c19b6a7e53ef23c", size = 222940, upload-time = "2026-08-06T13:48:28.432Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e1/ff8f9f53d9fcf586125b55d0b1f04ec1c14955fee41e83d5814bee141bb5/coverage-7.15.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5669c8378ebde86f5def7a25d29586631b58acc27ffde04399f678f3dfc6e082", size = 253985, upload-time = "2026-08-06T13:48:29.995Z" }, + { url = "https://files.pythonhosted.org/packages/a1/26/595759762e514e81be1d7d01ed03444303bcd152226a6529998d253f9201/coverage-7.15.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ff97a14362eef486483ed44042ca2027ea257df6ff768e62358ee0c9776925ac", size = 256492, upload-time = "2026-08-06T13:48:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/b79aabac54d482be23b5fcdd4f4662bff24a78edc4ee29201726929936d5/coverage-7.15.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a325e815318638aed1655d9c06e6d7c2d3d46c09231ce988070428a8762d734", size = 257837, upload-time = "2026-08-06T13:48:33.186Z" }, + { url = "https://files.pythonhosted.org/packages/09/0f/bf7f297885a5bf6fd71e5782404e0ff059ca09e8711ceb3a08544abde45a/coverage-7.15.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:474223409d88eb20d2d6a0d37ea60e8647a65a90cc008dc1f0410af5f64f1e0d", size = 260152, upload-time = "2026-08-06T13:48:34.75Z" }, + { url = "https://files.pythonhosted.org/packages/fd/f1/296744e854ff8368542343457414380465e9ceefb9192342feb9d3bc461d/coverage-7.15.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f2f62ae3cd189dd2e13aece758c57b3eecbd27be070dbd4cbd10936049e5dbf", size = 253978, upload-time = "2026-08-06T13:48:36.434Z" }, + { url = "https://files.pythonhosted.org/packages/55/b0/bbdb2e9057493e66220a2e149ca2d301ba0e3a58a83bd6b90de9826d16f3/coverage-7.15.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39ece820e29e0a2ba34b3ecb3be83c27e997eed8926f2ba6fe7ce7a0bda5843b", size = 255846, upload-time = "2026-08-06T13:48:38.317Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/38015b2b6d21258713bd17e76b59d033b191efb5703589cffd037dfbca20/coverage-7.15.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f21b56dcace11dfe013014201f577dcd592b2a9b72182d930361b47cf6f73f25", size = 253808, upload-time = "2026-08-06T13:48:39.993Z" }, + { url = "https://files.pythonhosted.org/packages/0b/64/0d515c1e60ee6fbfd1a0e79c07cd87d388a233b7adc37758735677203808/coverage-7.15.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:93a3a0b662abcc10c73a47cbc72cd60f63618d6989fb2d1286e50eacd974f303", size = 258081, upload-time = "2026-08-06T13:48:41.971Z" }, + { url = "https://files.pythonhosted.org/packages/91/71/04d9e7a3642146c6351338aef4ef85ab11dbbb54744c13245caba1aad1c0/coverage-7.15.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:141fae2cabf5569b782c10afc4c850ce10f618c13f8db54765cba99cc839da1f", size = 253624, upload-time = "2026-08-06T13:48:43.731Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a7/6c28b74c81ebff66987b0e2522ba5cffa3e90b0c33cb6a2eb264d4ee8cf1/coverage-7.15.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:81294c7e6ab30c5f74c0353b11b2fd6320e72d9bee6ac73b357caa8b916323a5", size = 255280, upload-time = "2026-08-06T13:48:45.58Z" }, + { url = "https://files.pythonhosted.org/packages/52/af/bc19996a7014b98d7bbb0f0939453c67074af65784a3aa16a789a07381fa/coverage-7.15.4-cp314-cp314-win32.whl", hash = "sha256:7bbd7d6418e0dab31a206af5203bd43ae36edb8e7fba1940b055d3e9249290d7", size = 224768, upload-time = "2026-08-06T13:48:47.525Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/219484e476d6e101ba0a444852579e05f5b75c37c611a42ed1190f73ef62/coverage-7.15.4-cp314-cp314-win_amd64.whl", hash = "sha256:f0204ed122758782970526057093f448051a39db9d810d4e344bb87a3546f425", size = 225259, upload-time = "2026-08-06T13:48:49.513Z" }, + { url = "https://files.pythonhosted.org/packages/b7/66/fa77daf4e383e5f776dac62c2409b6af81910ae6fe326bd5170dba74cc63/coverage-7.15.4-cp314-cp314-win_arm64.whl", hash = "sha256:9e71e7bc71c686a123347ae47a0de33a175e797a85bb57b791492adf4eec8ed8", size = 224684, upload-time = "2026-08-06T13:48:51.235Z" }, + { url = "https://files.pythonhosted.org/packages/58/5b/f03bf0ce362bbf3f785fa5219620d00778d4ac6fc9e407734828e9c672f6/coverage-7.15.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7c922735321eef3f87c280a3d39afff6b646723a2880b862cda4ac7a093b8aa8", size = 223338, upload-time = "2026-08-06T13:48:52.896Z" }, + { url = "https://files.pythonhosted.org/packages/0f/76/e77d0ae22501831cc9f92193e8a957a5caa1dd177f90a6d1d9b106242d92/coverage-7.15.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f41c17c4668a655ce96d090d8d5ffdc24ef64b5a02f9753884d08483e8a4a41a", size = 223609, upload-time = "2026-08-06T13:48:54.688Z" }, + { url = "https://files.pythonhosted.org/packages/82/1a/b1f089da8d38ac612fa2dd6dc7f4a1a7657d12f3e261d2996edd3a838d0b/coverage-7.15.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:46822e9b6ff1c6a72b518c162c44a8f45a61a1d609c51084bf5b16c023c5037b", size = 264970, upload-time = "2026-08-06T13:48:56.403Z" }, + { url = "https://files.pythonhosted.org/packages/bf/31/e66d98d6e9c7fcc88470f1e234eaf6b1950dc0dfbf797f7282c1c861da24/coverage-7.15.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6f4955b73b5445271379a59e3792b0d978f42d4a01e0cf7a67d9c33a3bb0a5", size = 267088, upload-time = "2026-08-06T13:48:58.41Z" }, + { url = "https://files.pythonhosted.org/packages/59/a1/ae94eb2c541add426378408379f233591e069040b1e2cdb33df9498a0682/coverage-7.15.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3fc9e047706fb4a9abb54f719d3aa643e80e5bb3818182c40aee01ac0f0247ba", size = 269508, upload-time = "2026-08-06T13:49:00.42Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c7/88a10694a1c6a213569766aba9f25847b28155d4ac731b13226db216356d/coverage-7.15.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05e491d4f3165d62d4f5c8fd48dfeabf2ae8f42cbbd484319af33ea851b78982", size = 270629, upload-time = "2026-08-06T13:49:02.234Z" }, + { url = "https://files.pythonhosted.org/packages/b3/34/d8b8232e5e55169933b59aabcef2fedfa4b9d8897361bb80fcbda146505f/coverage-7.15.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:226c66e80ec0598d3b9b4874123df167ccca342aca8714f77cac6829688ee09c", size = 264043, upload-time = "2026-08-06T13:49:04.102Z" }, + { url = "https://files.pythonhosted.org/packages/7e/35/58b009dbf8c471c7224716478b9fed4a7e1af15320e1ed41660978504663/coverage-7.15.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac41cc14bebda0dbfb0628036b7f75706935c95bcc07fefe9a0f93614aa60a57", size = 266963, upload-time = "2026-08-06T13:49:05.821Z" }, + { url = "https://files.pythonhosted.org/packages/62/aa/57fbda1b42c892968273c56b6ee9dc0f1310850859230a507bc7873b1f65/coverage-7.15.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8af623e5cd92080acddd02b38f2f406a2c3a0893c38950b211890361448fbf26", size = 264569, upload-time = "2026-08-06T13:49:07.706Z" }, + { url = "https://files.pythonhosted.org/packages/98/8a/360e6e7f24d477b7e889703af0afa878d15b6d4d8d2a822b2835c169a879/coverage-7.15.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07545711d4f0f32852a18f18ad11f76f0109909d09e78b9008b4cfc67e829429", size = 268299, upload-time = "2026-08-06T13:49:09.587Z" }, + { url = "https://files.pythonhosted.org/packages/4e/89/6f701261aee21b6b5fa8f7872229406dc917e125069448292223bf213606/coverage-7.15.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a0865421cfdc53654b342d515e5a233187590882d20b95752150e53f65460017", size = 263413, upload-time = "2026-08-06T13:49:11.604Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0f/6f04036edc260ed425af83e834f627fad48941ce97b50bfe6edd8b6fa623/coverage-7.15.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:460115e32ee40566476db5048f9bec1e842c127ad8e6f8be745aad3ac9cbc839", size = 265725, upload-time = "2026-08-06T13:49:13.38Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ce/d19b5d4d5c49a7bfb925fd74310fee7d28bc99520ac3367ccbc54e662518/coverage-7.15.4-cp314-cp314t-win32.whl", hash = "sha256:cbde877ef9dd7baf272b9bfef2b8a25edd45d9170fc326951dd20eb480335e85", size = 225079, upload-time = "2026-08-06T13:49:15.265Z" }, + { url = "https://files.pythonhosted.org/packages/26/bb/7aa1b3b173faee0679037ca950bbbe1247273656697994d8d13f80f8d4b4/coverage-7.15.4-cp314-cp314t-win_amd64.whl", hash = "sha256:3da9e92d1c551fd7563833e9ade686efb0c4b7363ab7681a94283958c950bf5e", size = 225911, upload-time = "2026-08-06T13:49:17.279Z" }, + { url = "https://files.pythonhosted.org/packages/81/1c/4ea9e47426d80038d9222db3c4534cb6021a74b237d3ff97ffd33b6600dd/coverage-7.15.4-cp314-cp314t-win_arm64.whl", hash = "sha256:3a54f5a0d85050c73a38f6793090ee83974531e67fe5e57a1da9bee11398aa5e", size = 225219, upload-time = "2026-08-06T13:49:19.293Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c4/dc5d2ac8f9142e7ec7de66e7bf0591db29d78955a040bd915870d9c0e657/coverage-7.15.4-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:2c9872e4d9dc5d3cf616bf4b382f5a00359305a5be666a3dd0b5cdb4e49597f9", size = 222604, upload-time = "2026-08-06T13:49:21.279Z" }, + { url = "https://files.pythonhosted.org/packages/70/39/33e63df81fe2ee100897451841c821467635923e58e37c6bd4b46dd8106c/coverage-7.15.4-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:e101dbb4b9b72f0cddd8cdc8c9c5b47f456766f5e0ac82dbfb75e5c55409b78a", size = 222944, upload-time = "2026-08-06T13:49:23.187Z" }, + { url = "https://files.pythonhosted.org/packages/99/1f/ef3ffb5557febc75a0d97aa459d0266d7d741110265121cc6d8539343d44/coverage-7.15.4-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7d1abebdb047729e852b9c77a00497dfbeb11eb3a117e037d7dbc3ac8e5f5c54", size = 254050, upload-time = "2026-08-06T13:49:25.008Z" }, + { url = "https://files.pythonhosted.org/packages/6f/f5/1f0f6f77698c3601ca0ae7431e34b24c62ca2f06fecb23b73ed1f651d2be/coverage-7.15.4-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d28a4a899354d0ea6214cc59b4fa19eefbce1b9ff1688ab579acf49e894bd3fb", size = 256967, upload-time = "2026-08-06T13:49:26.896Z" }, + { url = "https://files.pythonhosted.org/packages/03/7a/2ed9bed79925f4367c83c77f66a89e5ca7229c288d2d19ad5f36d1ca0070/coverage-7.15.4-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffb3c2aacea411cc7e1d27712490c11108e2de1d39019ae32915493a59a8b9ed", size = 258587, upload-time = "2026-08-06T13:49:28.692Z" }, + { url = "https://files.pythonhosted.org/packages/45/8c/fa34044f71b7cc4ecb6da9c2408770959b0591fa9b5fb6fb6bca38f94298/coverage-7.15.4-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9447978a92f405d301123cfd39ff49895490efb769a758fe2734c7f631bf8ce", size = 260785, upload-time = "2026-08-06T13:49:30.472Z" }, + { url = "https://files.pythonhosted.org/packages/4f/54/d5727ce36b4524a7394ab9f5f1df378e1f23affcdab01037dc8655185cc7/coverage-7.15.4-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:050467a7983b8e2fe7dd41a78bb30c3e7f8c0b8cafda14b1c46f8b5e3cf2dd3c", size = 254545, upload-time = "2026-08-06T13:49:32.271Z" }, + { url = "https://files.pythonhosted.org/packages/dc/e6/6e3783e576719590194bdffb6dd6d85490801785b7c331e35a245d8cb8b5/coverage-7.15.4-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d003b7a5708ddad5c206c79607a6b92abb6fc13c57d99d8a4468cc03a2941ced", size = 256682, upload-time = "2026-08-06T13:49:34.089Z" }, + { url = "https://files.pythonhosted.org/packages/dc/f2/bacdbde18b69ed2de424fcf64d9fb0a4913753d4f0eca8bae9daad69f4bd/coverage-7.15.4-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c38efe30fd74e5c19e9433f11fb1f5dc9c6522770971b7c6145bbaa413dc8800", size = 254560, upload-time = "2026-08-06T13:49:36.052Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a3/1fb927196e3477c1b48831169ab58ba08f451ba87ae311ff1de68b26a616/coverage-7.15.4-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:1f4f826d70f772ab8b0c052329580d7fe8b8abd191e4ce0c8f81aec6614665d3", size = 258792, upload-time = "2026-08-06T13:49:38.01Z" }, + { url = "https://files.pythonhosted.org/packages/41/58/30d4c149c69053de0edfe325614c1d28d508f62b1783e0e4a234d2e49136/coverage-7.15.4-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:4a4bf917c9953f57c957be31c1cd504e3bd2f34d4a352b9d391a3025336f6768", size = 253968, upload-time = "2026-08-06T13:49:39.934Z" }, + { url = "https://files.pythonhosted.org/packages/89/e4/77f639371b918aad30dda4051f95404b43578f7f2e2f87ba73e02ed1ff37/coverage-7.15.4-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:1c9bf40ebef178a45192c75c4964760bb261b0e6ad725da5fc4c93f674f19753", size = 255893, upload-time = "2026-08-06T13:49:41.825Z" }, + { url = "https://files.pythonhosted.org/packages/5c/62/13be29b3ddab35f14c87967a4820a05106d2a3eccb4fa4ff550bf30b75e0/coverage-7.15.4-cp315-cp315-win32.whl", hash = "sha256:43619d04c3671792d2c4706ae8bf45e265dc87bbd4078189ef8b847ea1e74be2", size = 224768, upload-time = "2026-08-06T13:49:44.08Z" }, + { url = "https://files.pythonhosted.org/packages/a1/70/af0c6be0f964af6954f6b74bc109b0dbca02824696d2520fb17fe1ab06e3/coverage-7.15.4-cp315-cp315-win_amd64.whl", hash = "sha256:be619439dbcd31a2eab10b32de9fff62c26ed4bab69dc32b8363fdaaa0882809", size = 225242, upload-time = "2026-08-06T13:49:45.899Z" }, + { url = "https://files.pythonhosted.org/packages/4f/2d/f3bd3aab899fc9efc18b53133ee68f5f98574ef480649b23e12962226387/coverage-7.15.4-cp315-cp315-win_arm64.whl", hash = "sha256:def597967dafc2e8d97c9097ea453c464e0bb8ed38f193a43070f10dc623bb6d", size = 224674, upload-time = "2026-08-06T13:49:48.322Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ca/f69251cd63eabc6438321aea22148754cce758a26bde07dd490e3fe7cfc5/coverage-7.15.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c7dbc748ac8a1e3e59a2b28bea47675e6e778081dbbf081bde0d75def2fcbe1d", size = 223333, upload-time = "2026-08-06T13:49:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/a7/a7/037b53b2885b0d8447064432491a4d5a1014cd9f97a594d53acd0c04541a/coverage-7.15.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:2413074a5ecbb61a01a7888fc72db0ca324d13588c5b38bc0dd8564cdcdfea26", size = 223630, upload-time = "2026-08-06T13:49:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/80/4f/152b8a4779ae90da11bb24f7467df8a59f0be48a5c52acb856325ca48289/coverage-7.15.4-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4e6f6f632b7b2f714bf7a1346e8f97b650ee71f3c298aaad42a2ab60f0f07645", size = 264489, upload-time = "2026-08-06T13:49:54.52Z" }, + { url = "https://files.pythonhosted.org/packages/10/2d/84b4b9e0e1dd6528a51920ff7031f35b789382e467a28ec6a5a578cb8812/coverage-7.15.4-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8df457da2249d3c75ca2e5e835d59c725abfe92d27fdff6cd99eed85b51d5e9a", size = 267567, upload-time = "2026-08-06T13:49:56.721Z" }, + { url = "https://files.pythonhosted.org/packages/53/fc/ba01cc25299f9f8a2c8b02d3b28c53f3543d9fbfbe4e74fa2760b48f163e/coverage-7.15.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:050f66a08805acb5b8a23c6d4a517b1ecf82c08e81ed0e4bd727df065e5c6624", size = 270123, upload-time = "2026-08-06T13:49:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d0/db2647cbf40b14f8c308f94ff7bf89c06d564e59f396906edf50086ec788/coverage-7.15.4-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1587fb771d1ccceef708fdde1e5af8c7ed24b486b61d13a321acb7d8145390aa", size = 271107, upload-time = "2026-08-06T13:50:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4d2d17924552c458bb4f77dd631f0e3bc92fbbdf2d2d916cd4b33bbfd5b1/coverage-7.15.4-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8b4f1c3a69ca580f3fbd6b2046915f536d7f586874f25c1bb23add2a3c88d50f", size = 264955, upload-time = "2026-08-06T13:50:03.023Z" }, + { url = "https://files.pythonhosted.org/packages/ee/de/dc010c7a3691f396d93bbc26bfcafa1c2a3a351cd520470f15faf5795bd5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:ffb58d7eff5b7f6ecc6fa21d6288ab7f968a212cb67d682c269c09b9eba3b66f", size = 267949, upload-time = "2026-08-06T13:50:05.557Z" }, + { url = "https://files.pythonhosted.org/packages/78/ea/dc96a11375e83c045c2f7c61fb6918277cfe9401db7c0f7b1d111a84b2e5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:d9df165544774574ee004b953023d1bebada1894a80b1052a43d798b0f676e67", size = 264421, upload-time = "2026-08-06T13:50:07.612Z" }, + { url = "https://files.pythonhosted.org/packages/c8/86/b77131a0f9503ce461cd577076147d7a9040f0c5dda772686f729e2cc9cb/coverage-7.15.4-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:f9de0a24a4079b53e523b5c5e2c5945ec251ab486652659955187cf255a259bc", size = 269121, upload-time = "2026-08-06T13:50:09.58Z" }, + { url = "https://files.pythonhosted.org/packages/24/24/944bc35007862955e7ebf05754e645419dcf5d7526c52735cfa2715e8ebf/coverage-7.15.4-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:150089274bdc9f940628552cb92844e0223c987f1902ab8efe9f45a2ec758d88", size = 264565, upload-time = "2026-08-06T13:50:11.722Z" }, + { url = "https://files.pythonhosted.org/packages/c7/cc/a3bb9f93e7e740659163e2ea584f8196ddcd2c456a5dbe15f6c50105fec1/coverage-7.15.4-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:a58a94fed5da6997d258e8f7668c1e195fbd04a691d781b7558f1e468f9e68bc", size = 266522, upload-time = "2026-08-06T13:50:13.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/dd/e0e40f3560d878d888c580698ff5ad1179f5e1c3ac949684ef66b41a3817/coverage-7.15.4-cp315-cp315t-win32.whl", hash = "sha256:ebd5a6d8466ff30836572f3ba2cae8a5e8f85029b1c6d5e2ed338dc472a5166a", size = 225068, upload-time = "2026-08-06T13:50:15.825Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7e/37732ea80eebc30e976e4cdab15c190bc42d96959a42e38ddf6f8c60468f/coverage-7.15.4-cp315-cp315t-win_amd64.whl", hash = "sha256:288bde2a2d7ab6b6c2d7252fcde8b524387f2d970bdba9658fc6f8bbcaef0f9b", size = 225895, upload-time = "2026-08-06T13:50:17.928Z" }, + { url = "https://files.pythonhosted.org/packages/c6/08/1e00f7923eaaba45fb3d51dd794125fc766304b1df264f3a9c6557bfb30e/coverage-7.15.4-cp315-cp315t-win_arm64.whl", hash = "sha256:68be5e1de60ff13c9095bbec0e5a7fa45b33b101752215b91345ea1f61c4a278", size = 225213, upload-time = "2026-08-06T13:50:19.981Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d9/e70c286c979378f061d8266e279b686ab0b0b688e1fe0af864684f23a77d/coverage-7.15.4-py3-none-any.whl", hash = "sha256:964730a1e9de9c0cf11be6a1a3c79ce419c34882842abd256086ba4698705e84", size = 214332, upload-time = "2026-08-06T13:50:22.192Z" }, +] + +[[package]] +name = "deepmerge" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/6c/9f4577a36d5f463a3a3f8322bd65d33e1a1a6b6ba1d692a5ebc3cba19015/deepmerge-3.0.tar.gz", hash = "sha256:14ed69f063de64b7743985c732ccff5d6c34ff4560946e7fbfd99086b853b9ce", size = 22279, upload-time = "2026-08-17T05:50:53.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/d7/7f19bedd30b90b72865aeec3a29127bed6dee6c9ef0324bb5b4d424bb0e3/deepmerge-3.0-py3-none-any.whl", hash = "sha256:c8541c3e186dc88d19a5513ad3a0b2d0b22beaa780969fc0c13b995a64265365", size = 14855, upload-time = "2026-08-17T05:50:52.218Z" }, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + +[[package]] +name = "griffe" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffecli" }, + { name = "griffelib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/a0/927cf9416f527f623f4ccd9220337fca0cd85303b7e82adeab1e53669cd3/griffe-2.2.0.tar.gz", hash = "sha256:9c0dd9a7feda9e169d783507d777c6fb2f2fc2919b139747a5b4f5357517a611", size = 246229, upload-time = "2026-08-16T14:04:57.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/51/c9f9cb144e2bd21cbcb6ebd7978ecb5b9f5a375e78313744158338c8039c/griffe-2.2.0-py3-none-any.whl", hash = "sha256:db20672b31c3de2a1af5a18a3b3d8c186ccc2425e10290486b4f0364d25929e9", size = 5070, upload-time = "2026-08-16T14:04:51.971Z" }, +] + +[[package]] +name = "griffecli" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, + { name = "griffelib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/75/3cf2fb1ae21fb55a3b917b45d24426a620ee916f4bdbd03f350c69d3d892/griffecli-2.2.0.tar.gz", hash = "sha256:b9e763131218eb19887ed52de20fe944252d811bfb4a3e339874908a588f0044", size = 58066, upload-time = "2026-08-16T14:04:55.984Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/83/04652213d82afeecc8e8a31231eeb87cc484dcc055fd96ecb0bfd9860405/griffecli-2.2.0-py3-none-any.whl", hash = "sha256:8ebb7ae1dcc2617f5d39f00e4c238dd6b5cd0b13157b0ce22c1ea4ca8b4c5d1d", size = 11480, upload-time = "2026-08-16T14:04:53.14Z" }, +] + +[[package]] +name = "griffelib" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/b4/a767e91c606deefc447a96eaf59edd77397960b1d677dffd833ee8449831/griffelib-2.2.0.tar.gz", hash = "sha256:e1bc36fe9cd21d4b6b659b456346755e4cfdc5676c0a5214083126ee12612b3c", size = 227048, upload-time = "2026-08-16T14:04:58.383Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/b6/f65ac785d4ac90dcf7c831ac6256f5dd4a19780f4e1575b2c0d6eeebe319/griffelib-2.2.0-py3-none-any.whl", hash = "sha256:d71c3bc2bbed9f958488634fe788b843a9f705d6d2838ca32cd6c25eeb64dfc4", size = 166779, upload-time = "2026-08-16T14:04:54.365Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "markdown" +source = { editable = "." } + +[package.optional-dependencies] +docs = [ + { name = "mdx-gh-links" }, + { name = "mkdocstrings" }, + { name = "mkdocstrings-python" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "zensical" }, +] +testing = [ + { name = "coverage" }, + { name = "pyyaml" }, +] + +[package.metadata] +requires-dist = [ + { name = "coverage", marker = "extra == 'testing'" }, + { name = "mdx-gh-links", marker = "extra == 'docs'", specifier = "==0.2" }, + { name = "mkdocstrings", marker = "extra == 'docs'", specifier = "==1.0.6" }, + { name = "mkdocstrings-python", marker = "extra == 'docs'", specifier = "==1.16.8" }, + { name = "pygments", marker = "extra == 'docs'", specifier = "==2.21.0" }, + { name = "pymdown-extensions", marker = "extra == 'docs'", specifier = "==11.0.2" }, + { name = "pyyaml", marker = "extra == 'testing'" }, + { name = "zensical", marker = "extra == 'docs'", specifier = "==0.0.57" }, +] +provides-extras = ["testing", "docs"] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mdx-gh-links" +version = "0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/e7/76324cb45a3b655a3f4392e5e1c771a1b9a6b938700d7f9ac31fcbb43377/mdx_gh_links-0.2.tar.gz", hash = "sha256:59fb8dafdf62bd0757593d6ab1f13b554d1d3ef0dcc44bedea2eca71970cf398", size = 4961, upload-time = "2018-03-09T17:17:20.063Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/5d/b0e9afc67f3db79e6eda5a81b01c06969b1cc33d020a1c3f5da37e290dbb/mdx_gh_links-0.2-py2.py3-none-any.whl", hash = "sha256:0815d6f2880fc78e7a06e3964dfab55def5bf45a10ce1555423c5bcd405873e5", size = 5390, upload-time = "2018-03-09T17:17:17.945Z" }, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mergedeep" }, + { name = "mkdocs-get-deps" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-autorefs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/c0/f641843de3f612a6b48253f39244165acff36657a91cc903633d456ae1ac/mkdocs_autorefs-1.4.4.tar.gz", hash = "sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197", size = 56588, upload-time = "2026-02-10T15:23:55.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl", hash = "sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089", size = 25530, upload-time = "2026-02-10T15:23:53.817Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mergedeep" }, + { name = "platformdirs" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, +] + +[[package]] +name = "mkdocstrings" +version = "1.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, + { name = "mkdocs-autorefs" }, + { name = "pymdown-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/71/f85bdf13355073ae15a7375f09879375a830553552e58c1c4b7e0bbc5c8b/mkdocstrings-1.0.6.tar.gz", hash = "sha256:a0b8c2bdd29a6416c80d717aa369bbf7831946bd9f23c2a66db1b1dbe7693dbd", size = 100649, upload-time = "2026-07-11T19:38:05.732Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/5b/4c1902e8bdd5c4db63284e9d101dece4038d4025d6d88850ffe0a1578980/mkdocstrings-1.0.6-py3-none-any.whl", hash = "sha256:2703708697487d1b6d6d7b412e176fa436edf120c1bf81dc9e126b12d00893c7", size = 35787, upload-time = "2026-07-11T19:38:04.417Z" }, +] + +[[package]] +name = "mkdocstrings-python" +version = "1.16.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffe" }, + { name = "mkdocs-autorefs" }, + { name = "mkdocstrings" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/b8/62190ea298fdb1e84670ef548590748c633ab4e05b35bcf902e89f2f28c6/mkdocstrings_python-1.16.8.tar.gz", hash = "sha256:9453ccae69be103810c1cf6435ce71c8f714ae37fef4d87d16aa92a7c800fe1d", size = 205119, upload-time = "2025-03-24T11:25:13.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/d0/ef6e82f7a68c7ac02e1a01815fbe88773f4f9e40728ed35bd1664a5d76f2/mkdocstrings_python-1.16.8-py3-none-any.whl", hash = "sha256:211b7aaf776cd45578ecb531e5ad0d3a35a8be9101a6bfa10de38a69af9d8fd8", size = 124116, upload-time = "2025-03-24T11:24:56.607Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/bb/ebc6636e1ae41314f796ebb7215fd28febb45f9aac72f2b04cb74b5071dc/platformdirs-4.11.4.tar.gz", hash = "sha256:f3373be828247211d0febabea97e238c3dfde8a60b3c90c32756fb52cb21556d", size = 34079, upload-time = "2026-08-24T14:53:49.676Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/be/0ff05fcd2938fb58ad9219bd54135968342d214737e012d62d43f06a2dd6/platformdirs-4.11.4-py3-none-any.whl", hash = "sha256:e34ff91a24bcddc6d939b878bdf3f5c437c9c46fe9e212b1bf455fdf1ee57586", size = 23741, upload-time = "2026-08-24T14:53:48.406Z" }, +] + +[[package]] +name = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pymdown-extensions" +version = "11.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/17/2db4b414de89659144488e0d9c6c0bf0c8395841dc12d81d0532cc6ef310/pymdown_extensions-11.0.2.tar.gz", hash = "sha256:9506fcbe66fa355a775b768084334238dd6805020ac4b92bea0c0dda6f8f223d", size = 855419, upload-time = "2026-08-22T19:28:47.236Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/43/9f45ec4d14e596efc32c925a78104934790438b0c0628b70d741016734ad/pymdown_extensions-11.0.2-py3-none-any.whl", hash = "sha256:259910762019732caa1dfd76f3faa62c59f191d46573e80bcb1d13c0f675bbe5", size = 269929, upload-time = "2026-08-22T19:28:45.389Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" }, + { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" }, + { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" }, + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +] + +[[package]] +name = "zensical" +version = "0.0.57" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "deepmerge" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "pyyaml" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/f4/fa40086c46a2e59e3d9239031f76623622e60e0d79f3df1282df2797a5c4/zensical-0.0.57.tar.gz", hash = "sha256:25fcbdf89a57153cc3ad1108a89d17c7226da5d3c551a8839c69cbd9c472a9d8", size = 4000458, upload-time = "2026-08-21T20:43:49.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/b9/49c37dc65105d1ca4a8b600a02c84ece00218d2293b2630611c620185ca3/zensical-0.0.57-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:98867d1a6ea2c57f1ebcf4902f61601f427350f2df0c04e30cfac8ba6163cd29", size = 12888507, upload-time = "2026-08-21T20:43:20.365Z" }, + { url = "https://files.pythonhosted.org/packages/05/f7/54539984418de11387bbace39a744195555d32c98c95bf4d112b432548f5/zensical-0.0.57-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:0d7935d77d73a279545052e05d89d31960f30c1f33f53933f4c101fa271aee74", size = 12778169, upload-time = "2026-08-21T20:43:22.879Z" }, + { url = "https://files.pythonhosted.org/packages/40/16/74aa60aa4cfecd5bd31ce60cb6a092cb56f1bc1aaadcc173463861ea4eb5/zensical-0.0.57-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7046d433511d97aa603915f0f6792d15b7f839793abc2b66ab7b7ff753ecff5", size = 13230823, upload-time = "2026-08-21T20:43:25.141Z" }, + { url = "https://files.pythonhosted.org/packages/8a/d1/742d2487dd65dd18277daebcd37db56d5bd4a2408df02bde703ef8fb7b64/zensical-0.0.57-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab85c5066b95e3a877cf8971e4ce30abb1ca1459fbfcc631f0a5a2bab56351a4", size = 13170523, upload-time = "2026-08-21T20:43:27.456Z" }, + { url = "https://files.pythonhosted.org/packages/56/6f/12b570775d344f1a3d77e26d4ae0160bcac9e41ca38f7135352ccdf9b2c8/zensical-0.0.57-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f13d1b57ad3c8b8634933a93ea870ebac11245fe0c968d27fd2a059ee1c6311", size = 13549941, upload-time = "2026-08-21T20:43:29.964Z" }, + { url = "https://files.pythonhosted.org/packages/7b/4e/436e6fc76674244c084ef7f6f17dc5ff85c76b15aef77c48b703fd0a2dda/zensical-0.0.57-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:021dd8fb70d1816cd012684fcf45d32b8f88a0cd28b7cbe71e5f8564f6d5764d", size = 13210086, upload-time = "2026-08-21T20:43:32.098Z" }, + { url = "https://files.pythonhosted.org/packages/ef/52/20f3aeda9af1090f24241670a5cc20fff7494545fea9f5fa094c82f3dbdf/zensical-0.0.57-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7e10f3c27fdc3eac3a9ae6ddcd87f3f00edc9f332050923313c95537961bfadd", size = 13408253, upload-time = "2026-08-21T20:43:34.258Z" }, + { url = "https://files.pythonhosted.org/packages/e1/f2/2b18ba2f19674dbfcf745f3b66e005cc8efa66a1bcaba5e1b4f79467868a/zensical-0.0.57-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:78c85fee55c5aac3bdf8157e980c56397dca835167a5577c5429b5eb24ed990c", size = 13446689, upload-time = "2026-08-21T20:43:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/05/ba/68cdba447a9097e5f97742eef046020c6fa42d82972849b3a46a0718e890/zensical-0.0.57-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:478d252e1924f3876e72cf7806967cb62e50d86eddb3da04bf43e882b532fa1b", size = 13598580, upload-time = "2026-08-21T20:43:38.646Z" }, + { url = "https://files.pythonhosted.org/packages/ec/89/6358a4df272328bed5bea90b04d43e73758bc45ff058c5cb2665e1147314/zensical-0.0.57-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66a9ca6b5f625b2a2b215eec2f3c72843a92d5d512042045ac6351d5dee9b339", size = 13557609, upload-time = "2026-08-21T20:43:40.866Z" }, + { url = "https://files.pythonhosted.org/packages/77/e1/8831301a24f736743e3788f09ea048918b0bdcea4aaa90f7770a433d6eec/zensical-0.0.57-cp310-abi3-win32.whl", hash = "sha256:f0fe3dc27ca7dc4e168eddd0fe5b0f4d44e311fd4e0019241e289819e445203c", size = 12446805, upload-time = "2026-08-21T20:43:43.097Z" }, + { url = "https://files.pythonhosted.org/packages/d7/3f/5d0ecd77d9ce962fdfde22dec036f4257a43ef6dbd55fb5c05fd294985ad/zensical-0.0.57-cp310-abi3-win_amd64.whl", hash = "sha256:a756834025c1c54e806e943be6d8df1048d0f8bcf6086e958568407a070a2572", size = 12716781, upload-time = "2026-08-21T20:43:45.273Z" }, +] From 8681cd783f4cd3bb14bb118985901fa1e3d18882 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Wed, 26 Aug 2026 15:23:31 -0400 Subject: [PATCH 03/13] reconfigure mkdocstrings for new theme --- docs/custom.css | 5 - docs/mkdocstrings.css | 102 +++++++----------- ...blockparser.md => markdown.blockparser.md} | 0 ...cessors.md => markdown.blockprocessors.md} | 0 .../abbr.md => markdown.extensions.abbr.md} | 0 ...n.md => markdown.extensions.admonition.md} | 0 ...st.md => markdown.extensions.attr_list.md} | 0 ...e.md => markdown.extensions.codehilite.md} | 0 ...ist.md => markdown.extensions.def_list.md} | 0 .../extra.md => markdown.extensions.extra.md} | 0 ....md => markdown.extensions.fenced_code.md} | 0 ...es.md => markdown.extensions.footnotes.md} | 0 ...md => markdown.extensions.legacy_attrs.md} | 0 ...em.md => markdown.extensions.legacy_em.md} | 0 .../index.md => markdown.extensions.md} | 0 ...l.md => markdown.extensions.md_in_html.md} | 0 .../meta.md => markdown.extensions.meta.md} | 0 .../nl2br.md => markdown.extensions.nl2br.md} | 0 ...s.md => markdown.extensions.sane_lists.md} | 0 ...marty.md => markdown.extensions.smarty.md} | 0 ...ables.md => markdown.extensions.tables.md} | 0 .../toc.md => markdown.extensions.toc.md} | 0 ...ks.md => markdown.extensions.wikilinks.md} | 0 .../htmlparser.md => markdown.htmlparser.md} | 0 ...patterns.md => markdown.inlinepatterns.md} | 0 .../{markdown/index.md => markdown.md} | 0 ...ocessors.md => markdown.postprocessors.md} | 0 ...rocessors.md => markdown.preprocessors.md} | 0 ...serializers.md => markdown.serializers.md} | 0 .../test_tools.md => markdown.test_tools.md} | 0 ...ocessors.md => markdown.treeprocessors.md} | 0 .../{markdown/util.md => markdown.util.md} | 0 .../{nature => material}/attribute.html.jinja | 2 +- .../{nature => material}/class.html.jinja | 2 +- .../docstring/admonition.html.jinja | 0 .../{nature => material}/function.html.jinja | 2 +- .../{nature => material}/module.html.jinja | 2 +- mkdocs.yml | 69 ++++++------ 38 files changed, 75 insertions(+), 109 deletions(-) delete mode 100644 docs/custom.css rename docs/reference/{markdown/blockparser.md => markdown.blockparser.md} (100%) rename docs/reference/{markdown/blockprocessors.md => markdown.blockprocessors.md} (100%) rename docs/reference/{markdown/extensions/abbr.md => markdown.extensions.abbr.md} (100%) rename docs/reference/{markdown/extensions/admonition.md => markdown.extensions.admonition.md} (100%) rename docs/reference/{markdown/extensions/attr_list.md => markdown.extensions.attr_list.md} (100%) rename docs/reference/{markdown/extensions/codehilite.md => markdown.extensions.codehilite.md} (100%) rename docs/reference/{markdown/extensions/def_list.md => markdown.extensions.def_list.md} (100%) rename docs/reference/{markdown/extensions/extra.md => markdown.extensions.extra.md} (100%) rename docs/reference/{markdown/extensions/fenced_code.md => markdown.extensions.fenced_code.md} (100%) rename docs/reference/{markdown/extensions/footnotes.md => markdown.extensions.footnotes.md} (100%) rename docs/reference/{markdown/extensions/legacy_attrs.md => markdown.extensions.legacy_attrs.md} (100%) rename docs/reference/{markdown/extensions/legacy_em.md => markdown.extensions.legacy_em.md} (100%) rename docs/reference/{markdown/extensions/index.md => markdown.extensions.md} (100%) rename docs/reference/{markdown/extensions/md_in_html.md => markdown.extensions.md_in_html.md} (100%) rename docs/reference/{markdown/extensions/meta.md => markdown.extensions.meta.md} (100%) rename docs/reference/{markdown/extensions/nl2br.md => markdown.extensions.nl2br.md} (100%) rename docs/reference/{markdown/extensions/sane_lists.md => markdown.extensions.sane_lists.md} (100%) rename docs/reference/{markdown/extensions/smarty.md => markdown.extensions.smarty.md} (100%) rename docs/reference/{markdown/extensions/tables.md => markdown.extensions.tables.md} (100%) rename docs/reference/{markdown/extensions/toc.md => markdown.extensions.toc.md} (100%) rename docs/reference/{markdown/extensions/wikilinks.md => markdown.extensions.wikilinks.md} (100%) rename docs/reference/{markdown/htmlparser.md => markdown.htmlparser.md} (100%) rename docs/reference/{markdown/inlinepatterns.md => markdown.inlinepatterns.md} (100%) rename docs/reference/{markdown/index.md => markdown.md} (100%) rename docs/reference/{markdown/postprocessors.md => markdown.postprocessors.md} (100%) rename docs/reference/{markdown/preprocessors.md => markdown.preprocessors.md} (100%) rename docs/reference/{markdown/serializers.md => markdown.serializers.md} (100%) rename docs/reference/{markdown/test_tools.md => markdown.test_tools.md} (100%) rename docs/reference/{markdown/treeprocessors.md => markdown.treeprocessors.md} (100%) rename docs/reference/{markdown/util.md => markdown.util.md} (100%) rename docs/templates/python/{nature => material}/attribute.html.jinja (86%) rename docs/templates/python/{nature => material}/class.html.jinja (69%) rename docs/templates/python/{nature => material}/docstring/admonition.html.jinja (100%) rename docs/templates/python/{nature => material}/function.html.jinja (70%) rename docs/templates/python/{nature => material}/module.html.jinja (74%) diff --git a/docs/custom.css b/docs/custom.css deleted file mode 100644 index 901060ebf..000000000 --- a/docs/custom.css +++ /dev/null @@ -1,5 +0,0 @@ -div.body h4, div.body h5, div.body h6 { - background-color: transparent; - padding-left: 0; - font-weight: bold; -} diff --git a/docs/mkdocstrings.css b/docs/mkdocstrings.css index efc62f485..df8e88fda 100644 --- a/docs/mkdocstrings.css +++ b/docs/mkdocstrings.css @@ -1,8 +1,3 @@ -/* Indentation. */ -div.doc-contents:not(.first) { - padding-left: 25px; -} - /* Mark external links as such. */ a.external::after, a.autorefs-external::after { @@ -10,96 +5,73 @@ a.autorefs-external::after { mask-image: url('data:image/svg+xml,'); -webkit-mask-image: url('data:image/svg+xml,'); content: ' '; - display: inline-block; vertical-align: middle; position: relative; - height: 1em; width: 1em; - background-color: #005b81; + background-color: var(--md-typeset-a-color); } a.external:hover::after, a.autorefs-external:hover::after { - background-color: #e32e00; + background-color: var(--md-accent-fg-color); } -/* Customize custom links. */ -a.autorefs code { - background-color: #ecf0f3; - font-weight: normal; - color: #005B81; -} - -a.autorefs:hover code { - color: #E32E00; -} +/* Code spans in tables. */ -/* Customize labels. */ -.doc-label { - border-radius: 15px; - padding: 2px 8px; - background-color: #f2f2f3; - text-wrap: nowrap; +table code { + background-color: transparent !important; } -.doc-label code { - color: #444; +/* Style headings */ +.doc-heading { + background: var(--md-accent-fg-color--transparent); + border-radius: .4rem; + padding: .35rem .8rem; } -.doc-label-deprecated { - background-color: #ffe4e4; - border: 1px solid #f66; +.doc-heading code { + background: transparent; } -/* No shadows in any code. */ - -code { - text-shadow: none; +/* Customize labels. */ +.doc-label>code { + background-color: var(--md-code-bg-color); + border: 1px solid var(--md-default-fg-color); + border-radius: 15px; + padding: 2px 1em; + text-wrap: nowrap; } -/* Code spans in tables. */ - -table code { - background-color: transparent !important; +.doc-label-deprecated>code { + background-color: #ffe2bd; + border-color: #ff9100; } /* Style source links */ a.doc-source-link { + mask-image: url('data:image/svg+xml,'); + -webkit-mask-image: url('data:image/svg+xml,'); + mask-position: center; + mask-repeat: no-repeat; + content: ''; + display: inline-block; + height: 1.5rem; + width: 1.5rem; position: relative; float: right; - border: 1px #005B81 solid; - margin: 0 5px; - padding: 0 5px; - font-weight: normal; - text-shadow: none; - background-color: #f2f2f3; - font-size: 1rem; + margin-left: .5rem; + background-color: var(--md-default-fg-color--lighter) } a.doc-source-link:hover { + background-color: var(--md-accent-fg-color); text-decoration: none; - border-color: #E32E00; -} - -/* Customize symbol names. */ -code.doc-symbol-attribute::after { - content: "Attr"; -} - -code.doc-symbol-function::after { - content: "Func"; -} - -code.doc-symbol-method::after { - content: "Method"; -} - -code.doc-symbol-class::after { - content: "Class"; } -code.doc-symbol-module::after { - content: "Module"; +/* Reposiiton content.action.edit and content.action.view page buttons */ +[dir=ltr] .md-content__button { + position: relative; + top: -3.5em; } diff --git a/docs/reference/markdown/blockparser.md b/docs/reference/markdown.blockparser.md similarity index 100% rename from docs/reference/markdown/blockparser.md rename to docs/reference/markdown.blockparser.md diff --git a/docs/reference/markdown/blockprocessors.md b/docs/reference/markdown.blockprocessors.md similarity index 100% rename from docs/reference/markdown/blockprocessors.md rename to docs/reference/markdown.blockprocessors.md diff --git a/docs/reference/markdown/extensions/abbr.md b/docs/reference/markdown.extensions.abbr.md similarity index 100% rename from docs/reference/markdown/extensions/abbr.md rename to docs/reference/markdown.extensions.abbr.md diff --git a/docs/reference/markdown/extensions/admonition.md b/docs/reference/markdown.extensions.admonition.md similarity index 100% rename from docs/reference/markdown/extensions/admonition.md rename to docs/reference/markdown.extensions.admonition.md diff --git a/docs/reference/markdown/extensions/attr_list.md b/docs/reference/markdown.extensions.attr_list.md similarity index 100% rename from docs/reference/markdown/extensions/attr_list.md rename to docs/reference/markdown.extensions.attr_list.md diff --git a/docs/reference/markdown/extensions/codehilite.md b/docs/reference/markdown.extensions.codehilite.md similarity index 100% rename from docs/reference/markdown/extensions/codehilite.md rename to docs/reference/markdown.extensions.codehilite.md diff --git a/docs/reference/markdown/extensions/def_list.md b/docs/reference/markdown.extensions.def_list.md similarity index 100% rename from docs/reference/markdown/extensions/def_list.md rename to docs/reference/markdown.extensions.def_list.md diff --git a/docs/reference/markdown/extensions/extra.md b/docs/reference/markdown.extensions.extra.md similarity index 100% rename from docs/reference/markdown/extensions/extra.md rename to docs/reference/markdown.extensions.extra.md diff --git a/docs/reference/markdown/extensions/fenced_code.md b/docs/reference/markdown.extensions.fenced_code.md similarity index 100% rename from docs/reference/markdown/extensions/fenced_code.md rename to docs/reference/markdown.extensions.fenced_code.md diff --git a/docs/reference/markdown/extensions/footnotes.md b/docs/reference/markdown.extensions.footnotes.md similarity index 100% rename from docs/reference/markdown/extensions/footnotes.md rename to docs/reference/markdown.extensions.footnotes.md diff --git a/docs/reference/markdown/extensions/legacy_attrs.md b/docs/reference/markdown.extensions.legacy_attrs.md similarity index 100% rename from docs/reference/markdown/extensions/legacy_attrs.md rename to docs/reference/markdown.extensions.legacy_attrs.md diff --git a/docs/reference/markdown/extensions/legacy_em.md b/docs/reference/markdown.extensions.legacy_em.md similarity index 100% rename from docs/reference/markdown/extensions/legacy_em.md rename to docs/reference/markdown.extensions.legacy_em.md diff --git a/docs/reference/markdown/extensions/index.md b/docs/reference/markdown.extensions.md similarity index 100% rename from docs/reference/markdown/extensions/index.md rename to docs/reference/markdown.extensions.md diff --git a/docs/reference/markdown/extensions/md_in_html.md b/docs/reference/markdown.extensions.md_in_html.md similarity index 100% rename from docs/reference/markdown/extensions/md_in_html.md rename to docs/reference/markdown.extensions.md_in_html.md diff --git a/docs/reference/markdown/extensions/meta.md b/docs/reference/markdown.extensions.meta.md similarity index 100% rename from docs/reference/markdown/extensions/meta.md rename to docs/reference/markdown.extensions.meta.md diff --git a/docs/reference/markdown/extensions/nl2br.md b/docs/reference/markdown.extensions.nl2br.md similarity index 100% rename from docs/reference/markdown/extensions/nl2br.md rename to docs/reference/markdown.extensions.nl2br.md diff --git a/docs/reference/markdown/extensions/sane_lists.md b/docs/reference/markdown.extensions.sane_lists.md similarity index 100% rename from docs/reference/markdown/extensions/sane_lists.md rename to docs/reference/markdown.extensions.sane_lists.md diff --git a/docs/reference/markdown/extensions/smarty.md b/docs/reference/markdown.extensions.smarty.md similarity index 100% rename from docs/reference/markdown/extensions/smarty.md rename to docs/reference/markdown.extensions.smarty.md diff --git a/docs/reference/markdown/extensions/tables.md b/docs/reference/markdown.extensions.tables.md similarity index 100% rename from docs/reference/markdown/extensions/tables.md rename to docs/reference/markdown.extensions.tables.md diff --git a/docs/reference/markdown/extensions/toc.md b/docs/reference/markdown.extensions.toc.md similarity index 100% rename from docs/reference/markdown/extensions/toc.md rename to docs/reference/markdown.extensions.toc.md diff --git a/docs/reference/markdown/extensions/wikilinks.md b/docs/reference/markdown.extensions.wikilinks.md similarity index 100% rename from docs/reference/markdown/extensions/wikilinks.md rename to docs/reference/markdown.extensions.wikilinks.md diff --git a/docs/reference/markdown/htmlparser.md b/docs/reference/markdown.htmlparser.md similarity index 100% rename from docs/reference/markdown/htmlparser.md rename to docs/reference/markdown.htmlparser.md diff --git a/docs/reference/markdown/inlinepatterns.md b/docs/reference/markdown.inlinepatterns.md similarity index 100% rename from docs/reference/markdown/inlinepatterns.md rename to docs/reference/markdown.inlinepatterns.md diff --git a/docs/reference/markdown/index.md b/docs/reference/markdown.md similarity index 100% rename from docs/reference/markdown/index.md rename to docs/reference/markdown.md diff --git a/docs/reference/markdown/postprocessors.md b/docs/reference/markdown.postprocessors.md similarity index 100% rename from docs/reference/markdown/postprocessors.md rename to docs/reference/markdown.postprocessors.md diff --git a/docs/reference/markdown/preprocessors.md b/docs/reference/markdown.preprocessors.md similarity index 100% rename from docs/reference/markdown/preprocessors.md rename to docs/reference/markdown.preprocessors.md diff --git a/docs/reference/markdown/serializers.md b/docs/reference/markdown.serializers.md similarity index 100% rename from docs/reference/markdown/serializers.md rename to docs/reference/markdown.serializers.md diff --git a/docs/reference/markdown/test_tools.md b/docs/reference/markdown.test_tools.md similarity index 100% rename from docs/reference/markdown/test_tools.md rename to docs/reference/markdown.test_tools.md diff --git a/docs/reference/markdown/treeprocessors.md b/docs/reference/markdown.treeprocessors.md similarity index 100% rename from docs/reference/markdown/treeprocessors.md rename to docs/reference/markdown.treeprocessors.md diff --git a/docs/reference/markdown/util.md b/docs/reference/markdown.util.md similarity index 100% rename from docs/reference/markdown/util.md rename to docs/reference/markdown.util.md diff --git a/docs/templates/python/nature/attribute.html.jinja b/docs/templates/python/material/attribute.html.jinja similarity index 86% rename from docs/templates/python/nature/attribute.html.jinja rename to docs/templates/python/material/attribute.html.jinja index 44dc11d4f..ea377179b 100644 --- a/docs/templates/python/nature/attribute.html.jinja +++ b/docs/templates/python/material/attribute.html.jinja @@ -1,7 +1,7 @@ {% extends "_base/attribute.html.jinja" %} {% block heading scoped %} - ‹› + ‹› {% if config.show_symbol_type_heading %}{% endif %} {%+ filter highlight(language="python", inline=True) %} {{ attribute_name }}{% if attribute.annotation %}: {{ attribute.annotation }}{% endif %} diff --git a/docs/templates/python/nature/class.html.jinja b/docs/templates/python/material/class.html.jinja similarity index 69% rename from docs/templates/python/nature/class.html.jinja rename to docs/templates/python/material/class.html.jinja index 4076aa909..613043066 100644 --- a/docs/templates/python/nature/class.html.jinja +++ b/docs/templates/python/material/class.html.jinja @@ -1,6 +1,6 @@ {% extends "_base/class.html.jinja" %} {% block heading scoped %} - ‹› + ‹› {{ super() }} {% endblock heading %} diff --git a/docs/templates/python/nature/docstring/admonition.html.jinja b/docs/templates/python/material/docstring/admonition.html.jinja similarity index 100% rename from docs/templates/python/nature/docstring/admonition.html.jinja rename to docs/templates/python/material/docstring/admonition.html.jinja diff --git a/docs/templates/python/nature/function.html.jinja b/docs/templates/python/material/function.html.jinja similarity index 70% rename from docs/templates/python/nature/function.html.jinja rename to docs/templates/python/material/function.html.jinja index c2f4b2caf..836b9d93c 100644 --- a/docs/templates/python/nature/function.html.jinja +++ b/docs/templates/python/material/function.html.jinja @@ -1,6 +1,6 @@ {% extends "_base/function.html.jinja" %} {% block heading scoped %} - ‹› + ‹› {{ super() }} {% endblock heading %} diff --git a/docs/templates/python/nature/module.html.jinja b/docs/templates/python/material/module.html.jinja similarity index 74% rename from docs/templates/python/nature/module.html.jinja rename to docs/templates/python/material/module.html.jinja index f6b99bb17..a2544a0d6 100644 --- a/docs/templates/python/nature/module.html.jinja +++ b/docs/templates/python/material/module.html.jinja @@ -1,6 +1,6 @@ {% extends "_base/module.html.jinja" %} {% block heading scoped %} - ‹› + ‹› {{ super() }} {% endblock heading %} diff --git a/mkdocs.yml b/mkdocs.yml index 6fa39fd83..3402d7b89 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -18,8 +18,8 @@ theme: - navigation.indexes - navigation.footer - navigation.top - - content.action.edit - - content.action.view + # - content.action.edit + # - content.action.view - content.code.copy - content.footnote.tooltips - search.highlight @@ -51,9 +51,8 @@ theme: primary: green accent: light green -# extra_css: -# - custom.css -# - mkdocstrings.css +extra_css: + - mkdocstrings.css nav: - Python-Markdown: index.md @@ -84,36 +83,36 @@ nav: - Extension API: extensions/api.md - Test Tools: test_tools.md - API Reference: - - markdown: reference/markdown/index.md - - markdown.preprocessors: reference/markdown/preprocessors.md - - markdown.blockparser: reference/markdown/blockparser.md - - markdown.blockprocessors: reference/markdown/blockprocessors.md - - markdown.treeprocessors: reference/markdown/treeprocessors.md - - markdown.inlinepatterns: reference/markdown/inlinepatterns.md - - markdown.postprocessors: reference/markdown/postprocessors.md - - markdown.serializers: reference/markdown/serializers.md - - markdown.util: reference/markdown/util.md - - markdown.htmlparser: reference/markdown/htmlparser.md - - markdown.test_tools: reference/markdown/test_tools.md - - markdown.extensions: reference/markdown/extensions/index.md - - markdown.extensions.abbr: reference/markdown/extensions/abbr.md - - markdown.extensions.admonition: reference/markdown/extensions/admonition.md - - markdown.extensions.attr_list: reference/markdown/extensions/attr_list.md - - markdown.extensions.codehilite: reference/markdown/extensions/codehilite.md - - markdown.extensions.def_list: reference/markdown/extensions/def_list.md - - markdown.extensions.extra: reference/markdown/extensions/extra.md - - markdown.extensions.fenced_code: reference/markdown/extensions/fenced_code.md - - markdown.extensions.footnotes: reference/markdown/extensions/footnotes.md - - markdown.extensions.legacy_attrs: reference/markdown/extensions/legacy_attrs.md - - markdown.extensions.legacy_em: reference/markdown/extensions/legacy_em.md - - markdown.extensions.md_in_html: reference/markdown/extensions/md_in_html.md - - markdown.extensions.meta: reference/markdown/extensions/meta.md - - markdown.extensions.nl2br: reference/markdown/extensions/nl2br.md - - markdown.extensions.sane_lists: reference/markdown/extensions/sane_lists.md - - markdown.extensions.smarty: reference/markdown/extensions/smarty.md - - markdown.extensions.tables: reference/markdown/extensions/tables.md - - markdown.extensions.toc: reference/markdown/extensions/toc.md - - markdown.extensions.wikilinks: reference/markdown/extensions/wikilinks.md + - markdown: reference/markdown.md + - markdown.​preprocessors: reference/markdown.preprocessors.md + - markdown.​blockparser: reference/markdown.blockparser.md + - markdown.​blockprocessors: reference/markdown.blockprocessors.md + - markdown.​treeprocessors: reference/markdown.treeprocessors.md + - markdown.​inlinepatterns: reference/markdown.inlinepatterns.md + - markdown.​postprocessors: reference/markdown.postprocessors.md + - markdown.​serializers: reference/markdown.serializers.md + - markdown.​util: reference/markdown.util.md + - markdown.​htmlparser: reference/markdown.htmlparser.md + - markdown.​test_tools: reference/markdown.test_tools.md + - markdown.​extensions: reference/markdown.extensions.md + - markdown.​extensions.​abbr: reference/markdown.extensions.abbr.md + - markdown.​extensions.​admonition: reference/markdown.extensions.admonition.md + - markdown.​extensions.​attr_list: reference/markdown.extensions.attr_list.md + - markdown.​extensions.​codehilite: reference/markdown.extensions.codehilite.md + - markdown.​extensions.​def_list: reference/markdown.extensions.def_list.md + - markdown.​extensions.​extra: reference/markdown.extensions.extra.md + - markdown.​extensions.​fenced_code: reference/markdown.extensions.fenced_code.md + - markdown.​extensions.​footnotes: reference/markdown.extensions.footnotes.md + - markdown.​extensions.​legacy_attrs: reference/markdown.extensions.legacy_attrs.md + - markdown.​extensions.​legacy_em: reference/markdown.extensions.legacy_em.md + - markdown.​extensions.​md_in_html: reference/markdown.extensions.md_in_html.md + - markdown.​extensions.​meta: reference/markdown.extensions.meta.md + - markdown.​extensions.​nl2br: reference/markdown.extensions.nl2br.md + - markdown.​extensions.​sane_lists: reference/markdown.extensions.sane_lists.md + - markdown.​extensions.​smarty: reference/markdown.extensions.smarty.md + - markdown.​extensions.​tables: reference/markdown.extensions.tables.md + - markdown.​extensions.​toc: reference/markdown.extensions.toc.md + - markdown.​extensions.​wikilinks: reference/markdown.extensions.wikilinks.md - Contributing to Python-Markdown: contributing.md - Changelog: changelog.md - Authors: authors.md From 6aaeb24e862b847eb8417e24b83bb3db3d3768d9 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Wed, 26 Aug 2026 15:35:10 -0400 Subject: [PATCH 04/13] Reorganize navigation --- docs/index.md | 3 ++ mkdocs.yml | 127 ++++++++++++++++++++++++++------------------------ 2 files changed, 68 insertions(+), 62 deletions(-) diff --git a/docs/index.md b/docs/index.md index 55ae99041..c687ee311 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,5 +1,8 @@ --- title: Python-Markdown +hide: + - navigation + - path --- Python-Markdown diff --git a/mkdocs.yml b/mkdocs.yml index 3402d7b89..bc8052ce5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,7 +13,7 @@ theme: logo: py.png favicon: favicon.ico features: - # - navigation.tabs + - navigation.tabs - navigation.path - navigation.indexes - navigation.footer @@ -55,67 +55,70 @@ extra_css: - mkdocstrings.css nav: - - Python-Markdown: index.md - - Installation: install.md - - Library Reference: reference.md - - Command Line: cli.md - - Sanitization and Security: sanitization.md - - Extensions: - - extensions/index.md - - Abbreviations: extensions/abbreviations.md - - Admonition: extensions/admonition.md - - Attribute Lists: extensions/attr_list.md - - CodeHilite: extensions/code_hilite.md - - Definition Lists: extensions/definition_lists.md - - Extra: extensions/extra.md - - Fenced Code Blocks: extensions/fenced_code_blocks.md - - Footnotes: extensions/footnotes.md - - Legacy Attributes: extensions/legacy_attrs.md - - Legacy Emphasis: extensions/legacy_em.md - - Meta-Data: extensions/meta_data.md - - New Line to Break: extensions/nl2br.md - - Markdown in HTML: extensions/md_in_html.md - - Sane Lists: extensions/sane_lists.md - - SmartyPants: extensions/smarty.md - - Table of Contents: extensions/toc.md - - Tables: extensions/tables.md - - WikiLinks: extensions/wikilinks.md - - Extension API: extensions/api.md - - Test Tools: test_tools.md - - API Reference: - - markdown: reference/markdown.md - - markdown.​preprocessors: reference/markdown.preprocessors.md - - markdown.​blockparser: reference/markdown.blockparser.md - - markdown.​blockprocessors: reference/markdown.blockprocessors.md - - markdown.​treeprocessors: reference/markdown.treeprocessors.md - - markdown.​inlinepatterns: reference/markdown.inlinepatterns.md - - markdown.​postprocessors: reference/markdown.postprocessors.md - - markdown.​serializers: reference/markdown.serializers.md - - markdown.​util: reference/markdown.util.md - - markdown.​htmlparser: reference/markdown.htmlparser.md - - markdown.​test_tools: reference/markdown.test_tools.md - - markdown.​extensions: reference/markdown.extensions.md - - markdown.​extensions.​abbr: reference/markdown.extensions.abbr.md - - markdown.​extensions.​admonition: reference/markdown.extensions.admonition.md - - markdown.​extensions.​attr_list: reference/markdown.extensions.attr_list.md - - markdown.​extensions.​codehilite: reference/markdown.extensions.codehilite.md - - markdown.​extensions.​def_list: reference/markdown.extensions.def_list.md - - markdown.​extensions.​extra: reference/markdown.extensions.extra.md - - markdown.​extensions.​fenced_code: reference/markdown.extensions.fenced_code.md - - markdown.​extensions.​footnotes: reference/markdown.extensions.footnotes.md - - markdown.​extensions.​legacy_attrs: reference/markdown.extensions.legacy_attrs.md - - markdown.​extensions.​legacy_em: reference/markdown.extensions.legacy_em.md - - markdown.​extensions.​md_in_html: reference/markdown.extensions.md_in_html.md - - markdown.​extensions.​meta: reference/markdown.extensions.meta.md - - markdown.​extensions.​nl2br: reference/markdown.extensions.nl2br.md - - markdown.​extensions.​sane_lists: reference/markdown.extensions.sane_lists.md - - markdown.​extensions.​smarty: reference/markdown.extensions.smarty.md - - markdown.​extensions.​tables: reference/markdown.extensions.tables.md - - markdown.​extensions.​toc: reference/markdown.extensions.toc.md - - markdown.​extensions.​wikilinks: reference/markdown.extensions.wikilinks.md - - Contributing to Python-Markdown: contributing.md - - Changelog: changelog.md - - Authors: authors.md + - Home: index.md + - Usage: + - Installation: install.md + - Library Reference: reference.md + - Command Line: cli.md + - Sanitization and Security: sanitization.md + - Extensions: + - extensions/index.md + - Abbreviations: extensions/abbreviations.md + - Admonition: extensions/admonition.md + - Attribute Lists: extensions/attr_list.md + - CodeHilite: extensions/code_hilite.md + - Definition Lists: extensions/definition_lists.md + - Extra: extensions/extra.md + - Fenced Code Blocks: extensions/fenced_code_blocks.md + - Footnotes: extensions/footnotes.md + - Legacy Attributes: extensions/legacy_attrs.md + - Legacy Emphasis: extensions/legacy_em.md + - Meta-Data: extensions/meta_data.md + - New Line to Break: extensions/nl2br.md + - Markdown in HTML: extensions/md_in_html.md + - Sane Lists: extensions/sane_lists.md + - SmartyPants: extensions/smarty.md + - Table of Contents: extensions/toc.md + - Tables: extensions/tables.md + - WikiLinks: extensions/wikilinks.md + - Development: + - Extension API: extensions/api.md + - Test Tools: test_tools.md + - API Reference: + - markdown: reference/markdown.md + - markdown.​preprocessors: reference/markdown.preprocessors.md + - markdown.​blockparser: reference/markdown.blockparser.md + - markdown.​blockprocessors: reference/markdown.blockprocessors.md + - markdown.​treeprocessors: reference/markdown.treeprocessors.md + - markdown.​inlinepatterns: reference/markdown.inlinepatterns.md + - markdown.​postprocessors: reference/markdown.postprocessors.md + - markdown.​serializers: reference/markdown.serializers.md + - markdown.​util: reference/markdown.util.md + - markdown.​htmlparser: reference/markdown.htmlparser.md + - markdown.​test_tools: reference/markdown.test_tools.md + - markdown.​extensions: reference/markdown.extensions.md + - markdown.​extensions.​abbr: reference/markdown.extensions.abbr.md + - markdown.​extensions.​admonition: reference/markdown.extensions.admonition.md + - markdown.​extensions.​attr_list: reference/markdown.extensions.attr_list.md + - markdown.​extensions.​codehilite: reference/markdown.extensions.codehilite.md + - markdown.​extensions.​def_list: reference/markdown.extensions.def_list.md + - markdown.​extensions.​extra: reference/markdown.extensions.extra.md + - markdown.​extensions.​fenced_code: reference/markdown.extensions.fenced_code.md + - markdown.​extensions.​footnotes: reference/markdown.extensions.footnotes.md + - markdown.​extensions.​legacy_attrs: reference/markdown.extensions.legacy_attrs.md + - markdown.​extensions.​legacy_em: reference/markdown.extensions.legacy_em.md + - markdown.​extensions.​md_in_html: reference/markdown.extensions.md_in_html.md + - markdown.​extensions.​meta: reference/markdown.extensions.meta.md + - markdown.​extensions.​nl2br: reference/markdown.extensions.nl2br.md + - markdown.​extensions.​sane_lists: reference/markdown.extensions.sane_lists.md + - markdown.​extensions.​smarty: reference/markdown.extensions.smarty.md + - markdown.​extensions.​tables: reference/markdown.extensions.tables.md + - markdown.​extensions.​toc: reference/markdown.extensions.toc.md + - markdown.​extensions.​wikilinks: reference/markdown.extensions.wikilinks.md + - About: + - Contributing to Python-Markdown: contributing.md + - Changelog: changelog.md + - Authors: authors.md validation: invalid_links: true From 19fe651ac33b96d9b1a4a82e063ce992dd6afa8d Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Mon, 31 Aug 2026 16:11:47 -0400 Subject: [PATCH 05/13] A minor layout tweak --- docs/mkdocstrings.css | 4 ++++ mkdocs.yml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/mkdocstrings.css b/docs/mkdocstrings.css index df8e88fda..f7f52aae5 100644 --- a/docs/mkdocstrings.css +++ b/docs/mkdocstrings.css @@ -70,6 +70,10 @@ a.doc-source-link:hover { text-decoration: none; } +h1 a.doc-source-link { + mask-position: bottom; +} + /* Reposiiton content.action.edit and content.action.view page buttons */ [dir=ltr] .md-content__button { position: relative; diff --git a/mkdocs.yml b/mkdocs.yml index bc8052ce5..af89eb11b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -6,7 +6,7 @@ site_author: "The Python-Markdown Project" copyright: "Copyright © 2010-2026 The Python-Markdown Project" use_directory_urls: true -watch: [markdown, scripts] +watch: [markdown, scripts, docs/templates] theme: variant: modern From 49702cc72deaeeb41d70ef6655b7401ca4baa00a Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Tue, 1 Sep 2026 14:48:40 -0400 Subject: [PATCH 06/13] Rewrite Library Reference as Prose The Library reference was previously written as API docs. Now that we have API docs, the library reference has been rewritten as prose with more code examples. The file has been renamed `library.md` so as not to conflict with the reference API (at `reference/`). --- docs/change_log/release-2.1.md | 4 +- docs/change_log/release-2.5.md | 10 +- docs/change_log/release-2.6.md | 6 +- docs/changelog.md | 6 +- docs/cli.md | 2 +- docs/extensions/api.md | 2 +- docs/extensions/attr_list.md | 2 +- docs/extensions/code_hilite.md | 2 +- docs/extensions/fenced_code_blocks.md | 2 +- docs/extensions/footnotes.md | 2 +- docs/extensions/index.md | 2 +- docs/extensions/smarty.md | 2 +- docs/extensions/tables.md | 2 +- docs/extensions/toc.md | 2 +- docs/extensions/wikilinks.md | 2 +- docs/index.md | 8 +- docs/install.md | 2 +- docs/library.md | 377 ++++++++++++++++++++++++++ docs/reference.md | 313 --------------------- mkdocs.yml | 2 +- 20 files changed, 407 insertions(+), 343 deletions(-) create mode 100644 docs/library.md delete mode 100644 docs/reference.md diff --git a/docs/change_log/release-2.1.md b/docs/change_log/release-2.1.md index 4f7ba7506..302a195c6 100644 --- a/docs/change_log/release-2.1.md +++ b/docs/change_log/release-2.1.md @@ -32,7 +32,7 @@ release, there are a few backward-incompatible changes to note: wrapper methods. It now expects keyword arguments. Currently, the positional arguments should continue to work, but the solution feels hacky and may be removed in a future version. All users are encouraged to use keyword arguments - as documented in the [Library Reference](../reference.md). + as documented in the [Library Reference](../library.md). * Past versions of Python-Markdown provided module level Global variables which controlled the behavior of a few different aspects of the parser. Those global @@ -41,7 +41,7 @@ release, there are a few backward-incompatible changes to note: initializing a class instance. Therefore, if you were editing the global variables (either by editing the source or by overriding them in your code), you should now set them on the class. See the [Library - Reference](../reference.md) for the options available. + Reference](../library.md) for the options available. * If you have been using the HeaderId extension to define custom ids on headers, you will want to switch to using the new diff --git a/docs/change_log/release-2.5.md b/docs/change_log/release-2.5.md index 1ce3ae96d..d2320892f 100644 --- a/docs/change_log/release-2.5.md +++ b/docs/change_log/release-2.5.md @@ -94,14 +94,14 @@ Backwards-incompatible Changes $ python -m markdown -x markdown.extensions.extra input.txt - See the [documentation](../reference.md#extensions) for a full explanation + See the [documentation](../library.md#extensions) for a full explanation of the current behavior. * The previously documented method of appending the extension configuration as a string to the extension name will be deprecated in Python-Markdown version 2.6 and will raise a **`PendingDeprecationWarning`** in 2.5. The - [`extension_configs`](../reference.md#extension_configs) keyword should - be used instead. See the [documentation](../reference.md#extension_configs) + [`extension_configs`](../library.md#extension_configs) keyword should + be used instead. See the [documentation](../library.md#extension_configs) for a full explanation of the current behavior. What's New in Python-Markdown 2.5 @@ -144,7 +144,7 @@ What's New in Python-Markdown 2.5 `makeExtension` function included in the module. Extension authors will want to document carefully what is required to load their extensions. -[ex]: ../reference.md#extensions +[ex]: ../library.md#extensions * The Extension Configuration code has been refactored to make it a little easier for extension authors to work with configuration settings. As a @@ -158,7 +158,7 @@ What's New in Python-Markdown 2.5 their code going forward. The included extensions provide a model for best practices. See the [API] documentation for a full explanation. -[ec]: ../reference.md#extension_configs +[ec]: ../library.md#extension_configs [API]: ../extensions/api.md#configsettings * The [Command Line Interface][cli] now accepts a `--extensions_config` (or diff --git a/docs/change_log/release-2.6.md b/docs/change_log/release-2.6.md index 3019e012a..7bddba5ce 100644 --- a/docs/change_log/release-2.6.md +++ b/docs/change_log/release-2.6.md @@ -128,7 +128,7 @@ markdown.markdown(text, extensions=['mdx_math']) Extension authors will want to update their documentation to reflect the new behavior. -See the [documentation](../reference.md#extensions) for a full explanation +See the [documentation](../library.md#extensions) for a full explanation of the current behavior. ### Extension Configuration as Part of Extension Name Deprecated @@ -136,8 +136,8 @@ of the current behavior. The previously documented method of appending the extension configuration options as a string to the extension name is deprecated and will raise a **`DeprecationWarning`** in version 2.6 and an error in 2.7. The -[`extension_configs`](../reference.md#extension_configs) keyword should be used -instead. See the [documentation](../reference.md#extension_configs) for a full +[`extension_configs`](../library.md#extension_configs) keyword should be used +instead. See the [documentation](../library.md#extension_configs) for a full explanation of the current behavior. ### HeaderId Extension Pending Deprecation diff --git a/docs/changelog.md b/docs/changelog.md index b37754295..66903553b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -794,15 +794,15 @@ See the [Contributing Guide](contributing.md) for details. for each specific extension to find the assigned name. If an extension does not define an entry point, then the full path to the - extension must be used. See the [documentation](reference.md#extensions) for + extension must be used. See the [documentation](library.md#extensions) for a full explanation of the current behavior. * Extension configuration as part of extension name deprecated The previously documented method of appending the extension configuration options as a string to the extension name is deprecated and will raise an error. - The [`extension_configs`](reference.md#extension_configs) keyword should be - used instead. See the [documentation](reference.md#extension_configs) for a + The [`extension_configs`](library.md#extension_configs) keyword should be + used instead. See the [documentation](library.md#extension_configs) for a full explanation of the current behavior. * HeaderId extension deprecated diff --git a/docs/cli.md b/docs/cli.md index 44219a8d0..e53769447 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -156,7 +156,7 @@ The `--extension_configs` option will only support YAML configuration files if [PyYAML] is installed on your system. JSON should work with no additional dependencies. The format of your configuration file is automatically detected. -[ec]: reference.md#extension_configs +[ec]: library.md#extension_configs [YAML]: https://yaml.org/ [JSON]: https://json.org/ [PyYAML]: https://pyyaml.org/ diff --git a/docs/extensions/api.md b/docs/extensions/api.md index 7826b0c2f..6952bcd19 100644 --- a/docs/extensions/api.md +++ b/docs/extensions/api.md @@ -832,7 +832,7 @@ A few things to note about the above linked collections. [ElementTree]: https://docs.python.org/3/library/xml.etree.elementtree.html [Available Extensions]: index.md [Footnotes]: https://github.com/Python-Markdown/markdown/blob/master/markdown/extensions/footnotes.py -[library reference]: ../reference.md +[library reference]: ../library.md [setuptools]: https://packaging.python.org/key_projects/#setuptools [Entry points]: https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins [Packaging and Distributing Projects]: https://packaging.python.org/tutorials/distributing-packages/ diff --git a/docs/extensions/attr_list.md b/docs/extensions/attr_list.md index 8856e1f42..d4b714a46 100644 --- a/docs/extensions/attr_list.md +++ b/docs/extensions/attr_list.md @@ -59,7 +59,7 @@ id="id2" class="class2 class3 class4" ``` HTML includes support for some attributes to be a single term, like `checked`, for example. Therefore, the attribute -list `{: checked }` would result in `checked` if the [output format](../reference.md#output_format) is `html` or +list `{: checked }` would result in `checked` if the [output format](../library.md#output_format) is `html` or `checked="checked"` if the output format is `xhtml`. Curly braces can be backslash escaped to avoid being identified as an attribute list. diff --git a/docs/extensions/code_hilite.md b/docs/extensions/code_hilite.md index b04cd6cf0..88a186cfe 100644 --- a/docs/extensions/code_hilite.md +++ b/docs/extensions/code_hilite.md @@ -204,7 +204,7 @@ Lets see the source for that: See [Extensions](index.md) for general extension usage. Use `codehilite` as the name of the extension. -See the [Library Reference](../reference.md#extensions) for information about +See the [Library Reference](../library.md#extensions) for information about configuring extensions. The following options are provided to configure the output: diff --git a/docs/extensions/fenced_code_blocks.md b/docs/extensions/fenced_code_blocks.md index 5eba4c0d9..3c5aacc51 100644 --- a/docs/extensions/fenced_code_blocks.md +++ b/docs/extensions/fenced_code_blocks.md @@ -283,4 +283,4 @@ markdown.markdown(some_text, extensions=['fenced_code']) [PHP lexer's]: https://pygments.org/docs/lexers/#lexers-for-php-and-related-languages [setup]: ./code_hilite.md#setup [Extensions]: ./index.md -[Library Reference]: ../reference.md#extensions +[Library Reference]: ../library.md#extensions diff --git a/docs/extensions/footnotes.md b/docs/extensions/footnotes.md index 2f91b4967..080e3e4a9 100644 --- a/docs/extensions/footnotes.md +++ b/docs/extensions/footnotes.md @@ -88,7 +88,7 @@ Usage See [Extensions](index.md) for general extension usage. Use `footnotes` as the name of the extension. -See the [Library Reference](../reference.md#extensions) for information about +See the [Library Reference](../library.md#extensions) for information about configuring extensions. The following options are provided to configure the output: diff --git a/docs/extensions/index.md b/docs/extensions/index.md index 8679d7f79..ca480fad1 100644 --- a/docs/extensions/index.md +++ b/docs/extensions/index.md @@ -14,7 +14,7 @@ To use an extension, pass it to markdown with the `extensions` keyword. markdown.markdown(some_text, extensions=[MyExtClass(), 'myext', 'path.to.my.ext:MyExtClass']) ``` -See the [Library Reference](../reference.md#extensions) for more details. +See the [Library Reference](../library.md#extensions) for more details. From the command line, specify an extension with the `-x` option. diff --git a/docs/extensions/smarty.md b/docs/extensions/smarty.md index bdab3e6e2..11cdce8dd 100644 --- a/docs/extensions/smarty.md +++ b/docs/extensions/smarty.md @@ -71,7 +71,7 @@ Usage See [Extensions](index.md) for general extension usage. Use `smarty` as the name of the extension. -See the [Library Reference](../reference.md#extensions) for information about +See the [Library Reference](../library.md#extensions) for information about configuring extensions. The following options are provided to configure the output: diff --git a/docs/extensions/tables.md b/docs/extensions/tables.md index 6a4f86440..d48224782 100644 --- a/docs/extensions/tables.md +++ b/docs/extensions/tables.md @@ -73,7 +73,7 @@ Usage See [Extensions](index.md) for general extension usage. Use `tables` as the name of the extension. -See the [Library Reference](../reference.md#extensions) for information about +See the [Library Reference](../library.md#extensions) for information about configuring extensions. The following options are provided to change the default behavior: diff --git a/docs/extensions/toc.md b/docs/extensions/toc.md index 178fdb8de..b7061204e 100644 --- a/docs/extensions/toc.md +++ b/docs/extensions/toc.md @@ -167,7 +167,7 @@ Usage See [Extensions](index.md) for general extension usage. Use `toc` as the name of the extension. -See the [Library Reference](../reference.md#extensions) for information about +See the [Library Reference](../library.md#extensions) for information about configuring extensions. The following options are provided to configure the output: diff --git a/docs/extensions/wikilinks.md b/docs/extensions/wikilinks.md index 117c3a3bf..8750f2846 100644 --- a/docs/extensions/wikilinks.md +++ b/docs/extensions/wikilinks.md @@ -64,7 +64,7 @@ becomes See [Extensions](index.md) for general extension usage. Use `wikilinks` as the name of the extension. -See the [Library Reference](../reference.md#extensions) for information about +See the [Library Reference](../library.md#extensions) for information about configuring extensions. The default behavior is to point each link to the document root of the current diff --git a/docs/index.md b/docs/index.md index c687ee311..335508ff1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -16,7 +16,7 @@ though there are a few very minor [differences](#differences). See John's for the syntax rules. To get started, see the [installation instructions](install.md), the [library -reference](reference.md), and the [command line interface](cli.md). +reference](library.md), and the [command line interface](cli.md). Goals ----- @@ -51,7 +51,7 @@ features: * __International Input__ - Python-Markdown will accept [input](reference.md#text) in any language + Python-Markdown will accept [input](library.md#the-basics) in any language supported by Unicode including bi-directional text. In fact the test suite includes documents written in Russian and Arabic. @@ -65,7 +65,7 @@ features: * __Output Formats__ Python-Markdown can output documents with either HTML or XHTML style tags. - See the [Library Reference](reference.md#output_format) for details. + See the [Library Reference](library.md#output_format) for details. * __Command Line Interface__ @@ -104,7 +104,7 @@ are summarized below: be indented by at least four spaces (or one tab) for each level of nesting. In the event that one would prefer different behavior, - [tab_length](reference.md#tab_length) can be set to whatever length is + [tab_length](library.md#tab_length) can be set to whatever length is desired. Be warned however, as this will affect indentation for all aspects of the syntax (including root level code blocks). Alternatively, a [third party extension] may offer a solution that meets your needs. diff --git a/docs/install.md b/docs/install.md index d74bc8f94..376e364b1 100644 --- a/docs/install.md +++ b/docs/install.md @@ -13,7 +13,7 @@ following command from the command line: pip install markdown ``` -That's it! You're ready to [use](reference.md) Python-Markdown. Enjoy! +That's it! You're ready to [use](library.md) Python-Markdown. Enjoy! For more detailed instructions on installing Python packages, see the [Installing Packages] tutorial in the [Python Packaging User Guide]. diff --git a/docs/library.md b/docs/library.md new file mode 100644 index 000000000..17d30d016 --- /dev/null +++ b/docs/library.md @@ -0,0 +1,377 @@ +--- +title: Library Reference +--- + +# Using Markdown as a Python Library + +First and foremost, Python-Markdown is intended to be a Python library module +used by various projects to convert Markdown syntax into HTML. + +## The Basics + +To use markdown as a module, pass a string to the [`markdown.markdown`] +[markdown.markdown] function. + +```python +import markdown +html = markdown.markdown(your_text_string) +``` + +The string must be a *Unicode* string (the default string type in Python). + +``` python +src = 'Some **Markdown** text.' +html = markdown.markdown(src) +``` + +Python-Markdown only ever outputs an HTML fragment. Therefore, the value of +`html` above would be: + +``` html +

Some Markdown text.

+``` + +If you need a complete HTML document, including ``, `` and +`` tags, then you will need to pass the output of Python-Markdown into +some other tool. For a minimal complete document, +[JustHTML](https://emilstenstrom.github.io/justhtml/) can do that with a +single line of code: + +``` python +from justhtml import JustHTML + +doc = JustHTML(html) +``` + +Assuming the value of `html` from above, the value returned by +`doc.to_html()` would be the following string: + +``` html + + + +

Some Markdown text.

+ + +``` + +For more sophisticated output, you may need to explore the use of a templating +system or a static site generator. + +!!! tip "Important" + + Python-Markdown expects a **Unicode** string as input (some simple ASCII + binary strings *may* work only by coincidence) and returns output as a + Unicode string. Do not pass binary strings to it! If your input is + encoded, (e.g. as UTF-8), it is your responsibility to decode it. For + example: + + ``` python + binary_string = b'Some **Markdown** text.' + html = markdown.markdown(binary_string.decode('utf-8')) + ``` + + If you need binary output, you will need to encode the output yourself. + + ``` python + binary_html = html.encode('utf-8') + ``` + +!!! warning + + The Python-Markdown library does ***not*** sanitize its HTML output. If + you are processing Markdown input from an untrusted source, it is your + responsibility to ensure that it is properly sanitized. For more + information see [Sanitizing HTML Output]. + +[Sanitizing HTML Output]: sanitization.md + +### Extensions + +The primary way to modify Python-Markdown's behavior is through extensions. +Python-Markdown provides an [API](extensions/api.md) for third parties to +write extensions to the parser adding their own additions or changes to the +syntax. A few commonly used extensions are provided with the `markdown` +library. See the [extension documentation](extensions/index.md) for a +list of available extensions. + +To enable extensions, they should be passed to the `extensions` keyword. + +``` python +markdown.markdown(src, extensions=[MyExtClass()]) +``` + +The list of extensions may contain instances of extensions and/or strings +of extension names. + +``` python +extensions=[MyExtClass(), 'myext', 'path.to.my.ext:MyExtClass'] +``` + +!!! tip + The preferred method is to pass in an instance of an extension. Strings + should only be used when it is impossible to import the Extension Class + directly (from the command line or in a template). + +When passing in extension instances, each class instance must be a subclass +of `markdown.extensions.Extension` and any configuration options should be +defined when initiating the class instance rather than using the +[`extension_configs`](#extension_configs) keyword. For example: + +``` python +from markdown.extensions import Extension +class MyExtClass(Extension): + # define your extension here... + +markdown.markdown(text, extensions=[MyExtClass(option='value')]) +``` + +If an extension name is provided as a string, the string must either be the +registered entry point of any installed extension or the importable path +using Python's dot notation. + +See the documentation specific to an extension for the string name assigned +to an extension as an entry point. Simply include the defined name as +a string in the list of extensions. For example, if an extension has the +name `myext` assigned to it and the extension is properly installed, then +do the following: + +``` python +markdown.markdown(text, extensions=['myext']) +``` + +If an extension does not have a registered entry point, Python's dot +notation may be used instead. The extension must be installed as a +Python module on your PYTHONPATH. Generally, a class should be specified in +the name. The class must be at the end of the name and be separated by a +colon from the module. + +Therefore, if you were to import the class like this: + +``` python +from path.to.module import MyExtClass +``` + +Then load the extension as follows: + +``` python +markdown.markdown(text, extensions=['path.to.module:MyExtClass']) +``` + +If only one extension is defined within a module and the module includes a +`makeExtension` function which returns an instance of the extension, then +the class name is not necessary. For example, in that case one could do +`extensions=['path.to.module']`. Check the documentation for a specific +extension to determine if it supports this feature. + +When loading an extension by name (as a string), you can only pass in +configuration settings to the extension by using the +[`extension_configs`](#extension_configs) keyword. + +!!! info "See Also" + See the documentation of the [Extension API](extensions/api.md) for + assistance in creating extensions. + +### Extension Configuration Options { #extension_configs } + +The keyword `extension_configs` accepts a dictionary of configuration settings +for extensions. + +Any configuration settings will only be passed to extensions loaded by name +(as a string). When loading extensions as class instances, pass the +configuration settings directly to the class when initializing it. + +!!! tip + The preferred method is to pass in an instance of an extension, which + does not require use of the `extension_configs` keyword at all. + See the [extensions](#extensions) keyword for details. + +The dictionary of configuration settings must be in the following format: + +``` python +extension_configs = { + 'extension_name_1': { + 'option_1': 'value_1', + 'option_2': 'value_2' + }, + 'extension_name_2': { + 'option_1': 'value_1' + } +} +``` + +When specifying the extension name, be sure to use the exact same +string as is used in the [extensions](#extensions) keyword to load the +extension. Otherwise, the configuration settings will not be applied to +the extension. In other words, you cannot use the entry point in on +place and Python dot notation in the other. While both may be valid for +a given extension, they will not be recognized as being the same +extension by Markdown. + +See the documentation specific to the extension you are using for help in +specifying configuration settings for that extension. + +### Output Format {: #output_format } + +The `output_format` keyword accepts a string which specfies the format of the +output. + +``` python +markdown.markdown(src, output_format='html') +``` + +The supported formats are `xhtml` (the default) and `html`. + +The only notable difference between the options are how self-closing tags are +formatted in the output (for example `
` for `xhtml` and `
` for +`html`). + +### Tab Length { #tab_length } + +The `tab_length` keyword sets the length of tabs in the source as an integer. +The default value is `4`. + +``` python +markdown.markdown(src, tab_length=2) +``` + +## Working with Files + +The Python-Markdown library provides the function +[`markdown.markdownFromFile`][markdown.markdownFromFile] which reads Markdown +directly from a file on your filestyem and writes directly to a file. + +!!! warning + + The Python-Markdown library does ***not*** sanitize its HTML output. As + `markdown.markdownFromFile` writes directly to the file system, there is + no easy way to sanitize the output from Python code. Therefore, it is + recommended that the `markdown.markdownFromFile` function not be used on + input from an untrusted source. For more information see [Sanitizing HTML + Output]. + +With a few exceptions, `markdown.markdownFromFile` accepts the same options as +`markdown.markdown`. It does **not** accept a `text` (or Unicode) string. +Instead, it accepts the keywords `input`, `output` and `encoding`. + +``` python +markdown.markdownFromFile( + input='source_file.md', + output='output_file.html', + encoding='utf-8' +) +``` + +The `input` and `output` keywords may be set to one of three options: + +* a string which contains a path to a readable or writable file on the file system, +* a readable or writable file-like object, +* or `None` (default) which will read from `stdin` or write to `stdout`. + +The `encoding` keyword defaults to `"utf-8"`. The same encoding will always be +used for input and output. The `xmlcharrefreplace` error handler is used when +encoding the output. + +!!! warning + + As Python-Markdown only outputs an (X)HTML fragment, the `output` file + will not be useful by itself and will likely need additional + modifications. Therefore, this function has little useful value for + anything other than passing output to `stdout` for use on the command + line. + +!!! tip + This is the only place that decoding and encoding of Unicode + takes place in Python-Markdown. If this rather naive solution does not + meet your specific needs, it is suggested that you write your own code + to handle your encoding/decoding needs. + + ``` python + with open("some_file.txt", "r", encoding="utf-8") as input_file: + text = input_file.read() + html = markdown.markdown(text) + + # Pass your output through a template system here to get a complete HTML document. + + with open("some_file.html", "w", encoding="utf-8", errors="xmlcharrefreplace") as output_file: + output_file.write(html) + ``` + +## The `markdown.Markdown` Class + +The above-referenced functions (`markdown.markdown` and +`markdown.markdownFromFile`) wrap the [`markdown.Markdown`][markdown.Markdown] +class and generally provide all of the functionality that a user may need. +However, in a few rare cases, a user may benefit from direct access to the +class itself. + +The same options are available when initializing the `markdown.Markdown` class +as on the `markdown.markdown` function, except that the class does +**not** accept a source text string on initialization. Rather, the source text +string must be passed to one of two instance methods +([`convert`][markdown.Markdown.convert] or [`convertFile`][markdown.Markdown.convertFile]). + +``` Python +md = markdown.Markdown() +html = md.convert(source_text) +``` + +The `source` text must meet the same requirements as the `text` argument of +the `markdown.markdown` function. + +!!! warning + + Instances of the `markdown.Markdown` class are only thread safe within + the thread they were created in. A single instance should not be accessed + from multiple threads. + +!!! warning + + The Python-Markdown library does ***not*** sanitize its HTML output. If + you are processing Markdown input from an untrusted source, it is your + responsibility to ensure that it is properly sanitized. For more + information see [Sanitizing HTML Output]. + + +You may want to use the class directly if you want to process multiple strings +without creating a new instance of the class for each string. + +```python +md = markdown.Markdown() +html1 = md.convert(text1) +html2 = md.convert(text2) +``` + +Depending on which options and/or extensions are being used, the parser may +need its state reset between each call to `convert`. The +[`reset`][markdown.Markdown.reset] method is available for this purpose. + +```python +html1 = md.convert(text1) +md.reset() +html2 = md.convert(text2) +``` + +To make this easier, you can also chain calls to `reset` together: + +```python +html3 = md.reset().convert(text3) +``` + +On some occasions, you may not want to reset the state. For example, the home +page of a blog often includes multiple posts on one page. To ensure that +there are no conflicts among the various references generated by the `toc` +extension, you can pass each post through the same class, which will ensure +all references are unique. + +``` python +posts = [] +md = markdown.Markdown(extensions=['toc']) +for post in blog_posts: + posts.append(md.convert(post)) +``` + +The [`convertFile`][markdown.Markdown.convertFile] method accepts the same +arguments as the `markdown.markdownFromFile` function. There is little +benefit in accessing this method directly and it remains for backward +compatability puposes only. diff --git a/docs/reference.md b/docs/reference.md deleted file mode 100644 index 76b1b6488..000000000 --- a/docs/reference.md +++ /dev/null @@ -1,313 +0,0 @@ ---- -title: Library Reference ---- - -# Using Markdown as a Python Library - -First and foremost, Python-Markdown is intended to be a python library module -used by various projects to convert Markdown syntax into HTML. - -## The Basics - -To use markdown as a module: - -```python -import markdown -html = markdown.markdown(your_text_string) -``` - -## The Details - -Python-Markdown provides two public functions ([`markdown.markdown`](#markdown) -and [`markdown.markdownFromFile`](#markdownFromFile)) both of which wrap the -public class [`markdown.Markdown`](#Markdown). If you're processing one -document at a time, these functions will serve your needs. However, if you need -to process multiple documents, it may be advantageous to create a single -instance of the `markdown.Markdown` class and pass multiple documents through -it. If you do use a single instance though, make sure to call the `reset` -method appropriately ([see below](#convert)). - -### `markdown.markdown(text [, **kwargs])` {: #markdown data-toc-label='markdown.markdown' } - -!!! warning - - The Python-Markdown library does ***not*** sanitize its HTML output. If - you are processing Markdown input from an untrusted source, it is your - responsibility to ensure that it is properly sanitized. For more - information see [Sanitizing HTML Output]. - -[Sanitizing HTML Output]: sanitization.md - -The following options are available on the `markdown.markdown` function: - -__text__{: #text } - -: The source Unicode string. (required) - - !!! tip "Important" - Python-Markdown expects a **Unicode** string as input (some simple ASCII binary strings *may* work only by - coincidence) and returns output as a Unicode string. Do not pass binary strings to it! If your input is - encoded, (e.g. as UTF-8), it is your responsibility to decode it. For example: - - ``` python - with open("some_file.txt", "r", encoding="utf-8") as input_file: - text = input_file.read() - html = markdown.markdown(text) - ``` - - If you want to write the output to disk, you *must* encode it yourself: - - ``` python - with open("some_file.html", "w", encoding="utf-8", errors="xmlcharrefreplace") as output_file: - output_file.write(html) - ``` - -__extensions__{: #extensions } - -: A list of extensions. - - Python-Markdown provides an [API](extensions/api.md) for third parties to - write extensions to the parser adding their own additions or changes to the - syntax. A few commonly used extensions are shipped with the markdown - library. See the [extension documentation](extensions/index.md) for a - list of available extensions. - - The list of extensions may contain instances of extensions and/or strings - of extension names. - - ``` python - extensions=[MyExtClass(), 'myext', 'path.to.my.ext:MyExtClass'] - ``` - - !!! tip - The preferred method is to pass in an instance of an extension. Strings - should only be used when it is impossible to import the Extension Class - directly (from the command line or in a template). - - When passing in extension instances, each class instance must be a subclass - of `markdown.extensions.Extension` and any configuration options should be - defined when initiating the class instance rather than using the - [`extension_configs`](#extension_configs) keyword. For example: - - ``` python - from markdown.extensions import Extension - class MyExtClass(Extension): - # define your extension here... - - markdown.markdown(text, extensions=[MyExtClass(option='value')]) - ``` - - If an extension name is provided as a string, the string must either be the - registered entry point of any installed extension or the importable path - using Python's dot notation. - - See the documentation specific to an extension for the string name assigned - to an extension as an entry point. Simply include the defined name as - a string in the list of extensions. For example, if an extension has the - name `myext` assigned to it and the extension is properly installed, then - do the following: - - ``` python - markdown.markdown(text, extensions=['myext']) - ``` - - If an extension does not have a registered entry point, Python's dot - notation may be used instead. The extension must be installed as a - Python module on your PYTHONPATH. Generally, a class should be specified in - the name. The class must be at the end of the name and be separated by a - colon from the module. - - Therefore, if you were to import the class like this: - - ``` python - from path.to.module import MyExtClass - ``` - - Then load the extension as follows: - - ``` python - markdown.markdown(text, extensions=['path.to.module:MyExtClass']) - ``` - - If only one extension is defined within a module and the module includes a - `makeExtension` function which returns an instance of the extension, then - the class name is not necessary. For example, in that case one could do - `extensions=['path.to.module']`. Check the documentation for a specific - extension to determine if it supports this feature. - - When loading an extension by name (as a string), you can only pass in - configuration settings to the extension by using the - [`extension_configs`](#extension_configs) keyword. - - !!! info "See Also" - See the documentation of the [Extension API](extensions/api.md) for - assistance in creating extensions. - -__extension_configs__{: #extension_configs } - -: A dictionary of configuration settings for extensions. - - Any configuration settings will only be passed to extensions loaded by name - (as a string). When loading extensions as class instances, pass the - configuration settings directly to the class when initializing it. - - !!! tip - The preferred method is to pass in an instance of an extension, which - does not require use of the `extension_configs` keyword at all. - See the [extensions](#extensions) keyword for details. - - The dictionary of configuration settings must be in the following format: - - ``` python - extension_configs = { - 'extension_name_1': { - 'option_1': 'value_1', - 'option_2': 'value_2' - }, - 'extension_name_2': { - 'option_1': 'value_1' - } - } - ``` - - When specifying the extension name, be sure to use the exact same - string as is used in the [extensions](#extensions) keyword to load the - extension. Otherwise, the configuration settings will not be applied to - the extension. In other words, you cannot use the entry point in on - place and Python dot notation in the other. While both may be valid for - a given extension, they will not be recognized as being the same - extension by Markdown. - - See the documentation specific to the extension you are using for help in - specifying configuration settings for that extension. - -__output_format__{: #output_format }: - -: Format of output. - - Supported formats are: - - * `"xhtml"`: Outputs XHTML style tags. **Default**. - * `"html"`: Outputs HTML style tags. - - The values can be in either lowercase or uppercase. - -__tab_length__{: #tab_length }: - -: Length of tabs in the source. Default: 4 - -### `markdown.markdownFromFile (**kwargs)` {: #markdownFromFile data-toc-label='markdown.markdownFromFile' } - -!!! warning - - The Python-Markdown library does ***not*** sanitize its HTML output. As - `markdown.markdownFromFile` writes directly to the file system, there is - no easy way to sanitize the output from Python code. Therefore, it is - recommended that the `markdown.markdownFromFile` function not be used on - input from an untrusted source. For more information see [Sanitizing HTML - Output]. - -With a few exceptions, `markdown.markdownFromFile` accepts the same options as -`markdown.markdown`. It does **not** accept a `text` (or Unicode) string. -Instead, it accepts the following required options: - -__input__{: #input } (required) - -: The source text file. - - `input` may be set to one of three options: - - * a string which contains a path to a readable file on the file system, - * a readable file-like object, - * or `None` (default) which will read from `stdin`. - -__output__{: #output } - -: The target which output is written to. - - `output` may be set to one of three options: - - * a string which contains a path to a writable file on the file system, - * a writable file-like object, - * or `None` (default) which will write to `stdout`. - -__encoding__{: #encoding } - -: The encoding of the source text file. - - Defaults to `"utf-8"`. The same encoding will always be used for input and output. - The `xmlcharrefreplace` error handler is used when encoding the output. - - !!! tip - This is the only place that decoding and encoding of Unicode - takes place in Python-Markdown. If this rather naive solution does not - meet your specific needs, it is suggested that you write your own code - to handle your encoding/decoding needs. - -### `markdown.Markdown([**kwargs])` {: #Markdown data-toc-label='markdown.Markdown' } - -The same options are available when initializing the `markdown.Markdown` class -as on the [`markdown.markdown`](#markdown) function, except that the class does -**not** accept a source text string on initialization. Rather, the source text -string must be passed to one of two instance methods. - -!!! warning - - Instances of the `markdown.Markdown` class are only thread safe within - the thread they were created in. A single instance should not be accessed - from multiple threads. - -#### `Markdown.convert(source)` {: #convert data-toc-label='Markdown.convert' } - -!!! warning - - The Python-Markdown library does ***not*** sanitize its HTML output. If - you are processing Markdown input from an untrusted source, it is your - responsibility to ensure that it is properly sanitized. For more - information see [Sanitizing HTML Output]. - -The `source` text must meet the same requirements as the [`text`](#text) -argument of the [`markdown.markdown`](#markdown) function. - -You should also use this method if you want to process multiple strings -without creating a new instance of the class for each string. - -```python -md = markdown.Markdown() -html1 = md.convert(text1) -html2 = md.convert(text2) -``` - -Depending on which options and/or extensions are being used, the parser may -need its state reset between each call to `convert`. - -```python -html1 = md.convert(text1) -md.reset() -html2 = md.convert(text2) -``` - -To make this easier, you can also chain calls to `reset` together: - -```python -html3 = md.reset().convert(text3) -``` - -#### `Markdown.convertFile(**kwargs)` {: #convertFile data-toc-label='Markdown.convertFile' } - -!!! warning - - The Python-Markdown library does ***not*** sanitize its HTML output. As - `Markdown.convertFile` writes directly to the file system, there is no - easy way to sanitize the output from Python code. Therefore, it is - recommended that the `Markdown.convertFile` method not be used on input - from an untrusted source. For more information see [Sanitizing HTML - Output]. - -The arguments of this method are identical to the arguments of the same -name on the `markdown.markdownFromFile` function ([`input`](#input), -[`output`](#output), and [`encoding`](#encoding)). As with the -[`convert`](#convert) method, this method should be used to -process multiple files without creating a new instance of the class for -each document. State may need to be `reset` between each call to -`convertFile` as is the case with `convert`. diff --git a/mkdocs.yml b/mkdocs.yml index af89eb11b..76cf279c4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -58,7 +58,7 @@ nav: - Home: index.md - Usage: - Installation: install.md - - Library Reference: reference.md + - Library Reference: library.md - Command Line: cli.md - Sanitization and Security: sanitization.md - Extensions: From 47bda771976f0e8461fdb9217e3354f626455b0b Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Tue, 1 Sep 2026 15:36:30 -0400 Subject: [PATCH 07/13] Add seealso admonition type --- docs/contributing.md | 2 +- docs/extensions/attr_list.md | 3 ++- docs/extensions/code_hilite.md | 2 +- docs/extensions/fenced_code_blocks.md | 2 +- docs/extensions/index.md | 3 ++- docs/extensions/tables.md | 3 ++- docs/library.md | 2 +- docs/mkdocstrings.css | 24 ++++++++++++++++++++++++ docs/test_tools.md | 2 +- 9 files changed, 35 insertions(+), 8 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index 747855633..0923a9dba 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -448,7 +448,7 @@ with no arguments. See help (`tox -h`) for more options. dependencies may differ significantly from system to system and is outside the scope of this guide. -!!! info "See Also" +!!! seealso "See Also" Python-Markdown provides [test tools] which simply test Markdown syntax. Understanding those tools will often help in understanding why a test may be diff --git a/docs/extensions/attr_list.md b/docs/extensions/attr_list.md index d4b714a46..1050676f1 100644 --- a/docs/extensions/attr_list.md +++ b/docs/extensions/attr_list.md @@ -118,7 +118,8 @@ The above results in the following output:

A hash style header

``` -!!! info "See Also" +!!! seealso "See Also" + By default, the [Fenced Code Blocks](./fenced_code_blocks.md#attributes) extension includes limited support for attribute lists. To get [full support](./fenced_code_blocks.md#keyvalue-pairs), both extensions must be enabled. diff --git a/docs/extensions/code_hilite.md b/docs/extensions/code_hilite.md index 88a186cfe..7ef734a30 100644 --- a/docs/extensions/code_hilite.md +++ b/docs/extensions/code_hilite.md @@ -68,7 +68,7 @@ See Pygments' excellent [documentation] for more details. If no language is defined, Pygments will attempt to guess the language. When that fails, the code block will not be highlighted. -!!! info "See Also" +!!! seealso "See Also" GitHub user [richeland] has provided a number of different [CSS style sheets][rich] which work with Pygments along with a [preview] of each theme. diff --git a/docs/extensions/fenced_code_blocks.md b/docs/extensions/fenced_code_blocks.md index 3c5aacc51..464ab2326 100644 --- a/docs/extensions/fenced_code_blocks.md +++ b/docs/extensions/fenced_code_blocks.md @@ -249,7 +249,7 @@ Conversely, to disable syntax highlighting on an individual code block, include list. While the `use_pygments` key/value pair will not be included in the output, all other attributes will behave as they would if syntax highlighting was disabled for that code block regardless of any global setting. -!!! info "See Also" +!!! seealso "See Also" You will need to properly install and setup Pygments for syntax highlighting to work. See the `codehilite` extension's [documentation][setup] for details. diff --git a/docs/extensions/index.md b/docs/extensions/index.md index ca480fad1..1798023f8 100644 --- a/docs/extensions/index.md +++ b/docs/extensions/index.md @@ -24,7 +24,8 @@ python -m markdown -x myext -x path.to.module:MyExtClass input.txt > output.html See the [Command Line docs](../cli.md) or use the `--help` option for more details. -!!! info "See Also" +!!! seealso "See Also" + If you would like to write your own extensions, see the [Extension API](api.md) for details. diff --git a/docs/extensions/tables.md b/docs/extensions/tables.md index d48224782..607340b2e 100644 --- a/docs/extensions/tables.md +++ b/docs/extensions/tables.md @@ -64,7 +64,8 @@ will be rendered as: ``` -!!! info "See Also" +!!! seealso "See Also" + The [Attribute Lists](./attr_list.md) extension includes support for defining attributes on table cells. Usage diff --git a/docs/library.md b/docs/library.md index 17d30d016..5ce6f7227 100644 --- a/docs/library.md +++ b/docs/library.md @@ -168,7 +168,7 @@ When loading an extension by name (as a string), you can only pass in configuration settings to the extension by using the [`extension_configs`](#extension_configs) keyword. -!!! info "See Also" +!!! seealso "See Also" See the documentation of the [Extension API](extensions/api.md) for assistance in creating extensions. diff --git a/docs/mkdocstrings.css b/docs/mkdocstrings.css index f7f52aae5..42f96cb51 100644 --- a/docs/mkdocstrings.css +++ b/docs/mkdocstrings.css @@ -1,3 +1,8 @@ +/* Highlight the bottom border of the active menu item. */ +.md-tabs .md-tabs__item--active { + border-bottom: .1rem solid var(--md-accent-fg-color); +} + /* Mark external links as such. */ a.external::after, a.autorefs-external::after { @@ -79,3 +84,22 @@ h1 a.doc-source-link { position: relative; top: -3.5em; } + +/* Add support for `seealso` Admonition */ +.md-typeset .admonition.seealso { + background-color: var(--md-accent-fg-color--transparent); +} + +.md-typeset .seealso>.admonition-title:before { + background-color: var(--md-accent-fg-color); +} + +.md-typeset .seealso>.admonition-title:after { + color: var(--md-accent-fg-color); +} + +.md-typeset .seealso>.admonition-title:before { + --md-admonition-icon--seealso: url('data:image/svg+xml;charset=utf-8,'); + -webkit-mask-image: var(--md-admonition-icon--seealso); + mask-image: var(--md-admonition-icon--seealso); +} diff --git a/docs/test_tools.md b/docs/test_tools.md index 3834b7cfd..2b63d2b97 100644 --- a/docs/test_tools.md +++ b/docs/test_tools.md @@ -167,7 +167,7 @@ sub-directories and run all `unittest` tests that it finds, including `markdown.test_tools.LegacyTestCase` subclasses. Normal [unittest] discovery rules apply. -!!! info "See Also" +!!! seealso "See Also" See the [Contributing Guide] for instructions on setting up a [development environment] for running the tests. From 59cadb2ee70b8ba0db89aa774ffe1ce532f6cb85 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Tue, 1 Sep 2026 16:15:56 -0400 Subject: [PATCH 08/13] Fix tooltips for API reference links --- docs/mkdocstrings.css | 4 ++++ mkdocs.yml | 1 + 2 files changed, 5 insertions(+) diff --git a/docs/mkdocstrings.css b/docs/mkdocstrings.css index 42f96cb51..57bcb1b49 100644 --- a/docs/mkdocstrings.css +++ b/docs/mkdocstrings.css @@ -79,6 +79,10 @@ h1 a.doc-source-link { mask-position: bottom; } +.md-tooltip2 a.doc-source-link { + display: none; +} + /* Reposiiton content.action.edit and content.action.view page buttons */ [dir=ltr] .md-content__button { position: relative; diff --git a/mkdocs.yml b/mkdocs.yml index 76cf279c4..fe833f48a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,6 +21,7 @@ theme: # - content.action.edit # - content.action.view - content.code.copy + - content.tooltips - content.footnote.tooltips - search.highlight From e35baf29bcd95ca9e9a15e13b405af6527965f4b Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Wed, 2 Sep 2026 09:16:00 -0400 Subject: [PATCH 09/13] Darkmode cleanup --- docs/mkdocstrings.css | 5 ++--- docs/templates/python/material/attribute.html.jinja | 2 +- docs/templates/python/material/class.html.jinja | 2 +- docs/templates/python/material/function.html.jinja | 2 +- docs/templates/python/material/module.html.jinja | 2 +- mkdocs.yml | 1 + 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/mkdocstrings.css b/docs/mkdocstrings.css index 57bcb1b49..67cb1c388 100644 --- a/docs/mkdocstrings.css +++ b/docs/mkdocstrings.css @@ -50,7 +50,7 @@ table code { } .doc-label-deprecated>code { - background-color: #ffe2bd; + background-color: #ff91001a; border-color: #ff9100; } @@ -60,14 +60,13 @@ a.doc-source-link { -webkit-mask-image: url('data:image/svg+xml,'); mask-position: center; mask-repeat: no-repeat; - content: ''; display: inline-block; height: 1.5rem; width: 1.5rem; position: relative; float: right; margin-left: .5rem; - background-color: var(--md-default-fg-color--lighter) + background-color: var(--md-default-fg-color--lighter); } a.doc-source-link:hover { diff --git a/docs/templates/python/material/attribute.html.jinja b/docs/templates/python/material/attribute.html.jinja index ea377179b..dbfa0ec39 100644 --- a/docs/templates/python/material/attribute.html.jinja +++ b/docs/templates/python/material/attribute.html.jinja @@ -1,7 +1,7 @@ {% extends "_base/attribute.html.jinja" %} {% block heading scoped %} - ‹› + {% if config.show_symbol_type_heading %}{% endif %} {%+ filter highlight(language="python", inline=True) %} {{ attribute_name }}{% if attribute.annotation %}: {{ attribute.annotation }}{% endif %} diff --git a/docs/templates/python/material/class.html.jinja b/docs/templates/python/material/class.html.jinja index 613043066..3f7d11c40 100644 --- a/docs/templates/python/material/class.html.jinja +++ b/docs/templates/python/material/class.html.jinja @@ -1,6 +1,6 @@ {% extends "_base/class.html.jinja" %} {% block heading scoped %} - ‹› + {{ super() }} {% endblock heading %} diff --git a/docs/templates/python/material/function.html.jinja b/docs/templates/python/material/function.html.jinja index 836b9d93c..f581fd7ff 100644 --- a/docs/templates/python/material/function.html.jinja +++ b/docs/templates/python/material/function.html.jinja @@ -1,6 +1,6 @@ {% extends "_base/function.html.jinja" %} {% block heading scoped %} - ‹› + {{ super() }} {% endblock heading %} diff --git a/docs/templates/python/material/module.html.jinja b/docs/templates/python/material/module.html.jinja index a2544a0d6..3d1085797 100644 --- a/docs/templates/python/material/module.html.jinja +++ b/docs/templates/python/material/module.html.jinja @@ -1,6 +1,6 @@ {% extends "_base/module.html.jinja" %} {% block heading scoped %} - ‹› + {{ super() }} {% endblock heading %} diff --git a/mkdocs.yml b/mkdocs.yml index fe833f48a..6e8ed930a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -14,6 +14,7 @@ theme: favicon: favicon.ico features: - navigation.tabs + - navigation.tabs.sticky - navigation.path - navigation.indexes - navigation.footer From b26a54f45a70acaeb4ccfe8a7f58615bb3893433 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 3 Sep 2026 10:01:22 -0400 Subject: [PATCH 10/13] Update test workflows --- .github/workflows/deploy.yml | 2 +- .github/workflows/manual_deploy.yml | 2 +- tox.ini | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 814e1bed7..9e0269b89 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -74,7 +74,7 @@ jobs: - name: Build run: | cd md - python -m mkdocs build --clean --verbose + python -m zensical build --clean - name: Publish if: success() run: | diff --git a/.github/workflows/manual_deploy.yml b/.github/workflows/manual_deploy.yml index dffaed2dc..8fdd7e803 100644 --- a/.github/workflows/manual_deploy.yml +++ b/.github/workflows/manual_deploy.yml @@ -37,7 +37,7 @@ jobs: - name: Build run: | cd md - python -m mkdocs build --clean --verbose + python -m zensical build --clean - name: Publish if: success() run: | diff --git a/tox.ini b/tox.ini index 8b331dcb3..2f1cd2abf 100644 --- a/tox.ini +++ b/tox.ini @@ -29,13 +29,13 @@ skip_install = true extras = docs deps = pyspelling commands = - {envpython} -m mkdocs build --config-file {toxinidir}/mkdocs.yml + {envpython} -m zencisal build --config-file {toxinidir}/mkdocs.yml {envpython} -m pyspelling -j 4 --config {toxinidir}/.pyspelling.yml [testenv:checklinks] extras = docs deps = -commands = {envpython} -m mkdocs build --strict --config-file {toxinidir}/mkdocs.yml +commands = {envpython} -m zensical build --strict --config-file {toxinidir}/mkdocs.yml [testenv:pep517check] deps = pep517 From 13249031187b794a28f17a4bf25f30cc58698313 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 3 Sep 2026 10:41:11 -0400 Subject: [PATCH 11/13] fix typo --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 2f1cd2abf..86563b927 100644 --- a/tox.ini +++ b/tox.ini @@ -29,7 +29,7 @@ skip_install = true extras = docs deps = pyspelling commands = - {envpython} -m zencisal build --config-file {toxinidir}/mkdocs.yml + {envpython} -m zensical build --config-file {toxinidir}/mkdocs.yml {envpython} -m pyspelling -j 4 --config {toxinidir}/.pyspelling.yml [testenv:checklinks] From 9fadf03c65de8df8c86a2015fd31eaff6f0760c8 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 3 Sep 2026 11:18:27 -0400 Subject: [PATCH 12/13] Update mdx_gh_links dependency to latest --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 164f84270..6f207e185 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,7 @@ testing = [ ] docs = [ 'zensical==0.0.57', - 'mdx_gh_links==0.2', + 'mdx_gh_links==0.4', 'mkdocstrings==1.0.6', 'mkdocstrings-python==1.16.8', 'pygments==2.21.0', diff --git a/uv.lock b/uv.lock index 550983a54..ec36aaaa7 100644 --- a/uv.lock +++ b/uv.lock @@ -240,7 +240,7 @@ testing = [ [package.metadata] requires-dist = [ { name = "coverage", marker = "extra == 'testing'" }, - { name = "mdx-gh-links", marker = "extra == 'docs'", specifier = "==0.2" }, + { name = "mdx-gh-links", marker = "extra == 'docs'", specifier = "==0.4" }, { name = "mkdocstrings", marker = "extra == 'docs'", specifier = "==1.0.6" }, { name = "mkdocstrings-python", marker = "extra == 'docs'", specifier = "==1.16.8" }, { name = "pygments", marker = "extra == 'docs'", specifier = "==2.21.0" }, @@ -337,14 +337,14 @@ wheels = [ [[package]] name = "mdx-gh-links" -version = "0.2" +version = "0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/e7/76324cb45a3b655a3f4392e5e1c771a1b9a6b938700d7f9ac31fcbb43377/mdx_gh_links-0.2.tar.gz", hash = "sha256:59fb8dafdf62bd0757593d6ab1f13b554d1d3ef0dcc44bedea2eca71970cf398", size = 4961, upload-time = "2018-03-09T17:17:20.063Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/ea/bf1f721a8dc0ff83b426480f040ac68dbe3d7898b096c1277a5a4e3da0ec/mdx_gh_links-0.4.tar.gz", hash = "sha256:41d5aac2ab201425aa0a19373c4095b79e5e015fdacfe83c398199fe55ca3686", size = 5783, upload-time = "2023-12-22T19:54:02.136Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/5d/b0e9afc67f3db79e6eda5a81b01c06969b1cc33d020a1c3f5da37e290dbb/mdx_gh_links-0.2-py2.py3-none-any.whl", hash = "sha256:0815d6f2880fc78e7a06e3964dfab55def5bf45a10ce1555423c5bcd405873e5", size = 5390, upload-time = "2018-03-09T17:17:17.945Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c7/ccfe05ade98ba7a63f05d1b05b7508d9af743cbd1f1681aa0c9900a8cd40/mdx_gh_links-0.4-py3-none-any.whl", hash = "sha256:9057bca1fa5280bf1fcbf354381e46c9261cc32c2d5c0407801f8a910be5f099", size = 7166, upload-time = "2023-12-22T19:54:00.384Z" }, ] [[package]] From a6fc3e8e400db7994a6a69356dc518aad34b0ad4 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 3 Sep 2026 16:09:24 -0400 Subject: [PATCH 13/13] Move some files around for a cleaner build --- .../python/material/attribute.html.jinja | 0 .../python/material/class.html.jinja | 0 .../material/docstring/admonition.html.jinja | 0 .../python/material/function.html.jinja | 0 .../python/material/module.html.jinja | 0 .../scripts}/griffe_extensions.py | 0 docs/{ => assets/images}/favicon.ico | Bin docs/{ => assets/images}/py.png | Bin docs/{ => assets/stylesheets}/mkdocstrings.css | 0 mkdocs.yml | 14 +++++++------- 10 files changed, 7 insertions(+), 7 deletions(-) rename {docs/templates => .zensical/mkdocstring_templates}/python/material/attribute.html.jinja (100%) rename {docs/templates => .zensical/mkdocstring_templates}/python/material/class.html.jinja (100%) rename {docs/templates => .zensical/mkdocstring_templates}/python/material/docstring/admonition.html.jinja (100%) rename {docs/templates => .zensical/mkdocstring_templates}/python/material/function.html.jinja (100%) rename {docs/templates => .zensical/mkdocstring_templates}/python/material/module.html.jinja (100%) rename {scripts => .zensical/scripts}/griffe_extensions.py (100%) rename docs/{ => assets/images}/favicon.ico (100%) rename docs/{ => assets/images}/py.png (100%) rename docs/{ => assets/stylesheets}/mkdocstrings.css (100%) diff --git a/docs/templates/python/material/attribute.html.jinja b/.zensical/mkdocstring_templates/python/material/attribute.html.jinja similarity index 100% rename from docs/templates/python/material/attribute.html.jinja rename to .zensical/mkdocstring_templates/python/material/attribute.html.jinja diff --git a/docs/templates/python/material/class.html.jinja b/.zensical/mkdocstring_templates/python/material/class.html.jinja similarity index 100% rename from docs/templates/python/material/class.html.jinja rename to .zensical/mkdocstring_templates/python/material/class.html.jinja diff --git a/docs/templates/python/material/docstring/admonition.html.jinja b/.zensical/mkdocstring_templates/python/material/docstring/admonition.html.jinja similarity index 100% rename from docs/templates/python/material/docstring/admonition.html.jinja rename to .zensical/mkdocstring_templates/python/material/docstring/admonition.html.jinja diff --git a/docs/templates/python/material/function.html.jinja b/.zensical/mkdocstring_templates/python/material/function.html.jinja similarity index 100% rename from docs/templates/python/material/function.html.jinja rename to .zensical/mkdocstring_templates/python/material/function.html.jinja diff --git a/docs/templates/python/material/module.html.jinja b/.zensical/mkdocstring_templates/python/material/module.html.jinja similarity index 100% rename from docs/templates/python/material/module.html.jinja rename to .zensical/mkdocstring_templates/python/material/module.html.jinja diff --git a/scripts/griffe_extensions.py b/.zensical/scripts/griffe_extensions.py similarity index 100% rename from scripts/griffe_extensions.py rename to .zensical/scripts/griffe_extensions.py diff --git a/docs/favicon.ico b/docs/assets/images/favicon.ico similarity index 100% rename from docs/favicon.ico rename to docs/assets/images/favicon.ico diff --git a/docs/py.png b/docs/assets/images/py.png similarity index 100% rename from docs/py.png rename to docs/assets/images/py.png diff --git a/docs/mkdocstrings.css b/docs/assets/stylesheets/mkdocstrings.css similarity index 100% rename from docs/mkdocstrings.css rename to docs/assets/stylesheets/mkdocstrings.css diff --git a/mkdocs.yml b/mkdocs.yml index 6e8ed930a..09ae202d7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -6,12 +6,12 @@ site_author: "The Python-Markdown Project" copyright: "Copyright © 2010-2026 The Python-Markdown Project" use_directory_urls: true -watch: [markdown, scripts, docs/templates] +watch: [markdown, .zensical/scripts, .zensical/mkdocstring_templates] theme: variant: modern - logo: py.png - favicon: favicon.ico + logo: assets/images/py.png + favicon: assets/images/favicon.ico features: - navigation.tabs - navigation.tabs.sticky @@ -54,7 +54,7 @@ theme: accent: light green extra_css: - - mkdocstrings.css + - assets/stylesheets/mkdocstrings.css nav: - Home: index.md @@ -159,7 +159,7 @@ markdown_extensions: plugins: - search - mkdocstrings: - custom_templates: docs/templates + custom_templates: .zensical/mkdocstring_templates handlers: python: inventories: @@ -171,8 +171,8 @@ plugins: docstring_style: google docstring_section_style: list extensions: - - scripts/griffe_extensions.py:DeprecatedExtension - - scripts/griffe_extensions.py:PriorityTableExtension: + - .zensical/scripts/griffe_extensions.py:DeprecatedExtension + - .zensical/scripts/griffe_extensions.py:PriorityTableExtension: paths: - markdown.preprocessors.build_preprocessors - markdown.blockprocessors.build_block_parser