git.fiddlerwoaroof.com
Raw Blame History
from mako.template import Template
from mako.lookup import TemplateLookup
import distutils

import argparse
import urllib.parse
import glob
import os
import os.path
import lxml.html


parser = argparse.ArgumentParser()
parser.add_argument('indir')
parser.add_argument('--base', '-b', default='base.html', nargs='?')
parser.add_argument('--odir', '-o')
args = parser.parse_args()
if args.odir is None:
    args.odir = args.indir

mylookup = TemplateLookup(directories='templates')
template = mylookup.get_template('from-markdown.html')

items = []

counter = 0
for file in glob.glob1(args.indir, '*.md'):
    oname = os.path.join(args.odir, '%s.html' % file.rpartition('.')[0])

    with open(os.path.join(args.indir, file)) as f:
      out = template.render(content=f.read(), base=args.base)
      with open(oname, 'wb') as of:
          of.write(out.encode('utf-8'))
        
    counter += 1
    items.append({})
    htmldoc = lxml.html.fromstring(out)

    desc_el = htmldoc.xpath('//div[contains(@class,"container") and contains(@class, "has_description")]/p[1]')
    print(desc_el)
    desc_el = '' if not desc_el else desc_el[0]

    title_el = htmldoc.xpath('//h1 | //h2 | //h3 | //h4 | //h4 | //h6')
    title_el = '' if not title_el else title_el[0]

    items[-1].update(
            link=urllib.parse.quote(os.path.relpath(oname, args.odir)),
            counter = counter,
            title = oname if title_el is '' else title_el.text_content().strip(),
            description = desc_el if desc_el is '' else lxml.etree.tostring(desc_el).decode('utf-8')
    )

index_template = mylookup.get_template('index.html')
index = index_template.render(items=items, base=args.base)
with open(os.path.join(args.odir, 'index.html'), 'wb') as of:
    of.write(index.encode('utf-8'))