#!/usr/bin/env python import os import sys import markdown import re # SRC # +-2022/ # | +-10/ # | +-12/ # | +-25/ # +-2023/ # | +-1/ # | +-26/ # | +-3/ # ... def print_usage(): print("\nusage: python mkblog.py SRC DEST\n") print("\n") print("\t\tSRC\tinput markdown file") print("\t\tDEST\tdestination html file") # check args if len(sys.argv) != 3: print_usage() sys.exit(1) src_file = sys.argv[1] dest_file = sys.argv[2] # check blog root exists if not os.path.isfile(src_file): print("{blog_root} doesn't exist") sys.exit(1) # make dest dir if it doesnt exist dest_dir = os.path.dirname(dest_file) print(dest_dir) if not os.path.isdir(dest_dir): os.makedirs(dest_dir) # write markdown into a dummy file first so that we can add lines before it in the final output dummy_file = f"{dest_file}.bak" open(dummy_file, 'w').close() print(f"{src_file} -> {dummy_file}") markdown.markdownFromFile(input=src_file, output=dummy_file, extensions=["fenced_code"]) print(f"{dummy_file} -> {dest_file}") with open(dummy_file, 'r') as read_file, open(dest_file, 'w') as write_file: write_file.write("#include blogstart.html\n") # modify the basic html to make it nicer for styling later html = read_file.read() # extract images from their enclosing

tags and put them in img panels html = re.sub('(

()

)', r'
\2
', html) # insert text-panel start between non-

and

elements html = re.sub('((?)\n)(

)', r'\1

\n\2', html) # insert para-block end between

and non-

elements html = re.sub('(

\n)((?!

))', r'\1

\n\2', html) # insert code-panel start before
 elements
    html = re.sub('(
)', r'
\n\1', html) # insert code-panel end after
elements html = re.sub('(
)', r'\1\n', html) # replace horizontal rules with nice separator dot html = re.sub('
', r'
', html) lines = html.split("\n") # tack on a closing div because we will have opened one without closing it on the final

lines.append("") for line in lines: write_file.write(line + "\n") write_file.write("\n#include blogend.html\n") os.remove(dummy_file)