mirror of
				https://github.com/kastdeur/pipeband-music.git
				synced 2025-10-31 02:16:34 +01:00 
			
		
		
		
	Slight update to make-set script
This commit is contained in:
		
							parent
							
								
									ae5d3758ce
								
							
						
					
					
						commit
						32c6835063
					
				
					 3 changed files with 36 additions and 309 deletions
				
			
		|  | @ -1,3 +1,3 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| ./build {*marches,airs,christmas,hornpipes,jigs,other,reels,sinterklaas,strathspeys}/**/*.ly standards/*.ly | ||||
| ./build {*marches,airs,christmas,hornpipes,jigs,other,reels,sinterklaas,strathspeys,suites}/**/*.ly standards/*.ly | ||||
|  |  | |||
							
								
								
									
										66
									
								
								make-set
									
										
									
									
									
								
							
							
						
						
									
										66
									
								
								make-set
									
										
									
									
									
								
							|  | @ -8,41 +8,17 @@ 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() | ||||
| 	sys.exit(1) | ||||
| 
 | ||||
| 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 {"+ | ||||
|     "title = \"" + args.title + "\""+ | ||||
| "}\n") | ||||
| 
 | ||||
| fprint( | ||||
| "\paper {"+ | ||||
|     "#(define page-breaking ly:minimal-breaking)" + | ||||
| "}\n") | ||||
| 
 | ||||
| fprint("#(ly:set-option 'relative-includes #t)\n") | ||||
| 
 | ||||
| fprint("\n\n%Scores\n") | ||||
| 
 | ||||
| scorestext = "" | ||||
| for f in args.scores: | ||||
| 
 | ||||
| 	if not os.path.exists(f): | ||||
|  | @ -51,9 +27,9 @@ for f in args.scores: | |||
| 	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')	 | ||||
| 		text = text.split(u'\n') | ||||
| 
 | ||||
| 		for line in text:	 | ||||
| 		for line in text: | ||||
| 			if line.startswith(u'\\include'): | ||||
| 				incline = line.replace('\\include', '').strip('"\' ') | ||||
| 			 | ||||
|  | @ -61,8 +37,36 @@ for f in args.scores: | |||
| 					incline = os.path.join(os.path.abspath(os.path.dirname(f)), incline) | ||||
| 			 | ||||
| 				line = "\\include \""+incline+"\"" | ||||
| 			fprint(line.replace('\r', '')+'\n') | ||||
| 			scorestext += line.replace('\r', '')+'\n' | ||||
| 	else: | ||||
| 		fprint('\\include \"' + os.path.join( os.path.abspath( os.curdir ) ,f) + '\"\n') | ||||
| 		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() | ||||
|  |  | |||
							
								
								
									
										277
									
								
								makedrum
									
										
									
									
									
								
							
							
						
						
									
										277
									
								
								makedrum
									
										
									
									
									
								
							|  | @ -1,277 +0,0 @@ | |||
| #!/usr/bin/env python3 | ||||
| 
 | ||||
| ## Generate pdf form lilypond file | ||||
| ## by using standard command | ||||
| ## | ||||
| ## Most of programming was done by Sven Axelsson, http://svenax.net/ | ||||
| 
 | ||||
| import io, os | ||||
| from argparse import ArgumentParser | ||||
| 
 | ||||
| class MakeDrum: | ||||
| 	LILYPOND = 'lilypond' | ||||
| 	VERSION  = '0.9.7' | ||||
| 	MASTER_DIR = os.path.dirname(os.path.abspath(__file__)) | ||||
| 	RUN_DIR = os.path.abspath(os.curdir) | ||||
| 	TMP_DIR  = 'tmp' | ||||
| 	TMP_PREFIX = 'tmp_' | ||||
| 	OUT_DIR = '.' | ||||
| 
 | ||||
| 	def __init__(self): | ||||
| 		# Gather options and create the template file | ||||
| 		usage = __file__ | ||||
| 		parser = ArgumentParser(usage) | ||||
| 
 | ||||
| 		parser.add_argument('--version', | ||||
| 			action='store_true', dest='show_version', default=False, | ||||
| 			help='show makeDrum version and exit') | ||||
| 		parser.add_argument('--lilyversion', | ||||
| 			action='store_true', dest='show_lilyversion', default=False, | ||||
| 			help='show Lilypond version and exit') | ||||
| 		parser.add_argument('-l', '--lilycommand', | ||||
| 			default=self.LILYPOND, dest='lilypond', | ||||
| 			help='Command used to compile') | ||||
| 			 | ||||
| 
 | ||||
| 		parser.add_argument('-i', '--include', | ||||
| 			dest='includes', nargs='*', default=[],action='append', | ||||
| 			help='Include the specified file for compiling') | ||||
| 		parser.add_argument('-I', '--path-include', | ||||
| 			dest='search_paths', nargs='*', default=[], action='append', | ||||
| 			help='Paths for lilypond to search through while compiling') | ||||
| 
 | ||||
| 		parser.add_argument('-p', '--paper-size', | ||||
| 			dest='papersize', default='a4', | ||||
| 			help='Paper size. Default: A4') | ||||
| 		parser.add_argument('-o', '--orientation', | ||||
| 			dest='orientation', default='landscape', | ||||
| 			help='Paper orientation. Default: landscape') | ||||
| 		parser.add_argument('-s', '--staff-size', | ||||
| 			dest='staffsize', default='18', | ||||
| 			help='Staff size. Default: 18pt.') | ||||
| 		parser.add_argument('-w', '--view-spacing', | ||||
| 			action='store_true', dest='view_spacing', default=False, | ||||
| 			help='Turn on "Paper.annotatespacing".') | ||||
| 
 | ||||
| 		parser.add_argument('--rename', | ||||
| 			action='store_true', dest='rename', default=False, | ||||
| 			help='Rename the final output to it\'s relative location, replacing /\'s with -\'s') | ||||
| 		parser.add_argument('-r', '--suffix', | ||||
| 			dest='suffix', default='', | ||||
| 			help='String added at end of pdf\'s filename') | ||||
| 		parser.add_argument('-g', '--generated', | ||||
| 			dest='gen_out', default=self.TMP_DIR, | ||||
| 			help='Put generated lilyfiles in $gen_out') | ||||
| 		parser.add_argument('-q', '--self-compilable', default=False, | ||||
| 			action='store_true', dest='compilable', | ||||
| 			help='Make a self compilable file') | ||||
| 		parser.add_argument('--no-compile', default=True, | ||||
| 			action='store_false', dest='compile', | ||||
| 			help='Do not compile generated Lilypond files') | ||||
| 		parser.add_argument('--no-log', | ||||
| 			action='store_false', dest='log', default=True, | ||||
| 			help='Do not generate log files.') | ||||
| 		parser.add_argument('--no-cleanup', | ||||
| 			action='store_false', dest='clean', default=True, | ||||
| 			help='Leave all temporary files in place') | ||||
| 		parser.add_argument('-d', '--out-dir', | ||||
| 			dest='out_dir', default=self.OUT_DIR, | ||||
| 			help='Output dir, for lilypond. If it doesn\'t exist, try to create it') | ||||
| 		parser.add_argument('music_file', | ||||
| 			default='', nargs='*', | ||||
| 			help='file to process') | ||||
| 		parser.add_argument('-@', '--list_file', | ||||
| 			dest='list_file', default='', | ||||
| 			help='list of files to process') | ||||
| 
 | ||||
| 		# All unknown args are passed on to the lilypond command | ||||
| 		self.args, self.unknownargs = parser.parse_known_args() | ||||
| 
 | ||||
| 		if self.args.show_version: | ||||
| 			print(__name__, ' ', self.VERSION) | ||||
| 			return | ||||
| 
 | ||||
| 		if self.args.show_lilyversion: | ||||
| 			print(os.system(self.LILYPOND+' --version')) | ||||
| 			return | ||||
| 
 | ||||
| 		if self.args.view_spacing: | ||||
| 			self.args.view_spacing = "##t" | ||||
| 		else: | ||||
| 			self.args.view_spacing = "##f" | ||||
| 
 | ||||
| 		# Input files | ||||
| 		if self.args.list_file != '': | ||||
| 			with io.open(self.args.list_file, 'r', encoding='utf8') as list_file: | ||||
| 				for line in list_file.readlines(): | ||||
| 					self.args.music_file.append(line) | ||||
| 
 | ||||
| 		# Check for files | ||||
| 		if not self.args.music_file: | ||||
| 			parser.print_usage() | ||||
| 			return | ||||
| 
 | ||||
| 		# Check for files to include | ||||
| 		self.args.includes = [el for elements in self.args.includes for el in elements] | ||||
| 
 | ||||
| 		# Clean up of files | ||||
| 		self.remove_tmp_dir = self.args.clean | ||||
| 
 | ||||
| 		if not os.path.exists(os.path.join(os.path.curdir, self.TMP_DIR)): | ||||
| 			try: os.makedirs(os.path.join(os.path.curdir, self.TMP_DIR)) | ||||
| 			except: | ||||
| 				print('Seems like no temporary directory can be created') | ||||
| 				return | ||||
| 		if not os.path.exists(os.path.join(os.path.curdir, self.args.out_dir)): | ||||
| 			try: os.makedirs(os.path.join(os.path.curdir, self.args.out_dir)) | ||||
| 			except: | ||||
| 				print('Seems like no output directory can be created') | ||||
| 				return | ||||
| 
 | ||||
| 		for file_path in self.args.music_file: | ||||
| 			self.processit(self.TMP_DIR, os.path.join(self.RUN_DIR, file_path), self.args.gen_out, self.args.compile) | ||||
| 
 | ||||
| 		if not os.listdir(self.TMP_DIR): | ||||
| 			os.rmdir(self.TMP_DIR) | ||||
| 
 | ||||
| 
 | ||||
| 	def processit(self, tmp_dir, file, gen_out, compile): | ||||
| 		print ('Generating for ',file, end=' ', flush=True) | ||||
| 		tmp_file = self.maketemplate(tmp_dir, file, self.args.compilable) | ||||
| 		print ('[OK]') | ||||
| 
 | ||||
| 
 | ||||
| 		if gen_out is not None and gen_out != tmp_dir: | ||||
| 			new_tmp_file = os.path.basename(tmp_file).replace(self.TMP_PREFIX, ''); | ||||
| 			print ('Moving ', tmp_file, ' to ', new_tmp_file, end=' ', flush=True) | ||||
| 			gen_dir = os.path.join(self.RUN_DIR, gen_out); | ||||
| 			# if not dir $gen_out, make it | ||||
| 			if not os.path.exists(gen_dir): | ||||
| 				try: os.makedirs(gen_dir) | ||||
| 				except: | ||||
| 					print('[Error]') | ||||
| 					print(' ! Seems like the {} directory cannot be created'.format(gen_dir)) | ||||
| 					return | ||||
| 			# mv file to dir, remove self.TMP_PREFIX | ||||
| 			os.rename(tmp_file, os.path.join(gen_dir, new_tmp_file)) | ||||
| 			tmp_file = new_tmp_file | ||||
| 			print('[OK]') | ||||
| 
 | ||||
| 		if compile: | ||||
| 			if self.args.log: | ||||
| 				logfile = os.path.join(self.TMP_DIR, os.path.relpath(file).replace(".ly", '').replace('/', '-')+'.log') | ||||
| 				log = ' > '+logfile+' 2>&1' | ||||
| 			else: | ||||
| 				log = '' | ||||
| 
 | ||||
| 			print ('Compiling ', file, end=' ', flush=True) | ||||
| 			if not self.args.log: | ||||
| 				print() | ||||
| 
 | ||||
| 			# stringify search paths | ||||
| 			#TODO: this is ugly code | ||||
| 			paths = ' -I '.join(str(x)[1:-1] for x in self.args.search_paths) | ||||
| 			if paths: | ||||
| 			    paths = ' -I ' + paths | ||||
| 
 | ||||
| 			if self.args.rename: | ||||
| 			    lilyout = os.path.join(self.RUN_DIR, self.args.out_dir, os.path.basename(tmp_file).replace(self.TMP_PREFIX, '').rsplit( ".", 1 )[ 0 ]) | ||||
| 			else: | ||||
| 			    lilyout = os.path.basename(file).rsplit( ".", 1 )[ 0 ] | ||||
| 
 | ||||
| 
 | ||||
| 			unknownargs = " " + " ".join(self.unknownargs) | ||||
| 
 | ||||
| 			lilycmd = self.LILYPOND + unknownargs + paths + ' --output='+lilyout+' '+tmp_file+log | ||||
| 
 | ||||
| 			if os.system(lilycmd) != 0: | ||||
| 				self.remove_tmp_dir = False | ||||
| 				print ('[Error]') | ||||
| 				if self.args.log: | ||||
| 					print (' ! Did not compile, please see the log at ', logfile) | ||||
| 			else : | ||||
| 				print ('[OK]') | ||||
| 	 | ||||
| 				if self.args.clean: | ||||
| 					#remove files | ||||
| 					if self.args.log: | ||||
| 						os.remove(logfile) | ||||
| 					if not self.args.compilable: | ||||
| 						os.remove(tmp_file) | ||||
| 
 | ||||
| 
 | ||||
| 	def maketemplate(self, tmp_dir, file, compilable): | ||||
| 
 | ||||
| 		lily_includes = '' | ||||
| 
 | ||||
| 		# set up a tmp file with template and file combined | ||||
| 		tmp_file = os.path.join(tmp_dir, self.TMP_PREFIX + os.path.relpath(file).replace('../','').replace('music/','',1).replace('/', '-')[:-3] + self.args.suffix + '.ly') | ||||
| 
 | ||||
| 		# Make the file | ||||
| 		with io.open(tmp_file, 'w+', encoding='utf8') as out_file: | ||||
| 
 | ||||
| 			def printline(line, relpath = file): | ||||
| 
 | ||||
| 				# Check if there's an include in the line, if there is try to copy it all (Recursive) | ||||
| 				if line.startswith(u'\\include'): | ||||
| 					# Rewrite includes to absolute location of file | ||||
| 					incline = line.replace('\\include', '').strip('"\'\n ') | ||||
| 					printline(u"\n %%%% \"{}\"\n".format(incline)) | ||||
| 
 | ||||
| 					# Only rewrite if it begins with a dot | ||||
| 					# if / it's absolute, and something else means search_path | ||||
| 					if incline.startswith('.'): # | ||||
| 						incline = os.path.join(os.path.abspath(os.path.dirname(relpath)), incline) | ||||
| 
 | ||||
| 					if compilable: | ||||
| 						try: | ||||
| 							inc_file = io.open(incline,'r',encoding='utf8') | ||||
| 						except IOError: | ||||
| 							out_file.write(line + "%% Error to copy %%\n") | ||||
| 							return | ||||
| 						with inc_file: | ||||
| 							for subline in inc_file.readlines(): | ||||
| 								printline(subline, incline) | ||||
| 					else: | ||||
| 						out_file.write(u"\\include \""+incline+"\"\n") | ||||
| 					return | ||||
| 
 | ||||
| 				out_file.write(line.replace('\r', '')) | ||||
| 
 | ||||
| 			# Go do things with it | ||||
| 			printline(u'\ufeff') | ||||
| 
 | ||||
| 			printline( | ||||
| u"""% Generated from """+file+""" by """+__file__+""" version """+self.VERSION+""" | ||||
| \\version "2.18.0" | ||||
| 
 | ||||
| #(ly:set-option 'point-and-click #f) | ||||
| %\layout { | ||||
| % \context { | ||||
| %   \Score { | ||||
| %	 \override NonMusicalPaperColumn #'line-break-permission = ##f | ||||
| %   } | ||||
| % } | ||||
| %} | ||||
| """) | ||||
| 			for f in self.args.includes: | ||||
| 				printline(u"\n") | ||||
| 				printline(u"\\include \"{}\"".format(f), self.RUN_DIR+'/build') | ||||
| 
 | ||||
| 			printline(u""" | ||||
| #(set-global-staff-size """+self.args.staffsize+""") | ||||
| #(set-default-paper-size \""""+self.args.papersize+"""\" '"""+self.args.orientation+""") | ||||
| 
 | ||||
| % The tune to generate. | ||||
| """) | ||||
| 
 | ||||
| 			# Read lily file into tmp file | ||||
| 			with io.open(file, 'r', encoding='utf8') as in_file: | ||||
| 				for line in in_file.readlines(): | ||||
| 					if line.startswith(u'\ufeff'): continue | ||||
| 
 | ||||
| 					printline(line) | ||||
| 		# Return tmp_file_path | ||||
| 		return tmp_file | ||||
| 
 | ||||
| MakeDrum(); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Teunis de Boone
						Eric Teunis de Boone