summaryrefslogtreecommitdiff
path: root/ftt-docgen
diff options
context:
space:
mode:
Diffstat (limited to 'ftt-docgen')
-rwxr-xr-xftt-docgen48
1 files changed, 41 insertions, 7 deletions
diff --git a/ftt-docgen b/ftt-docgen
index f73bb27..cb774e8 100755
--- a/ftt-docgen
+++ b/ftt-docgen
@@ -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))