summaryrefslogtreecommitdiff
path: root/archive/src/apidocs/gen_apidocs.py
diff options
context:
space:
mode:
authoromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-10-05 12:48:05 +1000
committeromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-10-05 12:48:05 +1000
commitdfb6adbcbcc7d50b770b6d5ea82efdd8f8c32e25 (patch)
treea470b91a90716d7ea46fde53ed395449c24583a2 /archive/src/apidocs/gen_apidocs.py
parent54354e32c6498cc7f8839ab4deb1208d37216cc5 (diff)
delete documentation workflow
Diffstat (limited to 'archive/src/apidocs/gen_apidocs.py')
-rw-r--r--archive/src/apidocs/gen_apidocs.py119
1 files changed, 119 insertions, 0 deletions
diff --git a/archive/src/apidocs/gen_apidocs.py b/archive/src/apidocs/gen_apidocs.py
new file mode 100644
index 0000000..d01e441
--- /dev/null
+++ b/archive/src/apidocs/gen_apidocs.py
@@ -0,0 +1,119 @@
+# Generates a static webpage for the public C-API of `celeritas-core`
+#
+# TODO:
+# - remove prefixes like 'static' and 'inline'
+# - parse docstrings from source
+
+import re
+import os
+from pathlib import Path
+
+# --- HTML Fragments
+page_start = """
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <link rel="stylesheet" href="doc_styles.css">
+ <!-- <link rel="stylesheet" href="prism.css"> -->
+ <!-- <script src="prism.js"></script> -->
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
+ <!-- and it's easy to individually load additional languages -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/go.min.js"></script>
+ <script>hljs.highlightAll();</script>
+
+ <title>Celeritas core API</title>
+</head>
+<body>
+<main>
+"""
+
+page_header = """
+<header>
+ <h1>CELERITAS CORE API DOCS</h1>
+</header>
+"""
+
+page_footer = """
+<footer>
+</footer>
+"""
+
+page_end = """
+</main>
+</body>
+</html>
+"""
+
+def emit_function_sig(signature: str) -> str:
+ return f"""
+ <li class="signature">
+ <pre><code class="language-c">{signature}</code></pre>
+ </li>
+ """
+
+categories = {
+ "Core": "src/core",
+ "Render": "src/new_render",
+ "Maths": "src/maths",
+ "RAL": "src/ral",
+ "Systems": "src/systems",
+}
+
+def find_pub_functions_in_folder(folder_path):
+ functions = []
+ for filename in os.listdir(folder_path):
+ filepath = os.path.join(folder_path, filename)
+ if os.path.isfile(filepath):
+ file_funcs = find_pub_functions_in_file(filepath)
+ functions.extend(file_funcs)
+
+ return functions
+
+def find_pub_functions_in_file(file_path):
+ pattern = r'PUB\s+(\w+\s+)*(\w+)\s+(\w+)\s*\((.*?)\)'
+
+ with open(file_path, 'r') as file:
+ content = file.read()
+
+ matches = re.finditer(pattern, content, re.MULTILINE)
+
+ # Collect all the functions into an array
+ functions = []
+ for match in matches:
+ signature = match.group(0)
+ if signature.startswith("PUB "):
+ signature = signature[4:]
+ if signature.startswith("c_static_inline "):
+ signature = signature[16:]
+
+ print(signature)
+ functions.append(signature)
+
+ return functions
+
+def generate_html():
+ html_filepath = "index.html"
+
+ script_dir = Path(__file__).resolve().parent
+ grandparent_dir = script_dir.parents[1]
+
+ with open(html_filepath, 'w') as export_file:
+ export_file.write(page_start)
+ export_file.write(page_header)
+ # TODO: make the actual content
+ for category in categories.keys():
+ folder = os.path.join(grandparent_dir, categories[category])
+ category_funcs = find_pub_functions_in_folder(folder)
+ export_file.write(f"<h3>{category}</h3>")
+ export_file.write("<ul class=\"category-list\">")
+ for func in category_funcs:
+ export_file.write(emit_function_sig(func))
+ export_file.write("</ul>")
+ export_file.write(page_end)
+
+if __name__ == "__main__":
+ generate_html()