import os
import string
-import regex
+import re
import getopt
import sys
-import regsub
outdir = 'out/'
program_version = '0.3'
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)
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')
-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
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, ',')
continue
- elif end_mudela_re.search (line) <> -1:
+ elif end_mudela_re.search (line):
self.mudela.close ()
self.mudtex.close_mudela ()
self.mudela = None
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]
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)