"""
@file
@defgroup rtctk_doc_sphinx_doc RTCTK User Manual
@ingroup rtctk

@brief RTCTK User Manual.

@copyright
  SPDX-FileCopyrightText: 2021-2025 European Southern Observatory (ESO) @n
  SPDX-License-Identifier: LGPL-3.0-only
"""

from wtools.module import declare_sphinx
from waflib.extras.sphinx import SphinxBuildingTask
import re

_filter_pattern = re.compile("^.*/doctrees/.*\\.(doctree|pickle)$")


def monkey_patched_add_install(self):
    """
    This is a modified version of SphinxBuildingTask.add_install that filters out all files that
    match the pattern _filter_pattern. These doctree files are intermediate cache files produced by
    Sphinx that should not be installed.
    """
    nodes = self.sphinx_output_directory.ant_glob("**/*", quiet=True)
    filtered_nodes = [x for x in nodes if not _filter_pattern.match(str(x))]
    self.outputs += filtered_nodes
    self.generator.add_install_files(
        install_to=self.install_path,
        install_from=filtered_nodes,
        postpone=False,
        cwd=self.sphinx_output_directory.make_node(self.env.SPHINX_OUTPUT_FORMAT),
        relative_trick=True,
    )


SphinxBuildingTask.add_install = monkey_patched_add_install


declare_sphinx(
    name="doc.manual",
    sphinx_output_format=["html", "latexpdf"],
    install_path_html="${HTMLDIR}/sphinx_doc/html",
    install_path_latexpdf="${PDFDIR}/latex",
)
