diff --git a/.gitignore b/.gitignore index 5bd8a41..9c096f7 100755 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,9 @@ venv*/ *.tmp *.bak +# Documentation +docs/doxygen/* + # Misc *.local diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..d6d5211 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,61 @@ +PROJECT_NAME = "DMX-Interface" +PROJECT_BRIEF = "ChaosDMX" +OUTPUT_DIRECTORY = docs/doxygen + +# Input settings + +INPUT = main \ + components \ + data \ + README.md +FILE_PATTERNS = *.c *.h *.cpp *.hpp *.md *.py *.js *.css *.html +RECURSIVE = YES +EXCLUDE_PATTERNS = */build/* \ + */managed_components/* +USE_MDFILE_AS_MAINPAGE = README.md + +# Documentation settings +GENERATE_LATEX = NO +GENERATE_HTML = YES + +# doxygen-awesome-css settings +HTML_EXTRA_STYLESHEET = docs/external/doxygen-awesome-css/doxygen-awesome.css \ + docs/external/doxygen-awesome-css/doxygen-awesome-sidebar-only.css + +HTML_EXTRA_FILES = docs/external/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js \ + docs/external/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js \ + docs/external/doxygen-awesome-css/doxygen-awesome-paragraph-link.js \ + docs/external/doxygen-awesome-css/doxygen-awesome-interactive-toc.js \ + docs/external/doxygen-awesome-css/doxygen-awesome-tabs.js + +# Custom header for JS integration + +# Better HTML output +HTML_COLORSTYLE = LIGHT +GENERATE_TREEVIEW = YES +DISABLE_INDEX = NO +FULL_SIDEBAR = NO + +# Extraction settings +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES + +# Graphviz / Dot settings +HAVE_DOT = YES +DOT_IMAGE_FORMAT = svg +INTERACTIVE_SVG = YES +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 + +# Graphs to generate +CALL_GRAPH = YES +CALLER_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES diff --git a/flake.nix b/flake.nix index 4b7ff81..5740a76 100644 --- a/flake.nix +++ b/flake.nix @@ -30,6 +30,8 @@ pkgs.prettier pkgs.nixfmt + pkgs.doxygen + pkgs.graphviz ]; }; }; diff --git a/tasks.py b/tasks.py index 536824a..4a97f11 100644 --- a/tasks.py +++ b/tasks.py @@ -149,3 +149,22 @@ def format_check(c): sys.exit(1) print("\nāœ… All files are correctly formatted!") + + +@task(help={"o": "Open documentation in the default browser after generation."}) +def docs(c, o=False): + """Generate Doxygen documentation.""" + task_begin("docs", "Docs") + proc = subprocess.run("doxygen Doxyfile", shell=True) + if proc.returncode == 0: + task_end("docs", "done", "Docs generated") + path = "docs/doxygen/html/index.html" + console.print( + f"\n[bold green]āœ“ Documentation generated in {path}[/bold green]" + ) + if o: + import webbrowser + webbrowser.open(f"file://{os.path.abspath(path)}") + return + task_end("docs", "failed", "Doxygen failed") + raise Exit(code=1)