diff options
| -rw-r--r-- | TODO | 1 | ||||
| -rw-r--r-- | luatexbase-compat.dtx | 61 | 
2 files changed, 61 insertions, 1 deletions
| @@ -6,7 +6,6 @@ general  compat  ------ -- \EnsureLuaTeXPrimitive  - use it in other packages, and test them with various versions  loader diff --git a/luatexbase-compat.dtx b/luatexbase-compat.dtx index bbb73c6..16ead89 100644 --- a/luatexbase-compat.dtx +++ b/luatexbase-compat.dtx @@ -228,6 +228,65 @@ See source file '\inFileName' for details.  \the\toks0  %    \end{macrocode}  % +%    \subsection{Primitives} +% +%    \begin{macrocode} +\begingroup +\expandafter\ifx\csname newcommand\endcsname\relax +  \toks0{\def\luatexbase@ensure@primitive#1} +\else +  \toks0{\newcommand*\luatexbase@ensure@primitive[1]} +\fi +\toks2{}\def\x#1{\toks2\expandafter{\the\toks2 #1}} +\x{% +  \ifcsname luatex#1\endcsname \else} +\ifnum\luatexversion<37\relax +%    \end{macrocode} +% +%    |tex.enableprimitives()| not available. If the unprefixed primitive is +%    undefined, issue an error. +% +%    \begin{macrocode} +  \x{% +    \begingroup\expandafter\expandafter\expandafter\endgroup +    \expandafter\ifx\csname #1\endcsname\relax} +  \begingroup\expandafter\expandafter\expandafter\endgroup +  \expandafter\ifx\csname PackageError\endcsname\relax +    \x{% +      \errmessage{% +        Package luatexbase-compat error: failed to enable `#1'.}} +  \else +    \x{% +      \PackageError{luatexbase-compat}{% +        Package luatexbase-compat error: failed to enable `#1'.}{}} +  \fi +  \x{% +    \else} +%    \end{macrocode} +% +%    Use the unprefixed primitive to define the prefixed version. +% +%    \begin{macrocode} +  \x{% +      \expandafter\let\csname luatex#1\expandafter\endcsname +      \csname#1\endcsname +    \fi} +\else +%    \end{macrocode} +% +%    |tex.enableprimitives()| available, use it. +% +%    \begin{macrocode} +  \x{% +    \luatexbase@directlua{tex.enableprimitives('luatex', '#1')}} +\fi +\x{% +  \fi} +\toks0\expandafter{\the\toks0\expandafter{\the\toks2}} +\expandafter\endgroup +\the\toks0 +%    \end{macrocode} +%  %    That's all folks!  %  %    \begin{macrocode} @@ -245,6 +304,8 @@ See source file '\inFileName' for details.  %<*testplain,testlatex>  \catcode64 11  \luatexbase@directlua{local answer = 42} +\luatexbase@ensure@primitive{primitive} +\luatexprimitive\relax  %</testplain,testlatex>  %<testplain>\bye  %<testlatex>\stop | 
