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