diff options
author | Norbert Preining <norbert@preining.info> | 2019-11-16 03:00:48 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-11-16 03:00:48 +0000 |
commit | bad81a00a2943d1fb7ff2de3d0ae48c049dac302 (patch) | |
tree | ca23b6ca941037d20dce638d0859309f3c48c66d /macros/latex/contrib/oberdiek/luatex.dtx | |
parent | 0e223aaa93c5ee0c0e937c23f75535269324d217 (diff) |
CTAN sync 201911160300
Diffstat (limited to 'macros/latex/contrib/oberdiek/luatex.dtx')
-rw-r--r-- | macros/latex/contrib/oberdiek/luatex.dtx | 1967 |
1 files changed, 0 insertions, 1967 deletions
diff --git a/macros/latex/contrib/oberdiek/luatex.dtx b/macros/latex/contrib/oberdiek/luatex.dtx deleted file mode 100644 index ef111a4efa..0000000000 --- a/macros/latex/contrib/oberdiek/luatex.dtx +++ /dev/null @@ -1,1967 +0,0 @@ -% \iffalse meta-comment -% -% File: luatex.dtx -% Version: 2019/07/25 v0.7 -% Info: LuaTeX basic definition package -% -% Copyright (C) 2007, 2009, 2010 by -% Heiko Oberdiek <heiko.oberdiek at googlemail.com> -% 2016, 2019 -% https://github.com/ho-tex/oberdiek/issues -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. This version of this license is in -% http://www.latex-project.org/lppl/lppl-1-3c.txt -% and 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 2005/12/01 or later. -% -% This work has the LPPL maintenance status "maintained". -% -% This Current Maintainer of this work is Heiko Oberdiek. -% -% The Base Interpreter refers to any `TeX-Format', -% because some files are installed in TDS:tex/generic//. -% -% This work consists of the main source file luatex.dtx -% and the derived files -% luatex.sty, luatex.pdf, luatex.ins, luatex.drv, luatex-loader.sty, -% luatex-test1.tex, luatex-test2.tex, luatex-test3.tex, -% luatex-test4.tex, luatex-test5.tex, oberdiek.luatex.lua. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/luatex.dtx -% CTAN:macros/latex/contrib/oberdiek/luatex.pdf -% -% Unpacking: -% (a) If luatex.ins is present: -% tex luatex.ins -% (b) Without luatex.ins: -% tex luatex.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{luatex.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If luatex.drv is present: -% latex luatex.drv -% (b) Without luatex.drv: -% latex luatex.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex luatex.dtx -% makeindex -s gind.ist luatex.idx -% pdflatex luatex.dtx -% makeindex -s gind.ist luatex.idx -% pdflatex luatex.dtx -% -% Installation: -% TDS:tex/generic/oberdiek/luatex.sty -% TDS:tex/generic/oberdiek/luatex-loader.sty -% TDS:scripts/oberdiek/oberdiek.luatex.lua -% TDS:doc/latex/oberdiek/luatex.pdf -% TDS:doc/latex/oberdiek/test/luatex-test1.tex -% TDS:doc/latex/oberdiek/test/luatex-test2.tex -% TDS:doc/latex/oberdiek/test/luatex-test3.tex -% TDS:doc/latex/oberdiek/test/luatex-test4.tex -% TDS:doc/latex/oberdiek/test/luatex-test5.tex -% TDS:source/latex/oberdiek/luatex.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -%</ignore> -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: luatex 2019/07/25 v0.7 LuaTeX basic definition package (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: luatex -Version: 2019/07/25 v0.7 - -Copyright (C) 2007, 2009, 2010 by - Heiko Oberdiek <heiko.oberdiek at googlemail.com> - -This work may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either -version 1.3c of this license or (at your option) any later -version. This version of this license is in - http://www.latex-project.org/lppl/lppl-1-3c.txt -and 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 2005/12/01 or later. - -This work has the LPPL maintenance status "maintained". - -This Current Maintainer of this work is Heiko Oberdiek. - -The Base Interpreter refers to any `TeX-Format', -because some files are installed in TDS:tex/generic//. - -This work consists of the main source file luatex.dtx -and the derived files - luatex.sty, luatex.pdf, luatex.ins, luatex.drv, luatex-loader.sty, - luatex-test1.tex, luatex-test2.tex, luatex-test3.tex, - luatex-test4.tex, luatex-test5.tex, oberdiek.luatex.lua. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{luatex.ins}{\from{luatex.dtx}{install}}% - \file{luatex.drv}{\from{luatex.dtx}{driver}}% - \usedir{tex/generic/oberdiek}% - \file{luatex.sty}{\from{luatex.dtx}{package}}% - \file{luatex-loader.sty}{\from{luatex.dtx}{loader}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{luatex-test1.tex}{\from{luatex.dtx}{test1}}% -% \file{luatex-test2.tex}{\from{luatex.dtx}{test1,test2}}% -% \file{luatex-test3.tex}{\from{luatex.dtx}{test1,test3}}% -% \file{luatex-test4.tex}{\from{luatex.dtx}{test4}}% -% \file{luatex-test5.tex}{\from{luatex.dtx}{test5}}% - \nopreamble - \nopostamble -% \usedir{source/latex/oberdiek/catalogue}% -% \file{luatex.xml}{\from{luatex.dtx}{catalogue}}% -} -\def\MetaPrefix{-- } -\def\defaultpostamble{% - \MetaPrefix^^J% - \MetaPrefix\space End of File `\outFileName'.% -} -\def\currentpostamble{\defaultpostamble}% -\generate{% - \usedir{scripts/oberdiek}% - \file{oberdiek.luatex.lua}{\from{luatex.dtx}{lua}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* files into a directory searched by TeX:} -\Msg{*} -\Msg{* luatex.sty, luatex-loader.sty} -\Msg{*} -\Msg{* And install the following script file:} -\Msg{*} -\Msg{* oberdiek.luatex.lua} -\Msg{*} -\Msg{* To produce the documentation run the file `luatex.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{luatex.drv}% - [2019/07/25 v0.7 LuaTeX basic definition package (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\usepackage{paralist} -\begin{document} - \DocInput{luatex.dtx}% -\end{document} -%</driver> -% \fi -% -% -% \CharacterTable -% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} -% -% \GetFileInfo{luatex.drv} -% -% \title{The \xpackage{luatex} package} -% \date{2019/07/25 v0.7} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at https://github.com/ho-tex/oberdiek/issues}\\ -% \xemail{heiko.oberdiek at googlemail.com}} -% -% \maketitle -% -% \begin{abstract} -% This package manages the new and extended features and resources -% that \LuaTeX\ provides. Examples are attributes and catcode -% tables. -% \end{abstract} -% -% \tableofcontents -% -% \section{Documentation} -% -% \subsection{Introduction} -% -% \TeX\ provides global resources such as registers. -% But it does not provide an interface for managing these resources. -% For example, two packages want to use a counter register. -% If they take the same register -% number, then the use of both packages will conflict and they cannot -% be used together. -% Therefore formats such as \plainTeX\ or \LaTeX\ implement -% an allocation scheme for registers. A package reserves with -% \cs{newcount} an unused register number for its own exclusive use. -% -% Nowadays \TeX\ is not alone anymore: \eTeX, \pdfTeX\ and other -% compilers for \TeX\ are developed that extend and add new -% features and resources. -% -% Now \LuaTeX\ has reached beta state. It inherits most of -% \pdfTeX's features including \eTeX. Also it implements -% new concepts such as attributes or catcode tables. -% -% \subsubsection{\LaTeX} -% -% Since 2015 Lua\LaTeX\ includes support for luatex by default and so -% this package is essentially obsolete now, however it is kept for -% backwards compatibility. -% -% \subsubsection{\plainTeX} -% -% \LaTeX\ has inherited its resource handling from \plainTeX. -% The interface is basically the same: \cs{newcount}, \dots -% Therefore this package tries to follow this tradition by -% providing compatibility to \plainTeX. It can be loaded -% with \plainTeX\ and defines at least some of the -% features that this packages provides for \LaTeX. -% -% \subsection{Register allocation} -% -% \subsubsection{Register with 16 bit} -% -% Because \LuaTeX\ is a super set of \eTeX\ regarding registers, -% the register allocation scheme should not conflict with -% package \xpackage{etex}. Therefore this package is loaded -% to inherit its allocation scheme. The only change is currently -% that the limit is increased to 65536 registers for the following -% register classes: -% \begin{compactitem} -% \item count -% \item dimen -% \item skip -% \item muskip -% \item marks -% \item toks -% \item box -% \end{compactitem} -% This affects the number of global and local registers. -% Because it is done in a package and not in the kernel, -% it is possible that someone loads package \xpackage{etex} -% before uses the local allocation variants. This will prevent -% the extension for this register class. If more registers are -% needed, just load package \xpackage{luatex} earlier. -% -% \subsubsection{Insertions} -% -% Insertions need four registers \cs{count}, \cs{dimen}, \cs{skip}, -% and \cs{box} with the same number. Usually they are allocated -% downwards from 254, 253, \dots Also \cs{newcount}, \cs{newdimen}, \dots -% fill up these register numbers from below before switching to -% higher register numbers by package \xpackage{etex}. -% When this occurs, no insertions can be allocated anymore. -% -% Therefore \cs{newcount}, \cs{newdimen}, \cs{newskip}, and -% \cs{newbox} are replaced by their global variants (\cs{globcount}, \dots) -% that use the higher numbers immediately, leaving the room for insertions. -% There should not be an efficiency penalty because \LuaTeX\ stores -% the registers of a class in the same Lua table unlike \eTeX, where -% registers below 256 are stored in an array and higher numbers -% are put in a tree structure. -% -% \subsection{Attributes} -% -% Nodes can have custom attributes in \LuaTeX. These attributes -% are organized by a new register class. As the other registers -% up to $2^{16}$ attributes are supported. An attribute value -% can be negative that means the attribute is not set. Otherwise -% \TeX's range of non-negative integers up to $2^31$ are available. -% -% \begin{declcs}{newattribute} \M{cmd} -% \end{declcs} -% Macro \cs{newattribute} defines command \meta{cmd} using \cs{attributedef} -% using an new attribute number. The new attribute is initially unset. -% -% \begin{declcs}{setattribute} \M{cmd} \M{value} -% \end{declcs} -% Macro \cs{setattribute} locally sets attribute command \meta{cmd} -% to the number \meta{value}. Valid values range from $-1$ until $2^31$ -% (the upper limit is the same as for other \TeX\ integer numbers). -% -% \begin{declcs}{unsetattribute} \M{cmd} -% \end{declcs} -% Macro \cs{unsettattribute} clears the attribute command \meta{cmd}. -% -% \subsection{Catcode tables} -% -% \LuaTeX\ introduces catcode tables as new feature, see documentation. -% There is need for discussion, how to deal best: -% \begin{itemize} -% \item \cs{initcatcodetable} and \cs{setcatcodetable} act globally. -% \item \cs{catcodetable} causes an error if used with an uninitialized -% catcode table. -% \item Large catcode table numbers should be avoided because of -% performance breakdown. -% \item Use case \LaTeX\ package: -% The package must not be surprised by changed catcodes and -% must not surprise by changing catcodes accidently. -% Catcode tables could offer a solution. At the begin -% a catcode regime with standard catcodes is established -% and the old one is restored afterwards. -% \item Use case: \LuaTeX's |tex.print| might be used with -% a catcode table number, for example a table where all -% entries have catcode ``other''. -% \item Readonly catcode tables. -% \item Is there is a need for local allocations? -% (Package \xpackage{etex}'s \cs{loc} variants are not used in -% \TeX\ Live 2007.) -% \end{itemize} -% -% \subsubsection{Interface proposal} -% -% The idea: \cs{newcatcodetable} allocates odd numbered catcode -% tables. Even numbered tables are managed as stack. -% Also some catcode tables are defined. These must not be -% changed. -% -% \begin{declcs}{newcatcodetable} \M{cmd} -% \end{declcs} -% Macro \cs{newcatcodetable} reserves a new catcode table and -% remembers its number in \meta{cmd}. The catcode table is -% initialized with \iniTeX's catcodes. -% -% \begin{declcs}{CatcodeTableIniTeX}\\ -% \cs{CatcodeTableString}\\ -% \cs{CatcodeTableOther}\\ -% \cs{CatcodeTableLaTeX}\\ -% \end{declcs} -% These are catcode tables and must not be changed. -% \cs{CatcodeTableIniTeX} contains the catcode settings of \iniTeX. -% \cs{CatcodeTableString} follows \TeX's convention of -% \cs{string}, \cs{meaning} and friends. The space gets catcode -% 10 (space), the other characters have catcode 12 (other). -% In \cs{CatcodeTableOther} all entries have catcode 12 (other). -% \cs{CatcodeTableLaTeX} contains the setting of a pure \LaTeX\ format -% (`at' is other). -% -% \begin{declcs}{CatcodeTableStack}\\ -% \cs{IncCatcodeTableStack}\\ -% \cs{DecCatcodeTableStack} -% \end{declcs} -% \cs{CatcodeTableStack} is the stack pointer. Initially -% it is catcode table zero. \cs{IncCatcodeTableStack} and -% \cs{DecCatcodeTableStack} increments and decrements the -% stack pointer. Currently \cs{IncCatcodeTableStack} does not -% initialize a new catcode table. Both increment and decrement -% operations do not set a catcode table. -% -% \begin{declcs}{PushCatcodeTableNumStack}\\ -% \cs{PopCatcodeTableNumStack} -% \end{declcs} -% It can be handy to have a global stack for catcode table -% numbers to deal with the global assignment property of -% \cs{initcatcodetable} and \cs{savecatcodetable}. -% \cs{PushCatcodeTableNumStack} pushes the current catcode table -% on the stack. -% \cs{PopCatcodeTableNumStack} pops the topmost number off the number -% stack to set the current catcode table. Catcode table zero is -% used in case of an empty stack. -% -% \begin{declcs}{BeginCatcodeRegime} \M{catcodetable}\\ -% \cs{EndCatcodeRegime} -% \end{declcs} -% \cs{BeginCatcodeRegime} remembers the current catcode table number. -% Then it creates and uses a fresh catcode table on the stack -% that is initialized by \meta{catcodetable}: -% \begin{quote}\ttfamily -% \cs{PushCatcodeTableNumStack}\\ -% \cs{catcodetable}\meta{catcodetable}|| -% \cs{IncCatcodeTableStack}\\ -% \cs{savecatcodetable}\cs{CatcodeTableStack}\\ -% \cs{catcodetable}\cs{CatcodeTableStack} -% \end{quote} -% \cs{EndCatcodeRegime} drops the catcode table, created by -% \cs{BeginCatcodeRegime} and sets the catcode table that was -% active before: -% \begin{quote} -% \cs{DecCatcodeTableStack}\\ -% \cs{PopCatcodeTableNumStack} -% \end{quote} -% These macros solve the use case, described earlier for a \LaTeX\ package: -% \begin{quote} -% |% package foobar.sty|\\ -% |\BeginCatcodeRegime\CatcodeTableLaTeX|\\ -% |\makeatletter|\\ -% |% ... package contents ...|\\ -% |\EndCatcodeRegime|\\ -% |% end of package| -% \end{quote} -% If the package wants to change catcodes after its loading, -% \cs{AtBeginDocument} or \cs{AtEndOfPackage} can be used. -% -% \begin{declcs}{SetCatcodeRange} \M{from} \M{to} \M{catcode} -% \end{declcs} -% The catcodes of characters in range from \meta{from} -% to inclusive \meta{to} are set to \meta{catcode}. -% -% \subsection{Lua module loading} -% -% Currently \LuaTeX\ (version 0.20) does not support Lua script -% files inside \xfile{TDS:scripts//}, because Lua's mechanism -% for module loading does not use the \textsf{kpathsea} library. -% Therefore this packages appends a kpse loader to the list of -% Lua's module loaders. It finds the module \meta{module} by -% \begin{quote} -% \ttfamily |kpse.find_file("|\meta{module}|.lua", "texmfscripts")| -% \end{quote} -% Unhappily \textsf{kpathsea} does not support directory components -% in a file name. Therefore the Lua convention is not followed to -% replace dots in the module name by the directory separator. -% -% Example: -% A Lua script of a package \xpackage{foobar} wants the following -% modules: -% \begin{quote} -% |require("foobar.hello.world")|\\ -% |require("org.somewhere.xyz")| -% \end{quote} -% Then they can be find in: -% \begin{quote} -% |TDS:scripts/foobar/foobar.hello.world.lua|\\ -% |TDS:scripts/foobar/org.somewhere.xyz.lua| -% \end{quote} -% I would have preferred the following locations, following lua conventions, -% e.\,g.: -% \begin{quote} -% |TDS:scripts/foobar/hello/world.lua|\\ -% |TDS:scripts/foobar/org/somewhere/xyz.lua| -% \end{quote} -% But I do not know, how to achieve this in a reliable way using -% \textsf{kpathsea}. -% -% \subsubsection{Package \xpackage{luatex-loader}} -% -% If someone do not need or want package \xpackage{luatex} but -% it's extension for module loading, then he can use -% package \xpackage{luatex-loader}. Both \plainTeX\ and \LaTeX\ are -% supported. -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \subsection{Reload check and package identification} -% Reload check, especially if the package is not used with \LaTeX. -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode58=12 % : - \catcode64=11 % @ - \catcode123=1 % { - \catcode125=2 % } - \expandafter\let\expandafter\x\csname ver@luatex.sty\endcsname - \ifx\x\relax % plain-TeX, first loading - \else - \def\empty{}% - \ifx\x\empty % LaTeX, first loading, - % variable is initialized, but \ProvidesPackage not yet seen - \else - \expandafter\ifx\csname PackageInfo\endcsname\relax - \def\x#1#2{% - \immediate\write-1{Package #1 Info: #2.}% - }% - \else - \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% - \fi - \x{luatex}{The package is already loaded}% - \aftergroup\endinput - \fi - \fi -\endgroup% -% \end{macrocode} -% Package identification: -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode40=12 % ( - \catcode41=12 % ) - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode47=12 % / - \catcode58=12 % : - \catcode64=11 % @ - \catcode91=12 % [ - \catcode93=12 % ] - \catcode123=1 % { - \catcode125=2 % } - \expandafter\ifx\csname ProvidesPackage\endcsname\relax - \def\x#1#2#3[#4]{\endgroup - \immediate\write-1{Package: #3 #4}% - \xdef#1{#4}% - }% - \else - \def\x#1#2[#3]{\endgroup - #2[{#3}]% - \ifx#1\@undefined - \xdef#1{#3}% - \fi - \ifx#1\relax - \xdef#1{#3}% - \fi - }% - \fi -\expandafter\x\csname ver@luatex.sty\endcsname -\ProvidesPackage{luatex}% - [2019/07/25 v0.7 LuaTeX basic definition package (HO)]% -% \end{macrocode} -% -% \subsection{Catcodes} -% -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123=1 % { - \catcode125=2 % } - \catcode64=11 % @ - \def\x{\endgroup - \expandafter\edef\csname LuT@AtEnd\endcsname{% - \endlinechar=\the\endlinechar\relax - \catcode13=\the\catcode13\relax - \catcode32=\the\catcode32\relax - \catcode35=\the\catcode35\relax - \catcode61=\the\catcode61\relax - \catcode64=\the\catcode64\relax - \catcode123=\the\catcode123\relax - \catcode125=\the\catcode125\relax - }% - }% -\x\catcode61\catcode48\catcode32=10\relax% -\catcode13=5 % ^^M -\endlinechar=13 % -\catcode35=6 % # -\catcode64=11 % @ -\catcode123=1 % { -\catcode125=2 % } -\def\TMP@EnsureCode#1#2{% - \edef\LuT@AtEnd{% - \LuT@AtEnd - \catcode#1=\the\catcode#1\relax - }% - \catcode#1=#2\relax -} -\TMP@EnsureCode{10}{12}% ^^J -\TMP@EnsureCode{34}{12}% " -\TMP@EnsureCode{36}{3}% $ -\TMP@EnsureCode{39}{12}% ' -\TMP@EnsureCode{40}{12}% ( -\TMP@EnsureCode{41}{12}% ) -\TMP@EnsureCode{42}{12}% * -\TMP@EnsureCode{43}{12}% + -\TMP@EnsureCode{44}{12}% , -\TMP@EnsureCode{45}{12}% - -\TMP@EnsureCode{46}{12}% . -\TMP@EnsureCode{47}{12}% / -\TMP@EnsureCode{60}{12}% < -\TMP@EnsureCode{62}{12}% > -\TMP@EnsureCode{91}{12}% [ -\TMP@EnsureCode{93}{12}% ] -\TMP@EnsureCode{95}{12}% _ (other!) -\TMP@EnsureCode{96}{12}% ` -\edef\LuT@AtEnd{\LuT@AtEnd\noexpand\endinput} -% \end{macrocode} -% -% \subsection{Check for \LuaTeX} -% -% Without \LuaTeX\ there is no point in using this package. -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \input infwarerr.sty\relax - \input ifluatex.sty\relax -\else - \RequirePackage{infwarerr}[2007/09/09]% - \RequirePackage{ifluatex}[2009/04/10]% -\fi -% \end{macrocode} -% \begin{macrocode} -\ifluatex -\else - \@PackageError{luatex}{% - This package may only be run using LuaTeX% - }\@ehc - \expandafter\LuT@AtEnd -\fi% -% \end{macrocode} -% -% \subsection{Provide Lua\TeX\ primitives} -% -% \begin{macrocode} -\ifnum\luatexversion<36 % - \def\LuT@MakePrimitive#1{% - \expandafter\let\csname luatex#1\expandafter\endcsname - \csname #1\endcsname - }% -\else - \def\LuT@MakeLuatexPrimitive#1{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname luatex#1\endcsname\relax - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname #1\endcsname\relax - \else - \expandafter\let - \csname luatex#1\expandafter\endcsname - \csname #1\endcsname - \fi - \fi - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname luatex#1\endcsname\relax - \begingroup - \expandafter\let\csname luatex#1\endcsname\@undefined - \ifnum0% - \directlua{% - if tex.enableprimitives then % - tex.enableprimitives('luatex',{'#1'})% - tex.print('1')% - end% - }% - \expandafter\ifx\csname luatex#1\endcsname\relax\else1\fi - =11 % - \global\expandafter\let - \csname luatex#1\expandafter\endcsname - \csname luatex#1\endcsname - \else - \@PackageError{luatex}{% - tex.enableprimitives failed for `#1'% - }\@ehc - \fi - \endgroup - \fi - }% - \def\LuT@MakePrimitive#1{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname#1\endcsname\relax - \begingroup - \expandafter\let\csname#1\endcsname\@undefined - \ifnum0% - \directlua{% - if tex.enableprimitives then % - tex.enableprimitives('',{'#1'})% - tex.print('1')% - end% - }% - \expandafter\ifx\csname#1\endcsname\relax\else1\fi - =11 % - \global\expandafter\let - \csname#1\expandafter\endcsname - \csname#1\endcsname - \else - \@PackageError{luatex}{% - tex.enableprimitives failed for `#1'% - }\@ehc - \fi - \endgroup - \fi - }% -\fi -\LuT@MakeLuatexPrimitive{attribute} -\LuT@MakeLuatexPrimitive{attributedef} -\LuT@MakeLuatexPrimitive{catcodetable} -\LuT@MakeLuatexPrimitive{initcatcodetable} -\LuT@MakeLuatexPrimitive{luaescapestring} -\LuT@MakeLuatexPrimitive{savecatcodetable} -\LuT@MakePrimitive{numexpr} -% \end{macrocode} -% -% \subsection{Inherit support for \eTeX} -% -% Package \xpackage{etex} is not compatible for \plainTeX. -% But it could be present if a format is used that is based -% on \xfile{etex.src}. Therefore we only load the package -% in case of \LaTeX\ and tests its presence independently -% of the format by looking for \cs{et@xins}. -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax -\else - \RequirePackage{etex}[1998/03/26]% -\fi -% \end{macrocode} -% -% \subsection{Adaption of \eTeX's register allocation} -% -% \eTeX has increased the number of \TeX\ registers -% from $2^8$ (256) to $2^{15}$ (32768) for a register class. -% \LuaTeX\ extends the limit further to $2^16$ (65536). -% The allocation scheme of package \xpackage{etex} is not -% changed. But this can be subject for discussion. -% -% If a register class hasn't registered any local registers -% yet, then the limit can safely be pushed to 65536. -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname et@xins\endcsname\relax - \@PackageWarningNoLine{luatex}{% - Support for eTeX is not loaded (etex.src)% - }% -\else - \def\LuT@temp#1{% - \ifnum\count27#1=32768 % - \count27#1=65536 % - \fi - }% - \LuT@temp0% - \LuT@temp1% - \LuT@temp2% - \LuT@temp3% - \LuT@temp4% - \LuT@temp5% - \LuT@temp6% -% \end{macrocode} -% -% \eTeX\ uses an array for the first 256 registers and then a tree -% structure. \LuaTeX\ stores all registers of a class in one Lua table. -% There shouldn't be large performance differences. -% This allows starting immediately in the extended -% area, leaving room for insertions. -% \begin{macrocode} - \let\newcount\globcount - \let\newdimen\globdimen - \let\newskip\globskip - \let\newbox\globbox -\fi -% \end{macrocode} -% -% \subsection{\plainTeX\ compatibility} -% -% \begin{macro}{\@empty} -% \begin{macrocode} -\expandafter\ifx\csname @empty\endcsname\relax - \def\@empty{}% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@gobble} -% \begin{macrocode} -\expandafter\ifx\csname @gobble\endcsname\relax - \long\def\@gobble#1{}% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@firstofone} -% \begin{macrocode} -\expandafter\ifx\csname @firstofone\endcsname\relax - \long\def\@firstofone#1{#1}% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@firstoftwo} -% \begin{macrocode} -\expandafter\ifx\csname @firstoftwo\endcsname\relax - \long\def\@firstoftwo#1#2{#1}% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@car} -% \begin{macrocode} -\expandafter\ifx\csname @car\endcsname\relax - \def\@car#1#2\@nil{#1}% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@cdr} -% \begin{macrocode} -\expandafter\ifx\csname @cdr\endcsname\relax - \def\@cdr#1#2\@nil{#2}% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@ifstar} -% \begin{macrocode} -\expandafter\ifx\csname @ifstar\endcsname\relax - \def\@ifstar#1{% - \@ifnextchar*{\@firstoftwo{#1}}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@ifnextchar} -% \begin{macrocode} - \long\def\@ifnextchar#1#2#3{% - \let\reserved@d=#1% - \def\reserved@a{#2}% - \def\reserved@b{#3}% - \futurelet\@let@token\@ifnch - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@ifnch} -% \begin{macrocode} - \def\@ifnch{% - \ifx\@let@token\@sptoken - \let\reserved@c\@xifnch - \else - \ifx\@let@token\reserved@d - \let\reserved@c\reserved@a - \else - \let\reserved@c\reserved@b - \fi - \fi - \reserved@c - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@sptoken} -% \begin{macrocode} - \let\LuT@temp\:% - \def\:{\let\@sptoken= }% - \: % explicit space -% \end{macrocode} -% \end{macro} -% \begin{macro}{\@xifnch} -% \begin{macrocode} - \def\:{\@xifnch}% - \expandafter\def\: {% - \futurelet\@let@token\@ifnch - }% - \let\:\LuT@temp -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tempcnta} -% \begin{macrocode} -\expandafter\ifx\csname @tempcnta\endcsname\relax - \csname newcount\endcsname\@tempcnta -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tempcntb} -% \begin{macrocode} -\expandafter\ifx\csname @tempcntb\endcsname\relax - \csname newcount\endcsname\@tempcntb -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\LuT@newcommand} -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname newcommand\endcsname\relax - \def\LuT@newcommand#1[#2]#3{% - \ifx#1\@undefined - \let#1\relax - \else - \ifx#1\relax - \else - \@PackageError{luatex}{% - \string#1 is already defined.\MessageBreak - Redefinition is skipped% - }\@ehc - \fi - \fi - \ifx#1\relax - \ifcase#2 % - \def#1{#3}% - \or - \def#1##1{#3}% - \or - \def#1##1##2{#3}% - \or - \def#1##1##2##3{#3}% - \or - \@INTERNAL@ERROR - \fi - \fi - }% -\else - \def\LuT@newcommand{\newcommand*}% -\fi -% \end{macrocode} -% \end{macro} -% -% \subsection{Attributes} -% -% \subsubsection{Allocation} -% -% \begin{macro}{\LuT@AllocAttribute} -% \begin{macrocode} -\newcount\LuT@AllocAttribute -\LuT@AllocAttribute=\m@ne -% \end{macrocode} -% \end{macro} -% \begin{macro}{\newattribute} -% \begin{macrocode} -\ifx\newattribute\@undefined -\LuT@newcommand\newattribute[1]{% - \ifnum\LuT@AllocAttribute<65535 % - \global\advance\LuT@AllocAttribute\@ne - \allocationnumber\LuT@AllocAttribute - \global\luatexattributedef#1=\allocationnumber - \unsetattribute{#1}% - \wlog{\string#1=\string\attribute\the\allocationnumber}% - \else - \errmessage{No room for a new \string\attribute}% - \fi -} -\fi -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Interface} -% -% \begin{macro}{\setattribute} -% \begin{macrocode} -\ifx\setattribute\@undefined -\LuT@newcommand\setattribute[2]{% - #1=\numexpr#2\relax -} -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\unsetattribute} -% \begin{macrocode} -\ifx\unsetattribute\@undefined -\ifnum\luatexversion<37 - \LuT@newcommand\LuT@UnsetAttributeValue[0]{}% - \let\LuT@UnsetAttributeValue\m@ne -\else - \LuT@newcommand\LuT@UnsetAttributeValue[0]{-2147483647 }% -\fi -\LuT@newcommand\unsetattribute[1]{% - #1=\LuT@UnsetAttributeValue -} -\fi -% \end{macrocode} -% \end{macro} -% -% \subsection{Catcode tables} -% -% \subsubsection{Allocation} -% -% \begin{macro}{\LuT@AllocCatcodeTable} -% \begin{macrocode} -\newcount\LuT@AllocCatcodeTable -\LuT@AllocCatcodeTable=\m@ne -\newcount\CatcodeTableStack -\CatcodeTableStack=\z@ -% \end{macrocode} -% \end{macro} -% \begin{macro}{\newcatcodetable} -% \begin{macrocode} -\ifx\newcatcodetable\@undefined -\LuT@newcommand\newcatcodetable[1]{% - \ifnum\LuT@AllocCatcodeTable<1114110 % 0x10FFFF is maximal \chardef - % or < 268435455 % 2^28 - 1 - \global\advance\LuT@AllocCatcodeTable by\tw@ - \allocationnumber=\LuT@AllocCatcodeTable - \global\chardef#1=\allocationnumber - \wlog{% - \string#1=\string\catcodetable\the\allocationnumber - }% - \else - \errmessage{No room for a new \string\catcodetable}% - \fi -}% -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\IncCatcodeTableStack} -% \begin{macrocode} -\LuT@newcommand\IncCatcodeTableStack[0]{% - \ifnum\CatcodeTableStack<268435454 % - \global\advance\CatcodeTableStack by\tw@ - \else - \@PackageError{luatex}{% - Catcode table stack overflow% - }\@ehd - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DecCatcodeTableStack} -% \begin{macrocode} -\LuT@newcommand\DecCatcodeTableStack[0]{% - \ifnum\CatcodeTableStack>\z@ - \global\advance\CatcodeTableStack by-2 % - \else - \@PackageError{luatex}{% - Catcode table stack is empty% - }\@ehd - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{SetCatcodeRange}} -% -% \begin{macro}{\SetCatcodeRange} -% \begin{macrocode} -\LuT@newcommand\SetCatcodeRange[3]{% - \edef\LuT@temp{% - \noexpand\@tempcnta=\the\@tempcnta - \noexpand\@tempcntb=\the\@tempcntb - \noexpand\count@=\the\count@ - \relax - }% - \@tempcnta=\numexpr#1\relax - \@tempcntb=\numexpr#2\relax - \count@=\numexpr#3\relax - \loop - \unless\ifnum\@tempcnta>\@tempcntb - \catcode\@tempcnta=\count@ - \advance\@tempcnta by \@ne - \repeat - \LuT@temp -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Predefined catcode tables} -% -% \begin{macrocode} -\newcatcodetable\CatcodeTableIniTeX -\newcatcodetable\CatcodeTableString -\newcatcodetable\CatcodeTableOther -\newcatcodetable\CatcodeTableLaTeX -% \end{macrocode} -% -% \begin{macrocode} -\luatexinitcatcodetable\CatcodeTableIniTeX -\begingroup - \def\@makeother#1{\catcode#1=12\relax}% - \@firstofone{% - \luatexcatcodetable\CatcodeTableIniTeX - \begingroup - \SetCatcodeRange{0}{8}{15}% - \catcode9=10 % tab - \catcode11=15 % - \catcode12=13 % form feed - \SetCatcodeRange{14}{31}{15}% - \catcode35=6 % hash - \catcode36=3 % dollar - \catcode38=4 % ampersand - \catcode94=7 % circumflex - \catcode95=8 % underscore - \catcode123=1 % brace left - \catcode125=2 % brace right - \catcode126=13 % tilde - \catcode127=15 % - \luatexsavecatcodetable\CatcodeTableLaTeX - \endgroup - \@makeother{0}% nul - \@makeother{13}% carriage return - \@makeother{37}% percent - \@makeother{92}% backslash - \@makeother{127}% - \SetCatcodeRange{65}{90}{12}% A-Z - \SetCatcodeRange{97}{122}{12}% a-z - \luatexsavecatcodetable\CatcodeTableString - \@makeother{32}% space - \luatexsavecatcodetable\CatcodeTableOther - \endgroup -}% -% \end{macrocode} -% -% \subsubsection{Number stack} -% -% \begin{macro}{\LuT@NumStackEmpty} -% A special empty stack value because of \cs{@cdr}'s brace removal. -% \begin{macrocode} -\def\LuT@NumStackEmpty{0} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\LuT@NumStack} -% \begin{macrocode} -\let\LuT@NumStack\LuT@NumStackEmpty -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PushCatcodeTableNumStack} -% \begin{macrocode} -\LuT@newcommand\PushCatcodeTableNumStack[0]{% - \xdef\LuT@NumStack{% - {\the\luatexcatcodetable}\LuT@NumStack - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PopCatcodeTableNumStack} -% \begin{macrocode} -\LuT@newcommand\PopCatcodeTableNumStack[0]{% - \ifx\LuT@NumStack\LuT@NumStackEmpty - \@PackageWarning{luatex}{Empty catcode table number stack}% - \luatexcatcodetable\z@ - \else - \luatexcatcodetable=\expandafter\@car\LuT@NumStack\@nil\relax - \xdef\LuT@NumStack{% - \expandafter\@cdr\LuT@NumStack\@nil - }% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Catcode regime macros} -% -% \begin{macro}{\BeginCatcodeRegime} -% \begin{macrocode} -\LuT@newcommand\BeginCatcodeRegime[1]{% - \PushCatcodeTableNumStack - \luatexcatcodetable=\numexpr#1\relax - \IncCatcodeTableStack - \luatexsavecatcodetable\CatcodeTableStack - \luatexcatcodetable\CatcodeTableStack -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EndCatcodeRegime} -% \begin{macrocode} -\LuT@newcommand\EndCatcodeRegime[0]{% - \DecCatcodeTableStack - \PopCatcodeTableNumStack -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Lua module loader} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \input luatex-loader.sty\relax -\else - \RequirePackage{luatex-loader}[2010/03/09]% -\fi -% \end{macrocode} -% \begin{macrocode} -\LuT@AtEnd% -%</package> -% \end{macrocode} -% -% \begin{macrocode} -%<*loader> -% \end{macrocode} -% -% Reload check, especially if the package is not used with \LaTeX. -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode58=12 % : - \catcode64=11 % @ - \catcode123=1 % { - \catcode125=2 % } - \expandafter\let\expandafter\x\csname ver@luatex-loader.sty\endcsname - \ifx\x\relax % plain-TeX, first loading - \else - \def\empty{}% - \ifx\x\empty % LaTeX, first loading, - % variable is initialized, but \ProvidesPackage not yet seen - \else - \expandafter\ifx\csname PackageInfo\endcsname\relax - \def\x#1#2{% - \immediate\write-1{Package #1 Info: #2.}% - }% - \else - \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% - \fi - \x{luatex-loader}{The package is already loaded}% - \aftergroup\endinput - \fi - \fi -\endgroup% -% \end{macrocode} -% Package identification: -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode40=12 % ( - \catcode41=12 % ) - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode47=12 % / - \catcode58=12 % : - \catcode64=11 % @ - \catcode91=12 % [ - \catcode93=12 % ] - \catcode123=1 % { - \catcode125=2 % } - \expandafter\ifx\csname ProvidesPackage\endcsname\relax - \def\x#1#2#3[#4]{\endgroup - \immediate\write-1{Package: #3 #4}% - \xdef#1{#4}% - }% - \else - \def\x#1#2[#3]{\endgroup - #2[{#3}]% - \ifx#1\@undefined - \xdef#1{#3}% - \fi - \ifx#1\relax - \xdef#1{#3}% - \fi - }% - \fi -\expandafter\x\csname ver@luatex-loader.sty\endcsname -\ProvidesPackage{luatex-loader}% - [2019/07/25 v0.7 Lua module loader (HO)]% -% \end{macrocode} -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5\endlinechar=13\relax% - \catcode10=12 % ^^J - \catcode34=12 % " - \catcode39=12 % ' - \catcode40=12 % ( - \catcode41=12 % ) - \catcode44=12 % , - \catcode46=12 % . - \catcode60=12 % < - \catcode61=12 % = - \catcode95=12 % _ (other!) - \catcode96=12 % ` - \catcode123=1 % { - \catcode125=2 % } - \endlinechar=10 % - \ifnum\luatexversion<36 % - \directlua0% - \else % - \expandafter\directlua % - \fi % - {% - do - local script = "oberdiek.luatex.lua" - local file = kpse.find_file(script, "texmfscripts") - if file then - texio.write_nl("(" .. file .. ")") - dofile(file) - else - error("File `" .. script .. "' not found") - end - end - }% -\endgroup\endinput% -% \end{macrocode} -% -% \begin{macrocode} -%</loader> -% \end{macrocode} -% -% \subsection{Lua script} -% -% Currently \LuaTeX\ does not use KPSE when searching for module -% files. The following Lua script implements a workaround. -% It extends |package.loader| by another search method. -% Modules are found by the module name with extension \xext{lua} -% similar to -% \begin{quote} -% \ttfamily |kpsewhich --format=texmfscripts| \meta{module}|.lua| -% \end{quote} -% Unhappily \textsf{kpsewhich} does not support directory components -% in the file name. Therefore a module |a.b.c| cannot be installed -% as \xfile{a/b/c.lua}. The script must be named \xfile{a.b.c.lua}. -% \begin{macrocode} -%<*lua> -% \end{macrocode} -% \begin{macrocode} -local function kpse_module_loader(module) - local script = module .. ".lua" - local file = kpse.find_file(script, "texmfscripts") - if file then - local loader, error = loadfile(file) - if loader then - texio.write_nl("(" .. file .. ")") - return loader - end - return "\n\t[oberdiek.luatex.kpse_module_loader] Loading error:\n\t" - .. error - end - return "\n\t[oberdiek.luatex.kpse_module_loader] Search failed" -end -% \end{macrocode} -% following line changed to use package.searchers instead of -% package.loaders for current luatex; this is the only change in the -% code. eroux, 28apr13, (or package.loaders), 29mar14. -% \begin{macrocode} -table.insert(package.searchers or package.loaders, kpse_module_loader) -% \end{macrocode} -% \begin{macrocode} -%</lua> -% \end{macrocode} -% -% \section{Test} -% -% \begin{macrocode} -%<*test2> -\documentclass{article} -\def\LoadCommand{% - \RequirePackage{luatex}[2010/03/09]% -} -%</test2> -% \end{macrocode} -% \begin{macrocode} -%<*test3> -\documentclass{article} -\def\LoadCommand{% - \RequirePackage{luatex-loader}[2010/03/09]% -} -%</test3> -% \end{macrocode} -% \subsection{Catcode checks for loading} -% -% \begin{macrocode} -%<*test1> -% \end{macrocode} -% \begin{macrocode} -\catcode`\{=1 % -\catcode`\}=2 % -\catcode`\#=6 % -\catcode`\@=11 % -\expandafter\ifx\csname count@\endcsname\relax - \countdef\count@=255 % -\fi -\expandafter\ifx\csname @gobble\endcsname\relax - \long\def\@gobble#1{}% -\fi -\expandafter\ifx\csname @firstofone\endcsname\relax - \long\def\@firstofone#1{#1}% -\fi -\expandafter\ifx\csname loop\endcsname\relax - \expandafter\@firstofone -\else - \expandafter\@gobble -\fi -{% - \def\loop#1\repeat{% - \def\body{#1}% - \iterate - }% - \def\iterate{% - \body - \let\next\iterate - \else - \let\next\relax - \fi - \next - }% - \let\repeat=\fi -}% -\def\RestoreCatcodes{} -\count@=0 % -\loop - \edef\RestoreCatcodes{% - \RestoreCatcodes - \catcode\the\count@=\the\catcode\count@\relax - }% -\ifnum\count@<255 % - \advance\count@ 1 % -\repeat - -\def\RangeCatcodeInvalid#1#2{% - \count@=#1\relax - \loop - \catcode\count@=15 % - \ifnum\count@<#2\relax - \advance\count@ 1 % - \repeat -} -\def\RangeCatcodeCheck#1#2#3{% - \count@=#1\relax - \loop - \ifnum#3=\catcode\count@ - \else - \errmessage{% - Character \the\count@\space - with wrong catcode \the\catcode\count@\space - instead of \number#3% - }% - \fi - \ifnum\count@<#2\relax - \advance\count@ 1 % - \repeat -} -\def\space{ } -\expandafter\ifx\csname LoadCommand\endcsname\relax - \def\LoadCommand{\input luatex.sty\relax}% -\fi -\def\Test{% - \RangeCatcodeInvalid{0}{47}% - \RangeCatcodeInvalid{58}{64}% - \RangeCatcodeInvalid{91}{96}% - \RangeCatcodeInvalid{123}{255}% - \catcode`\@=12 % - \catcode`\\=0 % - \catcode`\%=14 % - \LoadCommand - \RangeCatcodeCheck{0}{36}{15}% - \RangeCatcodeCheck{37}{37}{14}% - \RangeCatcodeCheck{38}{47}{15}% - \RangeCatcodeCheck{48}{57}{12}% - \RangeCatcodeCheck{58}{63}{15}% - \RangeCatcodeCheck{64}{64}{12}% - \RangeCatcodeCheck{65}{90}{11}% - \RangeCatcodeCheck{91}{91}{15}% - \RangeCatcodeCheck{92}{92}{0}% - \RangeCatcodeCheck{93}{96}{15}% - \RangeCatcodeCheck{97}{122}{11}% - \RangeCatcodeCheck{123}{255}{15}% - \RestoreCatcodes -} -\Test -\csname @@end\endcsname -\end -% \end{macrocode} -% \begin{macrocode} -%</test1> -% \end{macrocode} -% -% \subsection{Catcode tables} -% -% \subsubsection{Predefined catcode tables} -% -% \begin{macrocode} -%<*test4> -\NeedsTeXFormat{LaTeX2e} -% \end{macrocode} -% Remember \LaTeX's initial catcodes in count registers -% starting at \cs{TestLaTeX}. -% \begin{macrocode} -\count0=0 % -\chardef\TestLaTeX=1000 % -\chardef\TestMax=300 % -\loop - \count\numexpr\TestLaTeX+\count0\relax=\catcode\count0 % -\ifnum\count0<\TestMax - \advance\count0 by 1 % -\repeat -\documentclass{minimal} -\usepackage{luatex}[2010/03/09] -\usepackage{qstest} -\IncludeTests{*} -\LogTests{log}{*}{*} -\makeatletter -\def\Check#1{% - \Expect*{\the\count@=\the\catcode\count@}% - *{\the\count@=#1}% -} -\newcount\scratch -\def\Test#1#2{% - \begin{qstest}{CatcodeTable#1}{CatcodeTable#1}% - \luatexcatcodetable\csname CatcodeTable#1\endcsname - \count@=\z@ - \loop - \scratch=#2\relax - \Expect*{\the\count@=\the\catcode\count@}% - *{\the\count@=\the\scratch}% - \ifnum\count@<\TestMax - \advance\count@\@ne - \repeat - \end{qstest}% -} -\begingroup - % luatex-unicode-letters.tex makes some slots to letters - \def\TestMax{169}% - \Test{LaTeX}{\the\count\numexpr\TestLaTeX+\count@}% -\endgroup -\Test{String}{\ifnum\count@=32 10\else 12\fi} -\Test{Other}{12} -\luatexinitcatcodetable99 % -\Test{IniTeX}{% - 0\relax - \begingroup - \luatexcatcodetable99 % - \global\scratch=\the\catcode\count@ - \endgroup -} -% \end{macrocode} -% -% \subsubsection{Catcode table number stack} -% -% \begin{macrocode} -\begin{qstest}{CatcodeTableNumStack}{CatcodeTableNumStack} - \def\TestStack#1{% - \Expect*{\LuT@NumStack}{#1}% - }% - \TestStack{0}% - \PushCatcodeTableNumStack - \TestStack{{0}0}% - \@firstofone{% - \begingroup - \luatexinitcatcodetable12 % - \luatexcatcodetable12 % - \PushCatcodeTableNumStack - \TestStack{{12}{0}0}% - \PopCatcodeTableNumStack - \TestStack{{0}0}% - \PopCatcodeTableNumStack - \TestStack{0}% - \def\TestWarning{Missing empty stack warning}% - \def\@PackageWarning#1#2{\def\TestWarning{empty stack}}% - \PopCatcodeTableNumStack - \TestStack{0}% - \Expect*{\TestWarning}{empty stack}% - \endgroup - }% -\end{qstest} -% \end{macrocode} -% -% \subsubsection{Catcode table stack} -% -% \begin{macrocode} -\begin{qstest}{CatcodeTableStack}{CatcodeTableStack} - \def\TestStack#1{% - \Expect*{\the\CatcodeTableStack}{#1}% - }% - \TestStack{0}% - \IncCatcodeTableStack - \TestStack{2}% - \IncCatcodeTableStack - \TestStack{4}% - \begingroup - \IncCatcodeTableStack - \TestStack{6}% - \endgroup - \TestStack{6}% - \begingroup - \DecCatcodeTableStack - \TestStack{4}% - \endgroup - \TestStack{4}% - \DecCatcodeTableStack - \TestStack{2}% - \DecCatcodeTableStack - \TestStack{0}% - \begingroup - \def\TestError{Missing error}% - \def\@PackageError#1#2#3{% - \def\TestError{Empty stack}% - }% - \DecCatcodeTableStack - \TestStack{0}% - \Expect*{\TestError}{Empty stack}% - \endgroup -\end{qstest} -% \end{macrocode} -% -% \subsubsection{Catcode regime macros} -% -% \begin{macrocode} -\begin{qstest}{CatcodeRegime}{CatcodeRegime} - \def\TestStacks#1#2#3{% - \Expect*{\the\luatexcatcodetable}{#1}% - \Expect*{\the\CatcodeTableStack}{#2}% - \Expect*{\LuT@NumStack}{#3}% - }% - \TestStacks{0}{0}{0}% - \catcode`\|=7 % - \BeginCatcodeRegime\CatcodeTableLaTeX - \TestStacks{2}{2}{{0}0}% - \Expect*{\the\catcode`\|}{12}% - \EndCatcodeRegime - \TestStacks{0}{0}{0}% - \Expect*{\the\catcode`\|}{7}% -\end{qstest} -% \end{macrocode} -% -% \subsection{Attribute allocation} -% -% \begin{macrocode} -\begin{qstest}{Attributes}{Attributes} - \newattribute\TestAttr - \Expect*{\meaning\TestAttr}% - *{\string\attribute\number\allocationnumber}% - \Expect*{\the\allocationnumber}{0}% - \begingroup - \newattribute\TestAttr - \Expect*{\the\allocationnumber}{1}% - \endgroup - \Expect*{\the\allocationnumber}{0}% - \Expect*{\meaning\TestAttr}*{\string\attribute1}% - \Expect*{\the\TestAttr}*{\number\LuT@UnsetAttributeValue}% - \def\Test#1{% - \setattribute\TestAttr{#1}% - \Expect*{\the\TestAttr}{#1}% - }% - \Test{0}% - \Test{1}% - \Test{-1}% - \Test{123}% - \unsetattribute\TestAttr - \Expect*{\the\TestAttr}*{\number\LuT@UnsetAttributeValue}% - \begingroup - \Expect*{\the\TestAttr}*{\number\LuT@UnsetAttributeValue}% - \Test{1234}% - \endgroup - \Expect*{\the\TestAttr}*{\number\LuT@UnsetAttributeValue}% -\end{qstest} -% \end{macrocode} -% -% \begin{macrocode} -\@@end -%</test4> -% \end{macrocode} -% -% \subsection{Short test for \plainTeX} -% -% \begin{macrocode} -%<*test5> -\input luatex.sty\relax -\newattribute\TestAttr -\setattribute\TestAttr{10} -\unsetattribute\TestAttr -\newcatcodetable\TestCTa -\begingroup - \SetCatcodeRange{`A}{`Z}{12}% -\endgroup -\BeginCatcodeRegime\CatcodeTableLaTeX -\EndCatcodeRegime -\end -%</test5> -% \end{macrocode} -% -% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\url{http://ctan.org/pkg/luatex}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/luatex.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/luatex.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTAN{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTAN{tds/tds.pdf}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \paragraph{Script installation.} -% Check the directory \xfile{TDS:scripts/oberdiek/} for -% scripts that need further installation steps. -% Package \xpackage{attachfile2} comes with the Perl script -% \xfile{pdfatfi.pl} that should be installed in such a way -% that it can be called as \texttt{pdfatfi}. -% Example (linux): -% \begin{quote} -% |chmod +x scripts/oberdiek/pdfatfi.pl|\\ -% |cp scripts/oberdiek/pdfatfi.pl /usr/local/bin/| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex luatex.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% luatex.sty & tex/generic/oberdiek/luatex.sty\\ -% luatex-loader.sty & tex/generic/oberdiek/luatex-loader.sty\\ -% oberdiek.luatex.lua & scripts/oberdiek/oberdiek.luatex.lua\\ -% luatex.pdf & doc/latex/oberdiek/luatex.pdf\\ -% test/luatex-test1.tex & doc/latex/oberdiek/test/luatex-test1.tex\\ -% test/luatex-test2.tex & doc/latex/oberdiek/test/luatex-test2.tex\\ -% test/luatex-test3.tex & doc/latex/oberdiek/test/luatex-test3.tex\\ -% test/luatex-test4.tex & doc/latex/oberdiek/test/luatex-test4.tex\\ -% test/luatex-test5.tex & doc/latex/oberdiek/test/luatex-test5.tex\\ -% luatex.dtx & source/latex/oberdiek/luatex.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\teTeX, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \teTeX\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Attached source.} -% -% The PDF documentation on CTAN also includes the -% \xfile{.dtx} source file. It can be extracted by -% AcrobatReader 6 or higher. Another option is \textsf{pdftk}, -% e.g. unpack the file into the current directory: -% \begin{quote} -% \verb|pdftk luatex.pdf unpack_files output .| -% \end{quote} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{luatex.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex luatex.dtx -%makeindex -s gind.ist luatex.idx -%pdflatex luatex.dtx -%makeindex -s gind.ist luatex.idx -%pdflatex luatex.dtx -%\end{verbatim} -% \end{quote} -% -% \section{Catalogue} -% -% The following XML file can be used as source for the -% \href{http://mirror.ctan.org/help/Catalogue/catalogue.html}{\TeX\ Catalogue}. -% The elements \texttt{caption} and \texttt{description} are imported -% from the original XML file from the Catalogue. -% The name of the XML file in the Catalogue is \xfile{luatex.xml}. -% \begin{macrocode} -%<*catalogue> -<?xml version='1.0' encoding='us-ascii'?> -<!DOCTYPE entry SYSTEM 'catalogue.dtd'> -<entry datestamp='$Date$' modifier='$Author$' id='luatex'> - <name>luatex</name> - <caption>The LuaTeX engine.</caption> - <authorref id='auth:oberdiek'/> - <copyright owner='Heiko Oberdiek' year='2007,2009,2010'/> - <license type='lppl1.3'/> - <version number='0.6'/> - <description> - LuaTeX is an extended version of pdfTeX using Lua as an embedded - scripting language. The LuaTeX project’s main objective - is to provide an open and configurable variant of TeX while at the - same time offering downward compatibility. - <p/> - LuaTeX uses Unicode (as UTF-8) as its default input encoding, and - is able to use modern (OpenType) fonts (for both text and mathematics). - <p/> - It should be noted that LuaTeX is still under development; its - specification has been declared stable, but absolute stability - may not in practice be assumed. - <p/> - The package is part of the <xref refid='oberdiek'>oberdiek</xref> bundle. - </description> - <documentation details='Package documentation' - href='ctan:/macros/latex/contrib/oberdiek/luatex.pdf'/> - <ctan file='true' path='/macros/latex/contrib/oberdiek/luatex.dtx'/> - <miktex location='oberdiek'/> - <texlive location='oberdiek'/> - <install path='/macros/latex/contrib/oberdiek/oberdiek.tds.zip'/> -</entry> -%</catalogue> -% \end{macrocode} -% -% \begin{History} -% \begin{Version}{2007/12/12 v0.1} -% \item -% First public version. -% \end{Version} -% \begin{Version}{2009/04/10 v0.2} -% \item -% Requires package \xpackage{ifluatex} in version 2.0 to ensure -% \cs{luatexversion}. -% \item -% Updates the call of \cs{directlua}, the syntax has changed -% in \LuaTeX\ 0.36. -% \end{Version} -% \begin{Version}{2009/12/02 v0.3} -% \item -% Unsetting of attributes updated for \LuaTeX\ 0.37. -% \end{Version} -% \begin{Version}{2010/03/09 v0.4} -% \item -% Support for lua states removed. -% \item -% Calling tex.enableprimitives for used primitives. -% \end{Version} -% \begin{Version}{2016/05/10 v0.5} -% \item -% Use package.searchers -% \item only conditionally define commands such as -% \verb|\newcatcodetable| -% that are now defined in the Lua\LaTeX\ format. -% \end{Version} -% \begin{Version}{2016/05/16 v0.6} -% \item -% Documentation updates. -% \end{Version} -% \begin{Version}{2019/07/25 v0.7} -% \item -% remove uses of module function, see PR70 -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput |