% \iffalse meta-comment % % Copyright 2010, 2011 by Manuel Pégourié-Gonnard % % This work is under the CC0 license. % % This work consists of the main source file luatex.dtx % and the derived files % luatex.sty % % Unpacking: % tex luatex.dtx % Documentation: % pdflatex luatex.dtx % %<*ignore> \begingroup \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 % %<*install> \input docstrip.tex \keepsilent \askforoverwritefalse \preamble See the aforementioned source file(s) for copyright and licensing information. \endpreamble \generate{% \usedir{tex/luatex/luatexbase}% \file{luatex.sty}{\from{luatex.dtx}{texpackage}}% } \generate{% \usedir{doc/luatex/luatexbase}% \file{test-luatex1.tex}{\from{luatex.dtx}{test1}}% \file{test-luatex2.tex}{\from{luatex.dtx}{test1,test2}}% \file{test-luatex3.tex}{\from{luatex.dtx}{test1,test3}}% \file{test-luatex4.tex}{\from{luatex.dtx}{test4}}% \file{test-luatex5.tex}{\from{luatex.dtx}{test5}}% } \obeyspaces \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} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} \Msg{************************************************************************} \endbatchfile % %<*ignore> \fi % %<*driver> \documentclass{ltxdoc} \input{lltxb-dtxstyle} \newcommand\subpk[1]{% \item[\href{luatexbase-#1.pdf}{luatexbase-#1}\normalfont:]} \begin{document} \DocInput{luatex.dtx}% \end{document} % % \fi % % \CheckSum{0} % % \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 \~} % % \pkdate{luatex}{v0.5 2011-05-24} % % \maketitle % % \begin{abstract} % This package provides resource management for the LuaTeX macro programmer. % % It is now a wrapper around \pk{luatexbase} subpackages, with additinal names % for some macros in order to ensure compatibility with previous versions of % this package. You are encouraged to use \pk{luatexbase} directly and switch % to the new names. % \end{abstract} % % \tableofcontents % % \section{Documentation} % % The \pk{luatex} package loads the following sub-packages of \pk{luatexbase}: % \begin{description} % \subpk{compat} compatibility helpers for \verb+\directlua+, primitive % names and version information from Lua. % \subpk{loader} extension of \luatex's Lua module loader (since version % 0.60.0, this is more of a compatibility layer for older versions than a % real extension). % \subpk{regs} extented allocation scheme for registers and the like, % \emph{\`a la} \pk{etex}. % \subpk{cctb} catcode table allocation. % \subpk{attr} attribute allocation. % \end{description} % % In addition, it defines the following synonyms: % \begin{center} % \begin{tabular}{rl} % \toprule % Deprecated name & New name \\ % \midrule % \cs{newattribute} & \cs{newluatexattribute} \\ % \cs{setattribute} & \cs{setluatexattribute} \\ % \cs{unsetattribute} & \cs{unsetluatexattribute} \\ % \cs{newcatcodetable} & \cs{newluatexcatcodetable} \\ % \bottomrule % \end{tabular} % \end{center} % The deprecated names trigger a warning and will be removed in a future % version. % % % \section{Implementation} % % \begin{macrocode} %<*texpackage> % \end{macrocode} % % \subsection{Preliminaries} % % Catcode defenses and reload protection. % % \begin{macrocode} \begingroup\catcode61\catcode48\catcode32=10\relax% = and space \catcode123 1 % { \catcode125 2 % } \catcode 35 6 % # \toks0\expandafter{\expandafter\endlinechar\the\endlinechar}% \edef\x{\endlinechar13}% \def\y#1 #2 {% \toks0\expandafter{\the\toks0 \catcode#1 \the\catcode#1}% \edef\x{\x \catcode#1 #2}}% \y 13 5 % carriage return \y 61 12 % = \y 32 10 % space \y 123 1 % { \y 125 2 % } \y 35 6 % # \y 64 11 % @ (letter) \y 10 12 % new line ^^J \y 39 12 % ' \y 40 12 % ( \y 41 12 % ) \y 45 12 % - \y 46 12 % . \y 47 12 % / \y 58 12 % : \y 91 12 % [ \y 93 12 % ] \y 94 7 % ^ \y 96 12 % ` \toks0\expandafter{\the\toks0 \relax\noexpand\endinput}% \edef\y#1{\noexpand\expandafter\endgroup% \noexpand\ifx#1\relax \edef#1{\the\toks0}\x\relax% \noexpand\else \noexpand\expandafter\noexpand\endinput% \noexpand\fi}% \expandafter\y\csname luatex@sty@endinput\endcsname% % \end{macrocode} % % Package declaration. % % \begin{macrocode} \begingroup \expandafter\ifx\csname ProvidesPackage\endcsname\relax \def\x#1[#2]{\immediate\write16{Package: #1 #2}} \else \let\x\ProvidesPackage \fi \expandafter\endgroup \x{luatex}[2011/05/24 v0.5 Resource management for LuaTeX] % \end{macrocode} % % Make sure \luatex is used. % % \begin{macrocode} \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname RequirePackage\endcsname\relax \input ifluatex.sty \else \RequirePackage{ifluatex} \fi \ifluatex\else \begingroup \expandafter\ifx\csname PackageError\endcsname\relax \def\x#1#2#3{\begingroup \newlinechar10 \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup} \else \let\x\PackageError \fi \expandafter\endgroup \x{luatex}{LuaTeX is required for this package. Aborting.}{% This package can only be used with the LuaTeX engine^^J% (command `lualatex' or `luatex').^^J% Package loading has been stopped to prevent additional errors.} \expandafter\luatex@sty@endinput% \fi % \end{macrocode} % % We set |LuT@AllocAttribute| in order for the hacks in luatexbase-attr to % work. % % \begin{macrocode} \newcount\LuT@AllocAttribute \LuT@AllocAttribute=\m@ne % \end{macrocode} % % \subsection{Packages loading} % % \begin{macrocode} \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname RequirePackage\endcsname\relax \input luatexbase-compat.sty \input luatexbase-loader.sty \input luatexbase-regs.sty \input luatexbase-attr.sty \input luatexbase-cctb.sty \else \RequirePackage{luatexbase-compat} \RequirePackage{luatexbase-loader} \RequirePackage{luatexbase-regs} \RequirePackage{luatexbase-attr} \RequirePackage{luatexbase-cctb} \fi % \end{macrocode} % % \subsection{Compatibility names} % % Defined a synonym, triggerring a one-time warning. % % \begin{macrocode} \def\lltxb@synonym#1#2{% \def#1{% \begingroup \ifdefined\PackageWarning \let\x\PackageWarning \else \def\x####1####2{% \begingroup \endlinechar10 \message{Package ####1 warning: ####2}% \endgroup}% \fi \expandafter\endgroup \x{luatex}{\string#1 is deprecated^^J% and will be removed in the next version of the package.^^J% Please use \string#2 instead.} \let#1#2% #1}} % \end{macrocode} % % Now the list of synonyms. % % \begin{macrocode} \lltxb@synonym \newattribute \newluatexattribute \lltxb@synonym \setattribute \setluatexattribute \lltxb@synonym \unsetattribute \unsetluatexattribute \lltxb@synonym \newcatcodetable \newluatexcatcodetable % \end{macrocode} % % This is the end, my friend\dots the end. % % \begin{macrocode} \luatex@sty@endinput% % % \end{macrocode} % % \section{Test} % % MPG: This section shamelessly copied from Heiko's original % \file{luatex.dtx}. % % \begin{macrocode} %<*test2> \documentclass{article} \def\LoadCommand{% \RequirePackage{luatex}[2011/05/24]% } % % \end{macrocode} % \begin{macrocode} %<*test3> \documentclass{article} \def\LoadCommand{% \RequirePackage{luatex-loader}[2011/05/24]% } % % \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} % % \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}[2011/05/24] \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*{\lltxb@cctb@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\errmessage#1{% \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*{\lltxb@cctb@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}{1}% \begingroup \newattribute\TestAttr \Expect*{\the\allocationnumber}{2}% \endgroup \Expect*{\the\allocationnumber}{1}% \Expect*{\meaning\TestAttr}*{\string\attribute2}% \Expect*{\the\TestAttr}*{\number\lltxb@attr@unsetvalue}% \def\Test#1{% \setattribute\TestAttr{#1}% \Expect*{\the\TestAttr}{#1}% }% \Test{0}% \Test{1}% \Test{-1}% \Test{123}% \unsetattribute\TestAttr \Expect*{\the\TestAttr}*{\number\lltxb@attr@unsetvalue}% \begingroup \Expect*{\the\TestAttr}*{\number\lltxb@attr@unsetvalue}% \Test{1234}% \endgroup \Expect*{\the\TestAttr}*{\number\lltxb@attr@unsetvalue}% \end{qstest} % \end{macrocode} % % \begin{macrocode} \@@end % % \end{macrocode} % % \subsection{Short test for Plain \TeX} % % \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 % % \end{macrocode} % % % \Finale \endinput