diff options
Diffstat (limited to 'ftt-docgen')
-rwxr-xr-x | ftt-docgen | 48 |
1 files changed, 41 insertions, 7 deletions
@@ -1,9 +1,12 @@ #!/usr/bin/env python3 +import argparse import copy import os import re +import subprocess import sys +import tempfile import CommonMark_bkrs as CommonMark import yaml @@ -229,21 +232,42 @@ def walk(o, func): for c in o.children: walk(c, func) -def infer_bindings_filename(markdowns): +def infer_basename(markdowns): root, ext = os.path.splitext(markdowns[0]) if ext not in ['.md', '.mdwn']: sys.exit('Input filenames must end in .md or .mdwn') - return root + '.yaml' + return root + +# This only allows one markdown filename. This is crap. But I can't +# get it work with -- otherwise. What I want is for the following to +# work: +# ftt-docgetn --pdf foo.md bar.md -- --pandoc-arg --other-pandoc-arg +# but I can't make it work. +def parse_cli(): + p = argparse.ArgumentParser() + p.add_argument('--pdf', action='store_true') + p.add_argument('--html', action='store_true') + p.add_argument('markdown', nargs=1) + args, pandoc_args = p.parse_known_args() + return args, pandoc_args def debug(msg): if False: sys.stderr.write('DEBUG: {}\n'.format(msg)) sys.stderr.flush() -markdowns = sys.argv[1:] -text = ''.join(open(filename).read() for filename in markdowns) +def pandoc(args): + argv = ['ftt-pandoc'] + args + subprocess.check_call(argv) -with open(infer_bindings_filename(markdowns)) as f: +args, pandoc_args = parse_cli() + +text = ''.join(open(filename).read() for filename in args.markdown) + +basename = infer_basename(args.markdown) +dirname = os.path.dirname(basename) + +with open(basename + '.yaml') as f: bindings = yaml.safe_load(f) @@ -258,5 +282,15 @@ else: parser = CommonMark.DocParser() ast = parser.parse(text) -sys.stdout.write(meta) -walk(ast, lambda o: write(bindings, sys.stdout, o)) +if args.pdf or args.html: + with tempfile.NamedTemporaryFile(mode='w', dir=dirname) as f: + f.write(meta) + walk(ast, lambda o: write(bindings, f, o)) + f.flush() + if args.pdf: + pandoc(['-o', basename + '.pdf', f.name] + pandoc_args) + elif args.html: + pandoc(['-o', basename + '.html', f.name] + pandoc_args) +else: + sys.stdout.write(meta) + walk(ast, lambda o: write(bindings, sys.stdout, o)) |