From 2bd77f5a4d02b0d1649589aa7a548e79b198f6af Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Thu, 10 Jun 2021 03:01:49 +0000
Subject: CTAN sync 202106100301

---
 macros/luatex/generic/minim/minim-etex.tex | 413 +++++++++++++++++++++++++++++
 1 file changed, 413 insertions(+)
 create mode 100644 macros/luatex/generic/minim/minim-etex.tex

(limited to 'macros/luatex/generic/minim/minim-etex.tex')

diff --git a/macros/luatex/generic/minim/minim-etex.tex b/macros/luatex/generic/minim/minim-etex.tex
new file mode 100644
index 0000000000..bdf71def16
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-etex.tex
@@ -0,0 +1,413 @@
+
+% This is a stripped-down version of etex.src, meant as companion to 
+% minim-plain.tex.
+%
+% It follows e-TeX V2.1;0-luatex2.
+%
+% The following has been removed:
+%  - Module loading
+%  - Version checks
+%
+% The following has been retained:
+%  - Language handling (somewhat simplified)
+%  - Tracing and logging extensions
+%  - The \eTeX symbol
+%  - Register allocation
+
+\catcode `\@=\catcode `\A
+
+% Define the language-handling commands
+
+\def \uselanguage #1%
+    {\ifcsname lang@#1\endcsname
+        \language=\csname lang@#1\endcsname
+        \lefthyphenmin=\csname lhm@#1\endcsname
+        \righthyphenmin=\csname rhm@#1\endcsname
+          \ifcsname lu@texhyphen@loaded@\the\language\endcsname \else
+            \global\expandafter\def\csname
+              lu@texhyphen@loaded@\the\language\endcsname{}%
+            \directlua{
+              if not status.ini_version then
+                require("luatex-hyphen")
+                luatexhyphen.loadlanguage("\luatexluaescapestring{#1}",
+                \the\language)
+              end}%
+          \fi
+        \ifdefined\uselanguage@hook \uselanguage@hook{#1}\fi
+     \else
+        \begingroup\errorcontextlines=0\relax
+        \errhelp {You are trying to use a language which has not previously
+                  been defined; remember that any language you want to use
+                  will need to have been specified at the time the format
+                  was created.%
+                 }%
+        \errmessage {Language #1 undefined.}\endgroup
+     \fi}
+
+\def \addlanguage #1#2#3#4#5{% language patterns exceptions lhm rhm
+    \expandafter\newlanguage \csname lang@#1\endcsname
+    \expandafter\chardef \csname lhm@#1\endcsname=#4
+    \expandafter\chardef \csname rhm@#1\endcsname=#5
+    \csname if\directlua{% do we want to skip this language now?
+          require("luatex-hyphen")
+          if (luatexhyphen.lookupname("\luatexluaescapestring{#1}") == nil)
+              or (\number\csname lang@#1\endcsname == 0) then
+            tex.sprint("false") % no, load it (execute 'else' part)
+          else
+            tex.sprint("true") % yes, skip
+          end}\endcsname
+    \else
+        \uselanguage {#1}%
+        \input #2
+        \if *#3*\else \input #3 \fi
+        \edef \fmtversion {\fmtversion/#1}%
+    \fi
+    \ifdefined\addlanguage@hook \addlanguage@hook{#1}\fi}
+
+% Decrement \count 19, because \newlanguage will increment it again
+
+\advance \count 19 by -1
+
+% We are about to try to process a user/site-specific file "language.def",
+% which establishes a Babel-like language selection environment.
+
+\input language.def
+
+% All that was just to set up natural language handling...
+% The "real" work of "etex.src", however, is to augment the non-primitives
+% of Plain.TeX to incorporate e-TeX specific features, and to add new
+% non-primitives to simplify access to new e-TeX specific primitives.
+
+\message {Augmenting the Plain TeX definitions:}
+\message {\string \tracingall;}
+
+\def \tracingall
+    {\tracingonline=\@ne
+     \tracingcommands=\thr@@ % plain.tex has \tw@
+     \tracingstats=\tw@
+     \tracingpages=\@ne
+     \tracingoutput=\@ne
+     \tracinglostchars=\tw@ % plain.tex has \@ne
+     \tracingmacros=\tw@
+     \tracingparagraphs=\@ne
+     \tracingrestores=\@ne
+     \showboxbreadth=\maxdimen
+     \showboxdepth=\maxdimen
+     \errorstopmode
+     \tracinggroups=\@ne
+     \tracingifs=\@ne
+     \tracingscantokens=\@ne
+     \tracingnesting=\@ne
+     \tracingassigns=\tw@
+     }
+
+\message {Adding new e-TeX definitions:}
+
+\message {\string \eTeX,}
+\def \eTeX {$\varepsilon$-\TeX} %%% the simple version, not suitable for maths;
+
+\message {\string \loggingall,}
+\def \loggingall {\tracingall \tracingonline=\z@}
+
+\message {\string \tracingnone,}
+\def \tracingnone
+    {\tracingassigns=\z@
+     \tracingnesting=\z@
+     \tracingscantokens=\z@
+     \tracingifs=\z@
+     \tracinggroups=\z@
+     \showboxdepth=\thr@@
+     \showboxbreadth=5
+     \tracingrestores=\z@
+     \tracingparagraphs=\z@
+     \tracingmacros=\z@
+     \tracinglostchars=\@ne
+     \tracingoutput=\z@
+     \tracingpages=\z@
+     \tracingstats=\z@
+     \tracingcommands=\z@
+     \tracingonline=\z@
+    }
+
+\message {register allocation;}
+
+\newcount \et@xins % our insertion counter (\insc@unt is used differently)
+
+% We have to adjust the Plain TeX register allocation counts for our
+% slightly modified book-keeping:
+
+\advance \count 10 by 1 % \count 10=23 % allocates \count registers 23, 24, ...
+\advance \count 11 by 1 % \count 11=10 % allocates \dimen registers 10, 11, ...
+\advance \count 12 by 1 % \count 12=10 % allocates \skip registers 10, 11, ...
+\advance \count 13 by 1 % \count 13=10 % allocates \muskip registers 10, 11, ...
+\advance \count 14 by 1 % \count 14=10 % allocates \box registers 10, 11, ...
+\advance \count 15 by 1 % \count 15=10 % allocates \toks registers 10, 11, ...
+\advance \count 16 by 1 % \count 16=0  % allocates input streams 0, 1, ...
+\advance \count 17 by 1 % \count 17=0  % allocates output streams 0, 1, ...
+\advance \count 18 by 1 % \count 18=4  % allocates math families 4, 5, ...
+\advance \count 19 by 1 % \count 19=0  % allocates \language codes 0, 1, ...
+
+\et@xins=\insc@unt % \et@xins=255 % allocates insertions 254, 253, ...
+
+% We don't change the Plain TeX definitions of \newcount, etc., but the
+% \alloc@ macro doing the actual work is redefined.
+
+% 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 \count 1#1 < #4% make sure there's still room
+     	 \allocationnumber=\count 1#1
+	 \global \advance \count 1#1 by \@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. Moreover (and more important)
+% this construction avoids the appearance of \outer macros inside
+% macro definitions or conditionals.
+
+\def \alloc@@ #1#2%
+    {\endgroup % restore \escapechar
+     \message {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 Plain TeX definition of \newinsert
+
+\outer \def \newinsert #1%make sure there's still room for ...
+      {\ch@ck 0 \et@xins \count % ... a \count, ...
+        {\ch@ck 1 \et@xins \dimen % ... \dimen, ...
+     	  {\ch@ck 2 \et@xins \skip % ... \skip, ...
+       	    {\ch@ck 4 \et@xins \box % ... and \box register
+              {\global \advance \et@xins by \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 \count 1#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.
+
+\outer \def \reserveinserts#1%
+      {\global \insc@unt=\numexpr \et@xins \ifnum #1 > \z@ -#1\fi \relax}
+
+\message {extended register allocation;}
+
+% 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.
+
+\count 260=277     % globally allocates \count registers 277, 278, ...
+\count 261=\@cclvi % globally allocates \dimen registers 256, 257, ...
+\count 262=\@cclvi % globally allocates \skip registers 256, 257, ...
+\count 263=\@cclvi % globally allocates \muskip registers 256, 257, ...
+\count 264=\@cclvi % globally allocates \box registers 256, 257, ...
+\count 265=\@cclvi % globally allocates \toks registers 256, 257, ...
+\count 266=\@ne    % globally allocates \marks classes 1, 2, ...
+
+\def \et@xmaxregs {32768}
+
+\count 270=\et@xmaxregs % locally allocates \count registers 32767, 32766, ...
+\count 271=\et@xmaxregs % ditto for \dimen registers
+\count 272=\et@xmaxregs % ditto for \skip registers
+\count 273=\et@xmaxregs % ditto for \muskip registers
+\count 274=\et@xmaxregs % ditto for \box registers
+\count 275=\et@xmaxregs % ditto for \toks registers
+\count 276=\et@xmaxregs % ditto for \marks classes
+
+% \count registers 256-259 and 267-269 are not (yet) used
+
+\outer \def \globcount  {\et@xglob 0 \count  \countdef}
+       \def \loccount   {\et@xloc  0 \count  \countdef}
+\outer \def \globdimen  {\et@xglob 1 \dimen  \dimendef}
+       \def \locdimen   {\et@xloc  1 \dimen  \dimendef}
+\outer \def \globskip   {\et@xglob 2 \skip   \skipdef}
+       \def \locskip    {\et@xloc  2 \skip   \skipdef}
+\outer \def \globmuskip {\et@xglob 3 \muskip \muskipdef}
+       \def \locmuskip  {\et@xloc  3 \muskip \muskipdef}
+\outer \def \globbox    {\et@xglob 4 \box    \mathchardef}
+       \def \locbox     {\et@xloc  4 \box    \mathchardef}
+\outer \def \globtoks   {\et@xglob 5 \toks   \toksdef}
+       \def \loctoks    {\et@xloc  5 \toks   \toksdef}
+\outer \def \globmarks  {\et@xglob 6 \marks  \mathchardef}
+       \def \locmarks   {\et@xloc  6 \marks  \mathchardef}
+
+\let\newmark=\globmarks %%% 2.0;14
+\let\newmarks=\globmarks
+
+\def \et@xglob #1#2#3#4%
+    {\et@xchk #1#2% make sure there's still room
+    	{\allocationnumber=\count 26#1
+	 \global \advance \count 26#1 by \@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 \count 27#1 by \m@ne
+         \allocationnumber=\count 27#1
+ 	 #3#4=\allocationnumber 
+	 \wlog {\string #4=\string #2\the \allocationnumber \space (local)}%
+       }%
+ }
+
+\def \et@xchk #1#2#3%
+    {\ifnum \count 26#1 < \count 27#1 
+        #3%
+     \else 
+	\errmessage {No room for a new #2}%
+     \fi
+    }
+
+% Next we define \globcountblk, \loccountblk, etc., so that one can
+% write \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.
+
+\outer \def \globcountblk  {\et@xgblk 0 \count}
+       \def \loccountblk   {\et@xlblk 0 \count}
+\outer \def \globdimenblk  {\et@xgblk 1 \dimen}
+       \def \locdimenblk   {\et@xlblk 1 \dimen}
+\outer \def \globskipblk   {\et@xgblk 2 \skip}
+       \def \locskipblk    {\et@xlblk 2 \skip}
+\outer \def \globmuskipblk {\et@xgblk 3 \muskip}
+       \def \locmuskipblk  {\et@xlblk 3 \muskip}
+\outer \def \globboxblk    {\et@xgblk 4 \box}
+       \def \locboxblk     {\et@xlblk 4 \box}
+\outer \def \globtoksblk   {\et@xgblk 5 \toks}
+       \def \loctoksblk    {\et@xlblk 5 \toks}
+\outer \def \globmarksblk  {\et@xgblk 6 \marks}
+       \def \locmarksblk   {\et@xlblk 6 \marks}
+
+% And, both to provide a higher-level interface to the block allocation
+% scheme, and to demonstrate possible applications of the new \...expr
+% primitives, we also define \globcountvector and \loccountvector (etc)
+% which allow the user to access elements with embedded arithmetic, as in
+
+% \globcountvector \foo {12}
+% \foo {\count 0 + 3} = \foo {\count 1 * 2}
+
+\outer \def \globcountvector  {\et@xgvec 0 \count}
+       \def \loccountvector   {\et@xlvec 0 \count}
+\outer \def \globdimenvector  {\et@xgvec 1 \dimen}
+       \def \locdimenvector   {\et@xlvec 1 \dimen}
+\outer \def \globskipvector   {\et@xgvec 2 \skip}
+       \def \locskipvector    {\et@xlvec 2 \skip}
+\outer \def \globmuskipvector {\et@xgvec 3 \muskip}
+       \def \locmuskipvector  {\et@xlvec 3 \muskip}
+\outer \def \globboxvector    {\et@xgvec 4 \box}
+       \def \locboxvector     {\et@xlvec 4 \box}
+\outer \def \globtoksvector   {\et@xgvec 5 \toks}
+       \def \loctoksvector    {\et@xlvec 5 \toks}
+\outer \def \globmarksvector  {\et@xgvec 6 \marks}
+       \def \locmarksvector   {\et@xlvec 6 \marks}
+
+\def \et@xgblk #1#2#3#4%
+    {\et@xchkblk #1#2{#4}% make sure there's still room
+        {\allocationnumber=\count 26#1
+         \global \advance \count 26#1 by #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 \count 27#1 by -#4%
+         \allocationnumber=\count 27#1
+         \mathchardef #3=\allocationnumber
+         \wlog {\string #3=\string #2blk{\number #4} 
+       		at \the \allocationnumber \space (local)%
+       	       }%
+      }%
+    }
+
+\begingroup
+\catcode `\# = 12
+\gdef \et@xhash {#}
+\endgroup
+
+\def \et@xgvec #1#2#3#4%
+    {\et@xchkblk #1#2{#4}% make sure there's still room
+        {\allocationnumber=\count 26#1
+         \global \advance \count 26#1 by #4%
+         \ifx    #2\box
+                 \def \2{}%
+         \else   \ifx #2\marks
+                      \def \2{}%
+                 \else
+                      \def \2{\string #2}%
+                 \fi
+         \fi
+         \xdef #3##1{\2 \noexpand \numexpr \the \allocationnumber+##1\relax}%
+         \wlog {\string #3 {\et@xhash 1} =
+                  \2 {\the \allocationnumber+\et@xhash 1} (global #2 vector)%
+      	     }%
+      }%
+    }
+
+\def \et@xlvec #1#2#3#4%
+    {\et@xchkblk #1#2{#4}% make sure there's still room
+        {\advance \count 27#1 by -#4%
+ 	 \allocationnumber=\count27#1 
+	 \mathchardef #3=\allocationnumber
+	 \ifx  #2\box
+               \def \2{}%
+	 \else \ifx #2\marks
+               	   \def \2{}%
+               \else
+               	   \def \2{\string #2}%
+               \fi
+	 \fi
+	 \edef #3##1{\2 \noexpand \numexpr \the \allocationnumber+##1\relax}%
+	 \wlog {\string #3 {\et@xhash 1} =
+                   \2 {\the \allocationnumber+\et@xhash 1} (local #2 vector)%
+               }%
+        }%
+    }
+
+\def \et@xchkblk #1#2#3#4%
+    {\ifnum #3 < \z@
+     	   \errmessage {Negative register block size \number #3}%
+     \else \ifnum \numexpr \count 26#1+#3 > \count 27#1
+     		\errmessage {No room for new #2block of size \number#3}%
+     	   \else 
+	 	 #4%
+     	   \fi 
+     \fi
+    }
+
+% And finally re-catcode commercial-at
+
+\catcode `\@=12
+
+
-- 
cgit v1.2.3

