66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
|
#!/usr/bin/env python3
|
||
|
import os
|
||
|
|
||
|
def generate_set(title=None, scores=None, copy=False, root=None):
|
||
|
"""Generate a new lilypond file containing all entries from scores, if copy is False, they will be 'linked'"""
|
||
|
|
||
|
if title is not None:
|
||
|
title = "\\header {\n\ttitle = \""+ title + "\"\n}\n"
|
||
|
else:
|
||
|
title = ""
|
||
|
|
||
|
|
||
|
scorestext = ""
|
||
|
for item in scores:
|
||
|
if item.startswith('std'):
|
||
|
continue
|
||
|
|
||
|
# item is always relative
|
||
|
if root is not None:
|
||
|
item = os.path.join(root, item)
|
||
|
|
||
|
if not os.path.exists(item):
|
||
|
continue
|
||
|
|
||
|
if copy is True:
|
||
|
with open(item, 'r') as f:
|
||
|
for line in f:
|
||
|
if line.startswith('\\include'):
|
||
|
incline = line.replace('\\include', '').strip('"\' ')
|
||
|
|
||
|
if os.path.isabs(incline): #already absolute
|
||
|
incline = os.path.join(os.path.abspath(os.path.dirname(item)), incline)
|
||
|
|
||
|
line = "\\include \""+incline+"\""
|
||
|
scorestext += line.replace('\r', '')+'\n'
|
||
|
else:
|
||
|
scorestext += '\\include \"' + os.path.join( os.path.abspath( os.curdir ) ,item) + '\"\n'
|
||
|
|
||
|
|
||
|
## Output
|
||
|
if scorestext == "":
|
||
|
return False
|
||
|
|
||
|
|
||
|
return """\\version \"2.19.65\"
|
||
|
|
||
|
"""+ title + """
|
||
|
\\paper {
|
||
|
#(define page-breaking ly:minimal-breaking)
|
||
|
}
|
||
|
|
||
|
%% Scores
|
||
|
""" + scorestext
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
from argparse import ArgumentParser
|
||
|
parser = ArgumentParser(__file__)
|
||
|
parser.add_argument('-c',dest='copy',action='store_true',default=False,help="Copy files instead of just linkingi")
|
||
|
parser.add_argument('-t',dest='title',help="Title for the set",default=None)
|
||
|
parser.add_argument('scores',nargs='+')
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
print(generate_set(args.title, args.scores, args.copy))
|