From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/etex-pkg/etex.sty | 507 +++++++++++++++++++++++++++++++++
 1 file changed, 507 insertions(+)
 create mode 100644 macros/latex/contrib/etex-pkg/etex.sty

(limited to 'macros/latex/contrib/etex-pkg/etex.sty')

diff --git a/macros/latex/contrib/etex-pkg/etex.sty b/macros/latex/contrib/etex-pkg/etex.sty
new file mode 100644
index 0000000000..ed2577c20f
--- /dev/null
+++ b/macros/latex/contrib/etex-pkg/etex.sty
@@ -0,0 +1,507 @@
+% \iffalse meta-comment
+%
+% Copyright 1997, 1998, 2008 2015 2016 LaTeX Project and Peter Breitenlohner.
+% 
+% This file (etex.sty) may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3 of
+% this license or (at your option) any later version.  The latest
+% version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+% 
+% This work has the LPPL maintenance status "maintained".
+% 
+% The Current Maintainer of this work is David Carlisle.
+% https://github.com/davidcarlisle/dpctex/issues
+% \fi
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{etex}
+%        [1997/08/12 v0.1 eTeX basic definition package (DPC)]
+%        [1998/03/26 v2.0 eTeX basic definition package (PEB)]
+%        [2015/03/02 v2.1 eTeX basic definition package (PEB,DPC)]
+%        [2015/07/06 v2.2 eTeX basic definition package (PEB,DPC)]
+%        [2015/07/08 v2.3 eTeX basic definition package (PEB,DPC)]
+%        [2015/09/02 v2.4 eTeX basic definition package (PEB,DPC)]
+%        [2016/01/07 v2.5 eTeX basic definition package (PEB,DPC)]
+%        [2016/01/11 v2.6 eTeX basic definition package (PEB,DPC)]
+         [2016/08/01 v2.7 eTeX basic definition package (PEB,DPC)]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% A basic interface to some etex primitives, closely modeled on
+%% etex.src and etexdefs.lib provided by the core etex team.
+
+%% The etex.src `module' system is not copied here, the standard
+%% LaTeX package option mechanism is used instead,
+%% however the package options match the module names.
+%% (Currently grouptypes, interactionmodes, nodetypes, iftypes.)
+%% The individual type names are different too: We use, e.g.,
+%%
+%% `\bottomleveltype' and `\simplegrouptype' instead of
+%% `\grouptypes{bottomlevel}' and `\grouptypes{simple}'.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Other Comments...
+
+%% The names of the `interactionmodes' are not too good.
+%% In particular \scroll and \batch are likely to clash with existing
+%% uses. These names have been changed into \batchinteractionmode,
+%% \scrollinteractionmode etc.
+%% Similarly, the names of the `groupetypes' have been changed, in
+%% particular \mathgroup would conflict with the LaTeX kernel.
+
+%% \etex logo could have the same trick as \LaTeXe to pick up a bold
+%% epsilon when needed. (Not done here, I hate wasting tokens on logos.)
+%% This version does have a \m@th not in the original.
+
+%% The \globcountvector, \loccountvector, etc. allocation macros are
+%% not (yet) implemented.
+
+%% Currently if run on a standard TeX, the package generates an error.
+%% Perhaps it should instead load some code to try to fake
+%% the new etex primitives in that case???
+%% Likewise, the package generates an error when used with e-TeX V 1
+
+%% The etex.src language mechanism is not copied here. That facility
+%% does not use any of the etex features. LaTeX should be customised
+%% using the same hyphen.cfg mechanism as for a format built with a
+%% standard TeX.
+
+%% David Carlisle
+
+%% Upgraded for e-TeX V 2.0
+%% Peter Breitenlohner
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+\ifx\eTeXversion\@undefined
+  \PackageError{etex}
+    {This package may only be run using an\MessageBreak
+     etex in extended mode}
+    {Perhaps you forgot the `*' when making the format with (e)initex.%
+    }
+\fi
+
+\ifnum\eTeXversion<2
+  \PackageError{etex}
+    {This package requires e-TeX V 2}
+    {You are probably using the obsolete e-TeX V 1.%
+    }
+\fi
+
+% 2.2
+% Check if the new latex 2015/01/01 allocation is already using
+% extended reisters. If so it is too late to change allocation scheme.
+% Older versions of LaTeX would have given an error when the classic
+% TeX registers were all allocated, but newer formats allocate from
+% the extended range, so usually this package is not needed.
+\@tempswafalse
+\ifnum\count10>\@cclv\@tempswatrue\else
+\ifnum\count11>\@cclv\@tempswatrue\else
+\ifnum\count12>\@cclv\@tempswatrue\else
+\ifnum\count13>\@cclv\@tempswatrue\else
+\ifnum\count14>\@cclv\@tempswatrue\else
+\ifnum\count15>\@cclv\@tempswatrue
+\fi\fi\fi\fi\fi\fi
+
+\if@tempswa
+\PackageWarningNoLine{etex}{%
+Extended allocation already in use.\MessageBreak
+etex.sty code will not be used.\MessageBreak
+To force etex package to load, add\MessageBreak
+\string\RequirePackage{etex}\MessageBreak
+at the start of the document}
+
+% 2.5 define the global allocation to be the standard ones
+% as extended allocation is already in use. Helps with
+% compatibility with some packages that use these commands 
+% after loading etex.
+% 2.6 avoid error from outer if used with (e)plain
+\expandafter\let\csname globcount\expandafter\endcsname
+                \csname newcount\endcsname
+\expandafter\let\csname globdimen\expandafter\endcsname
+                \csname newdimen\endcsname
+\expandafter\let\csname globskip\expandafter\endcsname
+                \csname newskip\endcsname
+\expandafter\let\csname globmuskip\expandafter\endcsname
+                \csname newmuskip\endcsname
+\expandafter\let\csname globtoks\expandafter\endcsname
+                \csname newtoks\endcsname
+\expandafter\let\csname globmarks\expandafter\endcsname
+                \csname newmarks\endcsname
+% end of 2.5/2.6 change
+
+\expandafter\endinput\fi
+
+% End of 2.2 addition.
+
+% 2.3 move option handling after the above error checks.
+\DeclareOption{grouptypes}{\catcode`\G=9}
+\DeclareOption{interactionmodes}{\catcode`\I=9}
+\DeclareOption{nodetypes}{\catcode`\N=9}
+\DeclareOption{iftypes}{\catcode`\C=9}
+\DeclareOption{localalloclog}{\let\et@xwlog\wlog} % the default
+\DeclareOption{localallocnolog}{\let\et@xwlog\@gobble} % be quiet
+\DeclareOption{localallocshow}{\let\et@xwlog\typeout} % debugging
+% End of 2.3 addition.
+
+% v2.7
+% \extrafloats does not work with this package
+% but make it give a sensible error, not mis-parse \ifnum.
+%
+% Note that using \extrafloats earlier might not be safe as
+% it could in principle clash with registers used for local allocation.
+% However it probably works (as local allocation is used locally...).
+% A better fix would be not to load this package with current LaTeX.
+% This current etex package is just provided to force the old behaviour
+% and such documents should not be using new features such as \extrafloats).
+\ifdefined\extrafloats
+\def\extrafloats#1{%
+  \PackageError{etex}{%
+    \noexpand\extrafloats is incompatible with etex.sty allocation.\MessageBreak
+    Try using \noexpand\extrafloats before loading etex}%
+    \@ehc}
+\fi
+% end of v2.7 change
+
+\def\eTeX{%
+  $\m@th\varepsilon$-\TeX}
+
+\def\tracingall{%
+  \tracingcommands\thr@@        % etex
+  \tracingstats\tw@
+  \tracingpages\@ne
+  \tracinglostchars\tw@         % etex
+  \tracingmacros\tw@
+  \tracingparagraphs\@ne
+  \tracingrestores\@ne
+  \tracinggroups\@ne            % etex
+  \tracingifs\@ne               % etex
+  \tracingscantokens\@ne        % etex
+  \tracingnesting\@ne           % etex
+  \tracingassigns\@ne           % etex
+  \errorcontextlines\maxdimen
+  \showoutput}
+
+\def\loggingall{%
+  \tracingall
+  \tracingonline\z@}
+
+\def\tracingnone{%
+  \tracingonline\z@
+  \showboxdepth\m@ne
+  \showboxbreadth\m@ne
+  \tracingoutput\z@
+  \errorcontextlines\m@ne
+  \tracingassigns\z@
+  \tracingnesting\z@
+  \tracingscantokens\z@
+  \tracingifs\z@
+  \tracinggroups\z@
+  \tracingrestores\z@
+  \tracingparagraphs\z@
+  \tracingmacros\z@
+  \tracinglostchars\@ne
+  \tracingpages\z@
+  \tracingstats\z@
+  \tracingcommands\z@}
+
+%% Register allocation
+%% We have to adjust the Plain TeX / LaTeX register allocation counts
+%% for our slightly modified book-keeping, but first we allocate our
+%% insertion counter \et@xins, because \insc@ount of Plain TeX / LaTeX
+%% will be used differently.
+
+\newcount\et@xins
+
+\advance\count10 by 1 % \count10=23 % allocates \count registers 23, 24, ...
+\advance\count11 by 1 % \count11=10 % allocates \dimen registers 10, 11, ...
+\advance\count12 by 1 % \count12=10 % allocates \skip registers 10, 11, ...
+\advance\count13 by 1 % \count13=10 % allocates \muskip registers 10, 11, ...
+\advance\count14 by 1 % \count14=10 % allocates \box registers 10, 11, ...
+\advance\count15 by 1 % \count15=10 % allocates \toks registers 10, 11, ...
+\advance\count16 by 1 % \count16=0 % allocates input streams 0, 1, ...
+\advance\count17 by 1 % \count17=0 % allocates output streams 0, 1, ...
+\advance\count18 by 1 % \count18=4 % allocates math families 4, 5, ...
+\advance\count19 by 1 % \count19=0 % allocates \language codes 0, 1, ...
+
+\et@xins=\insc@unt % \et@xins=255 % allocates insertions 254, 253, ...
+
+
+%% To ensure working in LaTeX 2015 release do define \newcount etc
+%% with their pre 2015 LaTeX definitions
+\def\newcount{\alloc@0\count\countdef\insc@unt}
+\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\def\newskip{\alloc@2\skip\skipdef\insc@unt}
+\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
+\def\newbox{\alloc@4\box\chardef\insc@unt}
+\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
+\def\newread{\alloc@6\read\chardef\sixt@@n}
+\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+\def\new@mathgroup{\alloc@8\mathgroup\chardef\sixt@@n}
+\let\newfam\new@mathgroup
+\def\newlanguage{\alloc@9\language\chardef\@cclvi}
+
+%% When the normal register pool for \count, \dimen, \skip, \muskip,
+%% \box, or \toks registers is exhausted, we switch to the extended pool.
+
+\def\alloc@#1#2#3#4#5%
+ {\ifnum\count1#1<#4% make sure there's still room
+    \allocationnumber\count1#1
+    \global\advance\count1#1\@ne
+    \global#3#5\allocationnumber
+    \wlog{\string#5=\string#2\the\allocationnumber}%
+  \else\ifnum#1<6
+    \begingroup \escapechar\m@ne
+    \expandafter\alloc@@\expandafter{\string#2}#5%
+  \else\errmessage{No room for a new #2}\fi\fi
+ }
+
+%% The \expandafter construction used here allows the generation of
+%% \newcount and \globcount from #1=count.
+
+\def\alloc@@#1#2%
+ {\endgroup % restore \escapechar
+  \wlog{Normal \csname#1\endcsname register pool exhausted,
+    switching to extended pool.}%
+  \global\expandafter\let
+    \csname new#1\expandafter\endcsname
+    \csname glob#1\endcsname
+  \csname new#1\endcsname#2%
+ }
+
+%% We do change the LaTeX definition of \newinsert
+
+\def\newinsert#1{% make sure there's still room for ...
+  \ch@ck0\et@xins\count{% ... a \count, ...
+    \ch@ck1\et@xins\dimen{% ... \dimen, ...
+      \ch@ck2\et@xins\skip{% ... \skip, ...
+        \ch@ck4\et@xins\box{% ... and \box register
+  \global\advance\et@xins\m@ne
+  \unless\ifnum\insc@unt<\et@xins \global\insc@unt\et@xins \fi
+  \allocationnumber\et@xins
+  \global\chardef#1\allocationnumber
+  \wlog{\string#1=\string\insert\the\allocationnumber}}}}}}
+
+\def\ch@ck#1#2#3#4%
+ {\ifnum\count1#1<#2#4\else\errmessage{No room for a new #3}\fi}
+
+%% And we define \reserveinserts, so that you can say \reserveinserts{17}
+%% in order to reserve room for up to 17 additional insertion classes, that
+%% will not be taken away by \newcount, \newdimen, \newskip, or \newbox.
+
+% 2.4 Remove \outer to match LaTeX allocations
+% which are never \outer unlike plain TeX.
+
+%\outer
+\def\reserveinserts#1%
+ {\global\insc@unt\numexpr \et@xins \ifnum#1>\z@ -#1\fi \relax}
+
+% Now, we define \globcount, \globbox, etc., so that you can say
+% \globcount\foo and \foo will be defined (with \countdef) to be the
+% next count register from the vastly larger but somewhat less efficient
+% extended register pool. We also define \loccount, etc., but these
+% register definitions are local to the current group.
+
+\count260=277 % globally allocates \count registers 277, 278, ...
+\count261=256 % globally allocates \dimen registers 256, 257, ...
+\count262=256 % globally allocates \skip registers 256, 257, ...
+\count263=256 % globally allocates \muskip registers 256, 257, ...
+\count264=256 % globally allocates \box registers 256, 257, ...
+\count265=256 % globally allocates \toks registers 256, 257, ...
+\count266=1 % globally allocates \marks classes 1, 2, ...
+
+\count270=32768 % locally allocates \count registers 32767, 32766, ...
+\count271=32768 % ditto for \dimen registers
+\count272=32768 % ditto for \skip registers
+\count273=32768 % ditto for \muskip registers
+\count274=32768 % ditto for \box registers
+\count275=32768 % ditto for \toks registers
+\count276=32768 % ditto for \marks classes
+
+% \count registers 256-259 and 267-269 are not (yet) used
+
+% \def \et@xglob #1#2#3#4% <offset>, <type>, <method>, <register>
+% \def \et@xloc #1#2#3#4% <offset>, <type>, <method>, <register>
+
+\def \globcount  {\et@xglob 0\count  \countdef}
+\def \loccount   {\et@xloc  0\count  \countdef}
+\def \globdimen  {\et@xglob 1\dimen  \dimendef}
+\def \locdimen   {\et@xloc  1\dimen  \dimendef}
+\def \globskip   {\et@xglob 2\skip   \skipdef}
+\def \locskip    {\et@xloc  2\skip   \skipdef}
+\def \globmuskip {\et@xglob 3\muskip \muskipdef}
+\def \locmuskip  {\et@xloc  3\muskip \muskipdef}
+\def \globbox    {\et@xglob 4\box    \mathchardef}
+\def \locbox     {\et@xloc  4\box    \mathchardef}
+\def \globtoks   {\et@xglob 5\toks   \toksdef}
+\def \loctoks    {\et@xloc  5\toks   \toksdef}
+\def \globmarks  {\et@xglob 6\marks  \mathchardef}
+\def \locmarks   {\et@xloc  6\marks  \mathchardef}
+
+\let\newmarks=\globmarks %% this used to be \newmark for e-TeX V 1.1
+
+\def\et@xglob#1#2#3#4%
+ {\et@xchk#1#2{% make sure there's still room
+  \allocationnumber=\count26#1%
+  \global\advance\count26#1\@ne
+  \global#3#4\allocationnumber
+  \wlog{\string#4=\string#2\the\allocationnumber}}%
+ }
+
+\def\et@xloc#1#2#3#4%
+ {\et@xchk#1#2{% make sure there's still room
+  \advance\count27#1by\m@ne
+  \allocationnumber=\count27#1%
+  #3#4=\allocationnumber
+  \et@xwlog{\string#4=\string#2\the\allocationnumber\space(local)}}%
+ }
+
+%% The allocation messages for local allocations use \et@xwlog, such that
+%% these messages can easily be switched on/off
+
+\let\et@xwlog=\wlog
+
+\def\et@xchk#1#2#3%
+ {\ifnum\count26#1<\count27#1 #3\else\errmessage{No room for a new #2}\fi}
+
+% Next we define \globcountblk, \loccountblk, etc., so that you can
+% say \globcountblk\foo{17} and \foo will be defined (with \mathchardef)
+% as the first (the zeroth?) of a block of 17 consecutive registers.
+% Thus the user is intended to reference elements <\foo+0> to <\foo+n-1>,
+% where n is the length of the block allocated.
+
+% \def \et@xgblk #1#2#3#4% <offset>, <type>, <register>, <size>
+% \def \et@xlblk #1#2#3#4% <offset>, <type>, <register>, <size>
+
+\def\globcountblk  {\et@xgblk 0\count  }
+\def\loccountblk   {\et@xlblk 0\count  }
+\def\globdimenblk  {\et@xgblk 1\dimen  }
+\def\locdimenblk   {\et@xlblk 1\dimen  }
+\def\globskipblk   {\et@xgblk 2\skip   }
+\def\locskipblk    {\et@xlblk 2\skip   }
+\def\globmuskipblk {\et@xgblk 3\muskip }
+\def\locmuskipblk  {\et@xlblk 3\muskip }
+\def\globboxblk    {\et@xgblk 4\box    }
+\def\locboxblk     {\et@xlblk 4\box    }
+\def\globtoksblk   {\et@xgblk 5\toks   }
+\def\loctoksblk    {\et@xlblk 5\toks   }
+\def\globmarksblk  {\et@xgblk 6\marks  }
+\def\locmarksblk   {\et@xlblk 6\marks  }
+
+% \def\et@xchkblk#1#1#3#4% <offset>, <type>, <size>, <action>
+
+\def\et@xgblk#1#2#3#4%
+ {\et@xchkblk#1#2{#4}% make sure there's still room
+   {\allocationnumber\count26#1%
+    \global\advance\count26#1by#4%
+    \global\mathchardef#3\allocationnumber
+    \wlog{\string#3=\string#2blk{\number#4} at
+      \the\allocationnumber}%
+   }%
+ }
+
+\def\et@xlblk#1#2#3#4%
+ {\et@xchkblk#1#2{#4}% make sure there's still room
+   {\advance\count27#1-#4%
+    \allocationnumber\count27#1%
+    \mathchardef#3\allocationnumber
+    \et@xwlog{\string#3=\string#2blk{\number#4} at
+      \the\allocationnumber\space(local)}%
+   }%
+ }
+
+\def\et@xchkblk#1#2#3#4%
+ {\ifnum#3<\z@
+    \errmessage{Negative register block size \number#3}%
+  \else\ifnum\numexpr\count26#1+#3>\count27#1%
+    \errmessage{No room for new #2block of size \number#3}%
+  \else #4\fi \fi
+ }
+
+\catcode`\G=14
+\catcode`\I=14
+\catcode`\N=14
+\catcode`\C=14
+
+\ProcessOptions
+
+%% Declare names for `grouptypes'
+
+G \chardef \bottomleveltype       =  0 % for the outside world
+G \chardef \simplegrouptype       =  1 % for local structure only
+G \chardef \hboxgrouptype         =  2 % for `\hbox{}'
+G \chardef \adjustedhboxgrouptype =  3 % for `\hbox{}' in vertical mode
+G \chardef \vboxgrouptype         =  4 % for `\vbox{}'
+G \chardef \vtopgrouptype         =  5 % for `\vtop{}'
+G \chardef \aligngrouptype        =  6 % for `\halign{}', `\valign{}'
+G \chardef \noaligngrouptype      =  7 % for `\noalign{}'
+G \chardef \outputgrouptype       =  8 % for output routine
+G \chardef \mathgrouptype         =  9 % for, e.g, `^{}'
+G \chardef \discgrouptype         = 10 % for `\discretionary{}{}{}'
+G \chardef \insertgrouptype       = 11 % for `\insert{}', `\vadjust{}'
+G \chardef \vcentergrouptype      = 12 % for `\vcenter{}'
+G \chardef \mathchoicegrouptype   = 13 % for `\mathchoice{}{}{}{}'
+G \chardef \semisimplegrouptype   = 14 % for `\begingroup...\endgroup'
+G \chardef \mathshiftgrouptype    = 15 % for `$...$'
+G \chardef \mathleftgrouptype     = 16 % for `\left...\right'
+
+%% Declare names for `interactionmodes'
+
+I \chardef \batchinteractionmode     = 0 % omits all stops and omits terminal output
+I \chardef \nonstopinteractionmode   = 1 % omits all stops
+I \chardef \scrollinteractionmode    = 2 % omits error stops
+I \chardef \errorstopinteractionmode = 3 % stops at every opportunity to interact
+
+%% Declare names for `nodetypes'
+
+N \chardef \charnode     =  0 % character nodes
+N \chardef \hlistnode    =  1 % hlist nodes
+N \chardef \vlistnode    =  2 % vlist nodes
+N \chardef \rulenode     =  3 % rule nodes
+N \chardef \insnode      =  4 % insertion nodes
+N \chardef \marknode     =  5 % a mark node
+N \chardef \adjustnode   =  6 % an adjust node
+N \chardef \ligaturenode =  7 % a ligature node
+N \chardef \discnode     =  8 % a discretionary node
+N \chardef \whatsitnode  =  9 % special extension nodes
+N \chardef \mathnode     = 10 % a math node
+N \chardef \gluenode     = 11 % node that points to a glue specification
+N \chardef \kernnode     = 12 % a kern node
+N \chardef \penaltynode  = 13 % a penalty node
+N \chardef \unsetnode    = 14 % an unset node
+N \chardef \mathsnodes   = 15 % nodes that occur only in maths mode
+
+%% Declare names for `iftypes'
+
+C \chardef \charif     =  1 % \if
+C \chardef \catif      =  2 % \ifcat
+C \chardef \numif      =  3 % \ifnum
+C \chardef \dimif      =  4 % \ifdim
+C \chardef \oddif      =  5 % \ifodd
+C \chardef \vmodeif    =  6 % \ifvmode
+C \chardef \hmodeif    =  7 % \ifhmode
+C \chardef \mmodeif    =  8 % \ifmmode
+C \chardef \innerif    =  9 % \ifinner
+C \chardef \voidif     = 10 % \ifvoid
+C \chardef \hboxif     = 11 % \ifhbox
+C \chardef \vboxif     = 12 % \ifvbox
+C \chardef \xif        = 13 % \ifx
+C \chardef \eofif      = 14 % \ifeof
+C \chardef \trueif     = 15 % \iftrue
+C \chardef \falseif    = 16 % \iffalse
+C \chardef \caseif     = 17 % \ifcase
+C \chardef \definedif  = 18 % \ifdefined
+C \chardef \csnameif   = 19 % \ifcsname
+C \chardef \fontcharif = 20 % \iffontchar
+
+\catcode`\G=11
+\catcode`\I=11
+\catcode`\N=11
+\catcode`\C=11
+
-- 
cgit v1.2.3

