diff --git a/.btd.yml b/.btd.yml
new file mode 100644
index 00000000..296c029b
--- /dev/null
+++ b/.btd.yml
@@ -0,0 +1,9 @@
+input: doc
+output: _build
+requirements: requirements.txt
+target: gh-pages
+formats: [ html ]
+images:
+ base: btdi/sphinx:pytooling
+ latex: btdi/latex
+theme: https://codeload.GitHub.com/buildthedocs/sphinx.theme/tar.gz/v1
diff --git a/dist/requirements.txt b/dist/requirements.txt
new file mode 100644
index 00000000..9fd7921c
--- /dev/null
+++ b/dist/requirements.txt
@@ -0,0 +1,2 @@
+wheel>=0.38.1
+twine >= 4.0.2
diff --git a/doc/Dependency.rst b/doc/Dependency.rst
new file mode 100644
index 00000000..e5d867d2
--- /dev/null
+++ b/doc/Dependency.rst
@@ -0,0 +1,179 @@
+.. _DEP:
+
+Dependency
+##########
+
+.. |img-ProjectModel-lib-status| image:: https://img.shields.io/librariesio/release/pypi/pyVersioning
+ :alt: Libraries.io status for latest release
+ :height: 22
+ :target: https://libraries.io/github/Paebbels/pyVersioning
+.. |img-ProjectModel-req-status| image:: https://img.shields.io/requires/github/Paebbels/pyVersioning
+ :alt: Requires.io
+ :height: 22
+ :target: https://requires.io/github/Paebbels/pyVersioning/requirements/?branch=main
+
++------------------------------------------+------------------------------------------+
+| `Libraries.io `_ | `Requires.io `_ |
++==========================================+==========================================+
+| |img-ProjectModel-lib-status| | |img-ProjectModel-req-status| |
++------------------------------------------+------------------------------------------+
+
+
+.. _DEP/package:
+
+pyVersioning Package
+********************
+
++-------------------------------------------------------------------------------+-------------+------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **Package** | **Version** | **License** | **Dependencies** |
++===============================================================================+=============+======================================================================================================+===========================================================================================================================================================+
+| `pyTooling `__ | ≥5.0.0 | `Apache License, 2.0 `__ | *None* |
++-------------------------------------------------------------------------------+-------------+------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
+
+.. TODO:: document the dependency to
+
+ * Sphinx
+ * docstr_coverage
+ * interrogate
+
+
+.. _DEP/testing:
+
+Unit Testing / Coverage / Type Checking (Optional)
+**************************************************
+
+Additional Python packages needed for testing, code coverage collection and static type checking. These packages are
+only needed for developers or on a CI server, thus sub-dependencies are not evaluated further.
+
+
+.. rubric:: Manually Installing Test Requirements
+
+Use the :file:`tests/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively install
+the mandatory dependencies too.
+
+.. code-block:: shell
+
+ pip3 install -U -r tests/requirements.txt
+
+
+.. rubric:: Dependency List
+
++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
+| **Package** | **Version** | **License** | **Dependencies** |
++=====================================================================+=============+========================================================================================+======================+
+| `pytest `__ | ≥7.4.0 | `MIT `__ | *Not yet evaluated.* |
++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
+| `pytest-cov `__ | ≥4.1.0 | `MIT `__ | *Not yet evaluated.* |
++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
+| `Coverage `__ | ≥7.3 | `Apache License, 2.0 `__ | *Not yet evaluated.* |
++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
+| `mypy `__ | ≥1.5.0 | `MIT `__ | *Not yet evaluated.* |
++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
+| `typing-extensions `__ | ≥4.7.1 | `PSF-2.0 `__ | *Not yet evaluated.* |
++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
+| `lxml `__ | ≥4.6.4 | `BSD 3-Clause `__ | *Not yet evaluated.* |
++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
+
+
+.. _DEP/documentation:
+
+Sphinx Documentation (Optional)
+*******************************
+
+Additional Python packages needed for documentation generation. These packages are only needed for developers or on a
+CI server, thus sub-dependencies are not evaluated further.
+
+
+.. rubric:: Manually Installing Documentation Requirements
+
+Use the :file:`doc/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively install
+the mandatory dependencies too.
+
+.. code-block:: shell
+
+ pip3 install -U -r doc/requirements.txt
+
+
+.. rubric:: Dependency List
+
++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **Package** | **Version** | **License** | **Dependencies** |
++=================================================================================================+==============+==========================================================================================================+======================================================================================================================================================+
+| `pyTooling `__ | ≥5.0.0 | `Apache License, 2.0 `__ | *None* |
++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| `Sphinx `__ | ≥5.3.0 | `BSD 3-Clause `__ | *Not yet evaluated.* |
++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| `sphinx_btd_theme `__ | ≥0.5.2 | `MIT `__ | *Not yet evaluated.* |
++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| !! `sphinx_fontawesome `__ | ≥0.0.6 | `GPL 2.0 `__ | *Not yet evaluated.* |
++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| `sphinx_autodoc_typehints `__ | ≥1.24.0 | `MIT `__ | *Not yet evaluated.* |
++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+
+.. TODO:: document the usage of
+
+ * autoapi
+ * sphinxcontrib-mermaid
+ * theme v2?
+ * sphinx-design
+
+
+.. _DEP/packaging:
+
+Packaging (Optional)
+********************
+
+Additional Python packages needed for installation package generation. These packages are only needed for developers or
+on a CI server, thus sub-dependencies are not evaluated further.
+
+
+.. rubric:: Manually Installing Packaging Requirements
+
+Use the :file:`build/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively
+install the mandatory dependencies too.
+
+.. code-block:: shell
+
+ pip3 install -U -r build/requirements.txt
+
+
+.. rubric:: Dependency List
+
++----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **Package** | **Version** | **License** | **Dependencies** |
++============================================================================+==============+==========================================================================================================+======================================================================================================================================================+
+| `pyTooling `__ | ≥5.0.0 | `Apache License, 2.0 `__ | *None* |
++----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| `wheel `__ | ≥0.38.1 | `MIT `__ | *Not yet evaluated.* |
++----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+
+
+.. _DEP/publishing:
+
+Publishing (CI-Server only)
+***************************
+
+Additional Python packages needed for publishing the generated installation package to e.g, PyPI or any equivalent
+services. These packages are only needed for maintainers or on a CI server, thus sub-dependencies are not evaluated
+further.
+
+
+.. rubric:: Manually Installing Publishing Requirements
+
+Use the :file:`dist/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively
+install the mandatory dependencies too.
+
+.. code-block:: shell
+
+ pip3 install -U -r dist/requirements.txt
+
+
+.. rubric:: Dependency List
+
++----------------------------------------------------------+--------------+-------------------------------------------------------------------------------------------+----------------------+
+| **Package** | **Version** | **License** | **Dependencies** |
++==========================================================+==============+===========================================================================================+======================+
+| `wheel `__ | ≥0.38.1 | `MIT `__ | *Not yet evaluated.* |
++----------------------------------------------------------+--------------+-------------------------------------------------------------------------------------------+----------------------+
+| `Twine `__ | any | `Apache License, 2.0 `__ | *Not yet evaluated.* |
++----------------------------------------------------------+--------------+-------------------------------------------------------------------------------------------+----------------------+
diff --git a/doc/DocCoverage.rst b/doc/DocCoverage.rst
new file mode 100644
index 00000000..a83cfc1d
--- /dev/null
+++ b/doc/DocCoverage.rst
@@ -0,0 +1,7 @@
+Documentation Coverage
+######################
+
+Documentation coverage generated by `docstr-coverage `__.
+
+.. doc-coverage::
+ :packageid: src
diff --git a/doc/Glossary.rst b/doc/Glossary.rst
new file mode 100644
index 00000000..ca1acba5
--- /dev/null
+++ b/doc/Glossary.rst
@@ -0,0 +1,19 @@
+Glossary
+########
+
+.. glossary::
+
+ Branch Coverage
+ tbd
+
+ Code Coverage
+ tbd
+
+ Documentation Coverage
+ tbd
+
+ Python doc-string
+ tbd
+
+ Statement Coverage
+ tbd
diff --git a/doc/Installation.rst b/doc/Installation.rst
new file mode 100644
index 00000000..d1f377a2
--- /dev/null
+++ b/doc/Installation.rst
@@ -0,0 +1,202 @@
+.. _INSTALL:
+
+Installation/Updates
+####################
+
+.. _INSTALL/pip:
+
+Using PIP to Install from PyPI
+******************************
+
+The following instruction are using PIP (Package Installer for Python) as a package manager and PyPI (Python Package
+Index) as a source of Python packages.
+
+Installing a Wheel Package from PyPI using PIP
+==============================================
+
+Users of pyTooling can select if the want to install a basic variant of pyTooling. See :ref:`DEP` for more
+details.
+
+.. tab-set::
+
+ .. tab-item:: Linux/MacOS
+ :sync: Linux
+
+ .. code-block:: bash
+
+ # Basic sphinx-reports package
+ pip3 install sphinx_reports
+
+ .. tab-item:: Windows
+ :sync: Windows
+
+ .. code-block:: powershell
+
+ # Basic sphinx-reports package
+ pip install sphinx_reports
+
+Developers can install further dependencies for documentation generation (``doc``) or running unit tests (``test``) or
+just all (``all``) dependencies.
+
+.. tab-set::
+
+ .. tab-item:: Linux/MacOS
+ :sync: Linux
+
+ .. tab-set::
+
+ .. tab-item:: With Documentation Dependencies
+ :sync: Doc
+
+ .. code-block:: bash
+
+ # Install with dependencies to generate documentation
+ pip3 install sphinx_reports[doc]
+
+ .. tab-item:: With Unit Testing Dependencies
+ :sync: Unit
+
+ .. code-block:: bash
+
+ # Install with dependencies to run unit tests
+ pip3 install sphinx_reports[test]
+
+ .. tab-item:: All Developer Dependencies
+ :sync: All
+
+ .. code-block:: bash
+
+ # Install with all developer dependencies
+ pip install sphinx_reports[all]
+
+ .. tab-item:: Windows
+ :sync: Windows
+
+ .. tab-set::
+
+ .. tab-item:: With Documentation Dependencies
+ :sync: Doc
+
+ .. code-block:: powershell
+
+ # Install with dependencies to generate documentation
+ pip install sphinx_reports[doc]
+
+ .. tab-item:: With Unit Testing Dependencies
+ :sync: Unit
+
+ .. code-block:: powershell
+
+ # Install with dependencies to run unit tests
+ pip install sphinx_reports[test]
+
+ .. tab-item:: All Developer Dependencies
+ :sync: All
+
+ .. code-block:: powershell
+
+ # Install with all developer dependencies
+ pip install sphinx_reports[all]
+
+
+Updating from PyPI using PIP
+============================
+
+.. tab-set::
+
+ .. tab-item:: Linux/MacOS
+ :sync: Linux
+
+ .. code-block:: bash
+
+ pip install -U sphinx_reports
+
+ .. tab-item:: Windows
+ :sync: Windows
+
+ .. code-block:: powershell
+
+ pip3 install -U sphinx_reports
+
+
+Uninstallation using PIP
+========================
+
+.. tab-set::
+
+ .. tab-item:: Linux/MacOS
+ :sync: Linux
+
+ .. code-block:: bash
+
+ pip uninstall sphinx_reports
+
+ .. tab-item:: Windows
+ :sync: Windows
+
+ .. code-block:: powershell
+
+ pip3 uninstall sphinx_reports
+
+
+.. _INSTALL/setup:
+
+Using ``setup.py`` (legacy)
+***************************
+
+See sections above on how to use PIP.
+
+Installation using ``setup.py``
+===============================
+
+.. code-block:: bash
+
+ setup.py install
+
+
+.. _INSTALL/building:
+
+Local Packaging and Installation via PIP
+****************************************
+
+For development and bug fixing it might be handy to create a local wheel package and also install it locally on the
+development machine. The following instructions will create a local wheel package (``*.whl``) and then use PIP to
+install it. As a user might have a sphinx-reports installation from PyPI, it's recommended to uninstall any previous
+sphinx-reports packages. (This step is also needed if installing an updated local wheel file with same version number. PIP
+will not detect a new version and thus not overwrite/reinstall the updated package contents.)
+
+Ensure :ref:`packaging requirements ` are installed.
+
+.. tab-set::
+
+ .. tab-item:: Linux/MacOS
+ :sync: Linux
+
+ .. code-block:: bash
+
+ cd
+
+ # Package the code in a wheel (*.whl)
+ python -m build --wheel
+
+ # Uninstall the old package
+ python -m pip uninstall -y sphinx_reports
+
+ # Install from wheel
+ python -m pip install ./dist/sphinx_reports-4.1.0-py3-none-any.whl
+
+ .. tab-item:: Windows
+ :sync: Windows
+
+ .. code-block:: powershell
+
+ cd
+
+ # Package the code in a wheel (*.whl)
+ py -m build --wheel
+
+ # Uninstall the old package
+ py -m pip uninstall -y sphinx_reports
+
+ # Install from wheel
+ py -m pip install .\dist\sphinx_reports-4.1.0-py3-none-any.whl
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 00000000..d4bb2cbb
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = .
+BUILDDIR = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/doc/TODO.rst b/doc/TODO.rst
new file mode 100644
index 00000000..3144da04
--- /dev/null
+++ b/doc/TODO.rst
@@ -0,0 +1,4 @@
+TODOs
+#####
+
+.. todolist::
diff --git a/doc/_static/css/override.css b/doc/_static/css/override.css
new file mode 100644
index 00000000..1f5974a0
--- /dev/null
+++ b/doc/_static/css/override.css
@@ -0,0 +1,125 @@
+/* theme overrides */
+.rst-content h1,
+.rst-content h2 {
+ margin-top: 24px;
+ margin-bottom: 6px;
+ text-decoration: underline;
+}
+
+.rst-content h3,
+.rst-content h4,
+.rst-content h5,
+.rst-content h6 {
+ margin-top: 12px;
+ margin-bottom: 6px;
+}
+
+.rst-content p {
+ margin-bottom: 6px
+}
+
+/* general overrides */
+html {
+ font-size: 15px;
+}
+
+footer {
+ font-size: 95%;
+ text-align: center
+}
+
+footer p {
+ margin-bottom: 0px /* 12px */;
+ font-size: 95%
+}
+
+section > p,
+.section p,
+.simple li {
+ text-align: justify
+}
+
+/* wyrm overrides */
+.wy-menu-vertical header,
+.wy-menu-vertical p.caption {
+ color: #9b9b9b /* #55a5d9 */;
+ padding: 0 0.809em /* 0 1.618em */;
+ margin: 6px 0 0 0 /* 12px 0 0 */;
+ border-top: 1px solid #9b9b9b;
+}
+
+.wy-side-nav-search {
+ margin-bottom: 0 /* .809em */;
+ background-color: #333333 /* #2980b9 */;
+ /* BTD: */
+ /*color: #fcfcfc*/
+}
+
+.wy-side-nav-search input[type=text] {
+ border-radius: 0px /* 50px */;
+}
+
+.wy-side-nav-search .wy-dropdown > a, .wy-side-nav-search > a {
+ /* BTD: */
+ /*color: #fcfcfc;*/
+ margin-bottom: 0.404em /* .809em */;
+}
+
+.wy-side-nav-search > div.version {
+ margin: 0 0 6px 0;
+ /* BTD: */
+ /*margin-top: -.4045em;*/
+}
+
+.wy-nav .wy-menu-vertical a:hover {
+ background-color: #333333 /* #2980b9 */;
+}
+
+.wy-nav-content {
+ max-width: 1600px /* 800px */ ;
+}
+
+.wy-nav-top {
+ background: #333333 /* #2980b9 */;
+}
+
+/* Sphinx Design */
+.sd-tab-set {
+ margin: 0
+}
+
+.sd-tab-set > label {
+ padding-top: .5em;
+ padding-right: 1em;
+ padding-bottom: .5em;
+ padding-left: 1em
+}
+
+.sd-container-fluid {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td {
+ background-color: unset;
+}
+
+.doccov-below100 {
+ background: rgba(0, 200, 82, .4);
+}
+.doccov-below90 {
+ background: rgba(0, 200, 82, .2);
+}
+.doccov-below80 {
+ background: rgba(255, 145, 0, .2);
+}
+.doccov-below50 {
+ background: rgba(255, 82, 82, .2);
+}
+.doccov-below30 {
+ background: rgba(101, 31, 255, .2);
+}
+
+.doccov-summary-row {
+ font-weight: bold;
+}
diff --git a/doc/_static/icon.png b/doc/_static/icon.png
new file mode 100644
index 00000000..79763da1
Binary files /dev/null and b/doc/_static/icon.png differ
diff --git a/doc/_static/logo.png b/doc/_static/logo.png
new file mode 100644
index 00000000..6c62cad2
Binary files /dev/null and b/doc/_static/logo.png differ
diff --git a/doc/_templates/autoapi/module.rst b/doc/_templates/autoapi/module.rst
new file mode 100644
index 00000000..4dded81f
--- /dev/null
+++ b/doc/_templates/autoapi/module.rst
@@ -0,0 +1,160 @@
+.. # Template modified by Patrick Lehmann
+ * removed automodule on top, because private members are activated for autodoc (no doubled documentation).
+ * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels.
+
+{{ '=' * node.name|length }}
+{{ node.name }}
+{{ '=' * node.name|length }}
+
+.. automodule:: {{ node.name }}
+
+{##}
+{%- block modules -%}
+{%- if subnodes %}
+
+**Submodules**
+
+.. toctree::
+ :maxdepth: 1
+{% for item in subnodes %}
+ {{ item.name }}
+{%- endfor %}
+{##}
+{%- endif -%}
+{%- endblock -%}
+{##}
+.. currentmodule:: {{ node.name }}
+{##}
+
+{%- if node.variables %}
+
+**Variables**
+
+{% for item, obj in node.variables.items() -%}
+- :py:data:`{{ item }}`
+ {#{ obj|summary }#}
+{% endfor -%}
+{%- endif -%}
+
+{%- if node.functions %}
+
+**Functions**
+
+{% for item, obj in node.functions.items() -%}
+- :py:func:`{{ item }}`:
+ {{ obj|summary }}
+
+{% endfor -%}
+{%- endif -%}
+
+{%- if node.exceptions %}
+
+**Exceptions**
+
+{% for item, obj in node.exceptions.items() -%}
+- :py:exc:`{{ item }}`:
+ {{ obj|summary }}
+
+{% endfor -%}
+{%- endif -%}
+
+{%- if node.classes %}
+
+**Classes**
+
+{% for item, obj in node.classes.items() -%}
+- :py:class:`{{ item }}`:
+ {{ obj|summary }}
+
+{% endfor -%}
+{%- endif -%}
+
+{%- block variables -%}
+{%- if node.variables %}
+
+---------------------
+
+**Variables**
+
+{#% for item, obj in node.variables.items() -%}
+- :py:data:`{{ item }}`
+{% endfor -%#}
+
+{% for item, obj in node.variables.items() %}
+.. autodata:: {{ item }}
+ :annotation:
+
+ .. code-block:: text
+
+ {{ obj|pprint|indent(6) }}
+{##}
+{%- endfor -%}
+{%- endif -%}
+{%- endblock -%}
+
+{%- block functions -%}
+{%- if node.functions %}
+
+---------------------
+
+**Functions**
+
+{% for item in node.functions %}
+.. autofunction:: {{ item }}
+{##}
+{%- endfor -%}
+{%- endif -%}
+{%- endblock -%}
+
+{%- block exceptions -%}
+{%- if node.exceptions %}
+
+---------------------
+
+**Exceptions**
+
+{#% for item, obj in node.exceptions.items() -%}
+- :py:exc:`{{ item }}`:
+ {{ obj|summary }}
+
+{% endfor -%#}
+
+{% for item in node.exceptions %}
+.. autoexception:: {{ item }}
+
+ .. rubric:: Inheritance
+ .. inheritance-diagram:: {{ item }}
+ :parts: 1
+{##}
+{%- endfor -%}
+{%- endif -%}
+{%- endblock -%}
+
+{%- block classes -%}
+{%- if node.classes %}
+
+---------------------
+
+**Classes**
+
+{#% for item, obj in node.classes.items() -%}
+- :py:class:`{{ item }}`:
+ {{ obj|summary }}
+
+{% endfor -%#}
+
+{% for item in node.classes %}
+.. autoclass:: {{ item }}
+ :members:
+ :private-members:
+ :special-members:
+ :inherited-members:
+ :exclude-members: __weakref__
+
+ .. rubric:: Inheritance
+ .. inheritance-diagram:: {{ item }}
+ :parts: 1
+{##}
+{%- endfor -%}
+{%- endif -%}
+{%- endblock -%}
diff --git a/doc/conf.py b/doc/conf.py
new file mode 100644
index 00000000..74657cc9
--- /dev/null
+++ b/doc/conf.py
@@ -0,0 +1,295 @@
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+from importlib.util import find_spec
+from sys import path as sys_path
+from os.path import abspath
+from pathlib import Path
+from json import loads
+
+from pyTooling.Packaging import extractVersionInformation
+
+ROOT = Path(__file__).resolve().parent
+
+sys_path.insert(0, abspath("."))
+sys_path.insert(0, abspath(".."))
+sys_path.insert(0, abspath("../sphinx_reports"))
+# sys_path.insert(0, abspath("_extensions"))
+
+
+# ==============================================================================
+# Project information and versioning
+# ==============================================================================
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+project = "sphinx_reports"
+
+packageInformationFile = Path(f"../{project.replace('.', '/')}/__init__.py")
+versionInformation = extractVersionInformation(packageInformationFile)
+
+author = versionInformation.Author
+copyright = versionInformation.Copyright
+version = ".".join(versionInformation.Version.split(".")[:2]) # e.g. 2.3 The short X.Y version.
+release = versionInformation.Version
+
+
+# ==============================================================================
+# Miscellaneous settings
+# ==============================================================================
+# The master toctree document.
+master_doc = "index"
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ["_templates"]
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = [
+ "_build",
+ "_theme",
+ "Thumbs.db",
+ ".DS_Store"
+]
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = "manni"
+
+
+# ==============================================================================
+# Restructured Text settings
+# ==============================================================================
+prologPath = "prolog.inc"
+try:
+ with open(prologPath, "r") as prologFile:
+ rst_prolog = prologFile.read()
+except Exception as ex:
+ print(f"[ERROR:] While reading '{prologPath}'.")
+ print(ex)
+ rst_prolog = ""
+
+
+# ==============================================================================
+# Options for HTML output
+# ==============================================================================
+html_context = {}
+ctx = ROOT / "context.json"
+if ctx.is_file():
+ html_context.update(loads(ctx.open('r').read()))
+
+# ==============================================================================
+# Options for HTML output
+# ==============================================================================
+html_theme = "sphinx_rtd_theme"
+html_theme_options = {
+ "logo_only": True,
+ "vcs_pageview_mode": 'blob',
+ "navigation_depth": 5,
+}
+html_css_files = [
+ 'css/override.css',
+]
+
+# 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_logo = str(Path(html_static_path[0]) / "logo.png")
+html_favicon = str(Path(html_static_path[0]) / "icon.png")
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = "sphinx_reportsDoc"
+
+# If not None, a 'Last updated on:' timestamp is inserted at every page
+# bottom, using the given strftime format.
+# The empty string is equivalent to '%b %d, %Y'.
+html_last_updated_fmt = "%d.%m.%Y"
+
+# ==============================================================================
+# Python settings
+# ==============================================================================
+modindex_common_prefix = [
+ f"{project}."
+]
+
+# ==============================================================================
+# Options for LaTeX / PDF output
+# ==============================================================================
+from textwrap import dedent
+
+latex_elements = {
+ # The paper size ('letterpaper' or 'a4paper').
+ "papersize": "a4paper",
+
+ # The font size ('10pt', '11pt' or '12pt').
+ #'pointsize': '10pt',
+
+ # Additional stuff for the LaTeX preamble.
+ "preamble": dedent(r"""
+ % ================================================================================
+ % User defined additional preamble code
+ % ================================================================================
+ % Add more Unicode characters for pdfLaTeX.
+ % - Alternatively, compile with XeLaTeX or LuaLaTeX.
+ % - https://GitHub.com/sphinx-doc/sphinx/issues/3511
+ %
+ \ifdefined\DeclareUnicodeCharacter
+ \DeclareUnicodeCharacter{2265}{$\geq$}
+ \DeclareUnicodeCharacter{21D2}{$\Rightarrow$}
+ \fi
+
+
+ % ================================================================================
+ """),
+
+ # Latex figure (float) alignment
+ #'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+# author, documentclass [howto, manual, or own class]).
+latex_documents = [
+ ( master_doc,
+ "sphinx_reports.tex",
+ "The sphinx_reports Documentation",
+ "Patrick Lehmann",
+ "manual"
+ ),
+]
+
+
+# ==============================================================================
+# Extensions
+# ==============================================================================
+extensions = [
+# Standard Sphinx extensions
+ "sphinx.ext.autodoc",
+ "sphinx.ext.extlinks",
+ "sphinx.ext.intersphinx",
+ "sphinx.ext.inheritance_diagram",
+ "sphinx.ext.todo",
+ "sphinx.ext.graphviz",
+ "sphinx.ext.mathjax",
+ "sphinx.ext.ifconfig",
+ "sphinx.ext.viewcode",
+# SphinxContrib extensions
+ "sphinxcontrib.mermaid",
+# Other extensions
+ "sphinx_design",
+ "sphinx_copybutton",
+ "sphinx_autodoc_typehints",
+ "autoapi.sphinx",
+# User defined extensions
+ "CoverageReports",
+]
+
+
+# ==============================================================================
+# Sphinx.Ext.InterSphinx
+# ==============================================================================
+intersphinx_mapping = {
+ "python": ("https://docs.python.org/3", None),
+}
+
+
+# ==============================================================================
+# Sphinx.Ext.AutoDoc
+# ==============================================================================
+# see: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#configuration
+#autodoc_default_options = {
+# "private-members": True,
+# "special-members": True,
+# "inherited-members": True,
+# "exclude-members": "__weakref__"
+#}
+#autodoc_class_signature = "separated"
+autodoc_member_order = "bysource" # alphabetical, groupwise, bysource
+autodoc_typehints = "both"
+#autoclass_content = "both"
+
+
+# ==============================================================================
+# Sphinx.Ext.ExtLinks
+# ==============================================================================
+extlinks = {
+ "gh": ("https://GitHub.com/%s", "gh:%s"),
+ "ghissue": ("https://GitHub.com/pytooling/sphinx_reports/issues/%s", "issue #%s"),
+ "ghpull": ("https://GitHub.com/pytooling/sphinx_reports/pull/%s", "pull request #%s"),
+ "ghsrc": ("https://GitHub.com/pytooling/sphinx_reports/blob/main/%s", None),
+ "wiki": ("https://en.wikipedia.org/wiki/%s", None),
+}
+
+
+# ==============================================================================
+# Sphinx.Ext.Graphviz
+# ==============================================================================
+graphviz_output_format = "svg"
+
+
+# ==============================================================================
+# SphinxContrib.Mermaid
+# ==============================================================================
+mermaid_params = [
+ '--backgroundColor', 'transparent',
+]
+mermaid_verbose = True
+
+
+# ==============================================================================
+# Sphinx.Ext.Inheritance_Diagram
+# ==============================================================================
+inheritance_node_attrs = {
+# "shape": "ellipse",
+# "fontsize": 14,
+# "height": 0.75,
+ "color": "dodgerblue1",
+ "style": "filled"
+}
+
+
+# ==============================================================================
+# Sphinx.Ext.ToDo
+# ==============================================================================
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+todo_link_only = True
+
+
+# ==============================================================================
+# DocCov
+# ==============================================================================
+doccov_packages = {
+ "src": {
+ "name": "sphinx_reports",
+ "directory": "../sphinx_reports",
+ "fail_below": 80,
+ "levels": {
+ 30: {"class": "doccov-below30", "background": "rgba(101, 31, 255, .2)", "desc": "almost undocumented"},
+ 50: {"class": "doccov-below50", "background": "rgba(255, 82, 82, .2)", "desc": "poorly documented"},
+ 80: {"class": "doccov-below80", "background": "rgba(255, 145, 0, .2)", "desc": "roughly documented"},
+ 90: {"class": "doccov-below90", "background": "rgba( 0, 200, 82, .2)", "desc": "well documented"},
+ 100: {"class": "doccov-below100", "background": "rgba( 0, 200, 82, .2)", "desc": "excellent documented"}
+ }
+ }
+}
+
+
+# ==============================================================================
+# Sphinx_Design
+# ==============================================================================
+sd_fontawesome_latex = True
+
+
+# ==============================================================================
+# AutoAPI.Sphinx
+# ==============================================================================
+autoapi_modules = {
+ "sphinx_reports": {
+ "template": "module",
+ "output": "sphinx_reports",
+ "override": True
+ }
+}
diff --git a/doc/coverage/index.rst b/doc/coverage/index.rst
new file mode 100644
index 00000000..80bbad2e
--- /dev/null
+++ b/doc/coverage/index.rst
@@ -0,0 +1,4 @@
+Coverage Report
+###############
+
+*Placeholder for the Coverage report generated with* ``pytest`` *and* ``coverage``.
diff --git a/doc/genindex.rst b/doc/genindex.rst
new file mode 100644
index 00000000..c07da40d
--- /dev/null
+++ b/doc/genindex.rst
@@ -0,0 +1,4 @@
+.. This file is a placeholder and will be replaced
+
+Index
+#####
diff --git a/doc/index.rst b/doc/index.rst
new file mode 100644
index 00000000..50c352a7
--- /dev/null
+++ b/doc/index.rst
@@ -0,0 +1,155 @@
+.. |img-sphinx-reports-github| image:: https://img.shields.io/badge/pyTooling-sphinx-reports-323131.svg?logo=github&longCache=true
+ :alt: Sourcecode on GitHub
+ :height: 22
+ :target: https://github.com/pyTooling/sphinx-reports
+.. |img-sphinx-reports-license| image:: https://img.shields.io/badge/Apache%20License,%202.0-bd0000.svg?longCache=true&label=license&logo=Apache&logoColor=D22128
+ :alt: License
+ :height: 22
+.. |img-sphinx-reports-tag| image:: https://img.shields.io/github/v/tag/pyTooling/sphinx-reports?logo=GitHub&include_prereleases
+ :alt: GitHub tag (latest SemVer incl. pre-release
+ :height: 22
+ :target: https://github.com/pyTooling/sphinx-reports/tags
+.. |img-sphinx-reports-release| image:: https://img.shields.io/github/v/release/pyTooling/sphinx-reports?logo=GitHub&include_prereleases
+ :alt: GitHub release (latest SemVer incl. including pre-releases
+ :height: 22
+ :target: https://github.com/pyTooling/sphinx-reports/releases/latest
+.. |img-sphinx-reports-date| image:: https://img.shields.io/github/release-date/pyTooling/sphinx-reports?logo=GitHub
+ :alt: GitHub release date
+ :height: 22
+ :target: https://github.com/pyTooling/sphinx-reports/releases
+.. |img-sphinx-reports-lib-status| image:: https://img.shields.io/librariesio/release/pypi/sphinx-reports
+ :alt: Libraries.io status for latest release
+ :height: 22
+ :target: https://libraries.io/github/pyTooling/sphinx-reports
+.. |img-sphinx-reports-req-status| image:: https://img.shields.io/requires/github/pyTooling/sphinx-reports
+ :alt: Requires.io
+ :height: 22
+ :target: https://requires.io/github/pyTooling/sphinx-reports/requirements/?branch=master
+.. |img-sphinx-reports-travis| image:: https://img.shields.io/travis/com/pyTooling/sphinx-reports?logo=Travis
+ :alt: Travis - Build on 'master'
+ :height: 22
+ :target: https://travis-ci.com/pyTooling/sphinx-reports
+.. |img-sphinx-reports-pypi-tag| image:: https://img.shields.io/pypi/v/sphinx-reports?logo=PyPI
+ :alt: PyPI - Tag
+ :height: 22
+ :target: https://pypi.org/project/sphinx-reports/
+.. |img-sphinx-reports-pypi-status| image:: https://img.shields.io/pypi/status/sphinx-reports?logo=PyPI
+ :alt: PyPI - Status
+ :height: 22
+.. |img-sphinx-reports-pypi-python| image:: https://img.shields.io/pypi/pyversions/sphinx-reports?logo=PyPI
+ :alt: PyPI - Python Version
+ :height: 22
+.. |img-sphinx-reports-lib-dep| image:: https://img.shields.io/librariesio/dependent-repos/pypi/sphinx-reports
+ :alt: Dependent repos (via libraries.io)
+ :height: 22
+ :target: https://github.com/pyTooling/sphinx-reports/network/dependents
+.. |img-sphinx-reports-codacy-quality| image:: https://img.shields.io/codacy/grade/b63aac7ef7e34baf829f11a61574bbaf?logo=codacy
+ :alt: Codacy - Quality
+ :height: 22
+ :target: https://www.codacy.com/manual/pyTooling/sphinx-reports
+.. |img-sphinx-reports-codacy-coverage| image:: https://img.shields.io/codacy/coverage/b63aac7ef7e34baf829f11a61574bbaf?logo=codacy
+ :alt: Codacy - Line Coverage
+ :height: 22
+ :target: https://www.codacy.com/manual/pyTooling/sphinx-reports
+.. |img-sphinx-reports-codecov-coverage| image:: https://codecov.io/gh/pyTooling/sphinx-reports/branch/master/graph/badge.svg
+ :alt: Codecov - Branch Coverage
+ :height: 22
+ :target: https://codecov.io/gh/pyTooling/sphinx-reports
+.. |img-sphinx-reports-lib-rank| image:: https://img.shields.io/librariesio/sourcerank/pypi/sphinx-reports
+ :alt: Libraries.io SourceRank
+ :height: 22
+ :target: https://libraries.io/github/pyTooling/sphinx-reports/sourcerank
+.. |img-sphinx-reports-rtd| image:: https://img.shields.io/readthedocs/sphinx-reports
+ :alt: Read the Docs
+ :height: 22
+ :target: https://sphinx-reports.readthedocs.io/en/latest/
+
+|img-sphinx-reports-github| |img-sphinx-reports-tag| |img-sphinx-reports-release| |img-sphinx-reports-date| |br|
+|img-sphinx-reports-lib-status| |img-sphinx-reports-req-status| |img-sphinx-reports-lib-dep| |br|
+|img-sphinx-reports-travis| |img-sphinx-reports-pypi-tag| |img-sphinx-reports-pypi-status| |img-sphinx-reports-pypi-python| |br|
+|img-sphinx-reports-codacy-quality| |img-sphinx-reports-codacy-coverage| |img-sphinx-reports-codecov-coverage| |img-sphinx-reports-lib-rank| |br|
+|img-sphinx-reports-rtd| |img-sphinx-reports-license|
+
+
+sphinx-reports Documentation
+############################
+
+
+Supported Report Formats
+************************
+
+
+
+Contributors
+************
+
+* `Patrick Lehmann `__ (Maintainer)
+* `and more... `__
+
+
+License
+*******
+
+.. only:: html
+
+ This Python package (source code) is licensed under `Apache License 2.0 `__. |br|
+ The accompanying documentation is licensed under `Creative Commons - Attribution 4.0 (CC-BY 4.0) `__.
+
+.. only:: latex
+
+ This Python package (source code) is licensed under **Apache License 2.0**. |br|
+ The accompanying documentation is licensed under **Creative Commons - Attribution 4.0 (CC-BY 4.0)**.
+
+
+.. toctree::
+ :caption: Overview
+ :hidden:
+
+ Installation
+ Dependency
+
+.. raw:: latex
+
+ \part{Main Documentation}
+
+.. toctree::
+ :caption: Examples
+ :hidden:
+
+
+
+.. toctree::
+ :caption: Details
+ :hidden:
+
+ sphinx-reports
+
+
+.. raw:: latex
+
+ \part{References and Reports}
+
+.. toctree::
+ :caption: References and Reports
+ :hidden:
+
+ sphinx-reports/sphinx-reports
+ Unittest Report ➚
+ Code Coverage Report ➚
+ Doc. Coverage Report
+ Static Type Check Report ➚
+
+.. raw:: latex
+
+ \part{Appendix}
+
+.. toctree::
+ :caption: Appendix
+ :hidden:
+
+ License
+ Doc-License
+ Glossary
+ genindex
+ Python Module Index
+ TODO
diff --git a/doc/make.bat b/doc/make.bat
new file mode 100644
index 00000000..53ac3a7c
--- /dev/null
+++ b/doc/make.bat
@@ -0,0 +1,36 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=py -3.12 -m sphinx.cmd.build
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+set SPHINXOPTS=-v
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.http://sphinx-doc.org/
+ exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/doc/prolog.inc b/doc/prolog.inc
new file mode 100644
index 00000000..75463a87
--- /dev/null
+++ b/doc/prolog.inc
@@ -0,0 +1,59 @@
+.. # Load pre-defined aliases and graphical characters like © from docutils
+ # is used to denote the special path
+ # \Lib\site-packages\docutils\parsers\rst\include
+.. include::
+.. include::
+
+.. # define a hard line break for HTML
+.. |br| raw:: html
+
+
+
+.. # define horizontal line for HTML
+.. |hr| raw:: html
+
+
+
+.. # define additional CSS based styles and ReST roles for HTML
+.. raw:: html
+
+
+
+.. role:: bolditalic
+ :class: bolditalic
+
+.. role:: underline
+ :class: underline
+
+.. role:: strike
+ :class: strike
+
+.. role:: xlarge
+ :class: xlarge
+
+.. role:: red
+ :class: colorred
+.. role:: green
+ :class: colorgreen
+.. role:: blue
+ :class: colorblue
+.. role:: purple
+ :class: colorpurple
+
+.. role:: deletion
+ :class: colorred strike
+.. role:: addition
+ :class: colorgreen
+
+.. role:: pycode(code)
+ :language: python
+ :class: highlight
diff --git a/doc/requirements.txt b/doc/requirements.txt
new file mode 100644
index 00000000..e5bab80d
--- /dev/null
+++ b/doc/requirements.txt
@@ -0,0 +1,12 @@
+-r ../requirements.txt
+
+pyTooling >= 5.0.0, < 6.0
+
+# Enforce latest version on ReadTheDocs
+sphinx >= 7.1.0, < 8.0
+
+# Sphinx Extenstions
+sphinxcontrib-mermaid>=0.7.1
+autoapi>=2.0.1
+sphinx_fontawesome>=0.0.6
+sphinx_autodoc_typehints >= 1.24.0
diff --git a/doc/shields.inc b/doc/shields.inc
new file mode 100644
index 00000000..d24cc43b
--- /dev/null
+++ b/doc/shields.inc
@@ -0,0 +1,170 @@
+.. # Use http://b64.io/ to encode any image to base64. Then replace `/` with
+ # `%2F` and `+` with `%2B` (or use http://meyerweb.com/eric/tools/dencoder/).
+ # Beware that `?logo=data:image/png;base64,` must also be converted to
+ # percent encoding so that the URL is properly parsed.
+
+.. # Sourcecode link to GitHub
+.. |SHIELD:svgreports-github| image:: https://img.shields.io/badge/pyTooling-sphinx-reports-63bf7f.svg?longCache=true&style=flat-square&longCache=true&logo=GitHub
+ :alt: Sourcecode on GitHub
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports
+.. |SHIELD:pngreports-github| image:: https://raster.shields.io/badge/pyTooling-sphinx-reports-63bf7f.svg?longCache=true&style=flat-square&longCache=true&logo=GitHub
+ :alt: Sourcecode on GitHub
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports
+
+.. # Sourcecode license
+.. |SHIELD:svgreports-src-license| image:: https://img.shields.io/pypi/l/sphinx-reports?longCache=true&style=flat-square&logo=Apache&label=code
+ :alt: Code license
+ :height: 22
+ :target: Code-License.html
+.. |SHIELD:pngreports-src-license| image:: https://img.shields.io/pypi/l/sphinx-reports?longCache=true&style=flat-square&logo=Apache&label=code
+ :alt: Code license
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/blob/main/LICENSE.md
+
+.. # GitHub tag
+.. |SHIELD:svgreports-tag| image:: https://img.shields.io/github/v/tag/pyTooling/sphinx-reports?longCache=true&style=flat-square&logo=GitHub&include_prereleases
+ :alt: GitHub tag (latest SemVer incl. pre-release
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/tags
+.. |SHIELD:pngreports-tag| image:: https://raster.shields.io/github/v/tag/pyTooling/sphinx-reports?longCache=true&style=flat-square&logo=GitHub&include_prereleases
+ :alt: GitHub tag (latest SemVer incl. pre-release
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/tags
+
+.. # GitHub release date
+.. |SHIELD:svgreports-date| image:: https://img.shields.io/github/release-date/pyTooling/sphinx-reports?longCache=true&style=flat-square&logo=GitHub
+ :alt: GitHub release date
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/releases
+.. |SHIELD:pngreports-date| image:: https://raster.shields.io/github/release-date/pyTooling/sphinx-reports?longCache=true&style=flat-square&logo=GitHub
+ :alt: GitHub release date
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/releases
+
+.. # GitHub/Libraries dependent projects
+.. |SHIELD:svgreports-lib-dep| image:: https://img.shields.io/librariesio/dependent-repos/pypi/sphinx-reports?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff
+ :alt: Dependent repos (via libraries.io)
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/network/dependents
+.. |SHIELD:pngreports-lib-dep| image:: https://raster.shields.io/librariesio/dependent-repos/pypi/sphinx-reports?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff
+ :alt: Dependent repos (via libraries.io)
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/network/dependents
+
+.. # GHA test and coverage
+.. |SHIELD:svgreports-gha-test| image:: https://img.shields.io/github/actions/workflow/status/pyTooling/sphinx-reports/Pipeline.yml?branch=main&longCache=true&style=flat-square&label=Build%20and%20Test&logo=GitHub%20Actions&logoColor=FFFFFF
+ :alt: GitHub Workflow - Build and Test Status
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/actions/workflows/Pipeline.yml
+.. |SHIELD:pngreports-gha-test| image:: https://raster.shields.io/github/actions/workflow/status/pyTooling/sphinx-reports/Pipeline.yml?branch=main&longCache=true&style=flat-square&label=Build%20and%20Test&logo=GitHub%20Actions&logoColor=FFFFFF
+ :alt: GitHub Workflow - Build and Test Status
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/actions/workflows/Pipeline.yml
+
+.. # Codacy - quality
+.. |SHIELD:svgreports-codacy-quality| image:: https://img.shields.io/codacy/grade/8dc5205ba8b24e008f2287759096e181?longCache=true&style=flat-square&logo=codacy
+ :alt: Codacy - Quality
+ :height: 22
+ :target: https://www.codacy.com/gh/pyTooling/sphinx-reports
+.. |SHIELD:pngreports-codacy-quality| image:: https://raster.shields.io/codacy/grade/8dc5205ba8b24e008f2287759096e181?longCache=true&style=flat-square&logo=codacy
+ :alt: Codacy - Quality
+ :height: 22
+ :target: https://www.codacy.com/gh/pyTooling/sphinx-reports
+
+.. # Codacy - coverage
+.. |SHIELD:svgreports-codacy-coverage| image:: https://img.shields.io/codacy/coverage/8dc5205ba8b24e008f2287759096e181?longCache=true&style=flat-square&logo=codacy
+ :alt: Codacy - Line Coverage
+ :height: 22
+ :target: https://www.codacy.com/gh/pyTooling/sphinx-reports
+.. |SHIELD:pngreports-codacy-coverage| image:: https://raster.shields.io/codacy/coverage/8dc5205ba8b24e008f2287759096e181?longCache=true&style=flat-square&logo=codacy
+ :alt: Codacy - Line Coverage
+ :height: 22
+ :target: https://www.codacy.com/gh/pyTooling/sphinx-reports
+
+.. # Codecov - coverage
+.. |SHIELD:svgreports-codecov-coverage| image:: https://img.shields.io/codecov/c/github/pyTooling/sphinx-reports?longCache=true&style=flat-square&logo=Codecov
+ :alt: Codecov - Branch Coverage
+ :height: 22
+ :target: https://codecov.io/gh/pyTooling/sphinx-reports
+.. |SHIELD:pngreports-codecov-coverage| image:: https://raster.shields.io/codecov/c/github/pyTooling/sphinx-reports?longCache=true&style=flat-square&logo=Codecov
+ :alt: Codecov - Branch Coverage
+ :height: 22
+ :target: https://codecov.io/gh/pyTooling/sphinx-reports
+
+.. # Libraries - source rank
+.. |SHIELD:svgreports-lib-rank| image:: https://img.shields.io/librariesio/sourcerank/pypi/sphinx-reports?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff
+ :alt: Libraries.io SourceRank
+ :height: 22
+ :target: https://libraries.io/github/pyTooling/sphinx-reports/sourcerank
+.. |SHIELD:pngreports-lib-rank| image:: https://raster.shields.io/librariesio/sourcerank/pypi/sphinx-reports?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff
+ :alt: Libraries.io SourceRank
+ :height: 22
+ :target: https://libraries.io/github/pyTooling/sphinx-reports/sourcerank
+
+.. # PyPI tag
+.. |SHIELD:svgreports-pypi-tag| image:: https://img.shields.io/pypi/v/sphinx-reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072
+ :alt: PyPI - Tag
+ :height: 22
+ :target: https://pypi.org/project/sphinx-reports/
+.. |SHIELD:pngreports-pypi-tag| image:: https://raster.shields.io/pypi/v/sphinx-reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072
+ :alt: PyPI - Tag
+ :height: 22
+ :target: https://pypi.org/project/sphinx-reports/
+
+.. # PyPI project status
+.. |SHIELD:svgreports-pypi-status| image:: https://img.shields.io/pypi/status/sphinx-reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072
+ :alt: PyPI - Status
+ :height: 22
+.. |SHIELD:pngreports-pypi-status| image:: https://raster.shields.io/pypi/status/sphinx-reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072
+ :alt: PyPI - Status
+ :height: 22
+
+.. # PyPI Python versions
+.. |SHIELD:svgreports-pypi-python| image:: https://img.shields.io/pypi/pyversions/sphinx-reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072
+ :alt: PyPI - Python Version
+ :height: 22
+.. |SHIELD:pngreports-pypi-python| image:: https://raster.shields.io/pypi/pyversions/sphinx-reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072
+ :alt: PyPI - Python Version
+ :height: 22
+
+.. # Libraries - status
+.. |SHIELD:svgreports-lib-status| image:: https://img.shields.io/librariesio/release/pypi/sphinx-reports?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff
+ :alt: Libraries.io status for latest release
+ :height: 22
+ :target: https://libraries.io/github/pyTooling/sphinx-reports
+.. |SHIELD:pngreports-lib-status| image:: https://raster.shields.io/librariesio/release/pypi/sphinx-reports?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff
+ :alt: Libraries.io status for latest release
+ :height: 22
+ :target: https://libraries.io/github/pyTooling/sphinx-reports
+
+.. # Documentation license
+.. |SHIELD:svgreports-doc-license| image:: https://img.shields.io/badge/doc-CC--BY%204.0-green?longCache=true&style=flat-square&logo=CreativeCommons&logoColor=fff
+ :alt: Documentation License
+ :height: 22
+ :target: License.html
+.. |SHIELD:pngreports-doc-license| image:: https://raster.shields.io/badge/doc-CC--BY%204.0-green?longCache=true&style=flat-square&logo=CreativeCommons&logoColor=fff
+ :alt: Documentation License
+ :height: 22
+ :target: https://GitHub.com/pyTooling/sphinx-reports/blob/main/doc/License.rst
+
+.. # GHPages - read now
+.. |SHIELD:svgreports-ghp-doc| image:: https://img.shields.io/website?longCache=true&style=flat-square&label=pyTooling.github.io%2Fsphinx-reports&logo=GitHub&logoColor=fff&up_color=blueviolet&up_message=Read%20now%20%E2%9E%9A&url=https%3A%2F%2FpyTooling.github.io%2Fsphinx-reports%2Findex.html
+ :alt: Documentation - Read Now!
+ :height: 22
+ :target: https://pyTooling.github.io/sphinx-reports/
+.. |SHIELD:pngreports-ghp-doc| image:: https://raster.shields.io/website?longCache=true&style=flat-square&label=pyTooling.github.io%2Fsphinx-reports&logo=GitHub&logoColor=fff&up_color=blueviolet&up_message=Read%20now%20%E2%9E%9A&url=https%3A%2F%2FpyTooling.github.io%2Fsphinx-reports%2Findex.html
+ :alt: Documentation - Read Now!
+ :height: 22
+ :target: https://pyTooling.github.io/sphinx-reports/
+
+.. # Gitter
+.. |SHIELD:svgreports-gitter| image:: https://img.shields.io/badge/chat-on%20gitter-4db797.svg?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef
+ :alt: Documentation License
+ :height: 22
+ :target: https://gitter.im/hdl/community
+.. |SHIELD:pngreports-gitter| image:: https://raster.shields.io/badge/chat-on%20gitter-4db797.svg?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef
+ :alt: Documentation License
+ :height: 22
+ :target: https://gitter.im/hdl/community
diff --git a/doc/typing/index.rst b/doc/typing/index.rst
new file mode 100644
index 00000000..3a22a255
--- /dev/null
+++ b/doc/typing/index.rst
@@ -0,0 +1,8 @@
+Static Type Checking Report
+###########################
+
+*Placeholder for the Static Type Checking report generated with* ``mypy``.
+
+.. #raw:: html
+
+
diff --git a/doc/unittests/index.rst b/doc/unittests/index.rst
new file mode 100644
index 00000000..dd6de5e7
--- /dev/null
+++ b/doc/unittests/index.rst
@@ -0,0 +1,4 @@
+UnitTest Report
+###############
+
+*Placeholder for the unittest report generated with* ``pytest``.
diff --git a/run.ps1 b/run.ps1
new file mode 100644
index 00000000..072a2117
--- /dev/null
+++ b/run.ps1
@@ -0,0 +1,298 @@
+[CmdletBinding()]
+Param(
+ # Clean up all files and directories
+ [switch]$clean,
+
+ # Commands
+ [switch]$all,
+ [switch]$copyall,
+
+ [switch]$doc,
+ [switch]$livedoc,
+
+ [switch]$unit,
+ [switch]$liveunit,
+ [switch]$copyunit,
+
+ [switch]$cov,
+ [switch]$livecov,
+ [switch]$copycov,
+
+ [switch]$type,
+ [switch]$livetype,
+ [switch]$copytype,
+
+ [switch]$nooutput,
+
+ [switch]$build,
+ [switch]$install,
+
+ # Display this help"
+ [switch]$help
+)
+
+$PackageName = "sphinx_reports"
+
+# set default values
+$EnableDebug = [bool]$PSCmdlet.MyInvocation.BoundParameters["Debug"]
+$EnableVerbose = [bool]$PSCmdlet.MyInvocation.BoundParameters["Verbose"] -or $EnableDebug
+
+# Display help if no command was selected
+$help = $help -or ( -not(
+ $all -or $copyall -or
+ $clean -or
+ $doc -or $livedoc -or
+ $unit -or $liveunit -or $copyunit -or
+ $cov -or $livecov -or $copycov -or
+ $type -or $livetype -or $copytype -or
+ $build -or $install
+ )
+)
+
+Write-Host "================================================================================" -ForegroundColor Magenta
+Write-Host "$PackageName Documentation Compilation and Assembly Tool" -ForegroundColor Magenta
+Write-Host "================================================================================" -ForegroundColor Magenta
+
+if ($help)
+{ Get-Help $MYINVOCATION.MyCommand.Path -Detailed
+ exit 0
+}
+
+if ($all)
+{ $doc = $true
+ $unit = $true
+ $copyunit = $true
+ $cov = $true
+ $copycov = $true
+ $type = $true
+ $copytype = $true
+}
+if ($copyall)
+{ $copyunit = $true
+ $copycov = $true
+ $copytype = $true
+}
+
+if ($clean)
+{ Write-Host -ForegroundColor DarkYellow "[live][DOC] Cleaning documentation build directories ..."
+ rm -Force .\doc\$PackageName\*
+ .\doc\make.bat clean
+}
+
+if ($build)
+{ Write-Host -ForegroundColor Yellow "[live][BUILD] Building $PackageName package as wheel ..."
+ py -3.12 -m build --wheel
+
+ Write-Host -ForegroundColor Yellow "[live][BUILD] Building wheel finished"
+}
+if ($install)
+{ if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
+ { Write-Host -ForegroundColor Yellow "[live][INSTALL] Installing $PackageName with administrator rights ..."
+ $proc = Start-Process pwsh.exe "-NoProfile -ExecutionPolicy Bypass -WorkingDirectory `"$PSScriptRoot`" -File `"$PSCommandPath`" `"-install`"" -Verb RunAs -Wait
+
+# Write-Host -ForegroundColor Yellow "[live][INSTALL] Wait on administrator console ..."
+# Wait-Process -Id $proc.Id
+ }
+ else
+ { Write-Host -ForegroundColor Cyan "[ADMIN][UNINSTALL] Uninstalling $PackageName ..."
+ py -3.12 -m pip uninstall -y $PackageName
+ Write-Host -ForegroundColor Cyan "[ADMIN][INSTALL] Installing $PackageName from wheel ..."
+ py -3.12 -m pip install .\dist\$PackageName-6.0.0-py3-none-any.whl
+
+ Write-Host -ForegroundColor Cyan "[ADMIN][INSTALL] Closing window in 5 seconds ..."
+ Start-Sleep -Seconds 5
+ }
+}
+
+$jobs = @()
+
+if ($livedoc)
+{ Write-Host -ForegroundColor DarkYellow "[live][DOC] Building documentation using Sphinx ..."
+
+ .\doc\make.bat html --verbose
+
+ Write-Host -ForegroundColor DarkYellow "[live][DOC] Documentation finished"
+}
+elseif ($doc)
+{ Write-Host -ForegroundColor DarkYellow "[Job1][DOC] Building documentation using Sphinx ..."
+ Write-Host -ForegroundColor DarkGreen "[SCRIPT] Starting Documentation job ..."
+
+ # Compile documentation
+ $compileDocFunc = {
+ .\doc\make.bat html --verbose
+ }
+ $docJob = Start-Job -Name "Documentation" -ScriptBlock $compileDocFunc
+# $jobs += $docJob
+}
+
+
+if ($liveunit)
+{ Write-Host -ForegroundColor DarkYellow "[live][UNIT] Running Unit Tests using pytest ..."
+
+ $env:ENVIRONMENT_NAME = "Windows (x86-64)"
+ pytest -raP --color=yes --junitxml=report/unit/unitests.xml --template=html1/index.html --report=report/unit/html/index.html --split-report tests/unit
+
+ if ($copyunit)
+ { cp -Recurse -Force .\report\unit\html\* .\doc\_build\html\unittests
+ Write-Host -ForegroundColor DarkBlue "[live][UNIT] Copyed unit testing report to 'unittests' directory in HTML directory"
+ }
+
+ Write-Host -ForegroundColor DarkYellow "[live][UNIT] Unit Tests finished"
+}
+elseif ($unit)
+{ Write-Host -ForegroundColor DarkYellow "[Job2][UNIT] Running Unit Tests using pytest ..."
+ Write-Host -ForegroundColor DarkGreen "[SCRIPT] Starting UniTests jobs ..."
+
+ # Run unit tests
+ $runUnitFunc = {
+ $env:ENVIRONMENT_NAME = "Windows (x86-64)"
+ pytest -raP --color=yes --junitxml=report/unit/unitests.xml --template=html1/index.html --report=report/unit/html/index.html --split-report tests/unit
+ }
+ $unitJob = Start-Job -Name "UnitTests" -ScriptBlock $runUnitFunc
+ $jobs += $unitJob
+}
+
+if ($livecov)
+{ Write-Host -ForegroundColor DarkMagenta "[live][COV] Running Unit Tests with coverage ..."
+
+ $env:ENVIRONMENT_NAME = "Windows (x86-64)"
+ coverage run --data-file=.coverage --rcfile=pyproject.toml -m pytest -ra --tb=line --color=yes tests/unit
+
+ Write-Host -ForegroundColor DarkMagenta "[live][COV] Convert coverage report to HTML ..."
+ coverage html
+
+ Write-Host -ForegroundColor DarkMagenta "[live][COV] Convert coverage report to XML (Cobertura) ..."
+ coverage xml
+
+ Write-Host -ForegroundColor DarkMagenta "[live][COV] Write coverage report to console ..."
+ coverage report
+
+ if ($copycov)
+ { cp -Recurse -Force .\report\coverage\html\* .\doc\_build\html\coverage
+ Write-Host -ForegroundColor DarkMagenta "[live][COV] Copyed code coverage report to 'coverage' directory in HTML directory"
+ }
+
+ Write-Host -ForegroundColor DarkMagenta "[live][COV] Coverage finished"
+}
+elseif ($cov)
+{ Write-Host -ForegroundColor DarkMagenta "[live][COV] Running Unit Tests with coverage ..."
+ Write-Host -ForegroundColor DarkMagenta "[SCRIPT] Starting Coverage jobs ..."
+
+ # Collect coverage
+ $collectCovFunc = {
+ $env:ENVIRONMENT_NAME = "Windows (x86-64)"
+ coverage run --data-file=.coverage --rcfile=pyproject.toml -m pytest -ra --tb=line --color=yes tests/unit
+
+ Write-Host -ForegroundColor DarkMagenta "[Job3][COV] Convert coverage report to HTML ..."
+ coverage html
+
+ Write-Host -ForegroundColor DarkMagenta "[Job3][COV] Convert coverage report to XML (Cobertura) ..."
+ coverage xml
+ }
+ $covJob = Start-Job -Name "Coverage" -ScriptBlock $collectCovFunc
+ $jobs += $covJob
+}
+
+if ($livetype)
+{ Write-Host -ForegroundColor DarkCyan "[live][TYPE] Running static type analysis using mypy ..."
+
+ $env:MYPY_FORCE_COLOR = 1
+ mypy.exe -p $PackageName
+
+ if ($copytype)
+ { cp -Recurse -Force .\report\typing\* .\doc\_build\html\typing
+ Write-Host -ForegroundColor DarkCyan "[live][TYPE] Copyed typing report to 'typing' directory in HTML directory."
+ }
+
+ Write-Host -ForegroundColor DarkCyan "[live][TYPE] Static type analysis finished"
+}
+elseif ($type)
+{ Write-Host -ForegroundColor DarkCyan "[live][TYPE] Running static type analysis using mypy ..."
+ Write-Host -ForegroundColor DarkCyan "[SCRIPT] Starting Typing jobs ..."
+
+ # Analyze types
+ $analyzeTypesFunc = {
+ $env:MYPY_FORCE_COLOR = 1
+ mypy.exe -p $PackageName
+ }
+ $typeJob = Start-Job -Name "Typing" -ScriptBlock $analyzeTypesFunc
+ $jobs += $typeJob
+}
+
+
+if ($doc)
+{ Write-Host -ForegroundColor DarkGreen "[SCRIPT] Waiting on Documentation job ..."
+ Wait-Job -Job $docJob
+ Write-Host -ForegroundColor DarkYellow "[Job1][DOC] Documentation finished"
+}
+if ($jobs.Count -ne 0)
+{
+ Write-Host -ForegroundColor DarkGreen ("[SCRIPT] Waiting on {0} jobs ({1}) ..." -f $jobs.Count, (($jobs | %{ $_.Name }) -join ", "))
+ Wait-Job -Job $jobs
+}
+
+
+if (-not $liveunit -and $copyunit)
+{
+# if ($unit)
+# { Wait-Job -Job $unitJob
+# Write-Host -ForegroundColor DarkBlue "[Job2][UNIT] Unit tests finished"
+# }
+ cp -Recurse -Force .\report\unit\html\* .\doc\_build\html\unittests
+ Write-Host -ForegroundColor DarkBlue "[post][UNIT] Copyed unit testing report to 'unittests' directory in HTML directory"
+}
+if (-not ($livecov -or $cov) -and $copycov)
+{
+# if ($cov)
+# { Wait-Job -Job $unitJob
+# Write-Host -ForegroundColor DarkMagenta "[Job3][UNIT] Coverage collection finished"
+# }
+ cp -Recurse -Force .\report\coverage\html\* .\doc\_build\html\coverage
+ Write-Host -ForegroundColor DarkMagenta "[post][COV] Copyed code coverage report to 'coverage' directory in HTML directory"
+}
+if (-not $livetype -and $copytype)
+{
+# if ($type)
+# { Wait-Job -Job $typeJob
+# Write-Host -ForegroundColor DarkCyan "[Job4][UNIT] Static type analysis finished"
+# }
+ cp -Recurse -Force .\report\typing\* .\doc\_build\html\typing
+ Write-Host -ForegroundColor DarkCyan "[post][TYPE] Copyed typing report to 'typing' directory in HTML directory."
+}
+
+
+if ($type)
+{ Write-Host -ForegroundColor DarkCyan "================================================================================"
+ if (-not $nooutput)
+ { Receive-Job -Job $typeJob
+ }
+ Remove-Job -Job $typeJob
+}
+if ($doc)
+{ Write-Host -ForegroundColor DarkYellow "================================================================================"
+ if (-not $nooutput)
+ { Receive-Job -Job $docJob
+ }
+ Remove-Job -Job $docJob
+}
+if ($unit)
+{ Write-Host -ForegroundColor DarkBlue "================================================================================"
+ if (-not $nooutput)
+ { Receive-Job -Job $unitJob
+ }
+ Remove-Job -Job $unitJob
+}
+if ($cov)
+{ Write-Host -ForegroundColor DarkMagenta "================================================================================"
+ if (-not $nooutput)
+ { Receive-Job -Job $covJob
+ }
+ Remove-Job -Job $covJob
+
+ if ($copycov)
+ { cp -Recurse -Force .\report\coverage\html\* .\doc\_build\html\coverage
+ Write-Host -ForegroundColor DarkMagenta "[post][COV] Copyed code coverage report to 'coverage' directory in HTML directory"
+ }
+}
+Write-Host -ForegroundColor DarkGreen "================================================================================"
+Write-Host -ForegroundColor DarkGreen "[SCRIPT] Finished"