diff options
author | Karl Berry <karl@freefriends.org> | 2010-09-13 16:20:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-09-13 16:20:18 +0000 |
commit | 4b0df656c35cd9a2eded4e224631cc9d74fe70d4 (patch) | |
tree | dd2f0014181215f7f21f2be0d19ceb3c88db01c1 /Master/texmf-dist/source/latex | |
parent | 911279d196a13bf093ab94e5373318522abb08f2 (diff) |
expl3 update (26jul10)
git-svn-id: svn://tug.org/texlive/trunk@19701 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/expl3.dtx | 5 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3.ins | 121 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3doc.dtx | 17 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3format.ins | 81 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3fp.dtx | 4 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3luatex.dtx | 432 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3names.dtx | 33 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/source3.tex | 414 |
8 files changed, 480 insertions, 627 deletions
diff --git a/Master/texmf-dist/source/latex/expl3/expl3.dtx b/Master/texmf-dist/source/latex/expl3/expl3.dtx index 8f2af1a5a2a..0251c705b42 100644 --- a/Master/texmf-dist/source/latex/expl3/expl3.dtx +++ b/Master/texmf-dist/source/latex/expl3/expl3.dtx @@ -37,7 +37,7 @@ \RequirePackage{l3names} %</driver|package> %\fi -\GetIdInfo$Id: expl3.dtx 1982 2010-07-13 07:16:14Z joseph $ +\GetIdInfo$Id: expl3.dtx 1987 2010-07-25 14:55:46Z joseph $ {L3 Experimental code bundle wrapper}% %\iffalse %<*driver> @@ -317,7 +317,7 @@ % \item[stream] an input or output stream (for reading from or writing % to, respectively); % \item[bool] either true or false (the \LaTeX3 implementation does -% not use \cs{iftrue} or \cs{ iffalse}). +% not use \cs{iftrue} or \cs{iffalse}). %\end{description} % When the \m{type} and \m{module} are identical (as often happens in % the more basic modules) the \m{module} part is often omitted for @@ -921,6 +921,7 @@ l3xref, l3file, l3fp, + l3luatex, } \RequirePackage{calc} % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/expl3/l3.ins b/Master/texmf-dist/source/latex/expl3/l3.ins deleted file mode 100644 index d15965fbda3..00000000000 --- a/Master/texmf-dist/source/latex/expl3/l3.ins +++ /dev/null @@ -1,121 +0,0 @@ - -\input docstrip.tex -\askforoverwritefalse - -\preamble - - -EXPERIMENTAL CODE - -Do not distribute this file without also distributing the -source files specified above. - -Do not distribute a modified version of this file. - - -\endpreamble -% stop docstrip adding \endinput -\postamble -\endpostamble - -\keepsilent - -% wrapper package for the expl3 bundle -\generate{\file{expl3.sty}{\from{expl3.dtx}{package}}} - - -% l3names.sty sets up the naming scheme for TeX primitives. -\generate{\file{l3names.sty}{\from{l3names.dtx}{package}}} - - - -% Define some basic commands to get us started with the new -% programming style. -\generate{\file{l3basics.sty}{\from{l3basics.dtx}{package,trace}}} - - -% Define some basic commands that check various conditions -% related to defining commands eg defined/undefined global/local -% Not sure how much of this really makes sense as a package, but... -\generate{\file{l3chk.sty}{\from{l3chk.dtx}{package,trace}}} - - -%% toks register handling (can be compiled with check module) -\generate{\file{l3toks.sty}{\from{l3toks.dtx}{package,trace}}} - - -%% token lists -\generate{\file{l3tl.sty}{\from{l3tl.dtx}{package,trace}}} - - -%% LaTeX3 expansion module -\generate{\file{l3expan.sty}{\from{l3expan.dtx}{package,trace}}} - - -%% LaTeX3 quarks. -\generate{\file{l3quark.sty}{\from{l3quark.dtx}{package,trace}}} - - -%% LaTeX3 sequences. -\generate{\file{l3seq.sty}{\from{l3seq.dtx}{package,trace}}} - - -%% LaTeX3 clists. -\generate{\file{l3clist.sty}{\from{l3clist.dtx}{package,trace}}} - - -%% LaTeX3 property lists. -\generate{\file{l3prop.sty}{\from{l3prop.dtx}{package,trace}}} - - -%% LaTeX3 fake integer macros. --- this is still needed in places such as xor !!! -\generate{\file{l3num.sty}{\from{l3num.dtx}{package,trace}}} - -%% LaTeX3 integer registers. (can be compiled with check module) -\generate{\file{l3int.sty}{\from{l3int.dtx}{package,trace}}} - -%% LaTeX3 integer expressions. -\generate{\file{l3intexpr.sty}{\from{l3intexpr.dtx}{package,trace}}} - - -%% LaTeX3 skip registers. -\generate{\file{l3skip.sty}{\from{l3skip.dtx}{package,trace}}} - - -%% LaTeX3 precompilation -\generate{\file{l3precom.sty}{\from{l3precom.dtx}{package,precompile,trace}}} - -%% LaTeX3 I/O module. -\generate{\file{l3io.sty}{\from{l3io.dtx}{package,trace}}} - -%% LaTeX3 program control structures (loops, booleans, ...) -\generate{\file{l3prg.sty}{\from{l3prg.dtx}{package}}} - -%% LaTeX3 box module -\generate{\file{l3box.sty}{\from{l3box.dtx}{package}}} - -%% LaTeX3 messages -\generate{\file{l3msg.sty}{\from{l3msg.dtx}{package}}} - -%% LaTeX3 tokens -\generate{\file{l3token.sty}{\from{l3token.dtx}{package}}} - -%% LaTeX3 cross references -\generate{\file{l3xref.sty}{\from{l3xref.dtx}{package}}} -%%\generate{\file{l3xref-test.tex}{\from{l3xref.dtx}{testfile}}} - -%% LaTeX3 calc module -\generate{\file{l3calc.sty}{\from{l3calc.dtx}{package}}} - -%% LaTeX3 keyval modules -\generate{\file{l3keyval.sty}{\from{l3keyval.dtx}{package}}} -\generate{\file{l3keys.sty}{\from{l3keys.dtx}{package}}} - -%% LaTeX3 file loading -\generate{\file{l3file.sty}{\from{l3file.dtx}{package}}} - -%% LaTeX3 floating point unit -\generate{\file{l3fp.sty}{\from{l3fp.dtx}{package}}} - - -\endbatchfile diff --git a/Master/texmf-dist/source/latex/expl3/l3doc.dtx b/Master/texmf-dist/source/latex/expl3/l3doc.dtx index e56cd330ecc..df4cdf0ab5f 100644 --- a/Master/texmf-dist/source/latex/expl3/l3doc.dtx +++ b/Master/texmf-dist/source/latex/expl3/l3doc.dtx @@ -77,7 +77,7 @@ Do not distribute a modified version of this file. % \end{macrocode} % %<*driver|class> -\GetIdInfo$Id: l3doc.dtx 1890 2010-04-11 03:37:15Z will $ +\GetIdInfo$Id: l3doc.dtx 1987 2010-07-25 14:55:46Z joseph $ {L3 Experimental documentation class} %</driver|class> % @@ -558,6 +558,11 @@ Do not distribute a modified version of this file. \if b\expandafter\@car\f@series\@nil\boldmath\fi $\m@th\varepsilon$-\TeX } +\providecommand*\IniTeX{Ini\TeX} +\providecommand*\Lua{Lua} +\providecommand*\LuaTeX{\Lua\TeX} +\providecommand*\pdfTeX{pdf\TeX} +\RequirePackage{graphicx} \cs_if_free:NT \XeTeX { \cs_new_protected_nopar:Npn \XeTeX {X\kern-.125em\lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\TeX} @@ -700,7 +705,9 @@ Do not distribute a modified version of this file. % the argument. % \end{arguments} % \begin{macrocode} -\cs_set_nopar:Npn \function_aux:n #1 { +\group_begin: +\char_make_other:N \| +\cs_gset_nopar:Npn \function_aux:n #1 { \cs_set_nopar:Npn \nextnewline{\cs_gset_nopar:Npn\nextnewline{\\}} \tl_gset_eq:NN \g_doc_macro_tl \c_empty_tl \bigskip\endgraf\noindent\ttfamily @@ -711,6 +718,7 @@ Do not distribute a modified version of this file. \endtabular \group_end: } +\group_end: % \end{macrocode} % \end{macro} % \end{environment} @@ -720,7 +728,9 @@ Do not distribute a modified version of this file. % This function reads in a "|"-separated list, passing each item to % the auxiliary function "\doc_showmacro_aux:w". % \begin{macrocode} -\cs_set_nopar:Npn \doc_showmacro:w #1 | { +\group_begin: +\char_make_other:N \| +\cs_gset_nopar:Npn \doc_showmacro:w #1 | { \tl_if_blank:nTF {#1} { \use_none:n }{ @@ -728,6 +738,7 @@ Do not distribute a modified version of this file. \peek_meaning:NTF \q_stop { \use_none:n } { \doc_showmacro:w } } } +\group_end: % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex/expl3/l3format.ins b/Master/texmf-dist/source/latex/expl3/l3format.ins deleted file mode 100644 index fc3e62d85f0..00000000000 --- a/Master/texmf-dist/source/latex/expl3/l3format.ins +++ /dev/null @@ -1,81 +0,0 @@ - -\input docstrip.tex -\askforoverwritefalse - -\preamble - - -EXPERIMENTAL CODE - -Do not distribute this file without also distributing the -source files specified above. - -Do not distribute a modified version of this file. - - -\endpreamble -% stop docstrip adding \endinput -\postamble -\endpostamble - -\keepsilent - -% generate the format file -\generate{% - \file{latex3.ltx}{% - \from{l3names.dtx}{initex} % The naming conventions - \from{l3basics.dtx}{initex} % Initialisations - \from{l3expan.dtx}{initex} % Controlling expansion of arguments - \from{l3tl.dtx}{initex} % token list variables - \from{l3intexpr.dtx}{initex} % - \from{l3quark.dtx}{initex} % quarks - \from{l3seq.dtx}{initex} % Sequences and stacks -% - \from{l3alloc.dtx}{initex} % Register allocations -% - \from{l3toks.dtx}{initex} % dealing with token registers - \from{l3int.dtx}{initex} % dealing with integer registers - \from{l3prg.dtx}{initex} % Program control structures - \from{l3clist.dtx}{initex} % Comma separated lists - \from{l3token.dtx}{initex} % token investigation - \from{l3prop.dtx}{initex} % property lists - \from{l3msg.dtx}{initex} % setting up for user communication - \from{l3io.dtx}{initex} % dealing with I/O - \from{l3skip.dtx}{initex} % dealing with skip registers - \from{l3box.dtx}{initex} % dealing with box registers - \from{l3keyval.dtx}{initex} % - \from{l3keys.dtx}{initex} % -% -% \from{l3precom.dtx}{initex,precompile} % -% - \from{l3calc.dtx}{initex} % - \from{l3xref.dtx}{initex} % Cross references - \from{l3file.dtx}{initex} % file loading -% - \from{l3vers.dtx}{initex} % Version information -% -% -% \from{l3chk.dtx}{initex} % Checking functions -% - \from{l3final.dtx}{initex} % Final wrap-up - } -} - -% generate higher-level material -\generate{% - \file{xparse.ltx}{\from{xparse.dtx}{initex}} - \file{xtemplate.ltx}{\from{xtemplate.dtx}{initex}} -} - -\Msg{} -\Msg{*************************************} -\Msg{*} -\Msg{* Now run (PDF)INITEX on lbase.ltx} -\Msg{*} -\Msg{* On an up to date system, run } -\Msg{* pdftex -ini -etex *latex3.ltx } -\Msg{*} -\Msg{*************************************} -\Msg{} - -\endbatchfile diff --git a/Master/texmf-dist/source/latex/expl3/l3fp.dtx b/Master/texmf-dist/source/latex/expl3/l3fp.dtx index 7b3b63ba16f..bb64842ee90 100644 --- a/Master/texmf-dist/source/latex/expl3/l3fp.dtx +++ b/Master/texmf-dist/source/latex/expl3/l3fp.dtx @@ -35,7 +35,7 @@ \RequirePackage{l3names} %</driver|package> %\fi -\GetIdInfo$Id: l3fp.dtx 1979 2010-07-08 19:51:19Z joseph $ +\GetIdInfo$Id: l3fp.dtx 1985 2010-07-18 09:05:56Z joseph $ {L3 Experimental floating-point operations} %\iffalse %<*driver> @@ -2228,7 +2228,7 @@ % When reaching the digit to check for rounding, the discards are used % to indicate if there is an exact half to take into account. When the % rounding takes place without an exact half, things are the same as -% for the \enquote{away from zero} approach. When rounding an exact +% for the `away from zero' approach. When rounding an exact % half, there is an odd/even test before applying any modification. % \begin{macrocode} \cs_new_protected_nopar:cpn { fp_round_half-even: } { diff --git a/Master/texmf-dist/source/latex/expl3/l3luatex.dtx b/Master/texmf-dist/source/latex/expl3/l3luatex.dtx new file mode 100644 index 00000000000..471c573efd3 --- /dev/null +++ b/Master/texmf-dist/source/latex/expl3/l3luatex.dtx @@ -0,0 +1,432 @@ +% \iffalse +%% File: l3fp.dtx Copyright (C) 2010 LaTeX3 project +%% +%% It may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License (LPPL), either version 1.3c of this +%% license or (at your option) any later version. The latest version +%% of this license is in the file +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This file is part of the ``expl3 bundle'' (The Work in LPPL) +%% and all files in that bundle must be distributed together. +%% +%% The released version of this bundle is available from CTAN. +%% +%% ----------------------------------------------------------------------- +%% +%% The development version of the bundle can be found at +%% +%% http://www.latex-project.org/svnroot/experimental/trunk/ +%% +%% for those people who are interested. +%% +%%%%%%%%%%% +%% NOTE: %% +%%%%%%%%%%% +%% +%% Snapshots taken from the repository represent work in progress and may +%% not work or may contain conflicting material! We therefore ask +%% people _not_ to put them into distributions, archives, etc. without +%% prior consultation with the LaTeX Project Team. +%% +%% ----------------------------------------------------------------------- +%<*driver|package> +\RequirePackage{l3names} +%</driver|package> +%\fi +\GetIdInfo$Id: l3luatex.dtx 1985 2010-07-18 09:05:56Z joseph $ + {L3 Experimental LuaTeX functions} +%\iffalse +%<*driver> +%\fi +\ProvidesFile{\filename.\filenameext} + [\filedate\space v\fileversion\space\filedescription] +%\iffalse +\documentclass[full]{l3doc} +\begin{document} + \DocInput{l3fp.dtx} +\end{document} +%</driver> +% \fi +% +% \title{The \textsf{l3luatex} package\thanks{This file +% has version number \fileversion, last +% revised \filedate.}\\ +% \LuaTeX-specific functions} +% \author{\Team} +% \date{\filedate} +% \maketitle +% +%\begin{documentation} +% +%\section{Breaking out to \Lua} +% +% The \LuaTeX\ engine provides access to the \Lua\ programming language, +% and with it access to the 'internals' of \TeX. In order to use +% this within the framework provided here, two functions are available. +% When used with \pdfTeX\ or \XeTeX these will raise an error: use +% \cs{engine_if_luatex:T} to avoid this. Details of coding the \LuaTeX\ +% engine are detailed in the \LuaTeX\ manual. +% +%\begin{function}{ \lua_now:x / (EXP) } +% \begin{syntax} +% \cs{lua_now:x} \Arg{token list} +% \end{syntax} +% The \meta{token list} is fully expandable using the current +% applicable \TeX\ category codes: this will include converting line +% ends to spaces in the usual \TeX\ manner. The resulting +% \meta{Lua input} is passed to the Lua interpreter for processing. +% Each \cs{lua_now:x} block is treated by Lua as a separate chunk. +% The Lua interpreter will execute the \meta{Lua input} immediately, +% and in an expandable manner. +%\end{function} +% +%\begin{function}{ \lua_shipout:x / (EXP) } +% \begin{syntax} +% \cs{lua_shipout:x} \Arg{token list} +% \end{syntax} +% The \meta{token list} is fully expandable using the current +% applicable \TeX\ category codes: this will include converting line +% ends to spaces in the usual \TeX\ manner. The resulting +% \meta{Lua input} is passed to the Lua interpreter for processing. +% Each \cs{lua_now:x} block is treated by Lua as a separate chunk. +% The Lua interpreter will execute the \meta{Lua input} during the +% page-building routine. (At a \TeX\ level, the \meta{Lua input} is +% stored as a 'whatsit'.) +%\end{function} +% +%\section{Category code tables} +% +% As well as providing methods to break out into \Lua, there are +% places where additional \LaTeX3 functions are provided by the +% \LuaTeX\ engine. In particular, \LuaTeX\ provides category code +% tables. These can be used to ensure that a set of category codes +% are in force in a more robust way than is possible with other +% engines. These are therefore used by \cs{ExplSyntaxOn} and +% \pkg{ExplSyntaxOff} when using the \LuaTeX\ engine. +% +%\begin{function}{ \cctab_new:N } +% \begin{syntax} +% \cs{cctab_new:N} \meta{category code table} +% \end{syntax} +% Creates a new category code table, initially with the codes as +% used by \IniTeX. +%\end{function} +% +%\begin{function}{ \cctab_gset:Nn } +% \begin{syntax} +% \cs{cctab_gset:Nn} \meta{category code table} +% \Arg{category code set up} +% \end{syntax} +% Sets the \meta{category code table} to apply the category codes +% which apply when the prevailing regime is modified by the +% \meta{category code set up}. Thus within a standard code block +% the starting point will be the code applied by \cs{c_code_cctab}. +% The assignment of the table is global: the underlying primitive does +% not respect grouping. +%\end{function} +% +%\begin{function}{ \cctab_begin:N } +% \begin{syntax} +% \cs{cctab_begin:N} \meta{category code table} +% \end{syntax} +% Switches the category codes in force to those stored in the +% \meta{category code table}. The prevailing codes before the +% function is called are added to a stack, for use with +% \cs{cctab_end:}. +%\end{function} +% +%\begin{function}{ \cctab_end: } +% \begin{syntax} +% \cs{cctab_end:} +% \end{syntax} +% Ends the scope of a \meta{category code table} started using +% \cs{cctab_begin:N}, retuning the codes to those in force before the +% matching \cs{cctab_begin:N} was used. +%\end{function} +% +%\begin{variable}{ \c_code_cctab } +% Category code table for the code environment. This does not include +% setting the behaviour of the line-end character, which is only +% altered by \cs{ExplSyntaxOn}. +%\end{variable} +% +%\begin{variable}{ \c_document_cctab } +% Category code table for a standard \LaTeX\ document. This does not +% include setting the behaviour of the line-end character, which is +% only altered by \cs{ExplSyntaxOff}. +%\end{variable} +% +%\begin{variable}{ \c_initex_cctab } +% Category code table as set up by \IniTeX. +%\end{variable} +% +%\begin{variable}{ \c_other_cctab } +% Category code table where all characters have category code \( 12 \) +% (other). +%\end{variable} +% +%\begin{variable}{ \c_string_cctab } +% Category code table where all characters have category code \( 12 \) +% (other) with the exception of spaces, which have category code +% \( 10 \) (space). +%\end{variable} +% +%\end{documentation} +% +%\begin{implementation} +% +%\section{Implementation} +% +% Announce and ensure that the required packages are loaded. +% \begin{macrocode} +%<*package> +\ProvidesExplPackage + {\filename}{\filedate}{\fileversion}{\filedescription} +\package_check_loaded_expl: +%</package> +%<*initex|package> +% \end{macrocode} +% +%\begin{macro}{\lua_now:x} +%\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 \luatex_latelua:D + } + { + \cs_new:Npn \lua_now:x #1 { \lua_wrong_engine: } + \cs_new:Npn \lua_shipout:x #1 { \lua_wrong_engine: } + } +\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} +% +%\subsection{Category code tables} +% +%\begin{macro}{\g_cctab_allocate_int} +%\begin{macro}{\g_cctab_stack_int} +%\begin{macro}{\g_cctab_stack_seq} +% To allocate category code tables, both the read-only and stack +% tables need to be followed. There is also a sequence stack for the +% dynamic tables themselves. +% \begin{macrocode} +\int_new:N \g_cctab_allocate_int +\int_set:Nn \g_cctab_allocate_int { -1 } +\int_new:N \g_cctab_stack_int +\seq_new:N \g_cctab_stack_seq +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +% +%\begin{macro}{\cctab_new:N} +% Creating a new category code table is done slightly differently +% from other registers. Low-numbered tables are more efficiently-stored +% than high-numbered ones. There is also a need to have a stack of +% flexible tables as well as the set of read-only ones. To satisfy both +% of these requirements, odd numbered tables are used for read-only +% tables, and even ones for the stack. Here, therefore, the odd numbers +% are allocated. +% \begin{macrocode} +\cs_new_protected_nopar:Npn \cctab_new:N #1 { + \cs_if_free:NTF #1 + { + \int_gadd:Nn \g_cctab_allocate_int { 2 } + \int_compare:nNnTF + { \g_cctab_allocate_int } < { \c_allocate_max_tl + 1 } + { + \tex_global:D \tex_mathchardef:D #1 \g_cctab_allocate_int + \luatex_initcatcodetable:D #1 + } + { + \msg_kernel_error:nnx { code } { out-of-registers } { cctab } + } + } + { + \msg_kernel_error:nnx { code } { variable-already-defined } + { \token_to_str:N #1 } + } +} +\luatex_if_engine:F { + \cs_set_protected_nopar:Npn \cctab_new:N #1 { \lua_wrong_engine: } +} +%<*package> +\luatex_if_engine:T { + \cs_set_protected_nopar:Npn \cctab_new:N #1 + { + \newcatcodetable #1 + \luatex_initcatcodetable:D #1 + } +} +%</package> +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\cctab_begin:N} +%\begin{macro}{\cctab_end:} +%\begin{macro}{\l_cctab_tmp_tl} +% The aim here is to ensure that the saved tables are read-only. This is +% done by using a stack of tables which are not read only, and actually +% having them as 'in use' copies. +% \begin{macrocode} +\cs_new_protected_nopar:Npn \cctab_begin:N #1 { + \seq_gpush:Nx \g_cctab_stack_seq { \tex_the:D \luatex_catcodetable:D } + \luatex_catcodetable:D #1 + \int_gadd:Nn \g_cctab_stack_int { 2 } + \int_compare:nNnT { \g_cctab_stack_int } > { 268435453 } + { \msg_kernel_error:nn { code } { cctab-stack-full } } + \luatex_savecatcodetable:D \g_cctab_stack_int + \luatex_catcodetable:D \g_cctab_stack_int +} +\cs_new_protected_nopar:Npn \cctab_end: { + \int_gsub:Nn \g_cctab_stack_int { 2 } + \seq_gpop:NN \g_cctab_stack_seq \l_cctab_tmp_tl + \quark_if_no_value:NT \l_cctab_tmp_tl + { \tl_set:Nn \l_cctab_tmp_tl { 0 } } + \luatex_catcodetable:D \l_cctab_tmp_tl \scan_stop: +} +\luatex_if_engine:F { + \cs_set_protected_nopar:Npn \cctab_begin:N #1 { \lua_wrong_engine: } + \cs_set_protected_nopar:Npn \cctab_end: { \lua_wrong_engine: } +} +%<*package> +\luatex_if_engine:T { + \cs_set_protected_nopar:Npn \cctab_begin:N #1 + { \BeginCatcodeRegime #1 } + \cs_set_protected_nopar:Npn \cctab_end: + { \EndCatcodeRegime } +} +%</package> +\tl_new:N \l_cctab_tmp_tl +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +% +%\begin{macro}{\cctab_gset:Nn} +% Category code tables are always global, so only one version is needed. +% The set up here is simple, and means that at the point of use there is +% no need to worry about escaping category codes. +% \begin{macrocode} +\cs_new_protected:Npn \cctab_gset:Nn #1#2 { + \group_begin: + #2 + \luatex_savecatcodetable:D #1 + \group_end: +} +\luatex_if_engine:F { + \cs_set_protected_nopar:Npn \cctab_gset:Nn #1#2 { \lua_wrong_engine: } +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\c_code_cctab} +%\begin{macro}{\c_document_cctab} +%\begin{macro}{\c_initex_cctab} +%\begin{macro}{\c_other_cctab} +%\begin{macro}{\c_string_cctab} +% Creating category code tables is easy using the function above. +% The \texttt{other} and \texttt{string} ones are done by completely +% ignoring the existing codes as this makes life a lot less complex. The +% table for \pkg{expl3} category codes is always needed, whereas when in +% package mode the rest can be copied from the existing \LaTeXe\ package +% \pkg{luatex}. +% \begin{macrocode} +\luatex_if_engine:T { + \cctab_new:N \c_code_cctab + \cctab_gset:Nn \c_code_cctab { } +} +%<*package> +\luatex_if_engine:T { + \cs_new_eq:NN \c_document_cctab \CatcodeTableLaTeX + \cs_new_eq:NN \c_initex_cctab \CatcodeTableIniTeX + \cs_new_eq:NN \c_other_cctab \CatcodeTableOther + \cs_new_eq:NN \c_string_cctab \CatcodeTableString +} +%</package> +%<*!package> +\luatex_if_engine:T { + \cctab_new:N \c_document_cctab + \cctab_new:N \c_other_cctab + \cctab_new:N \c_string_cctab + \cctab_gset:Nn \c_document_cctab + { + \char_make_space:n { 9 } + \char_make_space:n { 32 } + \char_make_other:n { 58 } + \char_make_subscript:n { 95 } + \char_make_active:n { 126 } + } + \cctab_gset:Nn \c_other_cctab + { + \prg_stepwise_inline:nnnn { 0 } { 1 } { 127 } + { \char_make_other:n {#1} } + } + \cctab_gset:Nn \c_string_cctab + { + \prg_stepwise_inline:nnnn { 0 } { 1 } { 127 } + { \char_make_other:n {#1} } + \char_make_space:n { 32 } + } +} +%</!package> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% +%\begin{macro}{\ExplSyntaxOn} +% When using \LuaTeX, \cs{ExplSyntaxOn} can be redefined to used category +% code tables. +% \begin{macrocode} +\luatex_if_engine:T { + \cs_set_protected_nopar:Npn \ExplSyntaxOn + { + \tex_ifodd:D \ExplSyntaxStatus \scan_stop: + \tex_else:D + \cs_set_protected_nopar:Npx \ExplSyntaxOff + { + \cctab_end: + \tex_endlinechar:D = + \tex_the:D \tex_endlinechar:D \scan_stop: + \cs_set_protected:Npn \ExplSyntaxOff { } + \tl_set:Nn \exp_not:N \ExplSyntaxStatus { 0 } + } + \tl_set:Nn \ExplSyntaxStatus { 1 } + \cctab_begin:N \c_code_cctab + \tex_endlinechar:D = 32 \scan_stop: + \tex_fi:D + } +} +% \end{macrocode} +%\end{macro} +% +% \begin{macrocode} +%</initex|package> +% \end{macrocode} +% +%\end{implementation} +% +%\PrintChanges +% +%\PrintIndex
\ No newline at end of file diff --git a/Master/texmf-dist/source/latex/expl3/l3names.dtx b/Master/texmf-dist/source/latex/expl3/l3names.dtx index 99b224d62c5..659cf399330 100644 --- a/Master/texmf-dist/source/latex/expl3/l3names.dtx +++ b/Master/texmf-dist/source/latex/expl3/l3names.dtx @@ -128,7 +128,7 @@ \RequirePackage{l3names} %</driver> %\fi -\GetIdInfo$Id: l3names.dtx 1981 2010-07-11 07:28:30Z will $ +\GetIdInfo$Id: l3names.dtx 1987 2010-07-25 14:55:46Z joseph $ {L3 Experimental Naming Scheme for TeX Primitives} % % @@ -299,6 +299,25 @@ } %</initex|package> % \end{macrocode} +% +%\subsection{Lua\TeX\ work} +% +% When being used as a package, managing some Lua\TeX\ primitives has to +% work correctly with other packages. This is done by loading the +% \pkg{luatex} package and making the appropriate adjustments. +% \begin{macrocode} +\def\@tempa{% + \def\@tempa{}% + \RequirePackage{luatex}% + \RequirePackage{pdftexcmds}% + \let\pdfstrcmp\pdf@strcmp +} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname directlua\endcsname\relax +\else + \expandafter\@tempa +\fi +% \end{macrocode} % % \subsection{Catcode assignments} % @@ -932,11 +951,14 @@ \name_primitive:NN \pdfnoligatures \pdf_noligatures:D % \end{macrocode} % -% We're ignoring XeTeX and LuaTeX right -% now except for a check whether they're in use: +% Only a little bit of \XeTeX\ and Lua\TeX\ at the moment. % \begin{macrocode} \name_primitive:NN \XeTeXversion \xetex_version:D +\name_primitive:NN \catcodetable \luatex_catcodetable:D \name_primitive:NN \directlua \luatex_directlua:D +\name_primitive:NN \initcatcodetable \luatex_initcatcodetable:D +\name_primitive:NN \latelua \luatex_latelua:D +\name_primitive:NN \savecatcodetable \luatex_savecatcodetable:D % \end{macrocode} % % XeTeX adds \cs{strcmp} to the set of primitives, with the same @@ -1154,7 +1176,7 @@ % as the packages in this distribution do like this: % \begin{verbatim} % \RequirePackage{l3names} -% \GetIdInfo$Id: l3names.dtx 1981 2010-07-11 07:28:30Z will $ +% \GetIdInfo$Id: l3names.dtx 1987 2010-07-25 14:55:46Z joseph $ % {L3 Experimental Box module} % \ProvidesExplPackage % {\filename}{\filedate}{\fileversion}{\filedescription} @@ -1297,6 +1319,9 @@ \tex_let:D\tex_everydisplay:D \frozen@everydisplay \tex_let:D\tex_italiccor:D \@@italiccorr \tex_let:D\tex_hyphen:D \@@hyph +\tex_let:D\luatex_catcodetable:D \luatexcatcodetable +\tex_let:D\luatex_initcatcodetable:D \luatexinitcatcodetable +\tex_let:D\luatex_savecatcodetable:D \luatexsavecatcodetable % \end{macrocode} % % \TeX\ has a nasty habit of inserting a command with the name |\par| diff --git a/Master/texmf-dist/source/latex/expl3/source3.tex b/Master/texmf-dist/source/latex/expl3/source3.tex deleted file mode 100644 index af54c2329c7..00000000000 --- a/Master/texmf-dist/source/latex/expl3/source3.tex +++ /dev/null @@ -1,414 +0,0 @@ -% \iffalse -%% File: source3.dtx Copyright (C) 1990-2009 LaTeX3 project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3c of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the ``expl3 bundle'' (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX Project Team. -%% -%% ----------------------------------------------------------------------- -%% \fi - -% This document will typeset the LaTeX3 sources as a single document. -% This will produce quite a large file (roughly ??? pages) and may -% take a long time on a slow machine. - -\documentclass{l3doc} -\listfiles - -\begin{document} - -\title{The \LaTeX3 Sources} -\author{\Team} - - -\pagenumbering{roman} -\maketitle - -\begin{abstract} - -\parindent=0pt -\parskip=\baselineskip - -\noindent This is the reference documentation for the \pkg{expl3} -programming environment. The \pkg{expl3} modules set up an experimental -naming scheme for \LaTeX\ commands, which allow the \LaTeX\ programmer -to systematically name functions and variables, and specify the argument -types of functions. - -The \TeX\ and \eTeX\ primitives are all given a new name according to -these conventions. However, in the main direct use of the primitives is -not required or encouraged: the \pkg{expl3} modules define an -independent low-level \LaTeX3 programming language. - -At present, the \pkg{expl3} modules are designed to be loaded on top of -\LaTeXe. In time, a \LaTeX3 format will be produced based on this code. -This allows the code to be used in \LaTeXe\ packages \emph{now} while a -stand-alone \LaTeX3 is developed. - -\begin{bfseries} - While \pkg{expl3} is still experimental, the bundle is now regarded as - broadly stable. The syntax conventions and functions provided are now - ready for wider use. There may still be changes to some functions, but - these will be minor when compared to the scope of \pkg{expl3}. - - New modules will be added to the distributed version of \pkg{expl3} as - they reach maturity. -\end{bfseries} - -\end{abstract} - -\clearpage - -{\def\\{:}% fix "newlines" in the ToC -\tableofcontents} - -\clearpage -\pagenumbering{arabic} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Each of the following \DocInput lines includes a file with extension -% .dtx. Each of these files may be typeset separately. For instance -% pdflatex l3box.dtx -% will typeset the source of the LaTeX3 box commands. If you use the -% Makefile, the index will be generated automatically; e.g., -% make doc F=l3box -% -% If this file is processed, each of these separate dtx files will be -% contained as a part of a single document. - -\makeatletter -\def\partname{Part} -\def\maketitle{\part{\@title}} -\let\thanks\@gobble -\let\DelayPrintIndex\PrintIndex -\let\PrintIndex\@empty -\makeatother - -\part{Introduction to \pkg{expl3} and this document} - -This document is intended to act as a comprehensive reference manual -for the \pkg{expl3} language. A general guide to the \LaTeX3 -programming language is found in \href{expl3.pdf}{expl3.pdf}. - -\section{Naming functions and variables} - -\LaTeX3 does not use \texttt{@} as a ``letter'' for defining -internal macros. Instead, the symbols |_| and \texttt{:} -are used in internal macro names to provide structure. The name of -each \emph{function} is divided into logical units using \texttt{_}, -while \texttt{:} separates the \emph{name} of the function from the -\emph{argument specifier} (``arg-spec''). This describes the arguments -expected by the function. In most cases, each argument is represented -by a single letter. The complete list of arg-spec letters for a function -is referred to as the \emph{signature} of the function. - -Each function name starts with the \emph{module} to which it belongs. -Thus apart from a small number of very basic functions, all \pkg{expl3} -function names contain at least one underscore to divide the module -name from the descriptive name of the function. For example, all -functions concerned with comma lists are in module \texttt{clist} and -begin \cs{clist_}. - -Every function must include an argument specifier. For functions which -take no arguments, this will be blank and the function name will end -\texttt{:}. Most functions take one or more arguments, and use the -following argument specifiers: -\begin{description} - \item[\texttt{D}] The \texttt{D} specifier means \emph{do not use}. - All of the \TeX\ primitives are initially \cs{let} to a \texttt{D} - name, and some are then given a second name. Only the kernel - team should use anything with a \texttt{D} specifier! - \item[\texttt{N} and \texttt{n}] These mean \emph{no manipulation}, - of a single token for \texttt{N} and of a set of tokens given in - braces for \texttt{n}. Both pass the argument though exactly as - given. Usually, if you use a single token for an \texttt{n} argument, - all will be well. - \item[\texttt{c}] This means \emph{csname}, and indicates that the - argument will be turned into a csname before being used. So - So \cs{foo:c} |{ArgumentOne}| will act in the same way as \cs{foo:N} - \cs{ArgumentOne}. - \item[\texttt{V} and \texttt{v}] These mean \emph{value - of variable}. The \texttt{V} and \texttt{v} specifiers are used to - get the content of a variable without needing to worry about the - underlying \TeX\ structure containing the data. A \texttt{V} - argument will be a single token (similar to \texttt{N}), for example - \cs{foo:V} \cs{MyVariable}; on the other hand, using \texttt{v} a - csname is constructed first, and then the value is recovered, for - example \cs{foo:v} |{MyVariable}|. - \item[\texttt{o}] This means \emph{expansion once}. In general, the - \texttt{V} and \texttt{v} specifiers are favoured over \texttt{o} - for recovering stored information. However, \texttt{o} is useful - for correctly processing information with delimited arguments. - \item[\texttt{x}] The \texttt{x} specifier stands for \emph{exhaustive - expansion}: the plain \TeX\ \cs{edef}. - \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full - expansion}, and in contrast to \emph{x} stops at the first - non-expandable item without trying to execute it. - \item[\texttt{T} and \texttt{F}] For logic tests, there are the branch - specifiers \texttt{T} (\emph{true}) and \texttt{F} (\emph{false}). - Both specifiers treat the input in the same way as \texttt{n} (no - change), but make the logic much easier to see. - \item[\texttt{p}] The letter \texttt{p} indicates \TeX\ - \emph{parameters}. Normally this will be used for delimited - functions as \pkg{expl3} provides better methods for creating simple - sequential arguments. - \item[\texttt{w}] Finally, there is the \texttt{w} specifier for - \emph{weird} arguments. This covers everything else, but mainly - applies to delimited values (where the argument must be terminated - by some arbitrary string). -\end{description} -Notice that the argument specifier describes how the argument is -processed prior to being passed to the underlying function. For example, -\cs{foo:c} will take its argument, convert it to a control sequence and -pass it to \cs{foo:N}. - -Variables are named in a similar manner to functions, but begin with -a single letter to define the type of variable: -\begin{description} - \item[\texttt{c}] Constant: global parameters whose value should not - be changed. - \item[\texttt{g}] Parameters whose value should only be set globally. - \item[\texttt{l}] Parameters whose value should only be set locally. -\end{description} -Each variable name is then build up in a similar way to that of a -function, typically starting with the module\footnote{The module names are - not used in case of generic scratch registers defined in the data - type modules, e.g., the - \texttt{int} module contains some scratch variables called \cs{l_tmpa_int}, - \cs{l_tmpb_int}, and so on. In such a case adding the module name up front - to denote the module - and in the back to indicate the type, as in - \cs{l_int_tmpa_int} would be very unreadable.} name -and then a descriptive part. -Variables end with a short identifier to show the variable type: -\begin{description} - \item[\texttt{bool}] Either true or false. - \item[\texttt{box}] Box register. - \item[\texttt{clist}] Comma separated list. - \item[\texttt{dim}] `Rigid' lengths. - \item[\texttt{int}] Integer-valued count register. - \item[\texttt{num}] A `fake' integer type using only macros. Useful for - setting up allocation routines. - \item[\texttt{prop}] Property list. - \item[\texttt{skip}] `Rubber' lengths. - \item[\texttt{seq}] `Sequence': a data-type used to implement lists - (with access at both ends) and stacks. - \item[\texttt{stream}] An input or output stream (for reading from or - writing to, respectively). - \item[\texttt{tl}] Token list variables: placeholder for a token list. - \item[\texttt{toks}] Token register. -\end{description} - -\subsubsection{Terminological inexactitude} - -A word of warning. In this document, and others referring to the \pkg{expl3} -programming modules, we often refer to `variables' and `functions' as if -they were actual constructs from a real programming language. -In truth, \TeX\ is a macro processor, and functions are simply macros that -may or mayn't take arguments and expand to their replacement text. -Many of the common variables are \emph{also} macros, and if placed into the -input stream will simply expand to their definition as well~--- a `function' -with no arguments and a `token list variable' are in truth one and the same. -On the other hand, some `variables' are actually registers that must be initialised and their values set and retreived with specific functions. - -The conventions of the \pkg{expl3} code are designed to clearly separate the -ideas of `macros that contain data' and `macros that contain code', and a consistent wrapper is applied to all forms of `data' whether they be macros or actually registers. -This means that sometimes we will use phrases like `the function returns a value', when actually we just mean `the macro expands to something'. Similarly, the term `execute' might be used in place of `expand' or it might refer to the more specific case of `processing in \TeX's stomach' (if you are familiar with the \TeX{}book parlance). - -If in doubt, please ask; chances are we've been hasty in writing certain definitions and need to be told to tighten up our terminology. - -\section{Documentation conventions} - -This document is typeset with the experimental \pkg{l3doc} class; -several conventions are used to help describe the features of the code. -A number of conventions are used here to make the documentation clearer. - -Each group of related functions is given in a box. For a function with -a ``user'' name, this might read: -\begin{function}{ - \ExplSyntaxOn | - \ExplSyntaxOff - } - \begin{syntax} - "\ExplSyntaxOn" \dots\ "\ExplSyntaxOff" - \end{syntax} - The textual description of how the function works would appear here. The - syntax of the function is shown in mono-spaced text to the right of - the box. In this example, the function takes no arguments and so the - name of the function is simply reprinted. -\end{function} - -For programming functions, which use \texttt{_} and \texttt{:} in their -name there are a few additional conventions: If two related functions are given with identical names but -different argument specifiers, these are termed \emph{variants} of each -other, and the latter functions are printed in grey to show this more -clearly. They will carry out the same function but will take different -types of argument: -\begin{function}{ - \seq_new:N | - \seq_new:c - } - \begin{syntax} - "\seq_new:N" <sequence> - \end{syntax} - When a number of variants are described, the arguments are usually - illustrated only for the base function. Here, <sequence> indicates - that \cs{seq_new:N} expects the name of a sequence. From the argument - specifier, \cs{seq_new:c} also expects a sequence name, but as a - name rather than as a control sequence. Each argument given in the - illustration should be described in the following text. -\end{function} - -Some functions are fully expandable, which allows it to be used within -an \texttt{x}-type argument (in plain \TeX\ terms, inside an \cs{edef}). -These fully expandable functions are indicated in the documentation by -a star: -\begin{function}{ - \cs_to_str:N / (EXP) - } - \begin{syntax} - "\cs_to_str:N" <cs> - \end{syntax} - As with other functions, some text should follow which explains how - the function works. Usually, only the star will indicate that the - function is expandable. In this case, the function expects a <cs>, - shorthand for a <control sequence>. -\end{function} - -Conditional (\texttt{if}) functions are normally defined in three variants, with -\texttt{T}, \texttt{F} and \texttt{TF} argument specifiers. This allows -them to be used for different `true'/`false' branches, depending on -which outcome the conditional is being used to test. To indicate this -without repetition, this information is given in a shortened form: -\begin{function}{ - \xetex_if_engine: / (TF) (EXP) - } - \begin{syntax} - "\xetex_if_engine:TF" <true code> <false code> - \end{syntax} - The underlining and italic of \texttt{TF} indicates that - \cs{xetex_if_engine:T}, \cs{xetex_if_engine:F} and - \cs{xetex_if_engine:TF} are all available. Usually, the illustration - will use the \texttt{TF} variant, and so both <true code> - and <false code> will be shown. The two variant forms \texttt{T} and - \texttt{F} take only <true code> and <false code>, respectively. - Here, the star also shows that this function is expandable. - With some minor exceptions, \emph{all} conditional functions in the - \pkg{expl3} modules should be defined in this way. -\end{function} - -Variables, constants and so on are described in a similar manner: -\begin{variable}{ - \l_tmpa_tl - } - A short piece of text will describe the variable: there is no - syntax illustration in this case. -\end{variable} - -In some cases, the function is similar to one in \LaTeXe\ or plain \TeX. -In these cases, the text will include an extra `\textbf{\TeX{}hackers -note}' section: -\begin{function}{ - \token_to_str:N / (EXP) - } - \begin{syntax} - "\token_to_str:N" <token> - \end{syntax} - The normal description text. - \begin{texnote} - Detail for the experienced \TeX\ or \LaTeXe\ programmer. In this - case, it would point out that this function is the \TeX\ primitive - \cs{string}. - \end{texnote} -\end{function} - -\DisableImplementation - -\DocInput{l3names.dtx} - -\DocInput{l3basics.dtx} -\DocInput{l3expan.dtx} -\DocInput{l3prg.dtx} -\DocInput{l3quark.dtx} -\DocInput{l3token.dtx} - -\DocInput{l3int.dtx} -\DocInput{l3intexpr.dtx} -\DocInput{l3skip.dtx} - -\DocInput{l3tl.dtx} -\DocInput{l3toks.dtx} -\DocInput{l3seq.dtx} -\DocInput{l3clist.dtx} -\DocInput{l3prop.dtx} - -\DocInput{l3io.dtx} -\DocInput{l3msg.dtx} -\DocInput{l3box.dtx} -\DocInput{l3xref.dtx} -\DocInput{l3keyval.dtx} -\DocInput{l3keys.dtx} -%\DocInput{l3calc.dtx} -\DocInput{l3file.dtx} - -% \DocInput{l3precom.dtx} -% \DocInput{l3alloc.dtx} -% \DocInput{l3chk.dtx} - -\part{Implementation} -\def\maketitle{} -\EnableImplementation -\DisableDocumentation -\DocInputAgain - -%% \DocInput{l3vers.dtx} % Current version date - -\clearpage -\pagestyle{headings} - -% Make TeX shut up. -\hbadness=10000 -\newcount\hbadness -\hfuzz=\maxdimen - -\PrintChanges -\clearpage - -\begingroup -\def\endash{--} -\catcode`\-\active -\def-{\futurelet\temp\indexdash} -\def\indexdash{\ifx\temp-\endash\fi} - -\DelayPrintIndex -\endgroup - -\end{document} - - |