2 # python version of mudela-book. WIP.
19 program_version = '0.3'
24 def file_exist_b(name):
35 def file_mtime (name):
36 return os.stat (name)[8] #mod time
38 def compile (command, infile, outfile):
39 indate = file_mtime (infile)
41 outdate = file_mtime (outfile)
42 recompile = indate > outdate
48 sys.stderr.write ('invoking `%s\'\n' % command)
50 status = os.system (command)
61 def open (self, basename):
62 self.basename = basename
63 self.temp_file = "%s/%s" %(outdir, 'mudela-temp.ly')
64 self.file = open (self.temp_file, 'w')
65 self.file.write ('\\include \"paper%d.ly\"\n' % self.size)
71 self.file.write ('default_paper = \\paper { \\paper_%s\n linewidth = -15.\\cm; }\n' % s)
74 self.file.write ('\\score { \\melodic { ')
82 '}\n \\paper { linewidth = -1.0\\cm;\n' +
83 'castingalgorithm = \\Wordwrap; } }\n')
88 inf=self.basename + '.ly'
89 outf = self.basename + '.tex'
90 if not file_exist_b (inf):
93 # print 'invoking %s' %('diff %s %s' % (self.temp_file, inf))
94 status = os.system ('diff -q %s %s' % (self.temp_file, inf))
95 # print 'status %d' % status
98 os.rename (self.temp_file, inf)
100 compile ('lilypond -o %s %s'% (self.basename, inf), inf, outf)
101 # os.rename (self.basename + '.tex', outdir +)
106 def __init__ (self, name):
107 self.output_fn = '%s/%s' % (outdir, name)
109 self.file = open (self.output_fn , 'w')
111 def open_mudela (self, basename):
113 self.mudela_basename =basename
115 self.file.write ('\\begin{verbatim}\n')
121 def write_mudela (self, s):
125 def close_mudela (self):
127 self.file.write ('\\end{verbatim}\n')
131 '\\preMudelaExample\\input %s\n\postMudelaExample' %(self.mudela_basename))
138 begin_mudela_re = regex.compile ('^ *\\\\begin{mudela}')
139 begin_mudela_opts_re = regex.compile ('^ *\\\\begin{mudela}\[\(.*\)\]')
140 end_mudela_re = regex.compile ('^ *\\\\end{mudela}')
141 section_re = regex.compile ('\\\\section')
142 chapter_re = regex.compile ('\\\\chapter')
146 def __init__ (self, name, outname):
147 self.infile = open (name)
148 self.outname = outname
152 self.mudtex = Tex_output (self.outname)
154 def set_sections (self, l):
155 if section_re.search (l) <> -1:
156 self.section = self.section + 1
157 if chapter_re.search (l) <> -1:
159 self.chapter = self.chapter + 1
162 def gulp_mudela (self):
165 def gen_basename (self):
166 return '%s/%s-%d.%d.%d' % (outdir, self.outname,self.chapter,self.section,self.fine_count)
168 lines = self.infile.readlines ()
170 if begin_mudela_re.search (line) <> -1:
171 if begin_mudela_opts_re.search (line) <> -1:
172 opts = begin_mudela_opts_re.group (1)
175 optlist = string.split (opts, ',')
176 self.mudela = Mudela_output ()
177 if 'fragment' in optlist:
178 self.mudela.fragment = 1
179 if '16pt' in optlist:
180 self.mudela.size = 16
181 if '20pt' in optlist:
182 self.mudela.size = 20
184 if 'verbatim' in optlist:
185 self.mudtex.verbatim = 1
187 b = self.gen_basename ()
188 self.mudtex.open_mudela (b)
193 elif end_mudela_re.search (line) <> -1:
195 self.mudtex.close_mudela ()
197 self.fine_count = self.fine_count + 1
201 self.mudela.write (line)
202 self.mudtex.write_mudela (line)
204 self.mudtex.write (line)
205 self.set_sections(line)
210 sys.stdout.write("Usage: mudela-book [options] FILE\n"
211 + "Generate hybrid LaTeX input from Latex + mudela"
213 + " -h, --help print this help\n"
214 + " -d, --outdir=DIR prefix directory\n"
215 + " -o, --outname=FILE prefix for filenames\n"
221 sys.stderr.write ('This is %s version %s\n' % ('mudela-book', program_version))
224 (options, files) = getopt.getopt(
225 sys.argv[1:], 'hd:o:', [ 'outdir=', 'outname=', 'help'])
229 if o == '--outname' or o == '-o':
231 if o == '--outdir' or o == '-d':
233 if o == '--help' or o == '-h':
240 my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
242 inp = Tex_input (f, my_outname)