]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/lilypond-book.py
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / scripts / lilypond-book.py
index 3f306560d6e2d2a89be6969257a0599685a35e76..486d21fedb92d2122b40b68f60aa43d1f809fbbc 100644 (file)
@@ -36,21 +36,40 @@ import os
 import sys
 import re
 
+# Users of python modules should include this snippet
+# and customize variables below.
+
+# We'll suffer this path initialization stuff as long as we don't install
+# our python packages in <prefix>/lib/pythonX.Y
+
+# If set, LILYPONDPREFIX must take prevalence.
+# if datadir is not set, we're doing a build and LILYPONDPREFIX.
+
 ################
 # RELOCATION
 ################
 
+datadir = '@local_lilypond_datadir@'
+if not os.path.isdir (datadir):
+    datadir = '@lilypond_datadir@'
+
+sys.path.insert (0, os.path.join (datadir, 'python'))
+
+if os.environ.has_key ('LILYPONDPREFIX'):
+    datadir = os.environ['LILYPONDPREFIX']
+    while datadir[-1] == os.sep:
+        datadir = datadir[:-1]
 
-for d in ['@lilypond_datadir@',
-          '@lilypond_libdir@']:
-    sys.path.insert (0, os.path.join (d, 'python'))
+    if not os.path.exists (os.path.join (datadir, 'python/lilylib.py')):
+        datadir = os.path.join (datadir, 'share/lilypond/current/')
+sys.path.insert (0, os.path.join (datadir, 'python'))
 
 # dynamic relocation, for GUB binaries.
-bindir = os.path.abspath (os.path.split (sys.argv[0])[0])
+bindir = 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)
+
+for prefix_component in ['share', 'lib']:
+    datadir = os.path.abspath (bindir + '/../%s/lilypond/current/python/' % prefix_component)
     sys.path.insert (0, datadir)
 
 
@@ -134,7 +153,6 @@ def get_option_parser ():
     p.add_option ('-f', '--format',
                   help=_('''use output format FORMAT (texi [default], texi-html, latex, html)'''),
                   action='store')
-    
     p.add_option ("-I", '--include', help=_('add DIR to include path'),
                   metavar="DIR",
                   action='append', dest='include_path',
@@ -148,12 +166,6 @@ def get_option_parser ():
                   help = _ ("process ly_files using COMMAND FILE..."),
                   action='store', 
                   dest='process_cmd', default='lilypond -b eps')
