-%% let's not make par before endinput
-%
-% TeXbook ex 7.7
-\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}
-%
-% If we must make titles, do so, before we're Skipped.
-\ifx\mustmakelilypondtitle\undefined\else\makelilypondtitle\fi
-\ifx\mustmakelilypondpiecetitle\undefined\else\makelilypondpiecetitle\fi
-%
-% skip if included already
-\def\SkipLilydefs{\endinput}
-\ifundefined{EndLilyPondOutput}
- \def\EndLilyPondOutput{\csname bye\endcsname}
- \def\SkipLilydefs{}
-\fi
-\SkipLilydefs
-
-% need to do some stuff to turn pagenumbering off
-\ifundefined{documentclass}
- \input lilypond-plaintex
-\else
- \input lilypond-latex
-\fi
-
-
-%
-\def\botalign#1{\vbox to 0pt{\vss #1}}
-\def\leftalign#1{\hbox to 0pt{#1\hss}}
-
-\input feta20.tex
-
-% Attempt to keep lilypiecetitle together with the piece:
-\def\myfilbreak{\par\vfil\penalty200\vfilneg}
-
-% stacked horizontal lines
-\ifundefined{lilypondpaperinterscoreline}
- \def\lilypondpaperinterscoreline{16}
-\fi
-\ifundefined{lilypondpaperinterscorelinefill}
- \def\lilypondpaperinterscorelinefill{0}
-\fi
-
-\def\interscoreline{\vskip\lilypondpaperinterscoreline pt plus %
- \lilypondpaperinterscorelinefill fill}
-
-\def\placebox#1#2#3{%
- \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}}%
-
-% Are we using PDFTeX? If so, use pdf definitions.
-\ifx\pdfoutput\undefined
- \input lily-ps-defs
-\else
- \pdfoutput=1
- \input lily-pdf-defs
-\fi
-
-\def\EndLilyPondOutput{%
- \vskip 0pt plus \lilypondpaperinterscorelinefill00 fill\csname bye\endcsname
+%% <lilypond parameter definitions>
+%% \ifx\lilypondstart \undefined
+%% \input lilyponddefs
+%% \fi
+%% \lilypondstart
+%% <font setup and note output>
+%% \lilypondend
+
+\newdimen\lytempdim
+\newdimen\outputscale
+
+%% Handy macros from the LaTeX manual.
+\long\gdef\lilypondfirst#1#2{#1}
+\long\gdef\lilypondsecond#1#2{#2}
+\gdef\lilypondifundefined#1{
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\lilypondfirst
+ \else
+ \expandafter\lilypondsecond
+ \fi
+}
+
+\gdef\lilypondstart{
+ \begingroup
+ \catcode `\@=11\relax
+ %% \@nodocument is defined as \relax after `\begin{document}'
+ \lilypondifundefined{@nodocument}
+ {
+ %% either plain TeX or texinfo or not at the beginning of LaTeX input
+ \def\x{\endgroup}}
+ {
+ %% FIXME: a4
+ %% provide a proper LaTeX preamble (for A4 paper format)
+ \def\x{
+ \endgroup
+ \def\lilyponddocument{}
+ \documentclass[a4paper]{article}
+ %% safe-mode
+ \nofiles
+ \usepackage{inputenc}
+ \pagestyle{empty}
+ \lilypondifundefined{lilypondclassic}
+ {
+ %% Nullify [La]TeX page layout settings, page layout by LilyPond.
+ \topmargin-1in
+ \headheight0pt\headsep0pt
+ \oddsidemargin-1in
+ \evensidemargin\oddsidemargin
+ }
+ {
+ %% Center staves horizontally on page
+ \ifdim\lilypondpaperlinewidth\lilypondpaperunit > 0pt
+ \hsize\lilypondpaperlinewidth\lilypondpaperunit
+ \lytempdim \paperwidth
+ \advance\lytempdim -\the\hsize
+ \lytempdim 0.5\lytempdim
+ \advance\lytempdim -1in
+ \oddsidemargin \lytempdim
+ \evensidemargin \lytempdim
+ \fi
+ }
+ \parindent 0pt
+ %% TEXINFO workaround: \begin is defined as \outer, use \csname.
+ \csname begin\endcsname{document}}}
+ \x}
+
+\gdef\lilypondend{
+ \lilypondifundefined{lilypondbook}
+ {\lilypondifundefined{lilypondpaperlastpagefill}
+ {\vskip 0pt plus\lilypondpaperinterscorelinefill00 fill}
+ {}}
+ {}
+ \begingroup
+ \lilypondifundefined{lilyponddocument}
+ {\def\x{\endgroup}}
+ {\def\x{\endgroup\csname end\endcsname{document}}}
+ \x}
+
+%% Inversed \loop ... \repeat macro
+\def\lilypondloop#1\lilypondrepeat{
+ \def\lilypondbody{#1}
+ \lilyponditerate
+}
+
+\def\lilyponditerate{
+ % \if ...
+ \lilypondbody
+ \let\lilypondnext \relax
+ \else
+ \let\lilypondnext \lilyponditerate
+ \fi
+ \lilypondnext
+}
+
+%% Allow overriding of pagebreak
+\lilypondifundefined{lilypondpagebreak}
+{
+ \lilypondifundefined{@nodocument}
+ {\gdef\lilypondpagebreak{\eject}}
+ {\gdef\lilypondpagebreak{\newpage}}
+ }
+ {}
+
+%% Include \special only once.
+\gdef\lilypondspecial{
+ \special{header=music-drawing-routines.ps}
+ \gdef\lilypondspecial{}