#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os, re

SRCTREE = "Notes_Z"
TARGET = "Notes_O"

def doconvert(filename):
    fullinpath = os.path.join(SRCTREE, filename)
    infile = open(fullinpath, "r")
    tree = os.path.split(filename)
    fulloutpath = os.path.join(TARGET, re.sub("\\.txt$", ".md", filename)) 
    outfile = open(fulloutpath, "w")
    # skip first few lines until first blank newline
    while infile.readline().strip() != "": pass
    for l in infile.readlines():
        r = l.strip()
        # replace headings
        r = re.sub("====== (.*) ======", "# \\1", r)
        r = re.sub("===== (.*) =====", "## \\1", r)
        r = re.sub("==== (.*) ====", "### \\1", r)
        r = re.sub("=== (.*) ===", "#### \\1", r)
        r = re.sub("== (.*) ==", "##### \\1", r)
        r = re.sub("= (.*) =", "###### \\1", r)
        # replace codeblocks
        r = re.sub("\\{\\{\\{code: lang=\"(.*)\" linenumbers=\".+\"", "```\\1", r)
        r = re.sub("\\}\\}\\}", "```", r)
        r = re.sub("^'''", "```", r)
        r = re.sub("''(.+?)''", "```\\1```", r)
        # fix links
        r = re.sub("\\[\\[(.+?)\\|(.+?)\\]\\]", "[\\2](\\1)", r)
        # fix unwanted links
        r = re.sub("\\[\\[([/~])(.+?)\\]\\]", "`\\1\\2`", r)
        outfile.write(r+'\n')
    outfile.close()
    infile.close()

for root, dirs, files in os.walk(SRCTREE):
    for fi in files:
        if not fi.endswith(".txt"): continue
        rpath = os.path.join(root, fi).replace(SRCTREE + os.path.sep, "")
        tdir = os.path.join(TARGET, os.path.dirname(rpath))
        if not os.path.isdir(tdir): os.makedirs(tdir)
        doconvert(rpath)

