summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/lilyglyphs/lily-rebuild-pdfs.py
blob: b74ab26c6bf674a4913da8732742d6ca40ab917d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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()