summaryrefslogtreecommitdiff
path: root/macros/plain/formats/lollipop/tex/lollipop-document.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/formats/lollipop/tex/lollipop-document.tex')
-rw-r--r--macros/plain/formats/lollipop/tex/lollipop-document.tex381
1 files changed, 381 insertions, 0 deletions
diff --git a/macros/plain/formats/lollipop/tex/lollipop-document.tex b/macros/plain/formats/lollipop/tex/lollipop-document.tex
new file mode 100644
index 0000000000..e643cfcab0
--- /dev/null
+++ b/macros/plain/formats/lollipop/tex/lollipop-document.tex
@@ -0,0 +1,381 @@
+% lollipop-document.tex copyright 1992/3 Victor Eijkhout
+% copyright 2014--2016 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 <http://www.gnu.org/licenses/>.
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% D O C U M E N T S T R U C T U R E %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\DefineTest:LocalReferences
+\NewTrace:doc
+
+% Start
+% open external files and execute default commands
+%
+\newif\if@started
+\def\Start{\@startedyes \the\start@commands
+ \ifBasicIndentIsSet\else
+ \Distance:basicindent=parindent \fi
+ \set@level@indent}
+\def\StartCommand#1{\adds@start@command{#1}}
+
+% End
+% 1/ close any open groups and give warnings
+% 2/ \vfil\eject the last page
+% 3/ \immediate\close the .auxs file
+% 4/ load the .aux for writing the external files
+% and testing changed references
+%
+\let\@end=\end
+\def\Stop{\Close@all@groups
+ \the\stop@commands
+ \vfil \penalty\slotpenalty
+ \ifnum\unknown@refs>\z@
+ \message{-- There \ifnum\unknown@refs=\@ne was an \else
+ were \number\unknown@refs\@space\fi
+ unresolved reference\ifnum\unknown@refs>\@ne s\fi.}\fi
+ \ifnum\duplicate@labels>\z@
+ \message{-- There \ifnum\duplicate@labels=\@ne was an\else
+ were \number\duplicate@labels\@space\fi
+ duplicate label\ifnum\duplicate@labels>\@ne s\fi.}\fi
+ \immediate@close@aux@file{aux}
+ \ifWriteExtern \final@load@aux \fi
+ \@end}
+\def\StopCommand#1{\adds@stop@command{#1}}
+
+%%%%%%%%%%%% input other files
+\newwrite\aux@file \newwrite\incaux@file
+\let\ifWriteaux\iftrue
+\def\aux@name{aux} \def\aux@extension{aux}
+\newif\if@auxopen \newif\if@incauxopen
+
+% the following line is in output.tex
+%\add@mark@item{first@page}
+
+% Input files are in a group,
+% they also set the IsFirstPage test
+\def\InputFile:#1 {\begingroup \def\input@name{#1}
+ \Tmessage[doc]{Input File: #1}
+ \refresh@mark@item{first@page}{yes}
+ \refresh@mark@item{first@page}{no}
+ \ifLocalReferences
+ \get@aux@file{#1}{incaux}{aux}\fi
+ \input@file{#1}%
+ \immediate@close@aux@file{incaux}
+ \Close@all@groups
+ \def\test@input@name{#1}\ifx\input@name\test@input@name\else
+ \Wmessage{Input `#1' overbalanced}\fi
+ \endgroup}
+\def\xInputFile:#1 {\input@file{#1}}
+\def\input@file#1{\input #1 \vfil\penalty\slotpenalty\par}
+
+\let\input@name=\@empty
+\let\test@input@name=\@empty
+
+% Input of Lollipop files
+%
+\def\InputLollipop:#1 {\makeatletter\input#1\relax\makeatother}
+
+%%%%%%%%%%%%%%%% External Communication
+
+% List of files
+% not including the .aux file
+%
+\newtoks\ext@files@list \ext@files@list={}
+
+% I don't want to remember my own naming conventions.
+%
+\def\file@ext@name#1{#1@extension}
+\def\cs@file@ext@name#1{\csname#1@extension\endcsname}
+
+% Define External File
+% #1 is name known to style definition,
+% #2#3#4 is three-letter file extension in
+% file system
+%
+% correspondence: \#1@extension = #2#3#4, \#2#3#4@name = #1
+%
+% user test \Write#1 to prevent overwriting
+% internal test \if@#2#3#4open
+% \newwrite\#2#3#4@file
+%
+\def\DefineExternalFile:#1=#2#3#4#5
+ {\Tmessage[doc]{Define external file `#1' (ext=#2#3#4)}
+ \csarg\newwrite{#2#3#4@file}
+ \append@to@list{ext@files@list}{\\#2#3#4; }
+ \csarg\newtoks{#1@local@defs}%constructed in \ExternalItem
+ \csarg\gdef{\file@ext@name{#1}}{#2#3#4}
+ \csarg\gdef{#2#3#4@name}{#1}
+ \DefineTest:{Write#1}
+ \global\csname Write#1yes\endcsname
+ \csarg\newif{if@#2#3#4open}
+ }
+
+%%%% Load
+
+% Initial load of the auxiliary file
+%
+\def\initial@load@aux{%\begingroup%why this group?
+ \disable@external@write@command
+ \Tmessage[doc]{Load initial aux file}
+ \get@aux@file{\jobname}{aux}{aux}
+ %\endgroup
+ \ifWriteExtern
+ \open@ext@file@for@output{\jobname}{aux}{aux}
+ \fi}
+% A test to determine all-or-nothing writing of .aux file.
+% below there is a redefinition for bibTeX
+\DefineTest:WriteExtern \WriteExtern:yes
+\ifini{\add@start@command{\initial@load@aux}}
+
+% Load of external file
+%
+\def\LoadExternalFile:#1
+ {\if\UndefinedCS{\file@ext@name{#1}}
+ \Wmessage{LoadExternalFile: unknown external file `#1'}
+ \else \begingroup
+ \Tmessage[doc]{Loading external file: #1}
+ \WriteExtern:no %prevent trouble with undefined entries
+ \csarg\the{#1@local@defs}
+ \get@aux@file{\jobname}{\cs@file@ext@name{#1}}
+ {\cs@file@ext@name{#1}}
+ \endgroup
+ \fi}
+
+% Basic load
+%
+\def\get@aux@file#1#2#3{
+ \csarg\openin{#2@file} #1.#3
+ \csarg\ifeof{#2@file}
+ \message{No aux file `\csname#2@name\endcsname'}
+ \else \csarg\closein{#2@file}
+ \Tmessage[ref]{Inputting aux file <#2>: <#1.#3>}
+ \Tmessage[ext]{Inputting aux file <#2>: <#1.#3>}
+ \makeatletter \input #1.#3 \makeatother
+ \fi}
+
+% Open for output:
+% initially used for the .aux file
+% at the final load of the .aux file used to generate .toc
+% et cetera
+%
+\def\open@ext@file@for@output#1#2#3{
+ \csname ifWrite\csname #2@name\endcsname\endcsname
+ \immediate\openout\csname#2@file\endcsname=#1.#3
+ \global\csname @#2openyes\endcsname
+ \immediate\write\csname#2@file\endcsname{\relax}
+ \Tmessage[doc]{File '#2' (#3) open for output}
+ \Tmessage[ext]{File '#2' (#3) open for output}
+ \else
+ \global\csname @#2openno\endcsname
+ \Tmessage[doc]{File '#2' (#3) not open for output}
+ \Tmessage[ext]{File '#2' (#3) not open for output}
+ \fi}
+\def\open@external@files@for@output{
+ \def\protect{\noexpand\protect\noexpand}
+ \def\\##1;{##1}\Tmessage[doc]{External files: \the\ext@files@list}
+ \def\\##1;{\open@ext@file@for@output{\jobname}{##1}{##1}}
+ \the\ext@files@list}
+
+\newif\iflabels@changed
+\def\final@load@aux{\labels@changedno
+ \def\refer@label##1##2##3{\test@refer@label{##1}{##2}{##3}}
+ \open@external@files@for@output
+ \install@external@write@command
+ \Tmessage[doc]{Load aux for label testing and ext file generation}
+ \Tmessage[ext]{Load aux for label testing and ext file generation}
+ \makeatletter \input \jobname.aux
+ \end@write@extern
+ \iflabels@changed \Wmessage{Labels have changed. Rerun!} \fi
+ \makeatother}
+\def\end@write@extern{
+ \def\\##1;{\immediate@close@aux@file{##1}}
+ \the\ext@files@list}
+\def\close@aux@file #1{\csname if@#1open\endcsname
+ \write\csname#1@file\endcsname{\relax}
+ \closeout\csname#1@file\endcsname
+ \Tmessage[doc]{File '#1' closed}\fi}
+\def\immediate@close@aux@file#1{\csname if@#1open\endcsname
+ \immediate\write\csname#1@file\endcsname{\relax}
+ \immediate\closeout\csname#1@file\endcsname
+ \Tmessage[doc]{File '#1' immediately closed}\fi}
+
+
+% Generate the extern call in the style definition
+% this one is part of 'external:<file name>'
+%
+\def\generate@extern#1{\edef\cs@e
+ {\nxp\@add@toks{\nxp\@extern
+ {\CSname{\file@ext@name{#1}}}
+ {\@name}
+ {\ifhas@counter \CSname{\@name Counter}\fi}
+%\counter@@repr{\@name}
+%{\nxp\the\counter@@name{\@name}}\fi}%
+ }}\cs@e}
+
+% call:
+% \@extern{extension}{object}{counter}\the\title@toks\e@extern
+% to aux:
+% \write@to@external{extension}{object}{counter}{page}{tekst}\ew@extern
+% to .extension file:
+% \object{counter}{page}tekst\par
+% where \object is locally defined in the 'extension' file.
+%
+\def\ToExternalFile:#1=#2
+ {\edef\cs@e{\nxp\x@extern{\cs@file@ext@name{#1}}}%
+ \cs@e{anon}{}{\\{#2}\\{}}{\\{}\\{}\\{}}\e@extern}
+\def\@extern{\ifWriteExtern
+ \xp\x@extern \else \xp\skip@extern \fi}
+\def\skip@extern#1#2#3\e@extern
+ {\Tmessage[ext]{Skipped `#2' for `#1'}}
+\newtoks\ext@text@toks
+\newtoks\ext@labl@toks
+\newtoks\ext@page@toks
+\begingroup\noeol\catcode`\?\catcode`\%\catcode`\%=12
+\gdef\x@extern#1#2#3#4#5\e@extern
+ {\begingroup\normalesc
+ \def\label[##1]{}
+ \def\protect{\noexpand\protect\noexpand}
+ \def\cprotect{\xp\string}
+ \Tmessage[ext]{Write to aux `#2' for `\csname#1@name\endcsname'}
+ \edef\cs@e{\write\aux@file{\string\write@to@external
+ {#1}{#2}{#3}}}\cs@e
+ \write\aux@file{
+ {\counter@@repr{Page}{\csarg\number{\counter@name{Page}}}}%}
+ \aux@write@external{#4}{#5}
+ \write\aux@file{\string\ew@extern}
+ \endgroup}
+\normaleol\endgroup
+
+% string a word, delimited by a space,
+% first see whether it is a group, recognized by the fact
+% that there is another space in it.
+\def\string@um@up#1 {\string@space@group#1 \>\@bean}
+\def\string@space@group#1 #2#3\@bean
+ {\ifx#2\> \string@word#1\@roy
+ \else \string{\string@um@up#1 #2#3 \string}%
+ \fi \@space\string@um@up}
+% a word is delimited by \@roy; if the word is \> then this
+% is the last word, and we should remove
+% a trailing \@roy plus the \@space\string@um@up tokens after the call,
+% but also parts of the conditional after the call have to be removed:
+% \expandafter \take@three \expandafter \@roy \else .. \fi \@space\string@..
+%
+% sick. very sick.
+%
+\def\string@word#1{\ifx#1\>\xp\expandafter\xp\take@three\xp\expandafter
+ \else \ifx#1\@roy
+ \else \string#1\ifcat\nxp#1\relax\@space\fi
+ \xp\xp\xp\string@word
+ \fi \fi}
+
+% an attempt to string up a title.
+% this covers for the case where there are groups,
+% but it is still quite wrong if \else or so is in the title
+%
+\NewDummy{@roy}\NewDummy{@bean}\NewDummy{@rope}\NewDummy{@bear}
+\NewDummy{@Rope}
+% Enable/Disable communication to external files
+% former during initial load of .aux file,
+% latter during final load of .aux file
+%
+\def\disable@external@write@command
+ {\def\write@to@external##1\ew@extern{}}
+\disable@external@write@command %do this initially just to be sure
+\def\install@external@write@command %grouping ok?
+ {\def\write@to@external##1##2##3##4##5\ew@extern
+ {\csname if@##1open\endcsname
+ \Tmessage[ext]{Write `##2'
+ to `\csname##1@name\endcsname'}
+ \ext@labl@toks{##3}
+ \ext@page@toks{##4}
+ \ext@text@toks{##5}
+ \immediate\write\csname##1@file\endcsname
+ {\CSname{##2}{\the\ext@labl@toks}%
+ {\the\ext@page@toks}\the\ext@text@toks
+ \string\par}
+ \else
+ \Tmessage[ext]{Skipped `##2'
+ for `\csname##1@name\endcsname'}
+ \fi}}
+
+%%%%%%%%%%%%% BibTeX interface
+% we interface ourselves to the BtxMac macros
+% of Karl Berry and Oren Patashnik, version 0.99h
+
+% prevent btxmac from rewriting *our* auxfile
+% if btxmac has not been loaded this is just \relax
+\adds@start@command{\csn @auxfiledonetrue\ecs}
+
+% alternate name for the aux write stream
+\adds@start@command{\let\@auxfile\aux@file}
+
+% disable / alter Btxmac definitions
+\def\bbl@hook{\default@everypar}
+\adds@start@command{\let\bblhook\bbl@hook}
+
+% switch off btxmac if need be
+\xp\def\xp\WriteExternno\xp
+ {\WriteExternno \let\noauxfile\@space}
+
+% if you want to read an aux file but not load btxmac:
+\let\bibstyle\take@one \let\bibdata\take@one
+\let\citation\take@one \let\nocite\take@one
+% similarly the source:
+\let\bibliography\take@one \let\bibliographystyle\take@one
+
+% user defined bibliography
+\def\DefineBBL{\let\bbl@hook\BBL@hook \DefineList:BBL }
+\def\BBL@hook
+ {\def\begin##1##2{\default@everypar\BBL}\def\end##1{\>}%
+ %intercept \begin{thebibliography}{width}
+ \def\bibitem{\ifNextChar[%]
+ \bbl@print@item\bbl@item}
+ \def\biblabelprint##1{}
+ }
+\def\bbl@item#1{\item[#1]}
+\def\bbl@print@item[#1]#2{\item<#1>[#2]}
+
+% refer to a bib item
+\def\bibref[#1]{\cite{#1}}%{[\ref[#1]]\nocite{#1}}
+
+\def\one@bib@citation#1\@@{% this is what \bib@citation will become
+ \if@notfirstcitation
+ \printbetweencitations
+ \fi
+ %
+ \expandafter \ifx \csname\@citelabel{#1}\endcsname \relax
+ \if@citewarning
+ \message{\@linenumber Undefined citation `#1'.}%
+ \fi
+ % Give it a dummy definition:
+ \expandafter\gdef\csname\@citelabel{#1}\endcsname{%
+ {\tt \nobreak\hskip0pt#1\nobreak\hskip0pt}}%
+ \fi
+ \@printlabel{#1}%
+ \@notfirstcitationtrue
+}
+\def\@c@l#1{@empty}
+\adds@start@command{\let\@onecitation\one@bib@citation
+ \let\@citelabel\@c@l}
+
+\endinput
+
+% 92/11/18 \Start extended with start@commands and \basicindent
+% 92/11/20 \StopCommand added
+% 92/11/21 groups removed from initial loading aux (twice)
+% 92/11/26 BibTeX interface \ No newline at end of file