#!/usr/bin/env python3 import os import re import sys import yaml from jinja2 import Environment, FileSystemLoader from commonmark import commonmark # "template macros" template_replace = [ ("", '"), ] directory = os.path.dirname(sys.argv[1]) template_env = Environment( loader=FileSystemLoader(os.path.join(directory, "../_templates")) ) if not os.path.isfile(os.path.join(directory, "index.md")): raise Exception("{directory} is missing index.md") files = ["index.md"] files.extend( sorted( [ file for file in os.listdir(directory) if os.path.isfile(os.path.join(directory, file)) and re.match(".*\.md$", file) and file != "index.md" ] ) ) config = { "theme": "../_assets/reveal.js/css/theme/black.css", "mathjax": False, "controls": True, "progress": True, "history": True, "center": True, "show_notes": False, # on print "width": 1280, "height": 800, "transition": "none", # none, fade, slide, convex, concave, zoom "background_transition": "none", } content = "" for idx, file in enumerate(files): with open(os.path.join(directory, file), "r") as f: parts = f.read().split("---\n") if idx == 0: config = {**config, **yaml.safe_load(parts[0])} parts = parts[1:] section_content = "
" for slide in parts: for r in template_replace: slide = slide.replace(r[0], r[1]) # parse config slide_config = slide.split("\n")[0] slide = "\n".join(slide.split("\n")[1:]) if slide_config != "": slide_config = re.split(' (?=(?:[^"]|"[^"]*")*$)', slide_config) slide_config = list( map( lambda x: x if re.match("^style=.*", x) else f"data-{x}", slide_config, ) ) # data- slide_config = " " + " ".join(slide_config) slide_content = f"" slide_content += commonmark(slide) slide_content += "
" if slide_content != "
": section_content += slide_content section_content += "" if section_content != "
": content += section_content with open(os.path.join(directory, "index.html"), "w") as f: f.write(template_env.get_template("index.html.j2").render(config, content=content))