From c9415f2c7ba94dfa360cd006dd30de446f67d65a Mon Sep 17 00:00:00 2001 From: miute Date: Tue, 7 Jul 2026 22:26:39 +0900 Subject: [PATCH] Improve docs - Restructure the Sphinx documentation layout. - Format pyproject.toml with Tombi and Taplo. - Update docs-dependencies. - Update tox.ini to run sphinx via uv. --- docs/_static/css/custom.css | 45 ++- docs/_templates/autosummary/base.rst | 5 + docs/_templates/autosummary/class.rst | 39 +++ docs/_templates/autosummary/module.rst | 47 +++ docs/_templates/class.rst | 20 -- docs/_templates/enum.rst | 18 -- docs/_templates/inner-enum.rst | 7 - docs/attributes.rst | 423 ------------------------- docs/conf.py | 110 ++++--- docs/index.md | 16 +- docs/install.md | 2 +- docs/pugi.ENCODING.rst | 58 ++++ docs/pugi.FORMAT.rst | 69 ++++ docs/pugi.MISC.rst | 8 + docs/pugi.NODE.rst | 46 +++ docs/pugi.PARSE.rst | 109 +++++++ docs/pugi.STATUS.rst | 82 +++++ docs/pugi.XPATH_TYPE.rst | 30 ++ docs/pugi.limits.rst | 44 +++ docs/pugi.rst | 36 +++ docs/reference.rst | 108 +------ docs/summary.rst | 73 ----- pyproject.toml | 86 ++--- tox.ini | 6 +- uv.lock | 221 ++++++------- 25 files changed, 848 insertions(+), 860 deletions(-) create mode 100644 docs/_templates/autosummary/base.rst create mode 100644 docs/_templates/autosummary/class.rst create mode 100644 docs/_templates/autosummary/module.rst delete mode 100644 docs/_templates/class.rst delete mode 100644 docs/_templates/enum.rst delete mode 100644 docs/_templates/inner-enum.rst delete mode 100644 docs/attributes.rst create mode 100644 docs/pugi.ENCODING.rst create mode 100644 docs/pugi.FORMAT.rst create mode 100644 docs/pugi.MISC.rst create mode 100644 docs/pugi.NODE.rst create mode 100644 docs/pugi.PARSE.rst create mode 100644 docs/pugi.STATUS.rst create mode 100644 docs/pugi.XPATH_TYPE.rst create mode 100644 docs/pugi.limits.rst create mode 100644 docs/pugi.rst delete mode 100644 docs/summary.rst diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index 556d37d..a9e1b1e 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -1,7 +1,46 @@ -.table-wrapper { +table.autosummary.longtable.docutils.align-default { + margin-left: 0 !important; + margin-bottom: 0 !important; + border-collapse: collapse; + width: 100%; +} + +table.autosummary.longtable.docutils.align-default tbody>tr.row-odd>td { + white-space: normal; + overflow-wrap: break-word; +} + +table.autosummary.longtable.docutils.align-default tbody>tr.row-even>td { + white-space: normal; + overflow-wrap: break-word; +} + +.admonition { + font-size: 0.8rem; + margin-bottom: 12px !important; +} + +li.toctree-l1>ul { margin-top: 0 !important; + margin-bottom: 0 !important; } -table.autosummary.longtable.docutils.align-default { - margin-left: 0 !important; +section>h2 { + margin-top: 1.5em !important; + margin-bottom: 0.5em !important; + padding-bottom: 0.25em !important; + border-bottom: 1px solid #d8dee4; +} + +section>h3 { + margin-top: 1em !important; + margin-bottom: 0.5em !important; +} + +section>section>p { + margin-bottom: 0.5em !important; +} + +section>ul.simple { + margin-bottom: 1em !important; } diff --git a/docs/_templates/autosummary/base.rst b/docs/_templates/autosummary/base.rst new file mode 100644 index 0000000..b7556eb --- /dev/null +++ b/docs/_templates/autosummary/base.rst @@ -0,0 +1,5 @@ +{{ fullname | escape | underline}} + +.. currentmodule:: {{ module }} + +.. auto{{ objtype }}:: {{ objname }} diff --git a/docs/_templates/autosummary/class.rst b/docs/_templates/autosummary/class.rst new file mode 100644 index 0000000..9080252 --- /dev/null +++ b/docs/_templates/autosummary/class.rst @@ -0,0 +1,39 @@ +{{ fullname | escape | underline}} + +.. currentmodule:: {{ module }} + +.. autoclass:: {{ objname }} + {%- set ns = namespace(has_own_methods=false, has_own_attrs=false) -%} + {%- set exclude_members = ['__annotations_cache__', '__annotate_func__', '__doc__', '__format__', '__module__', '__new__', '__repr__', '_pybind11_conduit_v1_', '__pybind11_native_enum__'] -%} + + {%- for item in members -%} + {%- if item not in attributes and + item not in inherited_members and + item not in exclude_members -%} + {%- set ns.has_own_methods = true -%} + {%- endif -%} + {%- if item in attributes and item not in inherited_members -%} + {%- set ns.has_own_attrs = true -%} + {%- endif -%} + {%- endfor -%} + + {% block METHODS %} + {% if ns.has_own_methods %} + .. rubric:: {{ _('Methods') }} + + .. autosummary:: + {% for item in members %} + {% if item not in attributes and + item not in inherited_members and + item not in exclude_members %} + ~{{ name }}.{{ item }} + {% endif %} + {%- endfor %} + {% endif %} + {% endblock %} + + {% block DESCRIPTION %} + {% if ns.has_own_methods %} + .. rubric:: {{ _('Member Documentation') }} + {% endif %} + {% endblock %} diff --git a/docs/_templates/autosummary/module.rst b/docs/_templates/autosummary/module.rst new file mode 100644 index 0000000..86c19ab --- /dev/null +++ b/docs/_templates/autosummary/module.rst @@ -0,0 +1,47 @@ +{{ fullname | escape | underline}} + +.. automodule:: {{ fullname }} + + {%- block exceptions %} + {% if exceptions %} + .. rubric:: {{ _('Exceptions') }} + + .. autosummary:: + {% for item in exceptions %} + {{ item }} + {%- endfor %} + {% endif %} + {%- endblock %} + + {%- block classes %} + {% if classes %} + .. rubric:: {{ _('Classes') }} + + .. autosummary:: + {% for item in classes %} + {{ item }} + {%- endfor %} + {% endif %} + {%- endblock %} + + {%- block functions %} + {% if functions %} + .. rubric:: {{ _('Functions') }} + + .. autosummary:: + {% for item in functions %} + {{ item }} + {%- endfor %} + {% endif %} + {%- endblock %} + + {%- block attributes %} + {% if attributes %} + .. rubric:: {{ _('Module Attributes') }} + + .. autosummary:: + {% for item in attributes %} + {{ item }} + {%- endfor %} + {% endif %} + {%- endblock %} diff --git a/docs/_templates/class.rst b/docs/_templates/class.rst deleted file mode 100644 index a1254ec..0000000 --- a/docs/_templates/class.rst +++ /dev/null @@ -1,20 +0,0 @@ -{{ fullname | escape | underline}} - -.. currentmodule:: {{ module }} - -.. autoclass:: {{ objname }} - :noindex: - - {% block methods %} - {% if methods %} - Members: - - {# Show implemented members #} - .. autosummary:: - {% for item in members %} - {% if item not in inherited_members and item not in ['__annotations__', '__doc__', '__module__', '__repr__', '_pybind11_conduit_v1_'] %} - ~{{ name }}.{{ item }} - {% endif %} - {%- endfor %} - {% endif %} - {% endblock %} diff --git a/docs/_templates/enum.rst b/docs/_templates/enum.rst deleted file mode 100644 index 7e9501d..0000000 --- a/docs/_templates/enum.rst +++ /dev/null @@ -1,18 +0,0 @@ -{{ fullname | escape | underline}} - -.. currentmodule:: {{ module }} - -.. autoclass:: {{ objname }} - :noindex: - :no-members: - -{% block attributes %} -{% if attributes %} -{% for item in attributes %} -{% if item not in ['name', 'value'] %} -.. autoattribute:: {{ module }}.{{ item }} - :noindex: -{% endif %} -{%- endfor %} -{% endif %} -{% endblock %} diff --git a/docs/_templates/inner-enum.rst b/docs/_templates/inner-enum.rst deleted file mode 100644 index d44541b..0000000 --- a/docs/_templates/inner-enum.rst +++ /dev/null @@ -1,7 +0,0 @@ -{{ fullname | escape | underline}} - -.. currentmodule:: {{ module }} - -.. autoclass:: {{ module }}.{{ objname }} - :noindex: - :no-members: diff --git a/docs/attributes.rst b/docs/attributes.rst deleted file mode 100644 index a7052ec..0000000 --- a/docs/attributes.rst +++ /dev/null @@ -1,423 +0,0 @@ -pugixml.pugi -============ - -.. currentmodule:: pugixml.pugi - -.. rubric:: Attributes - -Encodings ---------- - -These flags determine the encoding of input/output data for XML document. - -.. seealso:: - - :meth:`XMLDocument.load_buffer`, - :meth:`XMLDocument.load_file`, - :meth:`XMLDocument.save`, - :meth:`XMLDocument.save_file`, - :meth:`XMLNode.append_buffer`, - :meth:`XMLNode.print` - -.. autoattribute:: pugixml.pugi.ENCODING_AUTO - - Auto-detect input encoding using BOM or ``‘<’`` / ``‘’`` - -.. autoattribute:: pugixml.pugi.NODE_COMMENT - - Comment tag, i.e. ``‘’`` - -.. autoattribute:: pugixml.pugi.NODE_DECLARATION - - Document declaration, i.e. ``‘’`` - -.. autoattribute:: pugixml.pugi.NODE_DOCTYPE - - Document type declaration, i.e. ``‘’`` - -.. autoattribute:: pugixml.pugi.NODE_DOCUMENT - - A document tree’s absolute root. - -.. autoattribute:: pugixml.pugi.NODE_ELEMENT - - Element tag, i.e. ``‘’`` - -.. autoattribute:: pugixml.pugi.NODE_NULL - - Empty (null) node handle. - -.. autoattribute:: pugixml.pugi.NODE_PCDATA - - Plain character data, i.e. ``‘text’`` - -.. autoattribute:: pugixml.pugi.NODE_PI - - Processing instruction, i.e. ``‘’`` - -Parsing Options ---------------- - -These flags control the contents of the resulting tree for all loading functions. - -.. note:: - - This is a bitmask that customizes the parsing process: - to enable a flag, use ``mask | flag``; to disable a flag, use ``mask & ~flag``. - -.. seealso:: - - :meth:`XMLDocument.load_buffer`, - :meth:`XMLDocument.load_file`, - :meth:`XMLDocument.load_string`, - :meth:`XMLNode.append_buffer` - -.. autoattribute:: pugixml.pugi.PARSE_CDATA - - This flag determines if CDATA sections (:attr:`NODE_CDATA`) are added to the DOM tree. This flag is on by default. - -.. autoattribute:: pugixml.pugi.PARSE_COMMENTS - - This flag determines if comments (:attr:`NODE_COMMENT`) are added to the DOM tree. This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_DECLARATION - - This flag determines if document declaration (:attr:`NODE_DECLARATION`) is added to the DOM tree. - This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_DEFAULT - - The default parsing mode. - Elements, PCDATA and CDATA sections are added to the DOM tree, character/reference entities are expanded, - End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. - -.. autoattribute:: pugixml.pugi.PARSE_DOCTYPE - - This flag determines if document type declaration (:attr:`NODE_DOCTYPE`) is added to the DOM tree. This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_EMBED_PCDATA - - This flag determines if plain character data is be stored in the parent element's value. - This significantly changes the structure of the document; - this flag is only recommended for parsing documents with many PCDATA nodes in memory-constrained environments. - This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_EOL - - This flag determines if EOL characters are normalized (converted to #xA) during parsing. This flag is on by default. - -.. autoattribute:: pugixml.pugi.PARSE_ESCAPES - - This flag determines if character and entity references are expanded during parsing. This flag is on by default. - -.. autoattribute:: pugixml.pugi.PARSE_FRAGMENT - - This flag determines if plain character data that does not have a parent node is added to the DOM tree, - and if an empty document is a valid document. This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_FULL - - The full parsing mode. - Nodes of all types are added to the DOM tree, character/reference entities are expanded, - End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. - -.. autoattribute:: pugixml.pugi.PARSE_MERGE_PCDATA - - This flag determines whether determines whether the the two PCDATA should be merged or not, if no intermediatory data are parsed in the document. - This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_MINIMAL - - Minimal parsing mode (equivalent to turning all other flags off). - Only elements and PCDATA sections are added to the DOM tree, no text conversions are performed. - -.. autoattribute:: pugixml.pugi.PARSE_PI - - This flag determines if processing instructions (:attr:`NODE_PI`) are added to the DOM tree. This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_TRIM_PCDATA - - This flag determines if leading and trailing whitespace is to be removed from plain character data. - This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_WCONV_ATTRIBUTE - - This flag determines if attribute values are normalized using CDATA normalization rules during parsing. - This flag is on by default. - -.. autoattribute:: pugixml.pugi.PARSE_WNORM_ATTRIBUTE - - This flag determines if attribute values are normalized using NMTOKENS normalization rules during parsing. - This flag is off by default. - -.. autoattribute:: pugixml.pugi.PARSE_WS_PCDATA - - This flag determines if plain character data (:attr:`NODE_PCDATA`) that consist only of whitespace are added to the DOM tree. - This flag is off by default; turning it on usually results in slower parsing and more memory consumption. - -.. autoattribute:: pugixml.pugi.PARSE_WS_PCDATA_SINGLE - - This flag determines if plain character data (:attr:`NODE_PCDATA`) that is the only child of the parent node and that consists only - of whitespace is added to the DOM tree. - This flag is off by default; turning it on may result in slower parsing and more memory consumption. - -Parsing Status --------------- - -Parsing status, returned as part of :class:`XMLParseResult` object. - -.. autoattribute:: pugixml.pugi.STATUS_APPEND_INVALID_ROOT - - Unable to append nodes since root type is not :attr:`NODE_ELEMENT` or :attr:`NODE_DOCUMENT` - (exclusive to :meth:`XMLNode.append_buffer`). - -.. autoattribute:: pugixml.pugi.STATUS_BAD_ATTRIBUTE - - Parsing error occurred while parsing element attribute. - -.. autoattribute:: pugixml.pugi.STATUS_BAD_CDATA - - Parsing error occurred while parsing CDATA section. - -.. autoattribute:: pugixml.pugi.STATUS_BAD_COMMENT - - Parsing error occurred while parsing comment. - -.. autoattribute:: pugixml.pugi.STATUS_BAD_DOCTYPE - - Parsing error occurred while parsing document type declaration. - -.. autoattribute:: pugixml.pugi.STATUS_BAD_END_ELEMENT - - Parsing error occurred while parsing end element tag. - -.. autoattribute:: pugixml.pugi.STATUS_BAD_PCDATA - - Parsing error occurred while parsing PCDATA section. - -.. autoattribute:: pugixml.pugi.STATUS_BAD_PI - - Parsing error occurred while parsing document declaration/processing instruction. - -.. autoattribute:: pugixml.pugi.STATUS_BAD_START_ELEMENT - - Parsing error occurred while parsing start element tag. - -.. autoattribute:: pugixml.pugi.STATUS_END_ELEMENT_MISMATCH - - There was a mismatch of start-end tags - (closing tag had incorrect name, some tag was not closed or there was an excessive closing tag). - -.. autoattribute:: pugixml.pugi.STATUS_FILE_NOT_FOUND - - File was not found during :meth:`XMLDocument.load_file`. - -.. autoattribute:: pugixml.pugi.STATUS_INTERNAL_ERROR - - Internal error occurred. - -.. autoattribute:: pugixml.pugi.STATUS_IO_ERROR - - Error reading from file/stream. - -.. autoattribute:: pugixml.pugi.STATUS_NO_DOCUMENT_ELEMENT - - Parsing resulted in a document without element nodes. - -.. autoattribute:: pugixml.pugi.STATUS_OK - - No error. - -.. autoattribute:: pugixml.pugi.STATUS_OUT_OF_MEMORY - - Could not allocate memory. - -.. autoattribute:: pugixml.pugi.STATUS_UNRECOGNIZED_TAG - - Parser could not determine tag type. - -XPath Query Return Type ------------------------ - -.. autoattribute:: pugixml.pugi.XPATH_TYPE_BOOLEAN - - Boolean. - -.. autoattribute:: pugixml.pugi.XPATH_TYPE_NODE_SET - - Node set (:class:`XPathNodeSet`). - -.. autoattribute:: pugixml.pugi.XPATH_TYPE_NONE - - Unknown type (query failed to compile). - -.. autoattribute:: pugixml.pugi.XPATH_TYPE_NUMBER - - Number. - -.. autoattribute:: pugixml.pugi.XPATH_TYPE_STRING - - String. - -Misc. ------ - -.. autoattribute:: pugixml.pugi.PUGIXML_VERSION - - An integer literal representing the version of ``pugixml``; major * 1000 + minor * 10 + patch. - -pugixml.pugi.limits -=================== - -.. automodule:: pugixml.pugi.limits - -.. rubric:: Attributes - -.. autoattribute:: pugixml.pugi.limits.DBL_MAX - - Maximum value of type ``double`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.DBL_MIN - - Minimum value of type ``double`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.FLT_MAX - - Maximum value of type ``float`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.FLT_MIN - - Minimum value of type ``float`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.INT_MAX - - Maximum value of type ``int`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.INT_MIN - - Minimum value of type ``int`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.LLONG_MAX - - Maximum value of type ``long long`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.LLONG_MIN - - Minimum value of type ``long long`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.UINT_MAX - - Maximum value of type ``unsigned int`` in C/C++. - -.. autoattribute:: pugixml.pugi.limits.ULLONG_MAX - - Maximum value of type ``unsigned long long`` in C/C++. diff --git a/docs/conf.py b/docs/conf.py index 96ac9a9..1ad3868 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,19 +1,16 @@ # Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- +import enum +import inspect import sys from importlib.metadata import metadata from pathlib import Path -path = str((Path(__file__).parent / ".." / "src").resolve()) +path = str((Path(__file__).parent.parent / "src").resolve()) if path not in sys.path: - sys.path.append(path) -del path + sys.path.insert(0, path) # -- Project information ----------------------------------------------------- @@ -28,9 +25,6 @@ # -- General configuration --------------------------------------------------- -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.autosummary", @@ -51,44 +45,88 @@ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] -# -- Options for HTML output ------------------------------------------------- +# -- Options for sphinx.ext.autodoc ------------------------------------------ + +exclude_members = [ + "__annotate_func__", + "__annotations__", + "__annotations_cache__", + "__doc__", + "__entries", + "__format__", + "__module__", + "__new__", + "__pybind11_native_enum__", + "__repr__", + "__weakref__", + "_pybind11_conduit_v1_", +] -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "furo" +autodoc_class_signature = "separated" +autodoc_default_options = { + "members": True, + "undoc-members": True, + "private-members": True, + "special-members": True, + "inherited-members": False, + "exclude-members": ",".join(exclude_members), + "member-order": "groupwise", + "show-inheritance": True, + "class-doc-from": "class", +} +suppress_warnings = [ + "autosummary.import_cycle", +] -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] -html_css_files = [ - "css/custom.css", -] +# -- Options for HTML output ------------------------------------------------- -html_title = f"{project} {version}" +html_theme = "sphinx_rtd_theme" +html_static_path = ["_static"] +html_css_files = ["css/custom.css"] intersphinx_mapping = {"python": ("https://docs.python.org/3", None)} extlinks = {"pugixml": ("https://pugixml.org/docs/%s", None)} -napoleon_use_admonition_for_examples = True -# napoleon_use_rtype = False - copybutton_prompt_is_regexp = True copybutton_prompt_text = ( r">>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: " ) -autodoc_default_options = { - "show-inheritance": True, - "undoc-members": True, - "special-members": True, - "private-members": True, - "exclude-members": "__annotations__, __module__, __repr__, _pybind11_conduit_v1_", -} -suppress_warnings = [ - "autosummary.import_cycle", -] +def process_docstring(app, obj_type, name, obj, options, lines): # noqa: ANN001, ANN201, PLR0913 + _ = app, options + if obj_type == "class": + items = inspect.getmembers(obj, lambda x: isinstance(x, enum.Enum)) + if len(items) > 0: + items = sorted(items, key=lambda x: x[1]) + lines.append(".. rubric:: Attributes") + lines.append("") + for member_name, member in items: + lines.append(f".. autodata:: {name}.{member_name}") + lines.append(f" :annotation: = {member.value}") + lines.append("") + + items = inspect.getmembers(obj, lambda x: isinstance(x, property)) + if len(items) > 0: + lines.append(".. rubric:: Properties") + lines.append("") + for member_name, _ in items: + lines.append(f".. autoattribute:: {member_name}") + lines.append("") + + +def skip_member(app, obj_type, name, obj, skip, options): # noqa: ANN001, ANN201, PLR0913 + _ = app, name, skip, options + match obj_type: + case "class": + if isinstance(obj, enum.Enum) or not callable(obj): + # Skip enum members and class attributes / properties. + return True + return None + + +def setup(app): # noqa: ANN001, ANN201 + app.connect("autodoc-process-docstring", process_docstring) + app.connect("autodoc-skip-member", skip_member) diff --git a/docs/index.md b/docs/index.md index b29a315..7b60624 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,10 +9,10 @@ [pugixml](http://pugixml.org/) is a light-weight C++ XML processing library. It features: -- DOM-like interface with rich traversal/modification capabilities -- [Extremely fast](https://pugixml.org/benchmark.html) non-validating XML parser which constructs the DOM tree from an XML file/buffer -- XPath 1.0 implementation for complex data-driven tree queries -- Full Unicode support with Unicode interface variants and automatic encoding conversions +> - DOM-like interface with rich traversal/modification capabilities +> - [Extremely fast](https://pugixml.org/benchmark.html) non-validating XML parser which constructs the DOM tree from an XML file/buffer +> - XPath 1.0 implementation for complex data-driven tree queries +> - Full Unicode support with Unicode interface variants and automatic encoding conversions For more information, see pugixml's documentation. @@ -27,11 +27,7 @@ maxdepth: 2 --- limits install -summary +reference changelog +Index ``` - -## Indices and tables - -- {ref}`genindex` -- {ref}`search` diff --git a/docs/install.md b/docs/install.md index 88e9bff..aaf5480 100644 --- a/docs/install.md +++ b/docs/install.md @@ -9,7 +9,7 @@ pip install pugixml ## Installing a package from source - Requirements: - - C++17 compatible compiler (see [supported compilers](https://github.com/pybind/pybind11#supported-compilers)) + - C++17 compatible compiler (see [supported compilers](https://github.com/pybind/pybind11#supported-platforms--compilers)) - [CMake](https://cmake.org/) ≥ 3.15 - Installing a package from PyPI: diff --git a/docs/pugi.ENCODING.rst b/docs/pugi.ENCODING.rst new file mode 100644 index 0000000..6be67d3 --- /dev/null +++ b/docs/pugi.ENCODING.rst @@ -0,0 +1,58 @@ +Encodings +========= + +.. currentmodule:: pugixml.pugi + +These flags determine the encoding of input/output data for XML document. + +.. seealso:: + + :class:`XMLEncoding` + :meth:`XMLDocument.load_buffer` + :meth:`XMLDocument.load_file` + :meth:`XMLDocument.save` + :meth:`XMLDocument.save_file` + :meth:`XMLNode.append_buffer` + :meth:`XMLNode.print` + +.. rubric:: Attributes + +.. autoattribute:: pugixml.pugi.ENCODING_AUTO + + Auto-detect input encoding using BOM or ‘<’ / ‘’ + +.. autoattribute:: pugixml.pugi.NODE_COMMENT + + Comment tag, i.e. ‘’ + +.. autoattribute:: pugixml.pugi.NODE_DECLARATION + + Document declaration, i.e. ‘’ + +.. autoattribute:: pugixml.pugi.NODE_DOCTYPE + + Document type declaration, i.e. ‘’ + +.. autoattribute:: pugixml.pugi.NODE_DOCUMENT + + A document tree’s absolute root. + +.. autoattribute:: pugixml.pugi.NODE_ELEMENT + + Element tag, i.e. ‘’ + +.. autoattribute:: pugixml.pugi.NODE_NULL + + Empty (null) node handle. + +.. autoattribute:: pugixml.pugi.NODE_PCDATA + + Plain character data, i.e. ‘text’ + +.. autoattribute:: pugixml.pugi.NODE_PI + + Processing instruction, i.e. ‘’ diff --git a/docs/pugi.PARSE.rst b/docs/pugi.PARSE.rst new file mode 100644 index 0000000..a67d4f1 --- /dev/null +++ b/docs/pugi.PARSE.rst @@ -0,0 +1,109 @@ +Parsing Options +=============== + +.. currentmodule:: pugixml.pugi + +These flags control the contents of the resulting tree for all loading functions. + +.. note:: + + This is a bitmask that customizes the parsing process: + to enable a flag, use ``mask | flag``; to disable a flag, use ``mask & ~flag``. + +.. seealso:: + + :meth:`XMLDocument.load_buffer` + :meth:`XMLDocument.load_file` + :meth:`XMLDocument.load_string` + :meth:`XMLNode.append_buffer` + +.. rubric:: Attributes + +.. autoattribute:: pugixml.pugi.PARSE_CDATA + + This flag determines if CDATA sections (:attr:`NODE_CDATA`) are added to the DOM tree. This flag is on by default. + +.. autoattribute:: pugixml.pugi.PARSE_COMMENTS + + This flag determines if comments (:attr:`NODE_COMMENT`) are added to the DOM tree. This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_DECLARATION + + This flag determines if document declaration (:attr:`NODE_DECLARATION`) is added to the DOM tree. + This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_DEFAULT + + The default parsing mode. + Elements, PCDATA and CDATA sections are added to the DOM tree, character/reference entities are expanded, + End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. + +.. autoattribute:: pugixml.pugi.PARSE_DOCTYPE + + This flag determines if document type declaration (:attr:`NODE_DOCTYPE`) is added to the DOM tree. This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_EMBED_PCDATA + + This flag determines if plain character data is be stored in the parent element's value. + This significantly changes the structure of the document; + this flag is only recommended for parsing documents with many PCDATA nodes in memory-constrained environments. + This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_EOL + + This flag determines if EOL characters are normalized (converted to #xA) during parsing. This flag is on by default. + +.. autoattribute:: pugixml.pugi.PARSE_ESCAPES + + This flag determines if character and entity references are expanded during parsing. This flag is on by default. + +.. autoattribute:: pugixml.pugi.PARSE_FRAGMENT + + This flag determines if plain character data that does not have a parent node is added to the DOM tree, + and if an empty document is a valid document. This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_FULL + + The full parsing mode. + Nodes of all types are added to the DOM tree, character/reference entities are expanded, + End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. + +.. autoattribute:: pugixml.pugi.PARSE_MERGE_PCDATA + + This flag determines whether determines whether the the two PCDATA should be merged or not, if no intermediatory data are parsed in the document. + This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_MINIMAL + + Minimal parsing mode (equivalent to turning all other flags off). + Only elements and PCDATA sections are added to the DOM tree, no text conversions are performed. + +.. autoattribute:: pugixml.pugi.PARSE_PI + + This flag determines if processing instructions (:attr:`NODE_PI`) are added to the DOM tree. This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_TRIM_PCDATA + + This flag determines if leading and trailing whitespace is to be removed from plain character data. + This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_WCONV_ATTRIBUTE + + This flag determines if attribute values are normalized using CDATA normalization rules during parsing. + This flag is on by default. + +.. autoattribute:: pugixml.pugi.PARSE_WNORM_ATTRIBUTE + + This flag determines if attribute values are normalized using NMTOKENS normalization rules during parsing. + This flag is off by default. + +.. autoattribute:: pugixml.pugi.PARSE_WS_PCDATA + + This flag determines if plain character data (:attr:`NODE_PCDATA`) that consist only of whitespace are added to the DOM tree. + This flag is off by default; turning it on usually results in slower parsing and more memory consumption. + +.. autoattribute:: pugixml.pugi.PARSE_WS_PCDATA_SINGLE + + This flag determines if plain character data (:attr:`NODE_PCDATA`) that is the only child of the parent node and that consists only + of whitespace is added to the DOM tree. + This flag is off by default; turning it on may result in slower parsing and more memory consumption. diff --git a/docs/pugi.STATUS.rst b/docs/pugi.STATUS.rst new file mode 100644 index 0000000..3a6aa57 --- /dev/null +++ b/docs/pugi.STATUS.rst @@ -0,0 +1,82 @@ +Parsing Status +============== + +.. currentmodule:: pugixml.pugi + +Parsing status, returned as part of :class:`XMLParseResult` object. + +.. seealso:: + + :class:`XMLParseStatus` + +.. rubric:: Attributes + +.. autoattribute:: pugixml.pugi.STATUS_APPEND_INVALID_ROOT + + Unable to append nodes since root type is not :attr:`NODE_ELEMENT` or :attr:`NODE_DOCUMENT` + (exclusive to :meth:`XMLNode.append_buffer`). + +.. autoattribute:: pugixml.pugi.STATUS_BAD_ATTRIBUTE + + Parsing error occurred while parsing element attribute. + +.. autoattribute:: pugixml.pugi.STATUS_BAD_CDATA + + Parsing error occurred while parsing CDATA section. + +.. autoattribute:: pugixml.pugi.STATUS_BAD_COMMENT + + Parsing error occurred while parsing comment. + +.. autoattribute:: pugixml.pugi.STATUS_BAD_DOCTYPE + + Parsing error occurred while parsing document type declaration. + +.. autoattribute:: pugixml.pugi.STATUS_BAD_END_ELEMENT + + Parsing error occurred while parsing end element tag. + +.. autoattribute:: pugixml.pugi.STATUS_BAD_PCDATA + + Parsing error occurred while parsing PCDATA section. + +.. autoattribute:: pugixml.pugi.STATUS_BAD_PI + + Parsing error occurred while parsing document declaration/processing instruction. + +.. autoattribute:: pugixml.pugi.STATUS_BAD_START_ELEMENT + + Parsing error occurred while parsing start element tag. + +.. autoattribute:: pugixml.pugi.STATUS_END_ELEMENT_MISMATCH + + There was a mismatch of start-end tags + (closing tag had incorrect name, some tag was not closed or there was an excessive closing tag). + +.. autoattribute:: pugixml.pugi.STATUS_FILE_NOT_FOUND + + File was not found during :meth:`XMLDocument.load_file`. + +.. autoattribute:: pugixml.pugi.STATUS_INTERNAL_ERROR + + Internal error occurred. + +.. autoattribute:: pugixml.pugi.STATUS_IO_ERROR + + Error reading from file/stream. + +.. autoattribute:: pugixml.pugi.STATUS_NO_DOCUMENT_ELEMENT + + Parsing resulted in a document without element nodes. + +.. autoattribute:: pugixml.pugi.STATUS_OK + + No error. + +.. autoattribute:: pugixml.pugi.STATUS_OUT_OF_MEMORY + + Could not allocate memory. + +.. autoattribute:: pugixml.pugi.STATUS_UNRECOGNIZED_TAG + + Parser could not determine tag type. diff --git a/docs/pugi.XPATH_TYPE.rst b/docs/pugi.XPATH_TYPE.rst new file mode 100644 index 0000000..b16cf31 --- /dev/null +++ b/docs/pugi.XPATH_TYPE.rst @@ -0,0 +1,30 @@ +XPath Query Return Type +======================= + +.. currentmodule:: pugixml.pugi + +.. seealso:: + + :class:`XPathValueType` + +.. rubric:: Attributes + +.. autoattribute:: pugixml.pugi.XPATH_TYPE_BOOLEAN + + Boolean. + +.. autoattribute:: pugixml.pugi.XPATH_TYPE_NODE_SET + + Node set (:class:`XPathNodeSet`). + +.. autoattribute:: pugixml.pugi.XPATH_TYPE_NONE + + Unknown type (query failed to compile). + +.. autoattribute:: pugixml.pugi.XPATH_TYPE_NUMBER + + Number. + +.. autoattribute:: pugixml.pugi.XPATH_TYPE_STRING + + String. diff --git a/docs/pugi.limits.rst b/docs/pugi.limits.rst new file mode 100644 index 0000000..35d3082 --- /dev/null +++ b/docs/pugi.limits.rst @@ -0,0 +1,44 @@ +Numeric Limits +============== + +.. rubric:: Attributes + +.. autoattribute:: pugixml.pugi.limits.DBL_MAX + + Maximum value of ``double`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.DBL_MIN + + Minimum value of ``double`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.FLT_MAX + + Maximum value of ``float`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.FLT_MIN + + Minimum value of ``float`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.INT_MAX + + Maximum value of ``int`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.INT_MIN + + Minimum value of ``int`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.LLONG_MAX + + Maximum value of ``long long`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.LLONG_MIN + + Minimum value of ``long long`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.UINT_MAX + + Maximum value of ``unsigned int`` type in C/C++. + +.. autoattribute:: pugixml.pugi.limits.ULLONG_MAX + + Maximum value of ``unsigned long long`` type in C/C++. diff --git a/docs/pugi.rst b/docs/pugi.rst new file mode 100644 index 0000000..3248406 --- /dev/null +++ b/docs/pugi.rst @@ -0,0 +1,36 @@ +pugixml.pugi +============ + +.. currentmodule:: pugixml + +.. rubric:: Classes + +.. autosummary:: + :toctree: generated + + pugi.BytesWriter + pugi.FileWriter + pugi.PrintWriter + pugi.StringWriter + pugi.XMLAttribute + pugi.XMLAttributeIterator + pugi.XMLAttributeStruct + pugi.XMLDocument + pugi.XMLEncoding + pugi.XMLNamedNodeIterator + pugi.XMLNode + pugi.XMLNodeIterator + pugi.XMLNodeStruct + pugi.XMLNodeType + pugi.XMLParseResult + pugi.XMLParseStatus + pugi.XMLText + pugi.XMLTreeWalker + pugi.XMLWriter + pugi.XPathNode + pugi.XPathNodeSet + pugi.XPathParseResult + pugi.XPathQuery + pugi.XPathValueType + pugi.XPathVariable + pugi.XPathVariableSet diff --git a/docs/reference.rst b/docs/reference.rst index 82176ef..c6a90ff 100644 --- a/docs/reference.rst +++ b/docs/reference.rst @@ -1,93 +1,15 @@ -pugixml.pugi -============ - -.. rubric:: Classes - -.. autoclass:: pugixml.pugi.BytesWriter - :members: - -.. autoclass:: pugixml.pugi.FileWriter - :members: - -.. autoclass:: pugixml.pugi.PrintWriter - :members: - -.. autoclass:: pugixml.pugi.StringWriter - :members: - -.. autoclass:: pugixml.pugi.XMLAttribute - :members: - -.. autoclass:: pugixml.pugi.XMLAttributeIterator - :members: - :exclude-members: +__init__ - -.. autoclass:: pugixml.pugi.XMLAttributeStruct - :members: - :exclude-members: +__hash__, __init__ - -.. autoclass:: pugixml.pugi.XMLDocument - :members: - -.. autoclass:: pugixml.pugi.XMLEncoding - :no-members: - -.. autoclass:: pugixml.pugi.XMLNamedNodeIterator - :members: - :exclude-members: +__init__ - -.. autoclass:: pugixml.pugi.XMLNode - :members: - -.. autoclass:: pugixml.pugi.XMLNodeIterator - :members: - :exclude-members: +__init__ - -.. autoclass:: pugixml.pugi.XMLNodeStruct - :members: - :exclude-members: +__hash__, __init__ - -.. autoclass:: pugixml.pugi.XMLNodeType - :no-members: - -.. autoclass:: pugixml.pugi.XMLParseResult - :members: - -.. autoclass:: pugixml.pugi.XMLParseStatus - :no-members: - -.. autoclass:: pugixml.pugi.XMLText - :members: - -.. autoclass:: pugixml.pugi.XMLTreeWalker - :members: - -.. autoclass:: pugixml.pugi.XMLWriter - :members: - -.. autoclass:: pugixml.pugi.XPathNode - :members: - :exclude-members: +__hash__ - -.. autoclass:: pugixml.pugi.XPathNodeSet - :members: - :exclude-members: +Type - -.. autoclass:: pugixml.pugi.XPathNodeSet.Type - :no-members: - -.. autoclass:: pugixml.pugi.XPathParseResult - :members: - -.. autoclass:: pugixml.pugi.XPathQuery - :members: - -.. autoclass:: pugixml.pugi.XPathValueType - :no-members: - -.. autoclass:: pugixml.pugi.XPathVariable - :members: - :exclude-members: +__init__ - -.. autoclass:: pugixml.pugi.XPathVariableSet - :members: +API Reference +============= + +.. toctree:: + :maxdepth: 2 + + pugi + pugi.limits + pugi.ENCODING + pugi.FORMAT + pugi.NODE + pugi.PARSE + pugi.STATUS + pugi.XPATH_TYPE + pugi.MISC diff --git a/docs/summary.rst b/docs/summary.rst deleted file mode 100644 index 43fe3b4..0000000 --- a/docs/summary.rst +++ /dev/null @@ -1,73 +0,0 @@ -API Reference -============= - -Attributes ----------- - -.. toctree:: - attributes - -Classes -------- - -.. autosummary:: - :toctree: generated/ - :template: class.rst - - pugixml.pugi.BytesWriter - pugixml.pugi.FileWriter - pugixml.pugi.PrintWriter - pugixml.pugi.StringWriter - pugixml.pugi.XMLAttribute - pugixml.pugi.XMLAttributeIterator - pugixml.pugi.XMLAttributeStruct - pugixml.pugi.XMLDocument - - :template: enum.rst - - pugixml.pugi.XMLEncoding - - :template: class.rst - - pugixml.pugi.XMLNamedNodeIterator - pugixml.pugi.XMLNode - pugixml.pugi.XMLNodeIterator - pugixml.pugi.XMLNodeStruct - - :template: enum.rst - - pugixml.pugi.XMLNodeType - - :template: class.rst - - pugixml.pugi.XMLParseResult - - :template: enum.rst - - pugixml.pugi.XMLParseStatus - - :template: class.rst - - pugixml.pugi.XMLText - pugixml.pugi.XMLTreeWalker - pugixml.pugi.XMLWriter - pugixml.pugi.XPathNode - pugixml.pugi.XPathNodeSet - - :template: inner-enum.rst - - pugixml.pugi.XPathNodeSet.Type - - :template: class.rst - - pugixml.pugi.XPathParseResult - pugixml.pugi.XPathQuery - - :template: enum.rst - - pugixml.pugi.XPathValueType - - :template: class.rst - - pugixml.pugi.XPathVariable - pugixml.pugi.XPathVariableSet diff --git a/pyproject.toml b/pyproject.toml index 43db985..a81652d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,16 +1,12 @@ -[build-system] -requires = ["scikit-build-core>=0.10"] -build-backend = "scikit_build_core.build" - [project] name = "pugixml" version = "0.8.0.dev2" -requires-python = ">=3.10" description = "Light-weight, simple and fast XML parser with XPath support" -authors = [{ name = "Tetsuya Miura", email = "miute.dev@gmail.com" }] readme = { file = "README.md", content-type = "text/markdown" } +requires-python = ">=3.10" license = "MIT" -keywords = ["dom", "xml", "xpath", "xml-parser"] +authors = [{ name = "Tetsuya Miura", email = "miute.dev@gmail.com" }] +keywords = ["dom", "xml", "xml-parser", "xpath"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", @@ -30,48 +26,29 @@ classifiers = [ dependencies = [] [project.urls] -pugixml = "https://pugixml.org/docs/quickstart.html" -Documentation = "https://miute.github.io/pugixml-python/" Changelog = "https://miute.github.io/pugixml-python/changelog.html" +Documentation = "https://miute.github.io/pugixml-python/" Source = "https://github.com/miute/pugixml-python" +pugixml = "https://pugixml.org/docs/quickstart.html" [dependency-groups] dev = ["pytest>=8.3.5"] docs = [ - "furo>=2024.8.6", "myst-parser>=3.0.1", "sphinx>=7.4.7", "sphinx-copybutton>=0.5.2", + "sphinx-rtd-theme>=3.1.0", ] -[tool.scikit-build] -wheel.expand-macos-universal-tags = true -wheel.license-files = ["LICENSE"] -minimum-version = "build-system.requires" -sdist.exclude = ["*"] -sdist.include = [ - "/CHANGELOG*", - "/CMakeLists.txt", - "/LICENSE*", - "/pyproject.toml", - "/README*", - "/src/pugixml/**/*.py", - "/src/*.cpp", - "/src/third_party/pugixml/scripts/", - "/src/third_party/pugixml/src/", - "/src/third_party/pugixml/CMakeLists.txt", - "/src/third_party/pugixml/LICEN[CS]E*", - "/src/third_party/pugixml/README*", - "/src/third_party/pugixml/readme*", - "/src/third_party/pybind11/include/", - "/src/third_party/pybind11/tools/", - "/src/third_party/pybind11/CMakeLists.txt", - "/src/third_party/pybind11/LICEN[CS]E*", - "/src/third_party/pybind11/README*", -] +[build-system] +requires = ["scikit-build-core>=0.10"] +build-backend = "scikit_build_core.build" -[tool.uv] -package = false +[tool.mypy] +warn_unused_configs = true +warn_return_any = true +check_untyped_defs = true +exclude = ["^src/third_party"] [tool.pytest.ini_options] addopts = ["--tb=short", "-ra", "--color=yes"] @@ -111,7 +88,7 @@ extend-select = [ "UP", # pyupgrade (UP) "YTT", # flake8-2020 (YTT) ] -extend-ignore = [ +ignore = [ "PLR0915", # Too many statements ({statements} > {max_statements}) ] @@ -126,8 +103,31 @@ allow-magic-value-types = ["str", "bytes", "float", "int"] [tool.ruff.format] line-ending = "lf" -[tool.mypy] -warn_unused_configs = true -warn_return_any = true -check_untyped_defs = true -exclude = ["^src/third_party"] +[tool.scikit-build] +wheel.expand-macos-universal-tags = true +wheel.license-files = ["LICENSE"] +minimum-version = "build-system.requires" +sdist.exclude = ["*"] +sdist.include = [ + "/CHANGELOG*", + "/CMakeLists.txt", + "/LICENSE*", + "/pyproject.toml", + "/README*", + "/src/pugixml/**/*.py", + "/src/*.cpp", + "/src/third_party/pugixml/scripts/", + "/src/third_party/pugixml/src/", + "/src/third_party/pugixml/CMakeLists.txt", + "/src/third_party/pugixml/LICEN[CS]E*", + "/src/third_party/pugixml/README*", + "/src/third_party/pugixml/readme*", + "/src/third_party/pybind11/include/", + "/src/third_party/pybind11/tools/", + "/src/third_party/pybind11/CMakeLists.txt", + "/src/third_party/pybind11/LICEN[CS]E*", + "/src/third_party/pybind11/README*", +] + +[tool.uv] +package = false diff --git a/tox.ini b/tox.ini index 9f694ef..f45ae6d 100644 --- a/tox.ini +++ b/tox.ini @@ -44,13 +44,9 @@ skip_install = true pass_env = * deps = - sphinx - sphinx-copybutton - myst-parser - furo change_dir = {tox_root}/docs commands = - sphinx-build -M {posargs:html} . _build + uv run --group=docs --active --link-mode=copy sphinx-build -M {posargs:html} . _build [testenv:install] skip_install = true diff --git a/uv.lock b/uv.lock index 39535a8..98b3fbb 100644 --- a/uv.lock +++ b/uv.lock @@ -7,18 +7,6 @@ resolution-markers = [ "python_full_version < '3.11'", ] -[[package]] -name = "accessible-pygments" -version = "0.0.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899, upload-time = "2024-05-10T11:23:10.216Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903, upload-time = "2024-05-10T11:23:08.421Z" }, -] - [[package]] name = "alabaster" version = "1.0.0" @@ -37,19 +25,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, ] -[[package]] -name = "beautifulsoup4" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, -] - [[package]] name = "certifi" version = "2026.6.17" @@ -203,31 +178,13 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] -[[package]] -name = "furo" -version = "2025.12.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "accessible-pygments" }, - { name = "beautifulsoup4" }, - { name = "pygments" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "sphinx-basic-ng" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ec/20/5f5ad4da6a5a27c80f2ed2ee9aee3f9e36c66e56e21c00fde467b2f8f88f/furo-2025.12.19.tar.gz", hash = "sha256:188d1f942037d8b37cd3985b955839fea62baa1730087dc29d157677c857e2a7", size = 1661473, upload-time = "2025-12-19T17:34:40.889Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl", hash = "sha256:bb0ead5309f9500130665a26bee87693c41ce4dbdff864dbfb6b0dae4673d24f", size = 339262, upload-time = "2025-12-19T17:34:38.905Z" }, -] - [[package]] name = "idna" version = "3.18" @@ -275,7 +232,7 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "mdurl", marker = "python_full_version < '3.11'" }, + { name = "mdurl" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } wheels = [ @@ -291,7 +248,7 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "mdurl", marker = "python_full_version >= '3.11'" }, + { name = "mdurl" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ @@ -413,12 +370,12 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "jinja2", marker = "python_full_version < '3.11'" }, - { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "mdit-py-plugins", marker = "python_full_version < '3.11'" }, - { name = "pyyaml", marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" } }, + { name = "jinja2" }, + { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" } }, + { name = "mdit-py-plugins" }, + { name = "pyyaml" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985, upload-time = "2025-02-12T10:53:03.833Z" } wheels = [ @@ -434,12 +391,12 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "jinja2", marker = "python_full_version >= '3.11'" }, - { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "mdit-py-plugins", marker = "python_full_version >= '3.11'" }, - { name = "pyyaml", marker = "python_full_version >= '3.11'" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" } }, + { name = "jinja2" }, + { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" } }, + { name = "mdit-py-plugins" }, + { name = "pyyaml" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/21/dc/603751677fff302f34396e206b610f556a59d7fe58b9a2145f54e96b48e8/myst_parser-5.1.0.tar.gz", hash = "sha256:ab69322dc6719dcc7f296479dbb70181b66df6ed315064f92dbc85c0e1bf2f02", size = 101182, upload-time = "2026-05-13T09:38:19.361Z" } @@ -475,13 +432,13 @@ dev = [ { name = "pytest" }, ] docs = [ - { name = "furo" }, { name = "myst-parser", version = "4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "myst-parser", version = "5.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "sphinx-copybutton" }, + { name = "sphinx-rtd-theme" }, ] [package.metadata] @@ -489,10 +446,10 @@ docs = [ [package.metadata.requires-dev] dev = [{ name = "pytest", specifier = ">=8.3.5" }] docs = [ - { name = "furo", specifier = ">=2024.8.6" }, { name = "myst-parser", specifier = ">=3.0.1" }, { name = "sphinx", specifier = ">=7.4.7" }, { name = "sphinx-copybutton", specifier = ">=0.5.2" }, + { name = "sphinx-rtd-theme", specifier = ">=3.1.0" }, ] [[package]] @@ -619,15 +576,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl", hash = "sha256:7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752", size = 104164, upload-time = "2026-06-03T00:56:38.614Z" }, ] -[[package]] -name = "soupsieve" -version = "2.8.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size = 121110, upload-time = "2026-05-24T13:55:57.154Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size = 37304, upload-time = "2026-05-24T13:55:55.406Z" }, -] - [[package]] name = "sphinx" version = "8.1.3" @@ -636,23 +584,23 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version < '3.11'" }, - { name = "babel", marker = "python_full_version < '3.11'" }, - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "imagesize", marker = "python_full_version < '3.11'" }, - { name = "jinja2", marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "requests", marker = "python_full_version < '3.11'" }, - { name = "snowballstemmer", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" } }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, + { name = "tomli" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ @@ -667,23 +615,23 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version == '3.11.*'" }, - { name = "babel", marker = "python_full_version == '3.11.*'" }, - { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "imagesize", marker = "python_full_version == '3.11.*'" }, - { name = "jinja2", marker = "python_full_version == '3.11.*'" }, - { name = "packaging", marker = "python_full_version == '3.11.*'" }, - { name = "pygments", marker = "python_full_version == '3.11.*'" }, - { name = "requests", marker = "python_full_version == '3.11.*'" }, - { name = "roman-numerals", marker = "python_full_version == '3.11.*'" }, - { name = "snowballstemmer", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.11.*'" }, + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" } }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "roman-numerals" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" } wheels = [ @@ -698,23 +646,23 @@ resolution-markers = [ "python_full_version >= '3.12'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version >= '3.12'" }, - { name = "babel", marker = "python_full_version >= '3.12'" }, - { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "imagesize", marker = "python_full_version >= '3.12'" }, - { name = "jinja2", marker = "python_full_version >= '3.12'" }, - { name = "packaging", marker = "python_full_version >= '3.12'" }, - { name = "pygments", marker = "python_full_version >= '3.12'" }, - { name = "requests", marker = "python_full_version >= '3.12'" }, - { name = "roman-numerals", marker = "python_full_version >= '3.12'" }, - { name = "snowballstemmer", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" }, + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" } }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "roman-numerals" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" } wheels = [ @@ -722,31 +670,34 @@ wheels = [ ] [[package]] -name = "sphinx-basic-ng" -version = "1.0.0b2" +name = "sphinx-copybutton" +version = "0.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/0b/a866924ded68efec7a1759587a4e478aec7559d8165fac8b2ad1c0e774d6/sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", size = 20736, upload-time = "2023-07-08T18:40:54.166Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b", size = 22496, upload-time = "2023-07-08T18:40:52.659Z" }, + { url = "https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e", size = 13343, upload-time = "2023-04-14T08:10:20.844Z" }, ] [[package]] -name = "sphinx-copybutton" -version = "0.5.2" +name = "sphinx-rtd-theme" +version = "3.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-jquery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/68/a1bfbf38c0f7bccc9b10bbf76b94606f64acb1552ae394f0b8285bfaea25/sphinx_rtd_theme-3.1.0.tar.gz", hash = "sha256:b44276f2c276e909239a4f6c955aa667aaafeb78597923b1c60babc76db78e4c", size = 7620915, upload-time = "2026-01-12T16:03:31.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e", size = 13343, upload-time = "2023-04-14T08:10:20.844Z" }, + { url = "https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl", hash = "sha256:1785824ae8e6632060490f67cf3a72d404a85d2d9fc26bce3619944de5682b89", size = 7655617, upload-time = "2026-01-12T16:03:28.101Z" }, ] [[package]] @@ -776,6 +727,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, ] +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331, upload-time = "2023-03-14T15:01:01.944Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104, upload-time = "2023-03-14T15:01:00.356Z" }, +] + [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1"