+%% The opposite of \lilypondstart.
+%%
+\gdef\lilypondend{
+ %% Handle the `lastpagefill' parameter from the \layout block.
+ %% Ignore it if \lilypondbook is defined.
+ \lilypondifundefined{lilypondbook}
+ {\lilypondifundefined{lilypondpaperlastpagefill}
+ {\vskip 0pt plus\lilypondpaperinterscorelinefill00 fill}
+ {}}
+ {}
+
+ \begingroup
+ \lilypondifundefined{lilyponddocument}
+ {\def\x{
+ \endgroup}}
+ {\def\x{
+ \endgroup
+ \csname end\endcsname{document}}}
+ \x}
+
+%% Load the PostScript drawing routines. This is done using \special.
+%% To avoid multiple inclusions, redefine \lilypondspecial to a no-op
+%% afterwards.
+%%
+\gdef\lilypondspecial{
+ \special{header=music-drawing-routines.ps}
+ \gdef\lilypondspecial{}}
+
+%% The most used macro in LilyPond output. Put #3 into a zero-width box
+%% which is moved to the right by #1 (scaled by \outputscale) and moved
+%% up by #2 (also scaled by \outputscale).
+%%
+\gdef\lyitem#1#2#3{
+ \raise #2\outputscale \hbox to 0pt {
+ \kern #1\outputscale
+ #3
+ \hss}}
+
+%% All LilyPond music data is enclosed in this macro (as third argument).
+%% The data (which consists of boxes with zero width) gets an artificial
+%% width of #1 and a height of #2. The resulting box is then centered
+%% vertically along the x-height of the current font.
+%%
+%% Parameters #1 and #2 are scaled by \outputscale.
+%%
+\gdef\lybox#1#2#3{
+ \lytempdim #2\outputscale
+ \lytempdim -0.5\lytempdim
+ \advance\lytempdim 1ex
+ \leavevmode
+ \raise \lytempdim \hbox to #1\outputscale {
+ %% Convert depth of #3 into height only.
+ \vbox to #2\outputscale {\hbox{#3}\vss}
+ \hss}}
+
+%% Produce a black bar (width #2, depth #3, height #4) with a vertical
+%% offset #1. Everything is scaled by \outputscale.
+%%
+\gdef\lyvrule#1#2#3#4{
+ \kern#1\outputscale
+ \vrule width #2\outputscale depth #3\outputscale height #4\outputscale}
+
+%% FIXME: 'interscoreline' and 'lilypondPAPERinterscoreline
+%%
+\lilypondifundefined{lilypondpaperinterscorelinefill}
+ {\gdef\lilypondpaperinterscorelinefill{0}}
+ {\gdef\lilypondpaperinterscorelinefill{1}}
+
+%% Allow overriding of interscoreline, e.g., for LilyPond's --preview
+%%
+\lilypondifundefined{interscoreline}
+ {\lilypondifundefined{lilypondclassic}
+ {\gdef\interscoreline{}}
+ {\gdef\interscoreline{
+ \vskip\lilypondpaperinterscoreline\lilypondpaperunit
+ plus \lilypondpaperinterscorelinefill fill}}}
+ {}
+
+%% Include PostScript definitions (which are differently defined for
+%% TeX and pdfTeX). This is loaded once only because the inputted files
+%% define \lilypondpostscript.
+%%
+%% (Don't remove the spaces after the arguments to \input!)
+%%
+%
+%% In teTeX-3.0, latex is actually pdfetex, and we need
+%% ifpdf.sty to determinine if we are really *tex or pdf*tex.
+%
+%% \input ifpdf.sty
+%
+%% However, ifpfd.sty is too smart for LilyPond, so we copy the
+%% logic here. Using \input ifpdf.sty is a no-op when using latex,
+%% and the \ifpdf switch is needed before \documentclass, using
+%% \usepackage{ifpdf} is not an option.
+%
+\input lily-ps-defs
+
+% barfs with texi
+% Runaway argument?
+%{
+%! Forbidden control sequence found while scanning use of \lilypondfirst.
+%<inserted text>
+% \par
+%<to be read again>
+% \newif
+%l.330 {\newif
+% \ifpdf
+%?
+%
+%%
+%\lilypondifundefined{lilypondpostscript}
+% {\newif\ifpdf
+% \ifx\pdfoutput\undefined
+% \else
+% \ifx\pdfoutput\relax
+% \else
+% \ifcase\pdfoutput
+% \else
+% \pdftrue
+% \fi
+% \fi
+% \fi
+% \ifpdf
+% {\input lily-pdf-defs }
+% \else
+% {\input lily-ps-defs }
+% \fi}
+% {}
+%
+%% Restore newline functionality (disabled to avoid \par).
+%%
+\endlinechar \lilyponddefsELC