From 2a83926c22bde49a4574c83d962f34150a511ce6 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 25 May 2019 21:42:47 +0300 Subject: Add: support for more Markdown features, Pandoc YAML metadata --- ftt-docgen | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file 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') -- cgit v1.2.1