'''
import stat
-import string
import tempfile
import commands
import os
import sys
import re
import md5
+import operator
"""
@relocate-preamble@
################################################################
def exit (i):
if global_options.verbose:
- raise _ ('Exiting (%d)...') % i
+ raise Exception (_ ('Exiting (%d)...') % i)
else:
sys.exit (i)
header = open (ps_name).read (1024)
m = re.search ('\n%%Pages: ([0-9]+)', header)
if m:
- return string.atoi (m.group (1))
+ return int (m.group (1))
return 0
def warranty ():
#
# Is this pythonic? Personally, I find this rather #define-nesque. --hwn
#
+ADDVERSION = 'addversion'
AFTER = 'after'
BEFORE = 'before'
DOCBOOK = 'docbook'
FRAGMENT = 'fragment'
HTML = 'html'
INDENT = 'indent'
+LANG = 'lang'
LATEX = 'latex'
LAYOUT = 'layout'
LINE_WIDTH = 'line-width'
NOINDENT,
PRINTFILENAME,
TEXIDOC,
+ LANG,
VERBATIM,
FONTLOAD,
FILENAME,
- ALT
+ ALT,
+ ADDVERSION
]
ly_options = {
<a href="%(base)s.ly">''',
OUTPUT: r'''
- <img align="center" valign="center"
+ <img align="middle"
border="0" src="%(image)s" alt="%(alt)s">''',
PRINTFILENAME: '<p><tt><a href="%(base)s.ly">%(filename)s</a></tt></p>',
@html
<p>
<a href="%(base)s.ly">
- <img align="center" valign="center"
+ <img align="middle"
border="0" src="%(image)s" alt="%(alt)s">
</a>
</p>
''',
VERBATIM: r'''@exampleindent 0
-@verbatim
+%(version)s@verbatim
%(verb)s@end verbatim
''',
+
+ ADDVERSION: r'''@example
+\version @w{"@version{}"}
+@end example
+'''
},
}
return (None, None)
-def find_file (name):
+def find_file (name, raise_error=True):
for i in global_options.include_path:
full = os.path.join (i, name)
if os.path.exists (full):
return full
- error (_ ("file not found: %s") % name + '\n')
- exit (1)
+ if raise_error:
+ error (_ ("file not found: %s") % name + '\n')
+ exit (1)
return ''
def verbatim_html (s):
option_string)
return []
+texinfo_lang_re = re.compile ('(?m)^@documentlanguage (.*?)( |$)')
+
def set_default_options (source):
global default_ly_options
if not default_ly_options.has_key (LINE_WIDTH):
default_ly_options[LINE_WIDTH] = \
'''%.0f\\pt''' % textwidth
elif global_options.format == TEXINFO:
+ m = texinfo_lang_re.search (source)
+ if m and not m.group (1).startswith ('en'):
+ default_ly_options[LANG] = m.group (1)
+ else:
+ default_ly_options[LANG] = ''
for (k, v) in texinfo_line_widths.items ():
# FIXME: @layout is usually not in
# chunk #0:
option_list.append (key)
else:
option_list.append (key + '=' + value)
- option_string = string.join (option_list, ',')
+ option_string = ','.join (option_list)
compose_dict = {}
compose_types = [NOTES, PREAMBLE, LAYOUT, PAPER]
elif relative > 0:
relative_quotes += "'" * relative
- paper_string = string.join (compose_dict[PAPER],
- '\n ') % override
- layout_string = string.join (compose_dict[LAYOUT],
- '\n ') % override
- notes_string = string.join (compose_dict[NOTES],
- '\n ') % vars ()
- preamble_string = string.join (compose_dict[PREAMBLE],
- '\n ') % override
+ paper_string = '\n '.join (compose_dict[PAPER]) % override
+ layout_string = '\n '.join (compose_dict[LAYOUT]) % override
+ notes_string = '\n '.join (compose_dict[NOTES]) % vars ()
+ preamble_string = '\n '.join (compose_dict[PREAMBLE]) % override
padding_mm = global_options.padding_mm
font_dump_setting = ''
if FONTLOAD in self.option_dict:
def ly_is_outdated (self):
base = self.basename ()
- ly_file = base + '.ly'
- tex_file = base + '.tex'
- eps_file = base + '.eps'
- systems_file = base + '-systems.tex'
+ ly_file = find_file (base + '.ly', raise_error=False)
+ tex_file = find_file (base + '.tex', raise_error=False)
+ systems_file = find_file (base + '-systems.tex', raise_error=False)
if (os.path.exists (ly_file)
and os.path.exists (systems_file)
def png_is_outdated (self):
base = self.basename ()
- # FIXME: refactor stupid OK stuff
- ok = not self.ly_is_outdated ()
- if global_options.format in (HTML, TEXINFO):
- ok = ok and os.path.exists (base + '.eps')
-
- page_count = 0
- if ok:
- page_count = ps_page_count (base + '.eps')
-
- if page_count <= 1:
- ok = ok and os.path.exists (base + '.png')
-
- elif page_count > 1:
- for a in range (1, page_count + 1):
- ok = ok and os.path.exists (base + '-page%d.png' % a)
-
- return not ok
+ eps_file = find_file (base + '.eps', raise_error=False)
+ png_file = find_file (base + '.png', raise_error=False)
+ if not self.ly_is_outdated () and global_options.format in (HTML, TEXINFO):
+ if os.path.exists (eps_file):
+ page_count = ps_page_count (eps_file)
+ if page_count <= 1:
+ return not os.path.exists (png_file)
+ else:
+ return not reduce (operator.or_,
+ [find_file (base + '-page%d.png' % a, raise_error=False)
+ for a in range (1, page_count + 1)])
+ return True
def texstr_is_outdated (self):
if backend == 'ps':
return 0
- # FIXME: refactor stupid OK stuff
base = self.basename ()
- ok = self.ly_is_outdated ()
- ok = ok and (os.path.exists (base + '.texstr'))
- return not ok
+ return not (self.ly_is_outdated ()
+ and find_file (base + '.texstr', raise_error=False))
def filter_text (self):
code = self.substring ('code')
str = ''
if PRINTFILENAME in self.option_dict:
base = self.basename ()
- filename = self.substring ('filename')
- str = output[global_options.format][PRINTFILENAME] % vars ()
+ filename = os.path.basename (self.substring ('filename'))
+ str = output[format][PRINTFILENAME] % vars ()
return str
def output_texinfo (self):
- str = ''
- if self.output_print_filename (TEXINFO):
- str += ('@html\n'
- + self.output_print_filename (HTML)
- + '\n@end html\n')
- str += ('@tex\n'
- + self.output_print_filename (LATEX)
- + '\n@end tex\n')
+ str = self.output_print_filename (TEXINFO)
base = self.basename ()
if TEXIDOC in self.option_dict:
texidoc = base + '.texidoc'
- if os.path.exists (texidoc):
+ translated_texidoc = texidoc + default_ly_options[LANG]
+ if os.path.exists (translated_texidoc):
+ str += '@include %(translated_texidoc)s\n\n' % vars ()
+ elif os.path.exists (texidoc):
str += '@include %(texidoc)s\n\n' % vars ()
substr = ''
if VERBATIM in self.option_dict:
+ version = ''
+ if ADDVERSION in self.option_dict:
+ version = output[TEXINFO][ADDVERSION]
verb = self.verb_ly ()
- substr += output[TEXINFO][VERBATIM] % vars ()
- if not QUOTE in self.option_dict:
- substr = output[TEXINFO][NOQUOTE] % {'str':substr}
+ substr = output[TEXINFO][VERBATIM] % vars ()
substr += self.output_info ()
if LILYQUOTE in self.option_dict:
substr = output[TEXINFO][QUOTE] % {'str':substr}
# the --process=CMD switch is a bad idea
# it is too generic for lilypond-book.
if texstr_names:
- my_system (string.join ([cmd, '--backend texstr',
- 'snippet-map.ly'] + texstr_names))
+ my_system (' '.join ([cmd, '--backend texstr',
+ 'snippet-map.ly'] + texstr_names))
for l in texstr_names:
my_system ('latex %s.texstr' % l)
if ly_names:
open ('snippet-names', 'wb').write ('\n'.join (['snippet-map.ly']
- + ly_names))
+ + ly_names))
- my_system (string.join ([cmd, 'snippet-names']))
+ my_system (' '.join ([cmd, 'snippet-names']))
LATEX_INSPECTION_DOCUMENT = r'''
try:
f = open (file_name)
oldstr = f.read ()
- new_str = string.join (lines, '')
+ new_str = ''.join (lines)
if oldstr == new_str:
progress (_ ("%s is up to date.") % file_name)
progress ('\n')
- return
+
+ # this prevents make from always rerunning lilypond-book:
+ # output file must be touched in order to be up to date
+ os.utime (file_name, None)
except:
pass
progress ('\n')
return do_file (name)
- include_chunks = map (process_include,
- filter (lambda x: is_derived_class (x.__class__,
- Include_snippet),
- chunks))
-
+ include_chunks = [process_include (c) for c in chunks
+ if is_derived_class (c.__class__, Include_snippet)]
- return chunks + reduce (lambda x,y: x + y, include_chunks, [])
+ return chunks + reduce (operator.add, include_chunks, [])
except Compile_error:
os.chdir (original_dir)
+ ' --formats=%s --backend eps ' % formats)
if global_options.process_cmd:
- global_options.process_cmd += string.join ([(' -I %s' % ly.mkarg (p))
+ global_options.process_cmd += ' '.join ([(' -I %s' % ly.mkarg (p))
for p in global_options.include_path])
if global_options.format in (TEXINFO, LATEX):