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'))