#!/usr/bin/env python3 """Build sites from body.html + meta into index.html using shared templates.""" import json import os import sys def render(title, breadcrumb, style, extra_css, body, footer): css = style + ("\n" + extra_css if extra_css.strip() else "") return f"""
{title}{src_link}
\n{desc}
') return "\n".join(parts) def build(sites_dir): shared = os.path.join(sites_dir, "_shared") style = open(os.path.join(shared, "style.css")).read() footer = open(os.path.join(shared, "footer.html")).read() for site in sorted(os.listdir(sites_dir)): if site.startswith("_") or site == "fonts" or site == "hooks": continue site_dir = os.path.join(sites_dir, site) if not os.path.isdir(site_dir): continue body_file = os.path.join(site_dir, "body.html") demos_file = os.path.join(site_dir, "demos.json") if site == "demo.gumx.cc" and os.path.exists(demos_file): body = build_demo_body(demos_file) elif os.path.exists(body_file): body = open(body_file).read() else: continue title = site breadcrumb = site meta_file = os.path.join(site_dir, "meta") if os.path.exists(meta_file): for line in open(meta_file): k, _, v = line.strip().partition("=") if k == "TITLE": title = v.strip('"') elif k == "BREADCRUMB": breadcrumb = v.strip('"') extra_css = "" extra_file = os.path.join(site_dir, "extra.css") if os.path.exists(extra_file): extra_css = open(extra_file).read() out = render(title, breadcrumb, style, extra_css, body, footer) with open(os.path.join(site_dir, "index.html"), "w") as f: f.write(out) print(f"built: {site}") if __name__ == "__main__": build(sys.argv[1] if len(sys.argv) > 1 else ".")