#!/usr/bin/env python3
import sys
import os
import argparse
import time
import re
from string import Template
import markdown
html_template = '''
$title
$html_content
'''
extensions = ['toc', 'codehilite', 'meta', 'fenced_code', 'tables']
extension_configs = {
'toc' : [('anchorlink', True)],
'codehilite' : [],
'meta' : []
}
md = markdown.Markdown(extensions=extensions, extension_configs=extension_configs)
def convert(infile, outdir):
md_content_lines = []
with open (infile, "r") as md_file:
is_root_entry = ('README.md' in infile)
link_pattern = '(.*)\[(.*)\]\(doc/(.*)\.md\)(.*)'
for line in md_file.readlines():
found_link = re.match(link_pattern, line)
if found_link:
md_content_lines.append(found_link.group(1) + '[' + found_link.group(2) + '](' + ('markdown/' if is_root_entry else '') + found_link.group(3) + '.html)' + found_link.group(4))
else:
md_content_lines.append(line)
md_content = '\n'.join(md_content_lines)
title_found = re.compile("# *(.+)").findall(md_content)
title = '' if not title_found else title_found[0]
html_content = md.convert(md_content)
html_doc = Template(html_template).substitute(date=time.strftime("%Y. %m. %d"), title=title, html_content=html_content)
if not os.path.exists(outdir):
os.makedirs(outdir)
outfile = os.path.join(outdir, 'index.html' if is_root_entry else (os.path.splitext(os.path.basename(infile))[0] + '.html'))
with open(outfile, 'w') as html_file:
html_file.write(html_doc)
def main():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-i", "--in-files", nargs='+', help=' Markdown files to convert', required=True)
parser.add_argument("-o", "--out-dir", help=' The directory to output converted html files', required=True)
args = parser.parse_args()
for in_file in args.in_files:
convert(in_file, args.out_dir)
if __name__ == "__main__":
main()