17 program_version = '0.3'
22 def file_exist_b(name):
33 def file_mtime (name):
34 return os.stat (name)[8] #mod time
36 def compile (command, infile, outfile):
37 indate = file_mtime (infile)
39 outdate = file_mtime (outfile)
40 recompile = indate > outdate
46 sys.stderr.write ('invoking `%s\'\n' % command)
48 status = os.system (command)
59 def open (self, basename):
60 self.basename = basename
61 self.temp_file = "%s/%s" %(outdir, 'mudela-temp.ly')
62 self.file = open (self.temp_file, 'w')
63 self.file.write ('\\include \"paper%d.ly\"\n' % self.size)
69 self.file.write ('default_paper = \\paper { \\paper_%s\n linewidth = -15.\\cm; }\n' % s)
72 self.file.write ('\\score { \\notes { ')
80 '}\n \\paper { linewidth = -1.0\\cm;\n' +
81 'castingalgorithm = \\Wordwrap; } }\n')
86 inf=self.basename + '.ly'
87 outf = self.basename + '.tex'
88 if not file_exist_b (inf):
91 # print 'invoking %s' %('diff %s %s' % (self.temp_file, inf))
92 status = os.system ('diff -q %s %s' % (self.temp_file, inf))
93 # print 'status %d' % status
96 os.rename (self.temp_file, inf)
98 compile ('lilypond -o %s %s'% (self.basename, inf), inf, outf)
99 # os.rename (self.basename + '.tex', outdir +)
104 def __init__ (self, name):
105 self.output_fn = '%s/%s' % (outdir, name)
107 self.file = open (self.output_fn , 'w')
109 def open_mudela (self, basename):
110 self.mudela_basename =basename
112 self.file.write ('\\begin{verbatim}\n')
118 def write_mudela (self, s):
122 def close_mudela (self):
124 self.file.write ('\\end{verbatim}\n')
128 '\\preMudelaExample\\input %s\n\postMudelaExample' %(self.mudela_basename))
135 begin_mudela_re = re.compile ('^ *\\\\begin{mudela}')
136 begin_mudela_opts_re = re.compile ('^ *\\\\begin{mudela}\[(.*)\]')
137 end_mudela_re = re.compile ('^ *\\\\end{mudela}')
138 section_re = re.compile ('\\\\section')
139 chapter_re = re.compile ('\\\\chapter')
140 input_re = re.compile ('^\\\\input[ \t\n]+(.*)$')
143 def __init__ (self,name):
144 if not re.search ('\\.[^/\\\\]+',name):
146 print 'opening %s' % name
148 self.infile = open (name)
150 def get_lines (self):
151 lines = self.infile.readlines ()
152 (retlines, retdeps) = ([],[self.filename])
154 m = input_re.search (line)
156 t = Tex_input (m.group (1))
158 retlines = retlines + ls[0]
159 retdeps = retdeps + ls[1]
161 retlines.append (line)
163 return (retlines, retdeps)
165 class Main_tex_input(Tex_input):
166 def __init__ (self, name, outname):
168 Tex_input.__init__ (self, name) # ugh
170 self.outname = outname
174 self.mudtex = Tex_output (self.outname)
177 def set_sections (self, l):
178 if section_re.search (l):
179 self.section = self.section + 1
180 if chapter_re.search (l):
182 self.chapter = self.chapter + 1
185 def gulp_mudela (self):
188 def gen_basename (self):
189 return '%s/%s-%d.%d.%d' % (outdir, self.outname,self.chapter,self.section,self.fine_count)
192 (lines, self.deps) = self.get_lines ()
194 if begin_mudela_re.search (line):
195 m =begin_mudela_opts_re.search (line)
200 optlist = string.split (opts, ',')
201 self.mudela = Mudela_output ()
202 if 'fragment' in optlist:
203 self.mudela.fragment = 1
204 if '16pt' in optlist:
205 self.mudela.size = 16
206 if '20pt' in optlist:
207 self.mudela.size = 20
209 if 'verbatim' in optlist:
210 self.mudtex.verbatim = 1
212 b = self.gen_basename ()
213 self.mudtex.open_mudela (b)
218 elif end_mudela_re.search (line):
220 self.mudtex.close_mudela ()
222 self.fine_count = self.fine_count + 1
226 self.mudela.write (line)
227 self.mudtex.write_mudela (line)
229 self.mudtex.write (line)
230 self.set_sections(line)
235 sys.stdout.write("Usage: mudela-book [options] FILE\n"
236 + "Generate hybrid LaTeX input from Latex + mudela"
238 + " -h, --help print this help\n"
239 + " -d, --outdir=DIR prefix directory\n"
240 + " -o, --outname=FILE prefix for filenames\n"
246 sys.stderr.write ('This is %s version %s\n' % ('mudela-book', program_version))
249 (options, files) = getopt.getopt(
250 sys.argv[1:], 'hd:o:', [ 'outdir=', 'outname=', 'help', 'dependencies'])
256 if o == '--outname' or o == '-o':
258 if o == '--outdir' or o == '-d':
260 if o == '--help' or o == '-h':
262 if o == '--dependencies':
265 def write_deps (fn, out, deps):
266 out_fn = outdir + '/' + fn
267 print '\`writing \`%s\'\n\'' % out_fn
269 f = open (out_fn, 'w')
270 f.write ('%s: %s\n'% (outdir + '/' + out + '.dvi',
271 reduce (lambda x,y: x + ' '+ y, deps)))
278 my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
280 my_depname = my_outname + '.dep'
282 inp = Main_tex_input (f, my_outname)
286 write_deps (my_depname, my_outname, inp.deps)