summaryrefslogtreecommitdiff
path: root/macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py')
-rwxr-xr-xmacros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py b/macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py
new file mode 100755
index 0000000000..b74ab26c6b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+# %
+# This file is part of the 'lilyglyphs' LaTeX package. %
+# ========== %
+# %
+# https://github.com/openlilylib/lilyglyphs %
+# http://www.openlilylib.org/lilyglyphs %
+# %
+# Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+# %
+# 'lilyglyphs' is free software: you can redistribute it and/or modify %
+# it under the terms of the LaTeX Project Public License, either %
+# version 1.3 of this license or (at your option) any later version. %
+# You may find the latest version of this license at %
+# http://www.latex-project.org/lppl.txt %
+# more information on %
+# http://latex-project.org/lppl/ %
+# and version 1.3 or later is part of all distributions of LaTeX %
+# version 2005/12/01 or later. %
+# %
+# This work has the LPPL maintenance status 'maintained'. %
+# The Current Maintainer of this work is Urs Liska (see above). %
+# %
+# This work consists of the files listed in the file 'manifest.txt' %
+# which can be found in the 'license' directory. %
+# %
+# This program is distributed in the hope that it will be useful, %
+# but WITHOUT ANY WARRANTY; without even the implied warranty of %
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. %
+# %
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+# ########################################################################
+# #
+# rebuild-pdfs.py #
+# #
+# This program looks in the directories where the generated .ly files #
+# and the generated pdf images are stored. #
+# If it finds that there are missing pdfs it will recompile them #
+# using LilyPond. #
+# #
+# The main purpose is to allow the creation of pdf images of glyphs #
+# that already have been processed to LaTeX commands but whose PDF #
+# files have been lost. #
+# The other purpose is to update the set of PDF files to a new version #
+# of Emmentaler or LilyPond without touching the definitions. #
+# #
+# ########################################################################
+
+import os, sys, subprocess, argparse, lilyglyphs_common as lg
+
+
+def main():
+ """Main walk through the program"""
+ print 'rebuild-pdfs.py'
+ print 'regenerate all pdf images that are not present (anymore)'
+ print ''
+
+ # Check if we are in a legal CWD and ensure a PDF subdir is present
+ check_paths()
+
+ # build a list of commands with missing PDF files
+ src_files = check_missing_pdfs()
+
+ # is there anything to be done at all?
+ if len(src_files) == 0:
+ print ''
+ print 'No image files missing, nothing to be done.'
+ print 'If you want to re-create pdfs, then delete them first'
+ sys.exit(0)
+ print ''
+ print 'Found ' + str(len(src_files)) + ' missing file(s).'
+ for cmd in src_files:
+ print '- ' + cmd
+
+ # compile all LilyPond files without matching pdf
+ lg.lily_files = src_files
+ lg.compile_lily_files()
+
+ # clean up directories
+ lg.cleanup_lily_files()
+
+def check_missing_pdfs():
+ """Compares the list of LilyPond source and resulting PDF files.
+ Returns a list of LilyPond source file basenames
+ which don't have a corresponding PDF file"""
+ print 'Reading file lists, counting missing pdf files'
+
+ # read existing .pdf files in lg.dir_pdfs
+ img_files = []
+ for entry in os.listdir(lg.dir_pdfs):
+ entry = os.path.join(lg.dir_pdfs, entry)
+ if os.path.isfile(entry):
+ path, name = os.path.split(entry)
+ basename, ext = os.path.splitext(name)
+ if ext == '.pdf':
+ img_files.append(basename)
+
+ # read existing .ly source files in in_dir
+ # and add them to the sources list if the image is missing
+ src_files = []
+ for entry in os.listdir(lg.dir_lysrc):
+ entry = os.path.join(lg.dir_lysrc, entry)
+ if os.path.isfile(entry):
+ path, name = os.path.split(entry)
+ basename, ext = os.path.splitext(name)
+ if ext == '.ly' and basename not in img_files:
+ src_files.append(basename)
+ return src_files
+
+def check_paths():
+ """Checks if we're in the right CWD
+ and makes sure that there is a pdf output directory available"""
+
+ print 'Checking directories ...'
+
+ # check the presence of the necessary subdirectories
+ ls = os.listdir('.')
+ if not 'generated_src' in ls:
+ print 'No LilyPond source files directory found.'
+ print 'Sorry, there is something wrong :-('
+ print 'Current working directory is: ' + os.getcwd()
+ print 'Please consult the manual.'
+ sys.exit(2)
+ if not 'pdfs' in ls:
+ os.mkdir('pdfs')
+
+ print '... done'
+ print ''
+
+
+# ####################################
+# Finally launch the program
+if __name__ == "__main__":
+ # parse command line arguments
+ parser = argparse.ArgumentParser(
+ description='Rebuild all pdfs missing in the \'pdfs\' subdiredtory',
+ parents=[lg.common_arguments])
+ args = parser.parse_args()
+ main()