From a81ccb9bdef6e800dbf05a985096b847304567fd Mon Sep 17 00:00:00 2001 From: fred Date: Wed, 22 Jul 1998 15:40:26 +0000 Subject: [PATCH] lilypond-1.0.1 --- scripts/mudela-book.py | 246 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 scripts/mudela-book.py diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py new file mode 100644 index 0000000000..ce491b816e --- /dev/null +++ b/scripts/mudela-book.py @@ -0,0 +1,246 @@ + +# python version of mudela-book. WIP. + +# TODO: center option + +# log: + +# 0.3: +# rewrite in Python. + +import os +import string +import regex +import getopt +import sys +import regsub + +outdir = 'out/' +program_version = '0.3' + + + + +def file_exist_b(name): + try: + f = open(name) + except IOError: + return 0 + f.close () + return 1 + +class CompileStatus: + pass + +def file_mtime (name): + return os.stat (name)[8] #mod time + +def compile (command, infile, outfile): + indate = file_mtime (infile) + try: + outdate = file_mtime (outfile) + recompile = indate > outdate + + except os.error: + recompile = 1 + + if recompile: + sys.stderr.write ('invoking `%s\'\n' % command) + + status = os.system (command) + if status: + raise CompileStatus + + +class Mudela_output: + def __init__ (self): + self.basename = '' + self.fragment = 0 + self.size = 16 + + def open (self, basename): + self.basename = basename + self.temp_file = "%s/%s" %(outdir, 'mudela-temp.ly') + self.file = open (self.temp_file, 'w') + self.file.write ('\\include \"paper%d.ly\"\n' % self.size) + if self.size == 16: + s = 'sixteen' + else: + s = 'twenty' + + self.file.write ('default_paper = \\paper { \\paper_%s\n linewidth = -15.\\cm; }\n' % s) + + if self.fragment: + self.file.write ('\\score { \\melodic { ') + + def write (self,s): + self.file.write (s) + + def close (self): + if self.fragment: + self.file.write ( + '}\n \\paper { linewidth = -1.0\\cm;\n' + + 'castingalgorithm = \\Wordwrap; } }\n') + + + self.file.close () + + inf=self.basename + '.ly' + outf = self.basename + '.tex' + if not file_exist_b (inf): + status = 1 + else: +# print 'invoking %s' %('diff %s %s' % (self.temp_file, inf)) + status = os.system ('diff -q %s %s' % (self.temp_file, inf)) +# print 'status %d' % status + + if status: + os.rename (self.temp_file, inf) + + compile ('lilypond -o %s %s'% (self.basename, inf), inf, outf) +# os.rename (self.basename + '.tex', outdir +) + + + +class Tex_output: + def __init__ (self, name): + self.output_fn = '%s/%s' % (outdir, name) + self.mudela = 0 + self.file = open (self.output_fn , 'w') + self.verbatim = 0 + def open_mudela (self, basename): + + self.mudela_basename =basename + if self.verbatim: + self.file.write ('\\begin{verbatim}\n') + self.mudela = 1 + + def write (self, s): + self.file.write (s) + + def write_mudela (self, s): + if self.verbatim: + self.file.write (s) + + def close_mudela (self): + if self.verbatim: + self.file.write ('\\end{verbatim}\n') + self.verbatim = 0 + + self.file.write ( + '\\preMudelaExample\\input %s\n\postMudelaExample' %(self.mudela_basename)) + self.mudela = 0 + + + + + +begin_mudela_re = regex.compile ('^ *\\\\begin{mudela}') +begin_mudela_opts_re = regex.compile ('^ *\\\\begin{mudela}\[\(.*\)\]') +end_mudela_re = regex.compile ('^ *\\\\end{mudela}') +section_re = regex.compile ('\\\\section') +chapter_re = regex.compile ('\\\\chapter') + + +class Tex_input: + def __init__ (self, name, outname): + self.infile = open (name) + self.outname = outname + self.chapter = 0 + self.section = 0 + self.fine_count =0 + self.mudtex = Tex_output (self.outname) + self.mudela = None + def set_sections (self, l): + if section_re.search (l) <> -1: + self.section = self.section + 1 + if chapter_re.search (l) <> -1: + self.section = 0 + self.chapter = self.chapter + 1 + + + def gulp_mudela (self): + pass + + def gen_basename (self): + return '%s/%s-%d.%d.%d' % (outdir, self.outname,self.chapter,self.section,self.fine_count) + def do_it(self): + lines = self.infile.readlines () + for line in lines: + if begin_mudela_re.search (line) <> -1: + if begin_mudela_opts_re.search (line) <> -1: + opts = begin_mudela_opts_re.group (1) + else: + opts = '' + optlist = string.split (opts, ',') + self.mudela = Mudela_output () + if 'fragment' in optlist: + self.mudela.fragment = 1 + if '16pt' in optlist: + self.mudela.size = 16 + if '20pt' in optlist: + self.mudela.size = 20 + + if 'verbatim' in optlist: + self.mudtex.verbatim = 1 + + b = self.gen_basename () + self.mudtex.open_mudela (b) + self.mudela.open (b) + + + continue + elif end_mudela_re.search (line) <> -1: + self.mudela.close () + self.mudtex.close_mudela () + self.mudela = None + self.fine_count = self.fine_count + 1 + continue + + if self.mudela: + self.mudela.write (line) + self.mudtex.write_mudela (line) + else: + self.mudtex.write (line) + self.set_sections(line) + del self.mudtex + + +def help(): + sys.stdout.write("Usage: mudela-book [options] FILE\n" + + "Generate hybrid LaTeX input from Latex + mudela" + + "Options:\n" + + " -h, --help print this help\n" + + " -d, --outdir=DIR prefix directory\n" + + " -o, --outname=FILE prefix for filenames\n" + ) + sys.exit (0) + + + +sys.stderr.write ('This is %s version %s\n' % ('mudela-book', program_version)) + +outname = '' +(options, files) = getopt.getopt( + sys.argv[1:], 'hd:o:', [ 'outdir=', 'outname=', 'help']) +for opt in options: + o = opt[0] + a = opt[1] + if o == '--outname' or o == '-o': + outname = a + if o == '--outdir' or o == '-d': + outdir = a + if o == '--help' or o == '-h': + help () + + +for f in files: + my_outname = outname + if not my_outname: + my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f) + + inp = Tex_input (f, my_outname) + inp.do_it () + + + -- 2.39.5