]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/lilypond-book.py
*** empty log message ***
[lilypond.git] / scripts / lilypond-book.py
index a9eaeaf149abd6bc4f2f8e15d79004f4388e6ff1..32d571ebc3a27556310ee1a3f2060d827cb15b80 100644 (file)
@@ -36,39 +36,21 @@ 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]
-        
-    datadir = os.path.join (datadir, "share/lilypond/current/")
-sys.path.insert (0, os.path.join (datadir, 'python'))
+for d in ['@lilypond_datadir@',
+          '@lilypond_libdir@']:
+    sys.path.insert (0, os.path.join (d, 'python'))
 
 # dynamic relocation, for GUB binaries.
-bindir = os.path.split (sys.argv[0])[0]
+bindir = os.path.abspath (os.path.split (sys.argv[0])[0])
 
-
-for prefix_component in ['share', 'lib']:
-    datadir = os.path.abspath (bindir + '/../%s/lilypond/current/python/' % prefix_component)
+os.environ['PATH'] = bindir + ':' + os.environ['PATH']
+for p in ['share', 'lib']:
+    datadir = os.path.abspath (bindir + '/../%s/lilypond/current/python/' % p)
     sys.path.insert (0, datadir)
 
 
@@ -152,6 +134,7 @@ 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',
@@ -165,6 +148,12 @@ 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'''
@@ -549,7 +538,6 @@ output = {
     LATEX: {
         OUTPUT: r'''{%%
 \parindent 0pt%%
-\catcode`\@=12%%
 \ifx\preLilyPondExample \undefined%%
  \relax%%
 \else%%
@@ -642,17 +630,7 @@ if 0:
 
 PREAMBLE_LY = '''%%%% Generated by %(program_name)s
 %%%% Options: [%(option_string)s]
-
-#(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)
+\\include "lilypond-book-preamble.ly"
 %(preamble_string)s
 
 
@@ -665,13 +643,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
 }
 '''
 
@@ -851,7 +829,9 @@ class Lilypond_snippet (Snippet):
         self.do_options (os, self.type)
 
     def ly (self):
-        return self.substring ('code')
+        contents = self.substring ('code')
+        return ('\\sourcefileline %d\n%s'
+                % (self.line_number - 1, contents))
 
     def full_ly (self):
         s = self.ly ()
@@ -865,7 +845,7 @@ class Lilypond_snippet (Snippet):
         options = split_options (option_string)
 
         for i in options:
-            if string.find (i, '=') > 0:
+            if '=' in i:
                 (key, value) = re.split ('\s*=\s*', i)
                 self.option_dict[key] = value
             else:
@@ -1166,7 +1146,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
@@ -1230,8 +1210,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%s'
+
+        return ('\\sourcefilename \"%s\"\n\\sourcefileline 0\n%s'
                 % (name, contents))
 
 snippet_type_to_class = {
@@ -1264,7 +1244,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
@@ -1386,11 +1366,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 += ' --format png '
+        cmd += ' --formats=png '
 
     # UGH
     # the --process=CMD switch is a bad idea
@@ -1402,7 +1382,11 @@ def process_snippets (cmd, ly_snippets, texstr_snippets, png_snippets):
             my_system ('latex %s.texstr' % l)
 
     if ly_names:
-        my_system (string.join ([cmd, 'snippet-map.ly'] + ly_names))
+        open ('snippet-names', 'w').write ('\n'.join (['snippet-map.ly']
+                                                      + ly_names))
+        
+        my_system (string.join ([cmd, 'snippet-names']))
+
 
 LATEX_INSPECTION_DOCUMENT = r'''
 \nonstopmode
@@ -1496,15 +1480,13 @@ 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:%d (%s.ly)")\n'
+        snippet_map.write ('("%s.ly" . "%s")\n'
                  % (ly.basename (),
-                   name,
-                   ly.line_number,
-                   ly.basename ()))
+                   name))
 
     snippet_map.write ('))\n')
 
@@ -1721,14 +1703,31 @@ 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' % commands.mkarg (p))
+        global_options.process_cmd += string.join ([(' -I %s' % ly.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-font -dgs-load-font "
+
+        
+    
+    if global_options.verbose:
+        global_options.process_cmd += " --verbose "
+
+    global_options.process_cmd += " -dread-file-list -dpad-eps-boxes "
+
     identify ()
 
     try:
@@ -1752,18 +1751,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' )
         
-        progress ('\n')
-        progress (_ ("DVIPS usage:"))
-        progress ('\n')
-        progress ("    dvips -h %(psfonts_file)s %(output)s" % vars ())
-        progress ('\n')
+        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')
 
     inputs = note_input_file ('')
     inputs.pop ()