]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/mudela-book.py
release: 1.0.17
[lilypond.git] / scripts / mudela-book.py
index 6c4291c227e47baf755fa3cee06ea18affb34a45..596119c3dd975ea18cf24f91568fb30dd558ca68 100644 (file)
@@ -9,10 +9,9 @@
 
 import os
 import string
-import regex
+import re
 import getopt
 import sys
-import regsub
 
 outdir = 'out/'
 program_version = '0.3'
@@ -70,7 +69,7 @@ class Mudela_output:
                self.file.write ('default_paper = \\paper { \\paper_%s\n linewidth = -15.\\cm; }\n' % s)
                
                if self.fragment:
-                       self.file.write ('\\score { \\melodic { ')
+                       self.file.write ('\\score { \\notes { ')
 
        def write (self,s):
                self.file.write (s)
@@ -108,7 +107,6 @@ class Tex_output:
                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')
@@ -134,26 +132,52 @@ class Tex_output:
 
 
 
-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')
-
+begin_mudela_re = re.compile ('^ *\\\\begin{mudela}')
+begin_mudela_opts_re = re.compile ('^ *\\\\begin{mudela}\[(.*)\]')
+end_mudela_re = re.compile ('^ *\\\\end{mudela}')
+section_re = re.compile ('\\\\section')
+chapter_re = re.compile ('\\\\chapter')
+input_re = re.compile ('^\\\\input[ \t\n]+(.*)$')
 
 class Tex_input:
-       def __init__ (self, name, outname):
+       def __init__ (self,name):
+               if not re.search ('\\.[^/\\\\]+',name):
+                       name = name + '.tex'
+               print 'opening %s' % name
+               self.filename = name
                self.infile = open (name)
+               
+       def get_lines (self):
+               lines = self.infile.readlines ()
+               (retlines, retdeps) = ([],[self.filename])
+               for line in lines:
+                       m = input_re.search (line)
+                       if m:
+                               t = Tex_input (m.group (1))
+                               ls =t.get_lines ()
+                               retlines = retlines + ls[0]
+                               retdeps = retdeps + ls[1]
+                       else:
+                               retlines.append (line)
+
+               return (retlines, retdeps)
+
+class Main_tex_input(Tex_input):
+       def __init__ (self, name, outname):
+               
+               Tex_input.__init__ (self, name) # ugh
+
                self.outname = outname
                self.chapter = 0
                self.section = 0
                self.fine_count =0
                self.mudtex = Tex_output (self.outname)
                self.mudela = None
+               self.deps = []
        def set_sections (self, l):
-               if section_re.search (l) <> -1:
+               if section_re.search (l):
                        self.section = self.section + 1
-               if chapter_re.search (l) <> -1:
+               if chapter_re.search (l):
                        self.section = 0
                        self.chapter = self.chapter + 1
 
@@ -163,12 +187,14 @@ class Tex_input:
 
        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 ()
+               (lines, self.deps) = self.get_lines ()
                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)
+                       if begin_mudela_re.search (line):
+                               m =begin_mudela_opts_re.search (line) 
+                               if m:
+                                       opts = m.group (1)
                                else:
                                        opts = ''
                                optlist = string.split (opts, ',')
@@ -189,7 +215,7 @@ class Tex_input:
 
 
                                continue
-                       elif end_mudela_re.search (line) <> -1:
+                       elif end_mudela_re.search (line):
                                self.mudela.close ()
                                self.mudtex.close_mudela ()
                                self.mudela = None
@@ -221,7 +247,9 @@ 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'])
+       sys.argv[1:], 'hd:o:', [ 'outdir=', 'outname=', 'help', 'dependencies'])
+
+do_deps = 0
 for opt in options:
        o = opt[0]
        a = opt[1]
@@ -231,15 +259,30 @@ for opt in options:
                outdir = a
        if o == '--help' or o == '-h':
                help ()
+       if o == '--dependencies':
+               do_deps = 1
+
+def write_deps (fn, out,  deps):
+       out_fn = outdir + '/' + fn
+       print '\`writing \`%s\'\n\'' % out_fn
+       
+       f = open (out_fn, 'w')
+       f.write ('%s: %s\n'% (outdir + '/' + out + '.dvi',
+                             reduce (lambda x,y: x + ' '+ y, deps)))
+       f.close ()
 
 
 for f in files:
-    my_outname = outname
-    if not my_outname:
-       my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
+       my_outname = outname
+       if not my_outname:
+               my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
 
-    inp = Tex_input (f, my_outname)
-    inp.do_it ()
-       
+       my_depname = my_outname + '.dep'
+
+       inp = Main_tex_input (f, my_outname)
+       inp.do_it ()
+
+       if do_deps:
+               write_deps (my_depname, my_outname, inp.deps)