#!/usr/bin/env python3
import html
import re
from subprocess import run
PROGRAM_RE = re.compile('\n'.join((
r'NOM : (?P[^\n]+)',
r'COMPOSITEURS : (?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}
{description}
{pieces}
'''
def piece(p):
if p == 'entracte':
return 'entracte'
return f'{html.escape(p)}'
def print_program(info):
info['description'] = run(
('pandoc',),
input=info['description'], capture_output=True, text=True, check=True
).stdout
info['pieces'] = '\n'.join(
piece(p[2:]) # Assume p.startswith('- ').
for p in info['pieces'].splitlines()
)
print(BLOCK_TEMPLATE.format_map(info))
def main():
for p in read_programs('programs.in'):
print_program(p.groupdict())
if __name__ == '__main__':
main()