[luatex] l3luatex module
Joseph Wright
joseph.wright at morningstar2.co.uk
Mon Jan 3 21:09:16 CET 2011
On 03/01/2011 14:09, Joseph Wright wrote:
> On 03/01/2011 13:56, Taco Hoekwater wrote:
>> On 01/03/2011 02:39 PM, Philipp Stephani wrote:
>>>
>>> Reading the source code, I guess \directlua behaves identically to
>>> \immediate\write, while \latelua corresponds to \write. If that is
>>> true, then the naming convention of the \iow_… macros should be
>>> applied.
>>
>> The correspondence is correct, but \directlua is expandable
>> (\immediate\write is not).
>
> Thanks Taco (and Philipp). I will revisit the l3luatex stuff later today
> and try to tighten both the expl3 function names and description up.
(With apologies to those on the LuaTeX list who are not interested in
LaTeX3 - I think I need some LuaTeX experts to check the following.)
Okay, to save everyone needing to read the SVN feed, I've revised the
documentation to:
%\begin{function}{
% \lua_now:n / (EXP) |
% \lua_now:x / (EXP) |
%}
% \begin{syntax}
% \cs{lua_now:n} \Arg{token list}
% \end{syntax}
% The \meta{token list} is first tokenized by \TeX, which will include
% converting line ends to spaces in the usual \TeX\ manner and which
% respects currently-applicable \TeX\ category codes. The resulting
% \meta{\Lua\ input} is passed to the \Lua\ interpreter for processing.
% Each \cs{lua_now:n} block is treated by \Lua\ as a separate chunk.
% The \Lua\ interpreter will execute the \meta{\Lua\ input} immediately,
% and in an expandable manner.
% \begin{texnote}
% \cs{lua_now:x} is the \LuaTeX\ primitive \cs{directlua} renamed.
% \end{texnote}
%\end{function}
%
%\begin{function}{
% \lua_shipout:n |
% \lua_shipout:x |
%}
% \begin{syntax}
% \cs{lua_shipout:x} \Arg{token list}
% \end{syntax}
% The \meta{token list} is first tokenized by \TeX, which will include
% converting line ends to spaces in the usual \TeX\ manner and which
% respects currently-applicable \TeX\ category codes. The resulting
% \meta{\Lua\ input} is passed to the \Lua\ interpreter when the
% current page is finalised (\emph{i.e}.~at shipout). Each
% \cs{lua_shipout:n} block is treated by Lua as a separate chunk.
% The \Lua\ interpreter will execute the \meta{\Lua\ input} during the
% page-building routine: no \TeX\ expansion of the \meta{\Lua\ input}
% will occur at this stage.
% \begin{texnote}
% At a \TeX\ level, the \meta{\Lua\ input} is stored as a
% `whatsit'.
% \end{texnote}
%\end{function}
%
%\begin{function}{
% \lua_shipout_x:n |
% \lua_shipout_x:x |
%}
% \begin{syntax}
% \cs{lua_shipout:n} \Arg{token list}
% \end{syntax}
% The \meta{token list} is first tokenized by \TeX, which will include
% converting line ends to spaces in the usual \TeX\ manner and which
% respects currently-applicable \TeX\ category codes. The resulting
% \meta{\Lua\ input} is passed to the \Lua\ interpreter when the
% current page is finalised (\emph{i.e}.~at shipout). Each
% \cs{lua_shipout:n} block is treated by Lua as a separate chunk.
% The \Lua\ interpreter will execute the \meta{\Lua\ input} during the
% page-building routine: the \meta{\Lua\ input} is expanded during this
% process in addition to any expansion when the argument was read. This
% makes these functions suitable for including material finalised
% during the page building process (such as the page number).
% \begin{texnote}
% \cs{lua_sjhipout_x:n} is the \LuaTeX\ primitive \cs{latelua}
% named using the \LaTeX3 scheme.
%
% At a \TeX\ level, the \meta{\Lua\ input} is stored as a
% `whatsit'.
% \end{texnote}
%\end{function}
with the code block reading
%\begin{macro}{\lua_now:n}
%\begin{macro}{\lua_now:x}
%\begin{macro}{\lua_shipout_x:n}
%\begin{macro}{\lua_shipout_x:x}
%\begin{macro}{\lua_shipout:n}
%\begin{macro}{\lua_shipout:x}
%\begin{macro}{\lua_wrong_engine:}
% When \LuaTeX\ is in use, this is all a question of primitives with new
% names. On the other hand, for \pdfTeX\ and \XeTeX\ the argument should
% be removed from the input stream before issuing an error. This needs
% to be expandable, so the same idea is used as for \texttt{V}-type
% expansion, with an appropriately-named but undefined function.
% \begin{macrocode}
\luatex_if_engine:TF
{
\cs_new_eq:NN \lua_now:x \luatex_directlua:D
\cs_new_eq:NN \lua_shipout_x:n \luatex_latelua:D
}
{
\cs_new:Npn \lua_now:x #1 { \lua_wrong_engine: }
\cs_new_protected:Npn \lua_shipout_x:n #1 { \lua_wrong_engine: }
}
\cs_new:Npn \lua_now:n #1 {
\lua_now:x { \exp_not:n {#1} }
}
\cs_generate_variant:Nn \lua_shipout_x:n { x }
\cs_new_protected:Npn \lua_shipout:n #1 {
\lua_shipout_x:n { \exp_not:n {#1} }
}
\cs_generate_variant:Nn \lua_shipout:n { x }
\group_begin:
\char_make_letter:N\!
\char_make_letter:N\ %
\cs_gset:Npn\lua_wrong_engine:{%
\LuaTeX engine not in use!%
}%
\group_end:%
% \end{macrocode}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
This is modelled on the expl3 wrappers for \write, noting as Taco has
pointed out that \directlua is expandable, but I take it that \latelua
is not.
Once this is sorted out correctly then I'll sort out a CTAN snapshot.
--
Joseph Wright
More information about the luatex
mailing list