Building depends now entirely on python.
Even with the Makefile the main part was already in the assemble.py file, so no big change.
This commit is contained in:
parent
9a1a42b286
commit
5f316fe97e
46
Makefile
46
Makefile
@ -1,46 +0,0 @@
|
|||||||
OUTDIR=out
|
|
||||||
PDFDIR=pdf
|
|
||||||
FILE = singalongs
|
|
||||||
GITINFO=revision.tex
|
|
||||||
LILY_PDF = lilypond-book --latex-program=lualatex --process="lilypond -dinclude-settings=lilysettings.ly" --pdf -o $(OUTDIR)
|
|
||||||
PDF=cd $(OUTDIR) && lualatex $(FILE).tex
|
|
||||||
INDEX=cd $(OUTDIR) && makeindex $(FILE).tex
|
|
||||||
REVISIONINFO = `git log -1 --format="%h"`
|
|
||||||
|
|
||||||
all: book booklet
|
|
||||||
|
|
||||||
book: $(OUTDIR) $(PDFDIR) $(GITINFO)
|
|
||||||
python assemble.py > $(OUTDIR)/$(FILE).lytex
|
|
||||||
cp lilysettings.ly $(OUTDIR)/
|
|
||||||
cp headfoot.tex $(OUTDIR)/
|
|
||||||
cp settings.tex $(OUTDIR)/
|
|
||||||
cp -r images/ $(OUTDIR)/images/
|
|
||||||
cp $(GITINFO) $(OUTDIR)/
|
|
||||||
$(LILY_PDF) $(OUTDIR)/$(FILE).lytex
|
|
||||||
$(PDF)
|
|
||||||
$(INDEX)
|
|
||||||
$(PDF)
|
|
||||||
cp $(CURDIR)/$(OUTDIR)/$(FILE).pdf $(CURDIR)/$(PDFDIR)/$(FILE).pdf
|
|
||||||
rm $(GITINFO)
|
|
||||||
|
|
||||||
booklet: book
|
|
||||||
pdf2ps $(OUTDIR)/$(FILE).pdf $(OUTDIR)/$(FILE).ps
|
|
||||||
psbook $(OUTDIR)/$(FILE).ps $(OUTDIR)/booklet_tmp.ps
|
|
||||||
pstops -pA4 '1:0@1.0(0cm,0cm)' $(OUTDIR)/booklet_tmp.ps $(OUTDIR)/booklet_tmp00.ps
|
|
||||||
psnup -2 $(OUTDIR)/booklet_tmp00.ps $(OUTDIR)/booklet.ps
|
|
||||||
ps2pdf $(OUTDIR)/booklet.ps $(OUTDIR)/$(FILE)_booklet.pdf
|
|
||||||
cp $(CURDIR)/$(OUTDIR)/$(FILE)_booklet.pdf $(CURDIR)/$(PDFDIR)/$(FILE)_booklet.pdf
|
|
||||||
|
|
||||||
$(OUTDIR):
|
|
||||||
mkdir -p $(OUTDIR)
|
|
||||||
|
|
||||||
$(PDFDIR):
|
|
||||||
mkdir -p $(PDFDIR)
|
|
||||||
|
|
||||||
$(GITINFO): FORCE
|
|
||||||
/bin/echo "\\newcommand{\\revision}{$(REVISIONINFO)}" > $(GITINFO)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf $(OUTDIR)
|
|
||||||
|
|
||||||
FORCE:
|
|
76
assemble.py
76
assemble.py
@ -1,76 +0,0 @@
|
|||||||
#!/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)
|
|
||||||
|
|
156
make.py
Executable file
156
make.py
Executable file
@ -0,0 +1,156 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
OUTDIR = 'out'
|
||||||
|
PDFDIR = 'pdf'
|
||||||
|
IMG_OUTDIR = os.path.join(OUTDIR, 'images')
|
||||||
|
PDFFILE = 'singalongs.pdf'
|
||||||
|
PDFBOOKLETFILE = 'singalongs_booklet.pdf'
|
||||||
|
PSFILE = 'singalongs.ps'
|
||||||
|
TEXFILE = 'singalongs.tex'
|
||||||
|
LYTEXFILE = os.path.join(OUTDIR, 'singalongs.lytex')
|
||||||
|
GITFILE = 'revision.tex'
|
||||||
|
|
||||||
|
def build():
|
||||||
|
make_paths()
|
||||||
|
assemble()
|
||||||
|
git_info()
|
||||||
|
copy()
|
||||||
|
build_book()
|
||||||
|
build_booklet()
|
||||||
|
|
||||||
|
def make_paths():
|
||||||
|
if not os.path.exists(OUTDIR):
|
||||||
|
os.makedirs(OUTDIR)
|
||||||
|
|
||||||
|
if not os.path.exists(PDFDIR):
|
||||||
|
os.makedirs(PDFDIR)
|
||||||
|
|
||||||
|
def assemble():
|
||||||
|
lilyfiles = find_ly_files()
|
||||||
|
songmap = build_songmap(lilyfiles)
|
||||||
|
lytex_source = build_lytex('singalongs.tex', songmap)
|
||||||
|
|
||||||
|
with open(LYTEXFILE, 'w') as f:
|
||||||
|
f.write(lytex_source)
|
||||||
|
|
||||||
|
def git_info():
|
||||||
|
latest_rev = subprocess.check_output('git log -1 --format="%h"', shell=True)
|
||||||
|
latest = '\\newcommand{\\revision}{' + latest_rev.decode('utf-8').strip() + '}'
|
||||||
|
|
||||||
|
with open(GITFILE, 'w') as f:
|
||||||
|
f.write(latest)
|
||||||
|
|
||||||
|
def copy():
|
||||||
|
shutil.copy('lilysettings.ly', OUTDIR)
|
||||||
|
shutil.copy('headfoot.tex', OUTDIR)
|
||||||
|
shutil.copy('settings.tex', OUTDIR)
|
||||||
|
shutil.copy(GITFILE, OUTDIR)
|
||||||
|
|
||||||
|
if os.path.exists(IMG_OUTDIR):
|
||||||
|
shutil.rmtree(IMG_OUTDIR)
|
||||||
|
shutil.copytree('images', IMG_OUTDIR)
|
||||||
|
|
||||||
|
def build_book():
|
||||||
|
lilycmd = 'lilypond-book --latex-program=lualatex --process="lilypond -dinclude-settings=lilysettings.ly" --pdf -o {0} {1}'.format(OUTDIR, LYTEXFILE)
|
||||||
|
pdfcmd = 'lualatex {}'.format(TEXFILE)
|
||||||
|
indexcmd = 'makeindex {}'.format(TEXFILE)
|
||||||
|
|
||||||
|
subprocess.call(lilycmd, shell=True)
|
||||||
|
subprocess.call(pdfcmd, shell=True, cwd=OUTDIR)
|
||||||
|
subprocess.call(indexcmd, shell=True, cwd=OUTDIR)
|
||||||
|
subprocess.call(pdfcmd, shell=True, cwd=OUTDIR)
|
||||||
|
|
||||||
|
shutil.copy(os.path.join(OUTDIR, PDFFILE), os.path.join(PDFDIR, PDFFILE))
|
||||||
|
|
||||||
|
os.remove(GITFILE)
|
||||||
|
|
||||||
|
def build_booklet():
|
||||||
|
pdf2pscmd = 'pdf2ps {0} {1}'.format(os.path.join(OUTDIR, PDFFILE), os.path.join(OUTDIR, PSFILE))
|
||||||
|
psbookcmd = 'psbook {0} {1}'.format(os.path.join(OUTDIR, PSFILE), os.path.join(OUTDIR, 'booklet_tmp.ps'))
|
||||||
|
pstopscmd = "pstops -pA4 '1:0@1.0(0cm,0cm)' {0} {1}".format(os.path.join(OUTDIR, 'booklet_tmp.ps'), os.path.join(OUTDIR, 'booklet_tmp00.ps'))
|
||||||
|
psnupcmd = 'psnup -2 {0} {1}'.format(os.path.join(OUTDIR, 'booklet_tmp00.ps'), os.path.join(OUTDIR, 'booklet.ps'))
|
||||||
|
ps2pdfcmd = 'ps2pdf {0} {1}'.format(os.path.join(OUTDIR, 'booklet.ps'), os.path.join(PDFDIR, PDFBOOKLETFILE))
|
||||||
|
|
||||||
|
subprocess.call(pdf2pscmd, shell=True)
|
||||||
|
subprocess.call(psbookcmd, shell=True)
|
||||||
|
subprocess.call(pstopscmd, shell=True)
|
||||||
|
subprocess.call(psnupcmd, shell=True)
|
||||||
|
subprocess.call(ps2pdfcmd, shell=True)
|
||||||
|
|
||||||
|
def clean():
|
||||||
|
shutil.rmtree(OUTDIR)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
action = sys.argv[1] if len(sys.argv) > 1 else 'build'
|
||||||
|
globals()[action]()
|
Loading…
Reference in New Issue
Block a user