-
Notifications
You must be signed in to change notification settings - Fork 0
/
make-set
executable file
·72 lines (51 loc) · 1.86 KB
/
make-set
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
#!/bin/python3
## Script to easily generate a set (concatenated scores)
import codecs, os, sys
from argparse import ArgumentParser
parser = ArgumentParser(__file__)
parser.add_argument('setfile')
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")
parser.add_argument('-e',dest='write_empty',action='store_true',default=False,help="Write empty sets")
parser.add_argument('scores',nargs='+')
args = parser.parse_args()
if os.path.isdir(args.setfile):
print("First argument cannot be a directory ")
sys.exit(1)
scorestext = ""
for f in args.scores:
if not os.path.exists(f):
continue
if args.copy is True:
text = codecs.open(f, 'r', 'utf8').read()
if text.startswith(u'\ufeff'): text = text[1:]
text = text.split(u'\n')
for line in text:
if line.startswith(u'\\include'):
incline = line.replace('\\include', '').strip('"\' ')
if not incline.startswith('\\'): #already absolute
incline = os.path.join(os.path.abspath(os.path.dirname(f)), incline)
line = "\\include \""+incline+"\""
scorestext += line.replace('\r', '')+'\n'
else:
scorestext += '\\include \"' + os.path.join( os.path.abspath( os.curdir ) ,f) + '\"\n'
if scorestext == "" and not args.write_empty:
sys.exit()
# Write the file
if os.path.dirname(args.setfile):
os.makedirs(os.path.dirname(args.setfile), exist_ok=True)
if args.setfile == '--':
fprint = print
else:
fpoint = codecs.open(args.setfile, 'w+', 'utf8')
fprint = fpoint.write
fprint(u'\ufeff')
fprint('\\version \"2.18.2\"\n\n')
if args.title:
fprint(
"\header {\n\ttitle = \"" + args.title + "\"\n}\n")
fprint("\paper {\n\t#(define page-breaking ly:minimal-breaking)\n}\n")
fprint("#(ly:set-option 'relative-includes #t)\n")
fprint("\n\n%Scores\n")
fprint(scorestext)
fpoint.close()