diff options
Diffstat (limited to 'build.py')
| -rw-r--r-- | build.py | 72 |
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() |
