% lollipop-floats.tex copyright 1992/3 Victor Eijkhout
% copyright 2014 Vafa Khalighi
%
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see .
%
%
% these macros handle inserts for the Lollipop format
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% Floating insertions %%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\@GenericConstruct{Insertion}
\NewTrace:ins
\@InsertionOption{location}{
\switch {\if\EqualString{#1}}
{top} {}
{bot} {}
{mid} {}
{default} {\Wmessage{Unknown qualifier: }}
\endswitch}
\newif\ifsplit@insert
\add@Insertion@default{\split@insertno}
\@InsertionOption{split}{
\switch {\if\EqualString{#1}}
{no} {\split@insertno}
{default} {\split@insertyes}
\endswitch}
\def\@DefineInsertion{
\csarg\newinsert{\@name @ins}
\csarg\edef{\@name}{\insert\CSname{\@name @ins}
\ifsplit@insert\else\vbox\fi % make this a box if no split allowed
\bgroup \the\before@coms
}
\@DefineStopCommand{\the\after@coms \egroup}
}
\endinput
\newinsert\footins
\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
\ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
#1\@sf\vfootnote{#1}}
\def\vfootnote#1{\insert\footins\bgroup
\interlinepenalty\interfootnotelinepenalty
\splittopskip\ht\strutbox % top baseline for broken footnotes
\splitmaxdepth\dp\strutbox \floatingpenalty\@MM
\leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
\textindent{#1}\footstrut\futurelet\next\fo@t}
\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
\else\let\next\f@t\fi \next}
\def\f@@t{\bgroup\aftergroup\@foot\let\next}
\def\f@t#1{#1\@foot}
\def\@foot{\strut\egroup}
\def\footstrut{\vbox to\splittopskip{}}
\skip\footins=\bigskipamount % space added when footnote is present
\count\footins=1000 % footnote magnification factor (1 to 1)
\dimen\footins=8in % maximum footnotes per page
\newif\ifp@ge \newif\if@mid
\let\p@getrue=\p@geyes \let\p@gefalse=\p@geno
\let\@midtrue=\@midyes \let\@midfalse=\@midno
\def\topinsert{\@midfalse\p@gefalse\@ins}
\def\midinsert{\@midtrue\@ins}
\def\pageinsert{\@midfalse\p@getrue\@ins}
\skip\topins=\z@skip % no space added when a topinsert is present
\count\topins=1000 % magnification factor (1 to 1)
\dimen\topins=\maxdimen % no limit per page
\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
\def\endinsert{\egroup % finish the \vbox
\if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
\advance\dimen@12\p@ \advance\dimen@\pagetotal
\ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
\if@mid \bigskip\box\z@\bigbreak
\else\insert\topins{\penalty100 % floating insertion
\splittopskip\z@skip
\splitmaxdepth\maxdimen \floatingpenalty\z@
\ifp@ge \dimen@\dp\z@
\vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
\else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
\endinput