-
-    p.add_option ('--pdf',
-                  action="store_true",
-                  dest="create_pdf",
-                  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'''
@@ -538,6 +550,7 @@ output = {
     LATEX: {
         OUTPUT: r'''{%%
 \parindent 0pt%%
+\catcode`\@=12%%
 \ifx\preLilyPondExample \undefined%%
  \relax%%
 \else%%
@@ -630,7 +643,17 @@ if 0:
 
 PREAMBLE_LY = '''%%%% Generated by %(program_name)s
 %%%% Options: [%(option_string)s]
-\\include "lilypond-book-preamble.ly"
+
+#(set! toplevel-score-handler print-score-with-defaults)
+#(set! toplevel-music-handler
+ (lambda (p m)
+ (if (not (eq? (ly:music-property m \'void) #t))
+    (print-score-with-defaults
+    p (scorify-music m p)))))
+
+#(ly:set-option (quote no-point-and-click))
+#(define inside-lilypond-book #t)
+#(define version-seen? #t)
 %(preamble_string)s
 
 
@@ -643,13 +666,13 @@ PREAMBLE_LY = '''%%%% Generated by %(program_name)s
 %% ****************************************************************
 
 \paper {
 #(define dump-extents #t)
 %(font_dump_setting)s
 %(paper_string)s
+ #(define dump-extents #t)
+ %(font_dump_setting)s
+ %(paper_string)s
 }
 
 \layout {
 %(layout_string)s
+ %(layout_string)s
 }
 '''
 
@@ -829,9 +852,7 @@ class Lilypond_snippet (Snippet):
         self.do_options (os, self.type)
 
     def ly (self):
-        contents = self.substring ('code')
-        return ('\\sourcefileline %d\n%s'
-                % (self.line_number - 1, contents))
+        return self.substring ('code')
 
     def full_ly (self):
         s = self.ly ()
@@ -845,7 +866,7 @@ class Lilypond_snippet (Snippet):
         options = split_options (option_string)
 
         for i in options:
-            if '=' in i:
+            if string.find (i, '=') > 0:
                 (key, value) = re.split ('\s*=\s*', i)
                 self.option_dict[key] = value
             else:
@@ -1146,7 +1167,7 @@ class Lilypond_snippet (Snippet):
             if VERBATIM in self.option_dict:
                 verb = self.substring ('code')
                 str += (output[LATEX][VERBATIM] % vars ())
-
+        
         str += (output[LATEX][OUTPUT] % vars ())
 
         ## todo: maintain breaks
@@ -1210,8 +1231,8 @@ class Lilypond_file_snippet (Lilypond_snippet):
         ## strip version string to make automated regtest comparisons
         ## across versions easier.
         contents = re.sub (r'\\version *"[^"]*"', '', contents)
-
-        return ('\\sourcefilename \"%s\"\n\\sourcefileline 0\n%s'
+        
+        return ('\\sourcefilename \"%s\"\n%s'
                 % (name, contents))
 
 snippet_type_to_class = {
@@ -1244,7 +1265,7 @@ def find_toplevel_snippets (s, types):
 
     snippets = []
     index = 0
-    found = dict ([(t, None) for t in types])
+    found = dict ((t, None) for t in types)
 
     line_starts = find_linestarts (s)
     line_start_idx = 0
@@ -1366,11 +1387,11 @@ def process_snippets (cmd, ly_snippets, texstr_snippets, png_snippets):
     status = 0
     def my_system (cmd):
         status = ly.system (cmd,
-                            be_verbose=global_options.verbose, 
-                            progress_p=1)
+                  be_verbose=global_options.verbose, 
+                  progress_p= 1)
 
     if global_options.format in (HTML, TEXINFO):
-        cmd += ' --formats=png '
+        cmd += ' --format png '
 
     # UGH
     # the --process=CMD switch is a bad idea
@@ -1382,11 +1403,7 @@ def process_snippets (cmd, ly_snippets, texstr_snippets, png_snippets):
             my_system ('latex %s.texstr' % l)
 
     if ly_names:
-        open ('snippet-names', 'wb').write ('\n'.join (['snippet-map.ly']
-                                                      + ly_names))
-        
-        my_system (string.join ([cmd, 'snippet-names']))
-
+        my_system (string.join ([cmd, 'snippet-map.ly'] + ly_names))
 
 LATEX_INSPECTION_DOCUMENT = r'''
 \nonstopmode
@@ -1480,13 +1497,15 @@ class Compile_error:
 def write_file_map (lys, name):
     snippet_map = open ('snippet-map.ly', 'w')
     snippet_map.write ("""
-#(define version-seen #t)
+#(define version-seen? #t)
 #(ly:add-file-name-alist '(
 """)
     for ly in lys:
-        snippet_map.write ('("%s.ly" . "%s")\n'
+        snippet_map.write ('("%s.ly" . "%s:%d (%s.ly)")\n'
                  % (ly.basename (),
-                   name))
+                   name,
+                   ly.line_number,
+                   ly.basename ()))
 
     snippet_map.write ('))\n')
 
@@ -1703,31 +1722,14 @@ def main ():
     formats = 'ps'
     if global_options.format in (TEXINFO, HTML):
         formats += ',png'
-
-        
     if global_options.process_cmd == '':
-        global_options.process_cmd = (lilypond_binary 
-                                      + ' --formats=%s --backend eps ' % formats)
+        global_options.process_cmd = lilypond_binary \
+               + ' --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 += string.join ([(' -I %s' % commands.mkarg (p))
                               for p in global_options.include_path])
 
-    if global_options.format in (TEXINFO, LATEX):
-        ## prevent PDF from being switched on by default.
-        global_options.process_cmd += ' --formats=eps '
-        
-    if (global_options.format in (TEXINFO, LATEX)
-        and global_options.create_pdf):
-        global_options.process_cmd += "--pdf  -dinclude-eps-fonts -dgs-load-fonts "
-
-        
-    
-    if global_options.verbose:
-        global_options.process_cmd += " --verbose "
-
-    global_options.process_cmd += " -dread-file-list -dpad-eps-boxes "
-
     identify ()
 
     try:
@@ -1751,18 +1753,18 @@ def main ():
         exit (1)
 
     if global_options.format in (TEXINFO, LATEX):
+        if not global_options.psfonts:
+            warning (_ ("option --psfonts not used"))
+            warning (_ ("processing with dvips will have no fonts"))
+
         psfonts_file = os.path.join (global_options.output_name, basename + '.psfonts')
         output = os.path.join (global_options.output_name, basename +  '.dvi' )
         
-        if not global_options.psfonts and not global_options.create_pdf:
-            warning (_ ("option --psfonts not used"))
-            warning (_ ("processing with dvips will have no fonts"))
-        else:
-            progress ('\n')
-            progress (_ ("DVIPS usage:"))
-            progress ('\n')
-            progress ("    dvips -h %(psfonts_file)s %(output)s" % vars ())
-            progress ('\n')
+        progress ('\n')
+        progress (_ ("DVIPS usage:"))
+        progress ('\n')
+        progress ("    dvips -h %(psfonts_file)s %(output)s" % vars ())
+        progress ('\n')
 
     inputs = note_input_file ('')
     inputs.pop ()