summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/latex/expl3/expl3.pdfbin498228 -> 498234 bytes
-rw-r--r--Master/texmf-dist/doc/latex/expl3/source3.pdfbin1929015 -> 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.ins118
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3basics.dtx398
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3format.ins81
-rw-r--r--Master/texmf-dist/tex/latex/expl3/l3basics.sty80
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
index 743cd8b5a46..5c3f8c38a8d 100644
--- a/Master/texmf-dist/doc/latex/expl3/expl3.pdf
+++ b/Master/texmf-dist/doc/latex/expl3/expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/expl3/source3.pdf b/Master/texmf-dist/doc/latex/expl3/source3.pdf
index 7ef69f0e3a8..f8bbfe4a5c3 100644
--- a/Master/texmf-dist/doc/latex/expl3/source3.pdf
+++ b/Master/texmf-dist/doc/latex/expl3/source3.pdf
Binary files differ
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: