From 202b74e54885f88a546f721a6a8bbde3e825eb13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 20 Aug 2021 17:44:03 +0200 Subject: Support mode option for inline attachements. --- do.py | 101 +++++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 66 insertions(+), 35 deletions(-) diff --git a/do.py b/do.py index 89d56fa..7042a5f 100755 --- a/do.py +++ b/do.py @@ -57,6 +57,43 @@ def texify_filename(str): return out +def split_into_paragraphs(str): + lines = str.split('\n') + paragraphs = [] + paragraph = [] + for line in lines: + if line == '': + if paragraph == []: + continue + else: + paragraphs.append(paragraph) + paragraph = [] + else: + paragraph.append(line) + return paragraphs + +def parse_options_paragraph(paragraphs): + """ + check the first paragraph for a definition list, and parse that + into variables + """ + + options = {} + + for i in range(len(paragraphs[0])): + line = paragraphs[0][i] + if m := re.match('^(\w+)\s*::\s*(.*)', line): + options[m[1]] = m[2] + else: + # remove handled lines, keep remaining lines in paragraphs list + paragraphs[0] = paragraphs[0][i:] + break + else: + # remove first paragraph from paragraphs list + paragraphs = paragraphs[1:] + + return options, paragraphs + def resolve_mail(mode, addr, frag, comment): @@ -166,11 +203,25 @@ def resolve_default(mode, addr, frag, comment): outstr = '' if addr == '': page = get_heading(frag, data) + opts, paragraphs = parse_options_paragraph(split_into_paragraphs(page)) + options = { + 'mode': 'verbatim', + **opts + } + if mode == 'tex': - outstr += '\\begin{verbatim}\n' - outstr += page + '\n' + if options['mode'] == 'tex': + pass + else: + outstr += '\\begin{verbatim}\n' + for paragraph in paragraphs: + outstr += '\n'.join(paragraph) + outstr += '\n\n' if mode == 'tex': - outstr += '\\end{verbatim}\n' + if options['mode'] == 'tex': + pass + else: + outstr += '\\end{verbatim}\n' else: print(addr) print("Vimwiki intra-page links not yet supported") @@ -315,7 +366,7 @@ if __name__ == '__main__': attach_str += f'\n{st}\n{"="*len(st)}\n' resolver = resolvers.get(proto, resolve_default) - attach_str += resolver(addr, frag, comment) + attach_str += resolver(mode, addr, frag, comment) bilagor += [attach_str] @@ -327,41 +378,21 @@ if __name__ == '__main__': } # split the text into paragraph blocks - lines = outstr.split('\n') - paragraphs = [] - paragraph = [] - for line in lines: - if line == '': - if paragraph == []: - continue - else: - paragraphs.append(paragraph) - paragraph = [] - else: - paragraph.append(line) + paragraphs = split_into_paragraphs(outstr) - # check the first paragraph for a deffinition list, and parse that - # into variables - for i in range(len(paragraphs[0])): - line = paragraphs[0][i] - if m := re.match('^(\w+)\s*::\s*(.*)', line): - if m[1] == 'date': - dt = dtparser.parse(m[2]) - if mode == 'tex': - options['date'] = f'{dt:%Y--%m--%d}' - else: - options['date'] = f'{dt:%Y-%m-%d}' + override_options, paragraphs = parse_options_paragraph(paragraphs) + # Merge found options with default options + for key, value in override_options.items(): + # Parse and recard date option + if key == 'date': + dt = dtparser.parse(value) + if mode == 'tex': + options['date'] = f'{dt:%Y--%m--%d}' else: - options[m[1]] = m[2] + options['date'] = f'{dt:%Y-%m-%d}' else: - # remove handled lines, keep remaining lines in paragraphs list - paragraphs[0] = paragraphs[0][i:] - break - else: - # remove first paragraph from paragraphs list - paragraphs = paragraphs[1:] - + options[key] = value -- cgit v1.2.3