import re
import md5
-################
-# RELOCATION
-################
-
-
-for d in ['@lilypond_datadir@',
- '@lilypond_libdir@']:
- sys.path.insert (0, os.path.join (d, 'python'))
-
-# dynamic relocation, for GUB binaries.
-bindir = os.path.abspath (os.path.split (sys.argv[0])[0])
-
-os.environ['PATH'] = bindir + os.pathsep + os.environ['PATH']
-for p in ['share', 'lib']:
- datadir = os.path.abspath (bindir + '/../%s/lilypond/current/python/' % p)
- sys.path.insert (0, datadir)
-
+"""
+@relocate-preamble@
+"""
import lilylib as ly
import fontextract
sys.exit (i)
def identify ():
- sys.stdout.write ('%s (GNU LilyPond) %s\n' % (program_name, program_version))
+ ly.encoded_write (sys.stdout, '%s (GNU LilyPond) %s\n' % (program_name, program_version))
-def progress (s):
- sys.stderr.write (s)
+progress = ly.progress
def warning (s):
- sys.stderr.write (program_name + ": " + _ ("warning: %s") % s + '\n')
+ ly.stderr_write (program_name + ": " + _ ("warning: %s") % s + '\n')
def error (s):
- sys.stderr.write (program_name + ": " + _ ("error: %s") % s + '\n')
+ ly.stderr_write (program_name + ": " + _ ("error: %s") % s + '\n')
def ps_page_count (ps_name):
header = open (ps_name).read (1024)
def warranty ():
identify ()
- sys.stdout.write ('''
+ ly.encoded_write (sys.stdout, '''
%s
%s
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '2001--2006',
+''' % ( _ ('Copyright (c) %s by') % '2001--2007',
' '.join (authors),
_ ("Distributed under terms of the GNU General Public License."),
_ ("It comes with NO WARRANTY.")))
action='append', dest='include_path',
default=[os.path.abspath (os.getcwd ())])
+ p.add_option ('--info-images-dir', help=_ ("format Texinfo output so that Info will "
+ "look for images of music in DIR"),
+ metavar=_ ("DIR"),
+ action='store', dest='info_images_dir',
+ default='')
+
p.add_option ('--left-padding',
- metavar=_("PAD"),
+ metavar=_ ("PAD"),
dest="padding_mm",
- help="Pad left side of music to align music inspite of uneven bar numbers. (in mm)",
+ help=_ ("pad left side of music to align music inspite of uneven bar numbers (in mm)"),
type="float",
default=3.0)
p.add_option ('-P', '--process', metavar=_ ("COMMAND"),
help = _ ("process ly_files using COMMAND FILE..."),
action='store',
- dest='process_cmd', default='lilypond -b eps')
+ dest='process_cmd', default='lilypond -dbackend=eps')
p.add_option ('--pdf',
action="store_true",
dest="create_pdf",
- help=_ ("Create PDF files for use with PDFTeX"),
+ help=_ ("create PDF files for use with PDFTeX"),
default=False)
p.add_option ('', '--psfonts', action="store_true", dest="psfonts",
help=_ ('''extract all PostScript fonts into INPUT.psfonts for LaTeX
p.add_option ('-w', '--warranty',
help=_ ("show warranty and copyright"),
action='store_true')
- p.add_option_group ('bugs',
+ p.add_option_group (_ ('Bugs'),
description=(_ ("Report bugs via")
+ ''' http://post.gmane.org/post.php'''
'''?group=gmane.comp.gnu.lilypond.bugs\n'''))
LATEX = 'latex'
LAYOUT = 'layout'
LINE_WIDTH = 'line-width'
+LILYQUOTE = 'lilyquote'
NOFRAGMENT = 'nofragment'
NOINDENT = 'noindent'
NOQUOTE = 'noquote'
QUOTE: r'''line-width = %(line-width)s - 2.0 * %(exampleindent)s''',
+ LILYQUOTE: r'''line-width = %(line-width)s - 2.0 * %(exampleindent)s''',
+
RAGGED_RIGHT: r'''ragged-right = ##t''',
PACKED: r'''packed = ##t''',
OUTPUTIMAGE: r'''@noindent
@ifinfo
-@image{%(base)s,,,%(alt)s,%(ext)s}
+@image{%(info_image_path)s,,,%(alt)s,%(ext)s}
@end ifinfo
@html
<p>
PREAMBLE_LY = '''%%%% Generated by %(program_name)s
%%%% Options: [%(option_string)s]
\\include "lilypond-book-preamble.ly"
-%(preamble_string)s
-
-
-
-
%% ****************************************************************
%% Start cut-&-pastable-section
%% ****************************************************************
+%(preamble_string)s
+
\paper {
#(define dump-extents #t)
%(font_dump_setting)s
os = match.group ('options')
self.do_options (os, self.type)
+ def verb_ly (self):
+ return self.substring ('code')
+
def ly (self):
contents = self.substring ('code')
return ('\\sourcefileline %d\n%s'
open (self.basename () + '.txt', 'w').write ('image of music')
def relevant_contents (self, ly):
- return re.sub (r'\\(version|sourcefileline)[^\n]*\n', '', ly)
+ return re.sub (r'\\(version|sourcefileline|sourcefilename)[^\n]*\n', '', ly)
def ly_is_outdated (self):
base = self.basename ()
and (self.relevant_contents (self.full_ly ())
== self.relevant_contents (open (ly_file).read ()))):
return None
- if global_options.verbose:
- print 'OUT OF DATE: ', ly_file
+
return self
def png_is_outdated (self):
else:
str = '<mediaobject>' + str + '</mediaobject>'
if VERBATIM in self.option_dict:
- verb = verbatim_html (self.substring ('code'))
+ verb = verbatim_html (self.verb_ly ())
str = output[DOCBOOK][VERBATIM] % vars () + str
return str
if global_options.format == HTML:
str += self.output_print_filename (HTML)
if VERBATIM in self.option_dict:
- verb = verbatim_html (self.substring ('code'))
+ verb = verbatim_html (self.verb_ly ())
str += output[HTML][VERBATIM] % vars ()
if QUOTE in self.option_dict:
str = output[HTML][QUOTE] % vars ()
# Specifying no extension is most robust.
ext = ''
alt = self.option_dict[ALT]
+ info_image_path = os.path.join (global_options.info_images_dir, base)
str += output[TEXINFO][OUTPUTIMAGE] % vars ()
base = self.basename ()
if global_options.format == LATEX:
str += self.output_print_filename (LATEX)
if VERBATIM in self.option_dict:
- verb = self.substring ('code')
+ verb = self.verb_ly ()
str += (output[LATEX][VERBATIM] % vars ())
str += (output[LATEX][OUTPUT] % vars ())
if os.path.exists (texidoc):
str += '@include %(texidoc)s\n\n' % vars ()
+ substr = ''
if VERBATIM in self.option_dict:
- verb = self.substring ('code')
- str += (output[TEXINFO][VERBATIM] % vars ())
+ verb = self.verb_ly ()
+ substr += output[TEXINFO][VERBATIM] % vars ()
if not QUOTE in self.option_dict:
- str = output[TEXINFO][NOQUOTE] % vars ()
-
- str += self.output_info ()
+ substr = output[TEXINFO][NOQUOTE] % {'str':substr}
+ substr += self.output_info ()
+ if LILYQUOTE in self.option_dict:
+ substr = output[TEXINFO][QUOTE] % {'str':substr}
+ str += substr
# str += ('@ifinfo\n' + self.output_info () + '\n@end ifinfo\n')
# str += ('@tex\n' + self.output_latex () + '\n@end tex\n')
return str
+re_begin_verbatim = re.compile (r'\s+%.*?begin verbatim.*\n*', re.M)
+re_end_verbatim = re.compile (r'\s+%.*?end verbatim.*$', re.M)
+
class Lilypond_file_snippet (Lilypond_snippet):
+ def __init__ (self, type, match, format, line_number):
+ Lilypond_snippet.__init__ (self, type, match, format, line_number)
+ self.contents = open (find_file (self.substring ('filename'))).read ()
+
+ def verb_ly (self):
+ s = self.contents
+ s = re_begin_verbatim.split (s)[-1]
+ s = re_end_verbatim.split (s)[0]
+ return s
+
def ly (self):
name = self.substring ('filename')
- contents = open (find_file (name)).read ()
return ('\\sourcefilename \"%s\"\n\\sourcefileline 0\n%s'
- % (name, contents))
+ % (name, self.contents))
+
snippet_type_to_class = {
'lilypond_file': Lilypond_file_snippet,
exit_status = status >> 8
error (_ ("`%s' failed (%d)") % (cmd, exit_status))
error (_ ("The error log is as follows:"))
- sys.stderr.write (error)
- sys.stderr.write (stderr.read ())
+ ly.stderr_write (error)
+ ly.stderr_write (stderr.read ())
exit (status)
if global_options.verbose:
snippet_map = open ('snippet-map.ly', 'w')
snippet_map.write ("""
#(define version-seen #t)
+#(define output-empty-score-list #f)
#(ly:add-file-name-alist '(
""")
for ly in lys:
def do_process_cmd (chunks, input_name):
all_lys = filter (lambda x: is_derived_class (x.__class__,
Lilypond_snippet),
- chunks)
+ chunks)
write_file_map (all_lys, input_name)
ly_outdated = filter (lambda x: is_derived_class (x.__class__,