77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
import re
|
|
|
|
lily_template = """
|
|
\chapter {[[title]]}
|
|
\lilypondfile{[[scorefile]]}
|
|
~\\ ~\\
|
|
\input{[[lyricfile]]}
|
|
"""
|
|
|
|
def find_ly_files(path='./scores'):
|
|
lilyfiles = []
|
|
for found_file in os.listdir(path):
|
|
if found_file.endswith(".ly"):
|
|
filepath = os.path.join(path, found_file)
|
|
lilyfiles.append(filepath)
|
|
|
|
return lilyfiles
|
|
|
|
def build_songmap(lilyfiles, lyric_folder='./lyrics'):
|
|
songmap = []
|
|
for scorefile in lilyfiles:
|
|
filename_with_ext = os.path.basename(scorefile)
|
|
filename = os.path.splitext(filename_with_ext)[0]
|
|
lyricfile = os.path.join(lyric_folder, "{0}.tex".format(filename))
|
|
|
|
title = find_title(scorefile)
|
|
|
|
# for windows systems
|
|
scorefile = scorefile.replace('\\', '/')
|
|
lyricfile = lyricfile.replace('\\', '/')
|
|
|
|
songmap.append({'scorefile': scorefile, 'lyricfile': lyricfile, 'title': title })
|
|
|
|
return songmap
|
|
|
|
def find_title(scorefile):
|
|
with open(scorefile) as opened_file:
|
|
score = opened_file.read()
|
|
title = re.findall('title = "(.*)"', score)
|
|
|
|
return title[0]
|
|
|
|
def build_lytex(base_template, songmap):
|
|
lilychapters = []
|
|
for song in sorted(songmap, key=lambda k: k['scorefile']):
|
|
lilychapter = lily_template.replace('[[title]]', song['title'])
|
|
lilychapter = lilychapter.replace('[[scorefile]]', song['scorefile'])
|
|
lilychapter = lilychapter.replace('[[lyricfile]]', song['lyricfile'])
|
|
|
|
lilychapters.append(lilychapter)
|
|
|
|
lilychapters_string = create_lilychapter_string(lilychapters)
|
|
|
|
with open(base_template) as opened_file:
|
|
template = opened_file.read()
|
|
template = template.replace('\\musicbooklet', lilychapters_string)
|
|
|
|
return template
|
|
|
|
def create_lilychapter_string(lilychapters):
|
|
lilychapter_string = ''
|
|
for lilychapter in lilychapters:
|
|
lilychapter_string += '{0}\n'.format(lilychapter)
|
|
|
|
return lilychapter_string
|
|
|
|
lilyfiles = find_ly_files()
|
|
songmap = build_songmap(lilyfiles)
|
|
lytex_source = build_lytex('singalongs.tex', songmap)
|
|
|
|
print(lytex_source)
|
|
|