+ \parindent 0pt
+
+ %% We can't directly say `\begin{document}' in this macro since
+ %% older versions of texinfo.tex define \begin as \outer; this
+ %% means that it causes an error if \begin is found within another
+ %% macro (even if the corresponding code will never be executed).
+ %% As a workaround we use \csname to call \begin.
+ \csname begin\endcsname{document}}}
+ \x}
+
+%% 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{}}
+
+
+
+
+%% Put the argument into a box which has zero height and depth (the
+%% \vss forces the latter -- TeXbook, page 80).
+%%
+\gdef\topalign#1{
+ \vbox to 0pt{
+ \hbox{#1}
+ \vss}}
+
+%% Put the argument into a box which has zero width.
+%%
+\gdef\leftalign#1{
+ \hbox to 0pt{
+ #1
+ \hss}}
+
+%% 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). Note that negative values for
+%% #2 change the depth of the box defined by \leftalign, not the height.
+%%
+\gdef\lyitem#1#2#3{
+ \raise#2\outputscale \leftalign{
+ \kern#1\outputscale
+ #3}}
+
+%% All LilyPond music data is enclosed in this macro (as fifth argument).
+%% The data is first put into a box with zero height and depth which is
+%% then moved to the right by #1 and moved down by #2. After this, it is
+%% put into a zero-width box, giving it a height #4 (and depth zero).
+%% Finally, the box is raised so that its true height is exactly the
+%% distance from one baseline to the next.
+%%
+%% Parameters #1 to #4 are scaled by \outputscale.
+%%
+\gdef\lybox#1#2#3#4#5{
+ \lytempdim\baselineskip
+ \advance\lytempdim -#4\outputscale
+ \raise\lytempdim
+ \vbox to #4\outputscale{
+ \leftalign{
+ \kern #1\outputscale
+ \lower #2\outputscale \topalign{
+ #5}}
+ \vss}}
+
+%% 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!)
+%%
+\lilypondifundefined{lilypondpostscript}
+ {\lilypondifundefined{pdfoutput}
+ {\input lily-ps-defs }
+ {\pdfoutput = 1
+ \input lily-pdf-defs }}
+ {}
+
+%% Restore newline functionality (disabled to avoid \par).
+%%
+\endlinechar \lilyponddefsELC