X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Flilypond-book.py;h=486d21fedb92d2122b40b68f60aa43d1f809fbbc;hb=9f3572d98bb948c9689cd1f75401a029451fa001;hp=3f306560d6e2d2a89be6969257a0599685a35e76;hpb=04265f11d1f21416ccebd2dcaa1d903dc781b36e;p=lilypond.git diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 3f306560d6..486d21fedb 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -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 /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 ()