summaryrefslogtreecommitdiff
path: root/ftt-docgen
diff options
context:
space:
mode:
Diffstat (limited to 'ftt-docgen')
-rwxr-xr-xftt-docgen45
1 files changed, 41 insertions, 4 deletions
diff --git a/ftt-docgen b/ftt-docgen
index 6dd7ee9..1a9e31e 100755
--- a/ftt-docgen
+++ b/ftt-docgen
@@ -80,16 +80,45 @@ def write_fencedcode(bind, f, o):
else:
write_not_fable_snippet(bind, f, o)
+def write_indentedcode(bind, f, o):
+ for s in o.strings:
+ f.write(' {}\n'.format(s))
+ f.write('\n')
+
def write_horizontalrule(bind, f, o):
f.write('---\n')
+def write_list(bind, f, o):
+ pass
+
+def write_listitem(bind, f, o):
+ bullet = o.list_data['bullet_char']
+ offset = o.list_data['marker_offset']
+ padding = o.list_data['padding']
+ prefix = '{}{} '.format(' ' * offset, bullet)
+ cont = ' ' * padding
+ for c in o.children:
+ prepend = prefix
+ for s in c.strings:
+ f.write('{}{}\n'.format(prepend, s))
+ prepend = cont
+ return True
+
+def write_referencedef(bind, f, o):
+ for s in o.strings:
+ f.write('{}\n'.format(s))
+
writers = {
'Document': write_document,
'ATXHeader': write_atxheader,
'SetextHeader': write_setextheader,
'Paragraph': write_paragraph,
'FencedCode': write_fencedcode,
+ 'IndentedCode': write_indentedcode,
'HorizontalRule': write_horizontalrule,
+ 'List': write_list,
+ 'ListItem': write_listitem,
+ 'ReferenceDef': write_referencedef,
}
def write(bind, f, o):
@@ -97,12 +126,13 @@ def write(bind, f, o):
debug('{} not known'.format(repr(o.t)))
return
writer = writers[o.t]
- writer(bind, f, o)
+ return writer(bind, f, o)
def walk(o, func):
- func(o)
- for c in o.children:
- walk(c, func)
+ done = func(o)
+ if not done:
+ for c in o.children:
+ walk(c, func)
def debug(msg):
sys.stderr.write('DEBUG: {}\n'.format(msg))
@@ -114,11 +144,18 @@ bindings = yaml.safe_load(open(sys.argv[1]))
debug('reading inputs')
text = ''.join(open(filename).read() for filename in sys.argv[2:])
+if text.startswith('---\n'):
+ meta, text = text.split('\n...\n', 1)
+ meta += '\n...\n'
+else:
+ meta = ''
+
debug('parse')
parser = CommonMark.DocParser()
ast = parser.parse(text)
debug('output')
+sys.stdout.write(meta)
walk(ast, lambda o: write(bindings, sys.stdout, o))
debug('ok')