#!/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()