Replaces the hand-maintained `doc/api/headers.md` with a generated one
sourced from each header's `\file` brief and the public symbols
extracted by Doxygen into XML. The CI workflow regenerates it on every
push to main that touches the public headers.
New files
─────────
* scripts/gen-headers-md.py — parses doc/doxygen/xml/*.xml, groups
headers by directory (CGAL public / CGAL internals / Core), and
writes a markdown table with header path, first-sentence brief, and
the public symbols declared at file scope. Skips `detail::`
namespaces and template-specialisation duplicates.
* scripts/regen-docs.sh — convenience wrapper:
doxygen → gen-headers-md.py → coverage report.
Workflow changes
────────────────
.gitea/workflows/doxygen-pages.yml now:
1. Runs `bash scripts/doxygen-coverage.sh` as an informational step
(no fail threshold yet — the script supports `--threshold N` for
when we're ready).
2. Re-runs `python3 scripts/gen-headers-md.py` and warns if the
file drifted from what's in main (operator should run
`regen-docs.sh` locally before pushing).
Doxyfile hygiene
────────────────
`HTML_TIMESTAMP` was removed in Doxygen 1.10 → replaced with the new
`TIMESTAMP = NO` to silence the obsolete-tag warning.
Effect on the reviewer-facing landing pages
───────────────────────────────────────────
Every improvement to a `\file` brief at the top of a public header now
flows automatically into both:
* the Doxygen HTML at https://tmoussa.codeberg.page/ConformalLabpp/
* the markdown landing at doc/api/headers.md (rendered by Codeberg
in the repo view)
…so writers have a single source of truth (the C++ source) and
readers see the same words in both surfaces.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
167 lines
7.8 KiB
Plaintext
167 lines
7.8 KiB
Plaintext
# Doxyfile for conformallab++
|
|
#
|
|
# Phase 7.5 — minimal CGAL-style Doxygen configuration.
|
|
# Only non-default values are set; Doxygen ≥ 1.9.5 supplies the rest.
|
|
#
|
|
# Usage:
|
|
# doxygen Doxyfile # generates HTML into doc/doxygen/html/
|
|
# open doc/doxygen/html/index.html
|
|
#
|
|
# Or via CMake:
|
|
# cmake --build build --target doc
|
|
|
|
# ── Project identity ─────────────────────────────────────────────────────────
|
|
PROJECT_NAME = "conformallab++"
|
|
PROJECT_NUMBER = 0.7.0
|
|
PROJECT_BRIEF = "Discrete conformal maps on triangle meshes — C++17 reimplementation of ConformalLab (TU Berlin)"
|
|
PROJECT_LOGO =
|
|
OUTPUT_DIRECTORY = doc/doxygen
|
|
USE_MDFILE_AS_MAINPAGE = README.md
|
|
|
|
# ── Input ────────────────────────────────────────────────────────────────────
|
|
INPUT = README.md \
|
|
CLAUDE.md \
|
|
code/include \
|
|
doc/api \
|
|
doc/architecture \
|
|
doc/math
|
|
FILE_PATTERNS = *.hpp *.h *.cpp *.md
|
|
RECURSIVE = YES
|
|
EXCLUDE_PATTERNS = */build*/* \
|
|
*/deps/* \
|
|
*/.git/* \
|
|
*/test-reports/* \
|
|
*\ 2.hpp \
|
|
*\ 2.h
|
|
# Research-quality LaTeX notes use raw \sinh / \cosh / \frac / \beta /
|
|
# \cdot / \partial / \zeta macros which are valid LaTeX but unknown to
|
|
# Doxygen. These files are intended to be read as PDF or in a LaTeX-
|
|
# aware markdown viewer, not as Doxygen pages. Excluding them removes
|
|
# ~500 spurious "unknown command" warnings while keeping the .md files
|
|
# discoverable on GitHub.
|
|
EXCLUDE = doc/math/hyperideal-hessian-derivation.md
|
|
EXCLUDE_SYMBOLS = Eigen::* boost::* std::*
|
|
|
|
# Markdown filter: rewrites repo-relative links like [x](doc/api/tests.md)
|
|
# into basename-only links [x](tests.md) so Doxygen's basename-indexed
|
|
# \ref resolver can find them. On-disk files are untouched (GitHub keeps
|
|
# rendering them correctly). See scripts/doxygen-md-filter.sh.
|
|
FILTER_PATTERNS = *.md=scripts/doxygen-md-filter.sh
|
|
|
|
# ── Source browsing ──────────────────────────────────────────────────────────
|
|
EXTRACT_ALL = YES
|
|
EXTRACT_PRIVATE = NO
|
|
EXTRACT_STATIC = YES
|
|
EXTRACT_LOCAL_CLASSES = YES
|
|
HIDE_UNDOC_MEMBERS = NO
|
|
SOURCE_BROWSER = YES
|
|
INLINE_SOURCES = NO
|
|
STRIP_CODE_COMMENTS = NO
|
|
REFERENCED_BY_RELATION = YES
|
|
REFERENCES_RELATION = YES
|
|
REFERENCES_LINK_SOURCE = YES
|
|
|
|
# ── Build options ────────────────────────────────────────────────────────────
|
|
JAVADOC_AUTOBRIEF = YES
|
|
QT_AUTOBRIEF = NO
|
|
MARKDOWN_SUPPORT = YES
|
|
AUTOLINK_SUPPORT = YES
|
|
BUILTIN_STL_SUPPORT = YES
|
|
DISTRIBUTE_GROUP_DOC = YES
|
|
GROUP_NESTED_COMPOUNDS = YES
|
|
SUBGROUPING = YES
|
|
INLINE_GROUPED_CLASSES = NO
|
|
INLINE_SIMPLE_STRUCTS = NO
|
|
TYPEDEF_HIDES_STRUCT = NO
|
|
EXTENSION_MAPPING = h=C++ hpp=C++
|
|
|
|
# ── Warnings ─────────────────────────────────────────────────────────────────
|
|
QUIET = NO
|
|
WARNINGS = YES
|
|
WARN_IF_UNDOCUMENTED = YES
|
|
WARN_IF_DOC_ERROR = YES
|
|
WARN_IF_INCOMPLETE_DOC = YES
|
|
WARN_NO_PARAMDOC = NO
|
|
WARN_AS_ERROR = NO
|
|
WARN_FORMAT = "$file:$line: $text"
|
|
WARN_LOGFILE = doc/doxygen/doxygen-warnings.log
|
|
|
|
# ── HTML output ──────────────────────────────────────────────────────────────
|
|
GENERATE_HTML = YES
|
|
|
|
# MathJax — render LaTeX math in markdown ($...$ and $$...$$) and in
|
|
# code-comment `\f$ ... \f$` blocks via MathJax in the generated HTML.
|
|
# Required for the conformal-mapping math notation (\Theta, \omega, \tau,
|
|
# \mathbb{H}, …) in doc/architecture/overall_pipeline.md and the
|
|
# header docstrings.
|
|
USE_MATHJAX = YES
|
|
MATHJAX_VERSION = MathJax_3
|
|
MATHJAX_FORMAT = HTML-CSS
|
|
MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@3/es5/
|
|
HTML_OUTPUT = html
|
|
HTML_FILE_EXTENSION = .html
|
|
HTML_COLORSTYLE = LIGHT
|
|
HTML_COLORSTYLE_HUE = 220
|
|
HTML_COLORSTYLE_SAT = 100
|
|
HTML_COLORSTYLE_GAMMA = 80
|
|
# HTML_TIMESTAMP was removed in Doxygen 1.10; use TIMESTAMP=NO instead.
|
|
TIMESTAMP = NO
|
|
HTML_DYNAMIC_SECTIONS = YES
|
|
GENERATE_TREEVIEW = YES
|
|
DISABLE_INDEX = NO
|
|
ENUM_VALUES_PER_LINE = 1
|
|
TREEVIEW_WIDTH = 280
|
|
EXT_LINKS_IN_WINDOW = NO
|
|
SEARCHENGINE = YES
|
|
SERVER_BASED_SEARCH = NO
|
|
|
|
# ── Disabled outputs (we only want HTML) ─────────────────────────────────────
|
|
GENERATE_LATEX = NO
|
|
GENERATE_RTF = NO
|
|
GENERATE_MAN = NO
|
|
GENERATE_XML = YES
|
|
XML_OUTPUT = xml
|
|
XML_PROGRAMLISTING = NO
|
|
GENERATE_DOCBOOK = NO
|
|
GENERATE_AUTOGEN_DEF = NO
|
|
GENERATE_PERLMOD = NO
|
|
|
|
# ── Preprocessor ─────────────────────────────────────────────────────────────
|
|
ENABLE_PREPROCESSING = YES
|
|
MACRO_EXPANSION = YES
|
|
EXPAND_ONLY_PREDEF = YES
|
|
SEARCH_INCLUDES = YES
|
|
INCLUDE_PATH = code/include
|
|
PREDEFINED = CGAL_DISABLE_GMP \
|
|
CGAL_DISABLE_MPFR \
|
|
DOXYGEN_RUNNING
|
|
|
|
# ── Diagrams ─────────────────────────────────────────────────────────────────
|
|
HAVE_DOT = NO
|
|
CLASS_GRAPH = YES
|
|
COLLABORATION_GRAPH = NO
|
|
GROUP_GRAPHS = YES
|
|
INCLUDE_GRAPH = NO
|
|
INCLUDED_BY_GRAPH = NO
|
|
CALL_GRAPH = NO
|
|
CALLER_GRAPH = NO
|
|
|
|
# ── Aliases (CGAL-style) ─────────────────────────────────────────────────────
|
|
ALIASES += "concept{1}=\xrefitem concept \"Concept\" \"Concepts\" \1"
|
|
ALIASES += "models{1}=\xrefitem models \"Models\" \"Models\" \1"
|
|
ALIASES += "cgalRequires{1}=\par Requirements: \n\1"
|
|
ALIASES += "cgalParam{2}=\param \1 \2"
|
|
# CGAL named-parameter block aliases — replicates the upstream
|
|
# ${CGAL}/Documentation/doc/Documentation/Doxyfile_common conventions
|
|
# so that \cgalParamNBegin{name} … \cgalParamNEnd blocks render as
|
|
# nested HTML lists in our Doxygen output.
|
|
ALIASES += "cgalNamedParamsBegin=<dl class=\"params\"><dt>Optional named parameters</dt><dd><table class=\"params\">"
|
|
ALIASES += "cgalNamedParamsEnd=</table></dd></dl>"
|
|
ALIASES += "cgalParamNBegin{1}=<tr><td class=\"paramname\"><code>\1</code></td><td>"
|
|
ALIASES += "cgalParamNEnd=</td></tr>"
|
|
ALIASES += "cgalParamDescription{1}=<b>Description:</b> \1<br/>"
|
|
ALIASES += "cgalParamType{1}=<b>Type:</b> \1<br/>"
|
|
ALIASES += "cgalParamDefault{1}=<b>Default:</b> \1<br/>"
|
|
ALIASES += "cgalParamPrecondition{1}=<b>Precondition:</b> \1<br/>"
|
|
ALIASES += "cgalParamExtra{1}=<i>\1</i><br/>"
|