#!/usr/bin/python import glob import markdown import os import shutil import sys import time from datetime import datetime def format_file(path, skip_up_to_date): basename = os.path.basename(path) basename = basename.split('.')[0] out_path = "build/site/" + basename + ".html" # See if it's up to date. source_mod = os.path.getmtime(path) source_mod = max(source_mod, os.path.getmtime('doc/site/template.html')) dest_mod = 0 if os.path.exists(out_path): dest_mod = os.path.getmtime(out_path) if skip_up_to_date and source_mod < dest_mod: return title = "" # Read the markdown file and preprocess it. contents = "" with open(path, "r") as input: # Read each line, preprocessing the special codes. for line in input: stripped = line.lstrip() indentation = line[:len(line) - len(stripped)] if stripped.startswith("^"): command,_,args = stripped.rstrip("\n").lstrip("^").partition(" ") args = args.strip() if command == "title": title = args else: print "UNKNOWN COMMAND:", command, args else: contents = contents + line html = markdown.markdown(contents, ['def_list', 'codehilite']) modified = datetime.fromtimestamp(os.path.getmtime(path)) mod_str = modified.strftime('%B %d, %Y') fields = {'title': title, 'html': html, 'mod': mod_str} with open("doc/site/template.html") as f: template = f.read() # Write the html output. with open(out_path, 'w') as out: out.write(template.format(**fields)) print "converted", basename def format_files(skip_up_to_date): for f in glob.iglob("doc/site/*.markdown"): format_file(f, skip_up_to_date) # Clean the output directory. if os.path.exists("build/site"): shutil.rmtree("build/site") os.mkdir("build/site") # Process each markdown file. format_files(False) # Copy the CSS file. shutil.copyfile("doc/site/style.css", "build/site/style.css") # TODO(bob): Check for CSS modification. if len(sys.argv) == 2 and sys.argv[1] == '--watch': while True: format_files(True) time.sleep(0.3)