diff options
| -rw-r--r-- | TODO | 6 | ||||
| -rw-r--r-- | luatexbase-regs.dtx | 136 | 
2 files changed, 111 insertions, 31 deletions
@@ -13,9 +13,3 @@ general  - handle catcodes for Plain  - import/write doc -regs ----- - -- \mathchardef -> \chardef in \et@xgblk and \et@xlblk -- check more carefully before redfining a macro - diff --git a/luatexbase-regs.dtx b/luatexbase-regs.dtx index 14242a1..7d1a25d 100644 --- a/luatexbase-regs.dtx +++ b/luatexbase-regs.dtx @@ -278,38 +278,108 @@ and the derived files  %    using \verb|\mathchardef| since it had the biggest range under \eTeX  %    (15-bit number).  However, this is not enough for \LuaTeX's extended  %    registers. Fortunately, \verb|chardef|'s range is extended, and now large -%    enough, so use it. +%    enough, so use it everywhere instead of \verb+\mathchardef+. Do this +%    inside a group and use \verb+\toks0+ to store the list of actions.  % -%    Take care that the macros remain \verb|\outer| if they previously were -%    (actually, iff \verb+\globbox+ is). The somewhat tricky lines below, -%    besides that, are just equivalent to: -%    \begin{quote} -%      \verb+\def \globbox    {\et@xglob 4\box    \mathchardef}+\\ -%      \verb+\def \globmarks  {\et@xglob 6\marks  \mathchardef}+ -%    \end{quote} +%    \begin{macrocode} +  \begingroup \toks0{} +    \def\@namedef #1{\expandafter                  \def\csname#1\endcsname} +    \def\@outerdef#1{\expandafter\outer\expandafter\def\csname#1\endcsname} +%    \end{macrocode} +% +%    Notice that the auxiliary macros will automatically expand to the desired +%    level when necessary, see below. +% +%    First, here are the definitions from \texttt{etex.src}, in a form adapted +%    to our needs.  %  %    \begin{macrocode} -  \begingroup -    \def\z#1{\endgroup -      #1\expandafter\def\csname globbox\endcsname -        {\et@xglob 4\box    \chardef}% -      #1\expandafter\def\csname globmarks\endcsname -        {\et@xglob 6\marks  \chardef}}% -    \edef\x{\meaning\globbox   \string\outer   \relax}% -    \edef\y{\def\noexpand\y ##1\string\outer##2\relax}% -    \y{\ifx\relax#1\relax -      \expandafter\z\expandafter\outer -    \else -      \expandafter\z\expandafter\relax -    \fi}% -  \expandafter\y\x +    \def\def@globbox   #1#2{\@outerdef{#1}{\et@xglob 4 \box    #2}} +    \def\def@locbox    #1#2{\@namedef {#1}{\et@xloc  4 \box    #2}} +    \def\def@globmarks #1#2{\@outerdef{#1}{\et@xglob 6 \marks  #2}} +    \def\def@locmarks  #1#2{\@namedef {#1}{\et@xloc  6 \marks  #2}} +    \def\def@et@xgblk#1#2{\@namedef{#1}##1##2##3##4% +      {\et@xchkblk ##1##2{##4}% +        {\allocationnumber=\count 26##1 +          \global \advance \count 26##1 by ##4% +          \global #2##3=\allocationnumber +          \wlog {\string ##3=\string ##2blk{\number ##4} +            at \the \allocationnumber}% +          }% +        }} +    \def\def@et@xlblk#1#2{\@namedef{#1}##1##2##3##4% +      {\et@xchkblk ##1##2{##4}% +        {\advance \count 27##1 by -##4% +          \allocationnumber=\count 27##1 +          #2##3=\allocationnumber +          \wlog {\string ##3=\string ##2blk{\number ##4} +            at \the \allocationnumber \space (local)% +            }% +          }% +        }} +%    \end{macrocode} +% +%    Then, the definitions from \texttt{etex.sty} since they are subtly +%    different (\verb+\outer+ status, but also optional spaces or \verb+=+ +%    signs). +% +%    \begin{macrocode} +    \def\alt@globbox   #1#2{\@namedef{#1}{\et@xglob 4\box    #2}} +    \def\alt@locbox    #1#2{\@namedef{#1}{\et@xloc  4\box    #2}} +    \def\alt@globmarks #1#2{\@namedef{#1}{\et@xglob 6\marks  #2}} +    \def\alt@locmarks  #1#2{\@namedef{#1}{\et@xloc  6\marks  #2}} +    \def\alt@et@xgblk#1#2{\@namedef{#1}##1##2##3##4% +      {\et@xchkblk##1##2{##4}% +        {\allocationnumber\count26##1% +          \global\advance\count26##1by##4% +          \global#2##3\allocationnumber +          \wlog{\string##3=\string##2blk{\number##4} at +            \the\allocationnumber}% +          }% +        }} +    \def\alt@et@xlblk#1#2{\@namedef{#1}##1##2##3##4% +      {\et@xchkblk##1##2{##4}% +        {\advance\count27##1-##4% +          \allocationnumber\count27##1% +          #2##3\allocationnumber +          \et@xwlog{\string##3=\string##2blk{\number##4} at +            \the\allocationnumber\space(local)}% +          }% +        }} +%    \end{macrocode} +% +%    Now, a macro checking the definitions, and making the appropriate +%    re-definition. +% +%    \begin{macrocode} +    \def\check@def#1{% +      \csname def@#1\endcsname{test@#1}\mathchardef +      \expandafter\ifx\csname test@#1\expandafter\endcsname +                      \csname #1\endcsname +        \expandafter\let\csname #1\endcsname\relax +        \toks0\expandafter{\the\toks0\csname def@#1\endcsname{#1}\chardef} +      \else +        \csname alt@#1\endcsname{test@#1}\mathchardef +        \expandafter\ifx\csname test@#1\expandafter\endcsname +                        \csname #1\endcsname +          \toks0\expandafter{\the\toks0\csname alt@#1\endcsname{#1}\chardef} +        \else +          \expandafter\show\csname BAD#1\endcsname +        \fi +      \fi}  %    \end{macrocode}  % -%    \verb+\loc...+ versions are never \verb+\outer+. +%    Now, actually do it.  %  %    \begin{macrocode} -  \def \locbox     {\et@xloc  4\box    \chardef} -  \def \locmarks   {\et@xloc  6\marks  \chardef} +    \check@def{globbox} +    \check@def{locbox} +    \check@def{globmarks} +    \check@def{locmarks} +    \check@def{et@xgblk} +    \check@def{et@xlblk} +  \expandafter \endgroup +  \the\toks0  %    \end{macrocode}  %  %    Finally, make allocation of \verb|\count|, \verb|\dimen|, \verb|skip| and @@ -371,6 +441,22 @@ and the derived files    \csname newinsert\endcsname\dummy    \advance\count0 1  \repeat + +\globcountblk \dummy{3000} +\globdimenblk \dummy{3000} +\globskipblk  \dummy{3000} +\globmuskipblk\dummy{3000} +\globboxblk   \dummy{3000} +\globtoksblk  \dummy{3000} +\globmarksblk \dummy{3000} + +\loccountblk  \dummy{1000} +\locdimenblk  \dummy{1000} +\locskipblk   \dummy{1000} +\locmuskipblk \dummy{1000} +\locboxblk    \dummy{1000} +\loctoksblk   \dummy{1000} +\locmarksblk  \dummy{1000}  %</testplain,testlatex>  %<testplain>\bye  %<testlatex>\stop  | 
