global re;re = ly.re
# lilylib globals
+program_version = '@TOPLEVEL_VERSION@'
program_name = 'lilypond-book'
verbose_p = 0
pseudo_filter_p = 0
original_dir = os.getcwd ()
-#temp_dir = os.path.join (original_dir, '%s.dir' % program_name)
-#urg
-temp_dir = '/tmp'
-keep_temp_dir_p = 0
+
+
preview_resolution = 90
## FIXME
(_ ("DIM"), '', 'default-music-fontsize', _ ("default fontsize for music. DIM is assumed to be in points")),
(_ ("DIM"), '', 'default-lilypond-fontsize', _ ("deprecated, use --default-music-fontsize")),
(_ ("OPT"), '', 'extra-options', _ ("pass OPT quoted to the lilypond command line")),
- (_ ("DIM"), '', 'force-music-fontsize', _ ("force fontsize for all inline lilypond. DIM is assumed be to in points")),
+ (_ ("DIM"), '', 'force-music-fontsize', _ ("force fontsize for all inline lilypond. DIM is assumed to be in points")),
(_ ("DIM"), '', 'force-lilypond-fontsize', _ ("deprecated, use --force-music-fontsize")),
- ('', 'h', 'help', _ ("this help")),
+ ('', 'h', 'help', _ ("print this help")),
(_ ("DIR"), 'I', 'include', _ ("include path")),
('', 'M', 'dependencies', _ ("write dependencies")),
(_ ("PREF"), '', 'dep-prefix', _ ("prepend PREF before each -M dependency")),
(_ ("FILE"), '', 'outdir', _ ("where to place generated files")),
(_ ('RES'), '', 'preview-resolution',
_ ("set the resolution of the preview to RES")),
- ('', 'V', 'verbose', _ ("verbose")),
+ ('', 'V', 'verbose', _ ("be verbose")),
('', 'v', 'version', _ ("print version information")),
('', 'w', 'warranty', _ ("show warranty and copyright")),
]
include_path = [os.getcwd ()]
-
#lilypond_binary = 'valgrind --suppressions=/home/hanwen/usr/src/guile-1.6.supp --num-callers=10 /home/hanwen/usr/src/lilypond/lily/out/lilypond'
lilypond_binary = os.path.join ('@bindir@', 'lilypond')
## inline music doesn't.
## possibly other center options?
'output-html': r'''
-%(pageimages)s''',
+%(htmlimages)s''',
},
'output-small-verbatim': r'''{\small\begin{verbatim}
%s\end{verbatim}}
''',
- 'output-default-post': "\\def\postLilypondExample{}\n",
- 'output-default-pre': "\\def\preLilypondExample{}\n",
+ 'output-default-post': "\\def\postLilyPondExample{}\n",
+ 'output-default-pre': "\\def\preLilyPondExample{}\n",
'usepackage-graphics': '\\usepackage{graphics}\n',
'output-eps': '\\noindent\\parbox{\\lilypondepswidth{%(fn)s.eps}}{\includegraphics{%(fn)s}}',
'output-noinline': r'''
%% generated: %(fn)s.eps
''',
- 'output-latex-quoted': r'''{\preLilypondExample
+ 'output-latex-quoted': r'''{\preLilyPondExample
\input %(fn)s.tex
-\postLilypondExample}''',
+\postLilyPondExample}''',
'output-latex-noquote': r'''{\parindent 0pt
-\preLilypondExample
+\preLilyPondExample
\input %(fn)s.tex
-\postLilypondExample}''',
+\postLilyPondExample}''',
'pagebreak': r'\pagebreak',
},
'lilypond-file': r'(?m)^[^%\n]*?(?P<match>\\lilypondfile\s*(\[(?P<options>.*?)\])?\s*\{(?P<filename>.+)})',
'lilypond' : r'(?m)^[^%\n]*?(?P<match>\\lilypond\s*(\[(?P<options>.*?)\])?\s*{(?P<code>.*?)})',
'lilypond-block': r"(?sm)^[^%\n]*?(?P<match>\\begin\s*(\[(?P<options>.*?)\])?\s*{lilypond}(?P<code>.*?)\\end{lilypond})",
- 'def-post-re': r"\\def\\postLilypondExample",
- 'def-pre-re': r"\\def\\preLilypondExample",
+ 'def-post-re': r"\\def\\postLilyPondExample",
+ 'def-pre-re': r"\\def\\preLilyPondExample",
'usepackage-graphics': r"\usepackage\s*{graphics}",
'intertext': r',?\s*intertext=\".*?\"',
'multiline-comment': no_match,
def compose_full_body (body, opts):
- '''Construct the lilypond code to send to Lilypond.
+ '''Construct the lilypond code to send to LilyPond.
Add stuff to BODY using OPTS as options.'''
music_size = default_music_fontsize
if g_force_music_fontsize:
needed_filetypes.append ('eps')
pathbase = os.path.join (g_outdir, basename)
- def f (base, ext1, ext2):
- a = os.path.isfile (base + ext2)
- if (os.path.isfile (base + ext1) and
- os.path.isfile (base + ext2) and
- os.stat (base+ext1)[stat.ST_MTIME] >
- os.stat (base+ext2)[stat.ST_MTIME]) or \
- not os.path.isfile (base + ext2):
+ def must_rebuild (base, ext1, ext2):
+
+ f2 = base + ext2
+ f1 = base + ext1
+ fp2 = base + '-page1' + ext2
+
+ isfile2 = os.path.isfile (f2)
+
+ if not isfile2 and os.path.isfile (fp2):
+ f2 = fp2
+ isfile2 = os.path.isfile (fp2)
+
+ if (os.path.isfile (f2) and isfile2 and
+ os.stat (f1)[stat.ST_MTIME] >
+ os.stat (f2)[stat.ST_MTIME]) or \
+ not isfile2:
+
return 1
+
todo = []
- if 'tex' in needed_filetypes and f (pathbase, '.ly', '.tex'):
+ if 'tex' in needed_filetypes and must_rebuild (pathbase, '.ly', '.tex'):
todo.append ('tex')
- if 'eps' in needed_filetypes and f (pathbase, '.tex', '.eps'):
+ if 'eps' in needed_filetypes and must_rebuild (pathbase, '.tex', '.eps'):
todo.append ('eps')
- if 'png' in needed_filetypes and f (pathbase, '.eps', '.png'):
+ if 'png' in needed_filetypes and must_rebuild (pathbase, '.eps', '.png'):
todo.append ('png')
return ('lilypond', body, opts, todo, basename)
s = 'output-html'
def html_pages (basename):
- files = glob.glob ("%s-page*.png"% basename)
-
+ pat = os.path.join (g_outdir, "%s-page*.png"% basename)
+
+ files = glob.glob (pat)
+
+
template = '''<img align="center" valign="center"
border="0" src="%s" alt="[picture of music]">'''
str = ''
- if not files:
+ if files == []:
files = [basename+'.png' ]
- for f in files:
+ else:
+ files = map (os.path.basename, files)
+
+ for f in files:
str += template % f
str = '<a href="%s.ly">%s</a>' % (basename, str)
+
return str
+
newbody = newbody + get_output (s) % {'fn': basename,
'htmlimages': html_pages(basename)
}
outname = base + '.ly'
changed = update_file (content, outname)
- preview = base + ".png"
- if changed or not os.path.isfile (preview):
+ preview = base + ".preview.png"
+ preview_page = base + '-page1.png'
+
+ if changed or not (os.path.isfile (preview) or
+ os.path.isfile (preview_page)):
ly.system ('%s --preview --postscript --verbose %s ' % (ly2dvi_binary, base) )
- ly.make_ps_images (base)
+ ly.make_ps_images (base + '.ps')
ly.system ('gzip -9 - < %s.ps > %s.ps.gz' % (base, base))
def size_str (fn):
menu = ''
page_files = glob.glob ('%s-page*.png' % base)
- for p in string.split (page_files, '\n'):
+ for p in page_files:
p = p.strip()
if os.path.isfile (p):
sz = size_str (p)
open (base + '.html','w'). write (separate_menu)
- inline_menu = '<p/><a href="%s.html"><img src="%s"><p/></a>' % (base, original_name, preview)
+ inline_menu = '<p/><a href="%s.html"><img alt="%s" src="%s"></a><p/>' % (base, original_name, preview)
return ('ly2dvi', inline_menu)
texfiles = string.join (tex)
cmd = string.join ((lilypond_binary, lilyopts, g_extra_opts,
texfiles))
+
+ ly.lilypond_version_check (lilypond_binary, '@TOPLEVEL_VERSION@')
+
ly.system (cmd, ignore_error = 0, progress_p = 1)
#
pathbase = os.path.join (g_outdir, basename)
if os.path.isfile (pathbase + '.texidoc') \
and 'notexidoc' not in opts:
- body = '\n@include %s.texidoc\n' % basename + body
- c = (type, body, opts, todo, basename)
+ n.append( ('input', '\n@include %s.texidoc\n\n' % basename))
n.append (c)
return n
compile_all_files (chunks)
chunks = fix_epswidth (chunks)
+
+ chunks = format_lilypond_output_bodies (chunks)
global format
if format == 'texi':
chunks = check_texidoc (chunks)
- chunks = format_lilypond_output_bodies (chunks)
-
x = 0
chunks = completize_preamble (chunks)
elif o == '--outname' or o == '-o':
if len (files) > 1:
#HACK
- sys.stderr.write ("Lilypond-book is confused by --outname on multiple files")
+ sys.stderr.write ("lilypond-book is confused by --outname on multiple files")
sys.exit (1)
outname = a
elif o == '--help' or o == '-h':