diff options
-rw-r--r-- | Master/texmf-dist/tex/ptex/base/eptex.src | 761 | ||||
-rw-r--r-- | Master/texmf-dist/tex/ptex/base/eptexdefs.lib | 90 | ||||
-rw-r--r-- | Master/texmf-dist/tex/ptex/base/language.def | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/ptex/config/eptex.ini | 4 |
4 files changed, 859 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/ptex/base/eptex.src b/Master/texmf-dist/tex/ptex/base/eptex.src new file mode 100644 index 00000000000..dba056f8ae9 --- /dev/null +++ b/Master/texmf-dist/tex/ptex/base/eptex.src @@ -0,0 +1,761 @@ +%% e-pTeX macro +%% derived from $TEXMF/tex/plain/etex/etex.src +%% e-pTeX: eptex *eptex.tex + +% Assume a purely IniTeX environment and set up a minimal \catcode r\'egime + +\catcode `\{=1 +\catcode `\}=2 +\catcode `\#=6 +\catcode `\^=7 +\catcode `\@=\catcode `\A + +% Define the basic error-reporting and abort mechanisms: + +\def \et@xmsg #1#2% + {\begingroup + \def \n {^^J}% + \def \ { }% + \newlinechar=\expandafter `\n + \if E#1% + \errorcontextlines=0 + \errmessage {e-TeX error: #2}% + \else + \message {\n ! e-TeX \if I#1 message% + \else \if W#1 warning% + \else \if F#1 fatal error% + \else + \ unknown (#1)% + \fi + \fi + \fi: #2% + }% + \fi + \endgroup + } + +% Note: a future version may report errors in the %<fac>-<s>-<code>[, <text>] +% format, allowing the more verbose <text>s to be read from file rather than +% stored in the format. + +\def \et@xabort #1% + {\et@xmsg {F}{#1}% + \batchmode + \end + } + +% Make sure this file is being read by e-TeX in extended mode; +% If it is, prepare to check version/revision compatibility, otherwise abort. + +\ifx \undefined \eTeXversion + \et@xabort {this file can be processed only in extended mode;\n + \ \ did you perhaps forget the asterisk?% + }% +\else + \begingroup + \catcode `\%=12 + \catcode `\?=14 + \xdef \et@xfilehdr + {\detokenize {%% e-TeX V}\the \eTeXversion \eTeXrevision}? + \xdef \et@xlibhdr + {\detokenize {%% e-TeXlib V}\the \eTeXversion \eTeXrevision}? + \endgroup +\fi + +% Assume extended mode, but no additional \catcodes/\defs yet; +% set up a simple e-TeX condition-reporting system: + +\def \et@xinf #1{\et@xmsg {I}{#1}} %%% not currently used +\def \et@xwarn #1{\et@xmsg {W}{#1}} +\def \et@xerr #1#2{{\errhelp={#2}\et@xmsg {E}{#1}}} + +% deactivate the processing of patterns and exceptions; these will be +% reinstated later, after the \uselanguage mechanism has been defined. + +\let \et@xpatterns=\patterns +\def \patterns + {\begingroup + \everyeof={\fi \endgroup}% + \message {[skipping from \noexpand \patterns to end-of-file...]}% + \iffalse + } + +% Read "ptex.tex" (\patterns & \hyphenation will be skipped) + +\input ptex + +% restore the catcode of commercial-at (@), which will just have been clobbered + +\catcode `\@=\catcode `\A + +% Assume an extended Plain environment (i.e. there are no longer any +% restrictions on the coding techniques we can use). First prepare to +% carry out consistency checks on the file headers and the current e-TeX +% version/revision levels: + +\newread \et@xinput + +\def \etexhdrchk #1#2% + {\openin \et@xinput=#2 + \ifeof \et@xinput + \chardef \etexstatus=0 % V1.0-1 + \else + \begingroup + \endlinechar=-1 + \readline \et@xinput to \et@xbuf + \closein \et@xinput + \def \p@rtition ##1.##2\endp@rtition {##1}% V2.1%0 + \xdef \et@xbuf + {\expandafter \p@rtition \et@xbuf .\endp@rtition}% V2.1;0 + \xdef \et@xtmp {\csname et@x#1hdr\endcsname}% + \xdef \et@xtmp + {\expandafter \p@rtition \et@xtmp .\endp@rtition}% V2.1;0 + \endgroup + \ifx \et@xtmp \et@xbuf + \chardef \etexstatus=2 % V1.1;4 + \else + \chardef \etexstatus=1 % V1.1;4 + \fi + \fi + } + +% Check the version number of etex.src: + +\def \et@xfmtsrc {etex.src} +\etexhdrchk {file} {\et@xfmtsrc} +\ifcase \etexstatus + \et@xerr {unable to open format source file "\et@xfmtsrc";} + {This should not happen; please ensure that your system + allows a file to be opened for reading more than once + concurrently.% + }% +\or + \et@xwarn {format source file "\et@xfmtsrc" has wrong header;\n + \ \ expected: "\et@xfilehdr"; found: "\et@xbuf";% + }% + {You are using a version of e-TeX which may be incompatible + with the source for the format file you are trying to + compile; please ensure that you have the most recent + version of each. I will proceed, but you should treat + the results with caution...% + }% +\fi + +% Module handling now implemented (V1.0-2) + +\def \module #1{\iftrue} +\let \endmodule=\fi + +\newtoks \et@xtoks + +\def \et@xl@@d #1 #2\endl@ad %%% the "#1 #2" code avoids trailing spaces + {\ifcsname module:#1\endcsname + \et@xwarn {duplicate module name "#1"}% + \else + \csname module:#1\endcsname %%% we exploit the side-effect explicitly + \et@xtoks=\expandafter + {\the \et@xtoks + \expandafter \let \csname module:#1\endcsname=\undefined + }% + \fi + } + +\def \et@xl@ad #1#2,#3\endl@ad %%% the #1#2 code avoids spurious leading spaces + {\et@xl@@d #1#2 \endl@ad + \if *#3* + \let \n@xt=\relax + \else + \def \n@xt {\et@xl@ad #3\endl@ad}% + \fi + \n@xt + } + +\def \et@xload #1 %%% needed because of the embedded \ifs... + {\def \module ##1% + {\unless + \ifcsname module:##1\endcsname + \message {Skipping module "##1";}% + \else + \message {Loading module "##1";}% + }% + \input #1 + \def \module ##1{\iftrue}% + } + +\def \load #1 from #2 %%% selective module loading from an e-TeX library file + {%\etexhdrchk {lib} {#2}% + \ifcase \etexstatus + \et@xerr {unable to open library file "#2"; load aborted.} + {I got an <eof> on trying to open your library file; + please make sure it exists, is readable and is not locked.% + }% + \or + \et@xerr {library file "#2" has wrong header;\n + \ \ expected: "\et@xlibhdr"; found: "\et@xbuf";\n + \ \ load aborted.% + }% + {The first line of your library does not start with + the correct e-TeX header; you may need to update the + file to be compatible with the current version of + e-TeX, or you may simply have specified the wrong file.% + }% + \else + \et@xtoks={\et@xtoks={}}% + \et@xl@ad #1,\endl@ad + \et@xload {#2} + \the \et@xtoks + \fi + } + +\load interactionmodes from eptexdefs.lib %%% \load <foo>[, <bar>...] from <baz> + +\def \@sk #1#2#3% + {\ifnum \interactionmode=\interactionmodes {errorstop} %%% V2.0;15 + \def \pr@mpt {\csname #1 \endcsname}% + \edef \pr@mptloop {{\escapechar=-1 \global \readline 16 to \pr@mpt}}% + \loop \pr@mptloop + \ch@ckforyn \pr@mpt {#2}% + \ifb@dresponse + \message {Please answer Y[es] or N[o]}% + \repeat + \else + \def \pr@mpt {#3}% + \ch@ckforyn \pr@mpt {#2}% + \fi + } + +\def \ch@ckforyn #1#2% Bernd Raichle's improved version, V1.0-1 + {\edef \@nswer {#1}% + \def \p@rse ##1##2\endp@rse + {\lowercase {\if y##1}\b@dresponsefalse \csname #2true\endcsname + \else \lowercase {\if n##1}\b@dresponsefalse \csname #2false\endcsname + \else + \b@dresponsetrue + \fi + \fi + }% + \expandafter \p@rse \@nswer \endp@rse + } + +\def \usef@llback %%% V1.0-3 + {\message {Using fallback mode (USenglish)}% + \addlanguage {USenglish}{hyphen}{}{2}{3}% + } + +% OK, that's all the utilities defined; on with the real work: +% First, re-instate \patterns: + +\let \patterns=\et@xpatterns + +% Define the language-handling commands + +\def \et@xlang {\csname newlanguage\endcsname} + +\def \uselanguage #1% + {\ifcsname lang@#1\endcsname + \language=\csname lang@#1\endcsname + \lefthyphenmin=\csname lhm@#1\endcsname + \righthyphenmin=\csname rhm@#1\endcsname + \ifdefined \uselanguage@hook % V1.0-1 + \uselanguage@hook {#1}% % V1.0-1 + \fi + \else + \et@xerr {language #1 undefined.}% + {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.% + }% + \fi + } + +\def \addlanguage #1#2#3#4#5% language patterns exceptions lhm rhm + {\expandafter \et@xlang \csname lang@#1\endcsname + \expandafter \chardef \csname lhm@#1\endcsname=#4 % V1.0-1 + \expandafter \chardef \csname rhm@#1\endcsname=#5 % V1.0-1 + \uselanguage {#1}% + \input #2 + \if *#3*\else \input #3 \fi + \ifdefined \addlanguage@hook % V1.0-4 + \addlanguage@hook {#1}% % V1.0-4 + \fi + \edef \fmtversion {\fmtversion/#1}% + } + +% 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. Since +% there is always a risk of a spurious file of that name being found, +% we look for an e-TeX header in the first line. If the file can be opened, +% but doesn't have the right header, we interrogate the user as to whether +% to use fallback mode; in this mode, we simply establish USenglish as the +% sole language, with the et@x patterns, exceptions and left- and right- +% hyphen minima for TeX. If we can't interrogate the user (e.g. not in +% \errorstopmode), or if the user elects not to use fallback, we abort; +% if the file can't be found/opened, we use fallback unconditionally. + +\newif \ifb@dresponse +\newif \ifusef@llback + +\def \l@ngdefnfile {language.def} + +\etexhdrchk {file} {\l@ngdefnfile} +\ifcase \etexstatus + \et@xwarn {unable to open file "\l@ngdefnfile";}% + \usef@llback % unable to open "language.def" +\or + \et@xwarn {file "\l@ngdefnfile" has wrong header;\n + \ \ expected: "\et@xfilehdr"; found: "\et@xbuf";% + }% + \@sk {Use fallback?} {usef@llback} {y}% + \ifusef@llback + \usef@llback + \else + \input \l@ngdefnfile % use "language.def" after warning + \fi +\else + \input \l@ngdefnfile % "language.def" open & valid +\fi + +% 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, \string \epTeX, } +\def \eTeX {$\varepsilon$-\TeX} %%% the simple version, not suitable for maths; + %%% a more sophisticated one may find its way + %%% into "eptexdefs.lib" in due course. +\def \epTeX {$\varepsilon$-p\TeX} + +\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 + } + +% In an attempt to reduce the overheads of e-TeX, we recycle all possible +% resources, including (as a penultimate step) the recycler itself... +% The user can circumvent (or force) this during format creation, +% by \letting \ifrecycle=\iffalse (or \iftrue, to force it). + +% As this file has grown by accretion, it is possible that we are no +% longer recycling all the resources we could; this will be investigated. + +\def \mayber@cycle {\expandafter \ifrecycle} +\def \forcer@cycle {\expandafter \iftrue} + +\ifdefined \ifrecycle + \mayber@cycle +\else + \forcer@cycle +\fi + +% There's a concealed \if... lurking here, which explains the +% strange indentation of the code that follows (V1.0-1) + + \def \r@cycle #1% + {\ifdefined #1 + \message {\string #1,}\let #1=\und@fined + \else + \message {\string #1 (not defined),} + \fi + } + {\newlinechar=`\! \message {!Recycling:}} + + \r@cycle \addlanguage + \r@cycle \@nswer + \r@cycle \@sk + \r@cycle \b@dresponsetrue + \r@cycle \b@dresponsefalse + \r@cycle \ch@ckforyn + \r@cycle \mayber@cycle + \r@cycle \et@xabort + \r@cycle \et@xbuf + \r@cycle \et@xfmtsrc + \r@cycle \et@xfilehdr + \r@cycle \et@xinf + \r@cycle \et@xpatterns +% \r@cycle \ifb@dresponse +% \r@cycle \ifusef@llback + \r@cycle \l@ngdefnfile + \r@cycle \n@xt + \r@cycle \p@rse + \r@cycle \pr@mpt + \r@cycle \pr@mptloop + \r@cycle \forcer@cycle + \r@cycle \usef@llback + \r@cycle \usef@llbacktrue + \r@cycle \usef@llbackfalse + +% The following are retained, since they may be needed by user code; with a few +% (regrettable) exceptions, all of these are given the \etex or \et@x prefix, +% to reduce as far as possible the risk of them clashing with other used-defined +% names. + +% The e-TeX team are willing to change the names of the remaining, at-risk, +% control sequences if it is demonstrated that the current names cause problems +% or difficulties. + + \def \r@tain #1% + {\ifdefined #1 + \message {\string #1,} + \else + \message {\string #1 (not defined),} + \fi + } + {\newlinechar=`\! \message {!Retaining:}} + + \r@tain \et@xerr + \r@tain \et@xinput + \r@tain \et@xlibhdr + \r@tain \et@xmsg + \r@tain \et@xtoks + \r@tain \et@xwarn + \r@tain \et@xl@@d + \r@tain \et@xl@ad + \r@tain \et@xload + \r@tain \et@xlang + \r@tain \et@xhash + \r@tain \eTeX + \r@tain \epTeX + \r@tain \etexhdrchk +% \r@tain \endmodule + \r@tain \etexstatus + \r@tain \module + \r@tain \uselanguage + + \r@cycle \r@tain + \r@cycle \r@cycle + +\fi + +% And finally re-catcode commercial-at + +\catcode `\@=12 + +\dump +\endinput + diff --git a/Master/texmf-dist/tex/ptex/base/eptexdefs.lib b/Master/texmf-dist/tex/ptex/base/eptexdefs.lib new file mode 100644 index 00000000000..1f6f3dcd9ca --- /dev/null +++ b/Master/texmf-dist/tex/ptex/base/eptexdefs.lib @@ -0,0 +1,90 @@ +%% e-pTeXlib +%% derived from $TEXMF/tex/plain/etex/etexdefs.lib + +\module {grouptypes} +\def \grouptypes #1{\csname gr@up: #1\endcsname} +\def \etexgroupdef #1 + {\expandafter \expandafter \expandafter \chardef \grouptypes {#1}} +\etexgroupdef bottomlevel = 0 %%% {code for the outside world} +\etexgroupdef simple = 1 %%% {code for local structure only} +\etexgroupdef hbox = 2 %%% {code for `\.{\\hbox}\grp'} +\etexgroupdef adjustedhbox = 3 %%% {code for `\.{\\hbox}\grp' in vertical mode} +\etexgroupdef vbox = 4 %%% {code for `\.{\\vbox}\grp'} +\etexgroupdef vtop = 5 %%% {code for `\.{\\vtop}\grp'} +\etexgroupdef align = 6 %%% {code for `\.{\\halign}\grp', `\.{\\valign}\grp'} +\etexgroupdef noalign = 7 %%% {code for `\.{\\noalign}\grp'} +\etexgroupdef output = 8 %%% {code for output routine} +\etexgroupdef math = 9 %%% {code for, e.g, `\.{\char'136}\grp'} +\etexgroupdef disc = 10 %%% {code for `\.{\\discretionary}\grp\grp\grp'} +\etexgroupdef insert = 11 %%% {code for `\.{\\insert}\grp', `\.{\\vadjust}\grp'} +\etexgroupdef vcenter = 12 %%% {code for `\.{\\vcenter}\grp'} +\etexgroupdef mathchoice = 13 %%% {code for `\.{\\mathchoice}\grp\grp\grp\grp'} +\etexgroupdef semisimple = 14 %%% {code for `\.{\\begingroup...\\endgroup}'} +\etexgroupdef mathshift = 15 %%% {code for `\.{\$...\$}'} +\etexgroupdef mathleft = 16 %%% {code for `\.{\\left...\\right}'} +\endmodule + +\module {interactionmodes} +\def \interactionmodes #1{\csname m@de: #1\endcsname} +\def \etexmodedef #1 + {\expandafter \expandafter \expandafter \chardef \interactionmodes {#1}} +\etexmodedef batch = 0 %%% {omits all stops and omits terminal output} +\etexmodedef nonstop = 1 %%% {omits all stops} +\etexmodedef scroll = 2 %%% {omits error stops} +\etexmodedef errorstop = 3 %%% {stops at every opportunity to interact} +\endmodule + +\module {nodetypes} +\def \nodetypes #1{\csname n@de: #1\endcsname} +\def \etexnodedef #1 + {\expandafter \expandafter \expandafter \chardef \nodetypes {#1}} +\etexnodedef char = 0 %%% {|type| of character nodes} +\etexnodedef hlist = 1 %%% {|type| of hlist nodes} +\etexnodedef vlist = 2 %%% {|type| of vlist nodes} +\etexnodedef rule = 3 %%% {|type| of rule nodes} +\etexnodedef ins = 4 %%% {|type| of insertion nodes} +\etexnodedef mark = 5 %%% {|type| of a mark node} +\etexnodedef adjust = 6 %%% {|type| of an adjust node} +\etexnodedef ligature = 7 %%% {|type| of a ligature node} +\etexnodedef disc = 8 %%% {|type| of a discretionary node} +\etexnodedef whatsit = 9 %%% {|type| of special extension nodes} +\etexnodedef math = 10 %%% {|type| of a math node} +\etexnodedef glue = 11 %%% {|type| of that points to a glue specification} +\etexnodedef kern = 12 %%% {|type| of a kern node} +\etexnodedef penalty = 13 %%% {|type| of a penalty node} +\etexnodedef unset = 14 %%% {|type| for an unset node} +\etexnodedef maths = 15 %%% {|type| of nodes that occur only in maths mode} +\etexnodedef dir = 16 %%% {|type| for a direction node} +\etexnodedef displace = 17 %%% {|type| for a displacement node} +\endmodule + +\module {iftypes} +\def \conditionaltypes #1{\csname @f: #1\endcsname} +\def \etexifdef #1 + {\expandafter \expandafter \expandafter \chardef \conditionaltypes {#1}} +\etexifdef charif = 1 +\etexifdef catif = 2 +\etexifdef numif = 3 +\etexifdef dimif = 4 +\etexifdef oddif = 5 +\etexifdef vmodeif = 6 +\etexifdef hmodeif = 7 +\etexifdef mmodeif = 8 +\etexifdef innerif = 9 +\etexifdef voidif = 10 +\etexifdef hboxif = 11 +\etexifdef vboxif = 12 +\etexifdef xif = 13 +\etexifdef eofif = 14 +\etexifdef trueif = 15 +\etexifdef falseif = 16 +\etexifdef caseif = 17 +\etexifdef definedif = 18 +\etexifdef csnameif = 19 +\etexifdef fontcharif = 20 +\etexifdef tdirif=21 +\etexifdef ydirif=22 +\etexifdef mdirif=23 +\etexifdef tboxif=24 +\etexifdef yboxif=25 +\endmodule diff --git a/Master/texmf-dist/tex/ptex/base/language.def b/Master/texmf-dist/tex/ptex/base/language.def new file mode 100644 index 00000000000..76b45f167cf --- /dev/null +++ b/Master/texmf-dist/tex/ptex/base/language.def @@ -0,0 +1,4 @@ +%% e-TeX V2.2 +%% This file is language settings for e-pTeX. +\addlanguage {USenglish}{hyphen}{}{2}{3} +\uselanguage {USenglish} diff --git a/Master/texmf-dist/tex/ptex/config/eptex.ini b/Master/texmf-dist/tex/ptex/config/eptex.ini new file mode 100644 index 00000000000..5eb992ed451 --- /dev/null +++ b/Master/texmf-dist/tex/ptex/config/eptex.ini @@ -0,0 +1,4 @@ +%% for e-pTeX (ASCII Nihongo e-TeX) +\input eptex.src +\dump +\endinput |