#!/usr/bin/env python3 import html import re from subprocess import run from sys import argv from helpers import relative_path PROGRAM_RE = re.compile('\n'.join(( r'NOM : (?P[^\n]+)', r'COMPOSITEURS : (?P[^\n]+)', r'DUR[ÉE]E : (?P[^\n]+)', 'DESCRIPTION :', '(?P.+?)', 'MORCEAUX :', r'(?P(?:[^\n]+\n)*[^\n]+)' )), flags=re.DOTALL) def read_programs(programs): with open(programs) as f: return tuple(re.finditer(PROGRAM_RE, f.read())) BLOCK_TEMPLATE = '''\
{name}
{composers}

{duration}

{description}
    {pieces}
''' def piece(p): if p in ('entracte', 'intermission'): return f'
  • {p}
  • ' return f'
  • {html.escape(p)}
  • ' def pandoc(md): return run( ('pandoc', '--wrap=none'), input=md, capture_output=True, text=True, check=True ).stdout def print_program(info): info['name'] = re.sub( '

    (.+)

    ', r'\1', pandoc(info['name']) ) info['description'] = pandoc(info['description']) info['pieces'] = '\n'.join(map(piece, info['pieces'].splitlines())) print(BLOCK_TEMPLATE.format_map(info)) def main(programs_src): imgdir = relative_path(to='images', ref=programs_src) for p in read_programs(programs_src): info = p.groupdict() info['imgdir'] = imgdir print_program(info) if __name__ == '__main__': main(argv[1])