diff options
author | Karl Berry <karl@freefriends.org> | 2010-06-09 22:20:34 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-06-09 22:20:34 +0000 |
commit | 4b653b7509fc5880c21ce05b56562dda6e8e12f2 (patch) | |
tree | 15dd1401e402663da8d394d94b21b700fd652f7a | |
parent | c02aeef45b983ed627811c3fb323ce89b4c778d5 (diff) |
expl3 update (9jun10)
git-svn-id: svn://tug.org/texlive/trunk@18849 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/latex/expl3/expl3.pdf | bin | 498228 -> 498234 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/expl3/source3.pdf | bin | 1929015 -> 1433759 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/expl3/source3.tex (renamed from Master/texmf-dist/source/latex/expl3/source3.tex) | 0 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3.ins | 118 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3basics.dtx | 398 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3format.ins | 81 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/expl3/l3basics.sty | 80 |
7 files changed, 456 insertions, 221 deletions
diff --git a/Master/texmf-dist/doc/latex/expl3/expl3.pdf b/Master/texmf-dist/doc/latex/expl3/expl3.pdf Binary files differindex 743cd8b5a46..5c3f8c38a8d 100644 --- a/Master/texmf-dist/doc/latex/expl3/expl3.pdf +++ b/Master/texmf-dist/doc/latex/expl3/expl3.pdf diff --git a/Master/texmf-dist/doc/latex/expl3/source3.pdf b/Master/texmf-dist/doc/latex/expl3/source3.pdf Binary files differindex 7ef69f0e3a8..f8bbfe4a5c3 100644 --- a/Master/texmf-dist/doc/latex/expl3/source3.pdf +++ b/Master/texmf-dist/doc/latex/expl3/source3.pdf diff --git a/Master/texmf-dist/source/latex/expl3/source3.tex b/Master/texmf-dist/doc/latex/expl3/source3.tex index bb530ae9b02..bb530ae9b02 100644 --- a/Master/texmf-dist/source/latex/expl3/source3.tex +++ b/Master/texmf-dist/doc/latex/expl3/source3.tex 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 4d6718c0431..00000000000 --- a/Master/texmf-dist/source/latex/expl3/l3.ins +++ /dev/null @@ -1,118 +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}}} - - -\endbatchfile diff --git a/Master/texmf-dist/source/latex/expl3/l3basics.dtx b/Master/texmf-dist/source/latex/expl3/l3basics.dtx index 69e40a05f59..99712ddc497 100644 --- a/Master/texmf-dist/source/latex/expl3/l3basics.dtx +++ b/Master/texmf-dist/source/latex/expl3/l3basics.dtx @@ -35,7 +35,7 @@ \RequirePackage{l3names} %</driver|package> %\fi -\GetIdInfo$Id: l3basics.dtx 1921 2010-05-22 08:28:54Z joseph $ +\GetIdInfo$Id: l3basics.dtx 1942 2010-06-07 17:06:11Z will $ {L3 Experimental basic definitions} %\iffalse %<*driver> @@ -743,6 +743,76 @@ % expansion. % \end{function} % +% +% +% +% +% +% +% \subsection{Defining new functions using the signature} +% +% +% \begin{function}{\cs_new:Nn | +% \cs_new:Nx | +% \cs_new:cn | +% \cs_new:cx +% } +% \begin{syntax} +% "\cs_new:Nn" <cs> \Arg{code} +% \end{syntax} +% Defines a new function, making sure that <cs> is unused so far. The +% parameter text is automatically detected from the length of the +% function signature. If <cs> is missing a colon in its name, an error +% is raised. It is under the responsibility of the programmer to name +% the new function according to the rules laid out in the previous +% section. <code> is either passed literally or may be subject to +% expansion (under the "x" variants). +% \begin{texnote} +% Internally, these use \TeX's "\long". These forms are +% recommended for low-level definitions as experience has shown that "\par" +% tokens often turn up in programming situations that wouldn't have been +% expected. +% \end{texnote} +% \end{function} +% +% \begin{function}{\cs_new_nopar:Nn | +% \cs_new_nopar:Nx | +% \cs_new_nopar:cn | +% \cs_new_nopar:cx +% } +% \begin{syntax} +% "\cs_new_nopar:Nn" <cs> \Arg{code} +% \end{syntax} +% Version of the above in which "\par" is not allowed to appear within the +% argument(s) of the defined functions. +% \end{function} +% +% \begin{function}{\cs_new_protected:Nn | +% \cs_new_protected:Nx | +% \cs_new_protected:cn | +% \cs_new_protected:cx +% } +% \begin{syntax} +% "\cs_new_protected:Nn" <cs> \Arg{code} +% \end{syntax} +% Defines a function that is both robust and may contain "\par" tokens +% in the argument(s) when called. +% \end{function} +% +% \begin{function}{\cs_new_protected_nopar:Nn | +% \cs_new_protected_nopar:Nx | +% \cs_new_protected_nopar:cn | +% \cs_new_protected_nopar:cx +% } +% \begin{syntax} +% "\cs_new_protected_nopar:Nn" <cs> \Arg{code} +% \end{syntax} +% Defines a function that does not expand when inside an |x| type +% expansion. "\par" is not allowed in the argument(s) of the defined function. +% \end{function} +% +% +% % \subsection{Defining functions using primitive parameter text} % % @@ -862,6 +932,107 @@ % \end{function} % % +% \subsection{Defining functions using the signature (no checks)} +% +% As above but now detecting the parameter text from inspecting the +% signature. +% +% \begin{function}{\cs_set:Nn | +% \cs_set:Nx | +% \cs_set:cn | +% \cs_set:cx | +% } +% \begin{syntax} +% "\cs_set:Nn" <cs> \Arg{code} +% \end{syntax} +% Like "\cs_set_nopar:Nn" but allows "\par" tokens in the arguments of the +% function being defined. +% \end{function} +% +% \begin{function}{\cs_gset:Nn | +% \cs_gset:Nx | +% \cs_gset:cn | +% \cs_gset:cx | +% } +% \begin{syntax} +% "\cs_gset:Nn" <cs> \Arg{code} +% \end{syntax} +% Global variant of "\cs_set:Nn". +% \end{function} +% +% \begin{function}{\cs_set_nopar:Nn | +% \cs_set_nopar:Nx | +% \cs_set_nopar:cn | +% \cs_set_nopar:cx | +% } +% \begin{syntax} +% "\cs_set_nopar:Nn" <cs> \Arg{code} +% \end{syntax} +% Like "\cs_new_nopar:Nn" etc.\ but does not check the <cs> name. +% \end{function} +% +% \begin{function}{\cs_gset_nopar:Nn | +% \cs_gset_nopar:Nx | +% \cs_gset_nopar:cn | +% \cs_gset_nopar:cx | +% } +% \begin{syntax} +% "\cs_gset_nopar:Nn" <cs> \Arg{code} +% \end{syntax} +% Like "\cs_set_nopar:Nn" but defines the <cs> globally. +% \end{function} +% +% \begin{function}{\cs_set_protected:Nn | +% \cs_set_protected:cn | +% \cs_set_protected:Nx | +% \cs_set_protected:cx | +% } +% \begin{syntax} +% "\cs_set_protected:Nn" <cs> \Arg{code} +% \end{syntax} +% Naturally robust macro that won't expand in an |x| type argument. +% These varieties also allow |\par| tokens in the arguments of the +% function being defined. +% \end{function} +% +% \begin{function}{\cs_gset_protected:Nn | +% \cs_gset_protected:cn | +% \cs_gset_protected:Nx | +% \cs_gset_protected:cx | +% } +% \begin{syntax} +% "\cs_gset_protected:Nn" <cs> \Arg{code} +% \end{syntax} +% Global versions of the above functions. +% \end{function} +% +% \begin{function}{\cs_set_protected_nopar:Nn | +% \cs_set_protected_nopar:cn | +% \cs_set_protected_nopar:Nx | +% \cs_set_protected_nopar:cx | +% } +% \begin{syntax} +% "\cs_set_protected_nopar:Nn" <cs> \Arg{code} +% \end{syntax} +% Naturally robust macro that won't expand in an |x| type argument. +% This also comes as a |long| version. If you for some reason want to +% expand it inside an |x| type expansion, prefix it with +% |\exp_after:wN \prg_do_nothing:|. +% \end{function} +% +% \begin{function}{\cs_gset_protected_nopar:Nn | +% \cs_gset_protected_nopar:cn | +% \cs_gset_protected_nopar:Nx | +% \cs_gset_protected_nopar:cx | +% } +% \begin{syntax} +% "\cs_gset_protected_nopar:Nn" <cs> \Arg{code} +% \end{syntax} +% Global versions of the above functions. +% \end{function} +% +% +% % \subsection{Undefining functions} % % \begin{function}{ @@ -2618,11 +2789,9 @@ % Don't provide a "_p" predicate because the "_bool" is used for the % same thing. % \begin{macrocode} -\if_cs_exist:N \xetex_version:D - \cs_new_eq:NN \c_xetex_is_engine_bool \c_true_bool -\else: - \cs_new_eq:NN \c_xetex_is_engine_bool \c_false_bool -\fi: +\cs_if_exist:NTF \xetex_version:D + { \cs_new_eq:NN \c_xetex_is_engine_bool \c_true_bool } + { \cs_new_eq:NN \c_xetex_is_engine_bool \c_false_bool } \prg_new_conditional:Npnn \xetex_if_engine: {TF,T,F} { \if_bool:N \c_xetex_is_engine_bool \prg_return_true: \else: \prg_return_false: \fi: @@ -2630,11 +2799,9 @@ % \end{macrocode} % % \begin{macrocode} -\if_cs_exist:N \luatex_directlua:D - \cs_new_eq:NN \c_luatex_is_engine_bool \c_true_bool -\else: - \cs_new_eq:NN \c_luatex_is_engine_bool \c_false_bool -\fi: +\cs_if_exist:NTF \luatex_directlua:D + { \cs_new_eq:NN \c_luatex_is_engine_bool \c_true_bool } + { \cs_new_eq:NN \c_luatex_is_engine_bool \c_false_bool } \prg_set_conditional:Npnn \xetex_if_engine: {TF,T,F}{ \if_bool:N \c_xetex_is_engine_bool \prg_return_true: \else: \prg_return_false: \fi: @@ -2775,6 +2942,215 @@ % \end{macro} % % +% +% +% \subsection{Using the signature to define functions} +% +% We can now combine some of the tools we have to provide a simple +% interface for defining functions. We define some simpler functions +% with user interface |\cs_set:Nn \foo_bar:nn {#1,#2}|, i.e., the +% number of arguments is read from the signature. +% +% +% \begin{macro}{\cs_set:Nn} +% \begin{macro}{\cs_set:Nx} +% \begin{macro}{\cs_set_nopar:Nn} +% \begin{macro}{\cs_set_nopar:Nx} +% \begin{macro}{\cs_set_protected:Nn} +% \begin{macro}{\cs_set_protected:Nx} +% \begin{macro}{\cs_set_protected_nopar:Nn} +% \begin{macro}{\cs_set_protected_nopar:Nx} +% \begin{macro}{\cs_gset:Nn} +% \begin{macro}{\cs_gset:Nx} +% \begin{macro}{\cs_gset_nopar:Nn} +% \begin{macro}{\cs_gset_nopar:Nx} +% \begin{macro}{\cs_gset_protected:Nn} +% \begin{macro}{\cs_gset_protected:Nx} +% \begin{macro}{\cs_gset_protected_nopar:Nn} +% \begin{macro}{\cs_gset_protected_nopar:Nx} +% We want to define |\cs_set:Nn| as +% \begin{verbatim} +% \cs_set_protected:Npn \cs_set:Nn #1#2{ +% \cs_generate_from_arg_count:NNnn #1\cs_set:Npn +% {\cs_get_arg_count_from_signature:N #1}{#2} +% } +% \end{verbatim} +% In short, to define |\cs_set:Nn| we need just use |\cs_set:Npn|, +% everything else is the same for each variant. Therefore, we can +% make it simpler by temporarily defining a function to do this for +% us. +% \begin{macrocode} +\cs_set:Npn \cs_tmp:w #1#2#3{ + \cs_set_protected:cpx {cs_#1:#2}##1##2{ + \exp_not:N \cs_generate_from_arg_count:NNnn ##1 + \exp_after:wN \exp_not:N \cs:w cs_#1:#3 \cs_end: + {\exp_not:N\cs_get_arg_count_from_signature:N ##1}{##2} + } +} +% \end{macrocode} +% Then we define the 32 variants beginning with |N|. +% \begin{macrocode} +\cs_tmp:w {set}{Nn}{Npn} +\cs_tmp:w {set}{Nx}{Npx} +\cs_tmp:w {set_nopar}{Nn}{Npn} +\cs_tmp:w {set_nopar}{Nx}{Npx} +\cs_tmp:w {set_protected}{Nn}{Npn} +\cs_tmp:w {set_protected}{Nx}{Npx} +\cs_tmp:w {set_protected_nopar}{Nn}{Npn} +\cs_tmp:w {set_protected_nopar}{Nx}{Npx} +\cs_tmp:w {gset}{Nn}{Npn} +\cs_tmp:w {gset}{Nx}{Npx} +\cs_tmp:w {gset_nopar}{Nn}{Npn} +\cs_tmp:w {gset_nopar}{Nx}{Npx} +\cs_tmp:w {gset_protected}{Nn}{Npn} +\cs_tmp:w {gset_protected}{Nx}{Npx} +\cs_tmp:w {gset_protected_nopar}{Nn}{Npn} +\cs_tmp:w {gset_protected_nopar}{Nx}{Npx} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cs_new:Nn} +% \begin{macro}{\cs_new:Nx} +% \begin{macro}{\cs_new_nopar:Nn} +% \begin{macro}{\cs_new_nopar:Nx} +% \begin{macro}{\cs_new_protected:Nn} +% \begin{macro}{\cs_new_protected:Nx} +% \begin{macro}{\cs_new_protected_nopar:Nn} +% \begin{macro}{\cs_new_protected_nopar:Nx} +% \begin{macrocode} +\cs_tmp:w {new}{Nn}{Npn} +\cs_tmp:w {new}{Nx}{Npx} +\cs_tmp:w {new_nopar}{Nn}{Npn} +\cs_tmp:w {new_nopar}{Nx}{Npx} +\cs_tmp:w {new_protected}{Nn}{Npn} +\cs_tmp:w {new_protected}{Nx}{Npx} +\cs_tmp:w {new_protected_nopar}{Nn}{Npn} +\cs_tmp:w {new_protected_nopar}{Nx}{Npx} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Then something similar for the |c| variants. +% \begin{verbatim} +% \cs_set_protected:Npn \cs_set:cn #1#2{ +% \cs_generate_from_arg_count:cNnn {#1}\cs_set:Npn +% {\cs_get_arg_count_from_signature:c {#1}}{#2} +% } +% \end{verbatim} +% \begin{macrocode} +\cs_set:Npn \cs_tmp:w #1#2#3{ + \cs_set_protected:cpx {cs_#1:#2}##1##2{ + \exp_not:N\cs_generate_from_arg_count:cNnn {##1} + \exp_after:wN \exp_not:N \cs:w cs_#1:#3 \cs_end: + {\exp_not:N\cs_get_arg_count_from_signature:c {##1}}{##2} + } +} +% \end{macrocode} +% \begin{macro}{\cs_set:cn} +% \begin{macro}{\cs_set:cx} +% \begin{macro}{\cs_set_nopar:cn} +% \begin{macro}{\cs_set_nopar:cx} +% \begin{macro}{\cs_set_protected:cn} +% \begin{macro}{\cs_set_protected:cx} +% \begin{macro}{\cs_set_protected_nopar:cn} +% \begin{macro}{\cs_set_protected_nopar:cx} +% \begin{macro}{\cs_gset:cn} +% \begin{macro}{\cs_gset:cx} +% \begin{macro}{\cs_gset_nopar:cn} +% \begin{macro}{\cs_gset_nopar:cx} +% \begin{macro}{\cs_gset_protected:cn} +% \begin{macro}{\cs_gset_protected:cx} +% \begin{macro}{\cs_gset_protected_nopar:cn} +% \begin{macro}{\cs_gset_protected_nopar:cx} +% The 32 |c| variants. +% \begin{macrocode} +\cs_tmp:w {set}{cn}{Npn} +\cs_tmp:w {set}{cx}{Npx} +\cs_tmp:w {set_nopar}{cn}{Npn} +\cs_tmp:w {set_nopar}{cx}{Npx} +\cs_tmp:w {set_protected}{cn}{Npn} +\cs_tmp:w {set_protected}{cx}{Npx} +\cs_tmp:w {set_protected_nopar}{cn}{Npn} +\cs_tmp:w {set_protected_nopar}{cx}{Npx} +\cs_tmp:w {gset}{cn}{Npn} +\cs_tmp:w {gset}{cx}{Npx} +\cs_tmp:w {gset_nopar}{cn}{Npn} +\cs_tmp:w {gset_nopar}{cx}{Npx} +\cs_tmp:w {gset_protected}{cn}{Npn} +\cs_tmp:w {gset_protected}{cx}{Npx} +\cs_tmp:w {gset_protected_nopar}{cn}{Npn} +\cs_tmp:w {gset_protected_nopar}{cx}{Npx} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cs_new:cn} +% \begin{macro}{\cs_new:cx} +% \begin{macro}{\cs_new_nopar:cn} +% \begin{macro}{\cs_new_nopar:cx} +% \begin{macro}{\cs_new_protected:cn} +% \begin{macro}{\cs_new_protected:cx} +% \begin{macro}{\cs_new_protected_nopar:cn} +% \begin{macro}{\cs_new_protected_nopar:cx} +% \begin{macrocode} +\cs_tmp:w {new}{cn}{Npn} +\cs_tmp:w {new}{cx}{Npx} +\cs_tmp:w {new_nopar}{cn}{Npn} +\cs_tmp:w {new_nopar}{cx}{Npx} +\cs_tmp:w {new_protected}{cn}{Npn} +\cs_tmp:w {new_protected}{cx}{Npx} +\cs_tmp:w {new_protected_nopar}{cn}{Npn} +\cs_tmp:w {new_protected_nopar}{cx}{Npx} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% +% +% % \begin{macro}{\cs_if_eq_p:NN,\cs_if_eq_p:cN,\cs_if_eq_p:Nc,\cs_if_eq_p:cc} % \begin{macro}[TF]{\cs_if_eq:NN,\cs_if_eq:cN,\cs_if_eq:Nc,\cs_if_eq:cc} % Check if two control sequences are identical. 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/tex/latex/expl3/l3basics.sty b/Master/texmf-dist/tex/latex/expl3/l3basics.sty index 06aec13b63e..b0535e6833a 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3basics.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3basics.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\GetIdInfo$Id: l3basics.dtx 1921 2010-05-22 08:28:54Z joseph $ +\GetIdInfo$Id: l3basics.dtx 1942 2010-06-07 17:06:11Z will $ {L3 Experimental basic definitions} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -583,20 +583,16 @@ } } \cs_new_nopar:Npn \kernel_register_show:c { \exp_args:Nc \int_show:N } -\if_cs_exist:N \xetex_version:D - \cs_new_eq:NN \c_xetex_is_engine_bool \c_true_bool -\else: - \cs_new_eq:NN \c_xetex_is_engine_bool \c_false_bool -\fi: +\cs_if_exist:NTF \xetex_version:D + { \cs_new_eq:NN \c_xetex_is_engine_bool \c_true_bool } + { \cs_new_eq:NN \c_xetex_is_engine_bool \c_false_bool } \prg_new_conditional:Npnn \xetex_if_engine: {TF,T,F} { \if_bool:N \c_xetex_is_engine_bool \prg_return_true: \else: \prg_return_false: \fi: } -\if_cs_exist:N \luatex_directlua:D - \cs_new_eq:NN \c_luatex_is_engine_bool \c_true_bool -\else: - \cs_new_eq:NN \c_luatex_is_engine_bool \c_false_bool -\fi: +\cs_if_exist:NTF \luatex_directlua:D + { \cs_new_eq:NN \c_luatex_is_engine_bool \c_true_bool } + { \cs_new_eq:NN \c_luatex_is_engine_bool \c_false_bool } \prg_set_conditional:Npnn \xetex_if_engine: {TF,T,F}{ \if_bool:N \c_xetex_is_engine_bool \prg_return_true: \else: \prg_return_false: \fi: @@ -666,6 +662,68 @@ I~ can~ probably~ not~ help~ you~ here } } +\cs_set:Npn \cs_tmp:w #1#2#3{ + \cs_set_protected:cpx {cs_#1:#2}##1##2{ + \exp_not:N \cs_generate_from_arg_count:NNnn ##1 + \exp_after:wN \exp_not:N \cs:w cs_#1:#3 \cs_end: + {\exp_not:N\cs_get_arg_count_from_signature:N ##1}{##2} + } +} +\cs_tmp:w {set}{Nn}{Npn} +\cs_tmp:w {set}{Nx}{Npx} +\cs_tmp:w {set_nopar}{Nn}{Npn} +\cs_tmp:w {set_nopar}{Nx}{Npx} +\cs_tmp:w {set_protected}{Nn}{Npn} +\cs_tmp:w {set_protected}{Nx}{Npx} +\cs_tmp:w {set_protected_nopar}{Nn}{Npn} +\cs_tmp:w {set_protected_nopar}{Nx}{Npx} +\cs_tmp:w {gset}{Nn}{Npn} +\cs_tmp:w {gset}{Nx}{Npx} +\cs_tmp:w {gset_nopar}{Nn}{Npn} +\cs_tmp:w {gset_nopar}{Nx}{Npx} +\cs_tmp:w {gset_protected}{Nn}{Npn} +\cs_tmp:w {gset_protected}{Nx}{Npx} +\cs_tmp:w {gset_protected_nopar}{Nn}{Npn} +\cs_tmp:w {gset_protected_nopar}{Nx}{Npx} +\cs_tmp:w {new}{Nn}{Npn} +\cs_tmp:w {new}{Nx}{Npx} +\cs_tmp:w {new_nopar}{Nn}{Npn} +\cs_tmp:w {new_nopar}{Nx}{Npx} +\cs_tmp:w {new_protected}{Nn}{Npn} +\cs_tmp:w {new_protected}{Nx}{Npx} +\cs_tmp:w {new_protected_nopar}{Nn}{Npn} +\cs_tmp:w {new_protected_nopar}{Nx}{Npx} +\cs_set:Npn \cs_tmp:w #1#2#3{ + \cs_set_protected:cpx {cs_#1:#2}##1##2{ + \exp_not:N\cs_generate_from_arg_count:cNnn {##1} + \exp_after:wN \exp_not:N \cs:w cs_#1:#3 \cs_end: + {\exp_not:N\cs_get_arg_count_from_signature:c {##1}}{##2} + } +} +\cs_tmp:w {set}{cn}{Npn} +\cs_tmp:w {set}{cx}{Npx} +\cs_tmp:w {set_nopar}{cn}{Npn} +\cs_tmp:w {set_nopar}{cx}{Npx} +\cs_tmp:w {set_protected}{cn}{Npn} +\cs_tmp:w {set_protected}{cx}{Npx} +\cs_tmp:w {set_protected_nopar}{cn}{Npn} +\cs_tmp:w {set_protected_nopar}{cx}{Npx} +\cs_tmp:w {gset}{cn}{Npn} +\cs_tmp:w {gset}{cx}{Npx} +\cs_tmp:w {gset_nopar}{cn}{Npn} +\cs_tmp:w {gset_nopar}{cx}{Npx} +\cs_tmp:w {gset_protected}{cn}{Npn} +\cs_tmp:w {gset_protected}{cx}{Npx} +\cs_tmp:w {gset_protected_nopar}{cn}{Npn} +\cs_tmp:w {gset_protected_nopar}{cx}{Npx} +\cs_tmp:w {new}{cn}{Npn} +\cs_tmp:w {new}{cx}{Npx} +\cs_tmp:w {new_nopar}{cn}{Npn} +\cs_tmp:w {new_nopar}{cx}{Npx} +\cs_tmp:w {new_protected}{cn}{Npn} +\cs_tmp:w {new_protected}{cx}{Npx} +\cs_tmp:w {new_protected_nopar}{cn}{Npn} +\cs_tmp:w {new_protected_nopar}{cx}{Npx} \prg_set_conditional:Npnn \cs_if_eq:NN #1#2{p,TF,T,F}{ \if_meaning:w #1#2 \prg_return_true: \else: \prg_return_false: \fi: |