#!/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()