#!/usr/bin/env python3 import html from pathlib import Path import re from subprocess import run def read_programs(plist): with open(plist) as l: return tuple(Path('programs', p.strip()) for p in l) PROGRAM_RE = re.compile('\n'.join(( 'NOM : (?P.+)', 'COMPOSITEURS : (?P.+)', 'DESCRIPTION :', '(?P.+)', 'MORCEAUX :', '(?P.+)' )), flags=re.DOTALL) def parse(filename): with open(filename) as program: return PROGRAM_RE.match(program.read()).groupdict() BLOCK_TEMPLATE = '''\
{name}
{composers}
{description}
    {pieces}
''' def piece(p): if p == 'entracte': return '
  • entracte
  • ' return f'
  • {html.escape(p)}
  • ' def print_program(filename): info = parse(filename) info['description'] = run( ('pandoc',), input=info['description'], capture_output=True, text=True, check=True ).stdout info['pieces'] = '\n'.join( piece(p) for p in info['pieces'].splitlines() ) print(BLOCK_TEMPLATE.format_map(info)) def main(): for p in read_programs('programs/programs.list'): print_program(p) if __name__ == '__main__': main()