summaryrefslogtreecommitdiff
path: root/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'build.py')
-rw-r--r--build.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/build.py b/build.py
new file mode 100644
index 0000000..5d4a5b3
--- /dev/null
+++ b/build.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+
+import json
+import os
+import re
+import shutil
+from dataclasses import dataclass
+from datetime import datetime
+from pathlib import Path
+
+import jinja2
+import typst
+
+
+@dataclass
+class Metadata:
+ title: str
+ date: datetime
+
+
+def main() -> None:
+ repo_dir = Path(__file__).parent
+ site_dir = repo_dir / 'site'
+ content_dir = site_dir / 'content'
+ public_dir = repo_dir / 'public'
+
+ shutil.rmtree(public_dir, ignore_errors=True)
+ shutil.copytree(repo_dir / 'static', public_dir / 'static')
+
+ os.environ['TYPST_FEATURES'] = 'html'
+
+ pages: dict[Path, Metadata] = {}
+
+ for path in content_dir.rglob('*.typ'):
+ print(path)
+
+ output_path = public_dir / path.relative_to(content_dir).with_suffix('.html')
+ output_path.parent.mkdir(parents=True, exist_ok=True)
+
+ metadata = json.loads(typst.query(
+ root=site_dir,
+ input=path,
+ selector='<post-meta>',
+ field='value',
+ one=True,
+ ))
+
+ output_url = str(output_path.relative_to(public_dir))
+
+ pages[output_url] = Metadata(
+ title=metadata['title'],
+ date=datetime(
+ year=metadata['date_year'],
+ month=metadata['date_month'],
+ day=metadata['date_day'],
+ ),
+ )
+
+ typst.compile(
+ root=site_dir,
+ input=path,
+ output=output_path
+ )
+
+ print(pages)
+
+ template = jinja2.Template(open(site_dir / 'index.html').read())
+ open(public_dir / 'index.html', 'w').write(template.render(pages=pages))
+
+
+if __name__ == '__main__':
+ main()