summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-01-10 21:49:38 +0000
committerKarl Berry <karl@freefriends.org>2021-01-10 21:49:38 +0000
commita4410f9e5a2763c12cda6a12dd8241265fd0d169 (patch)
tree0ac81c2a979e76affdf0bb702cc166c83be06557 /Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
parent1a73c52220cf76a3e48179a1f63bc50f760ff759 (diff)
l3 (9jan21)
git-svn-id: svn://tug.org/texlive/trunk@57375 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex')
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex110
1 files changed, 65 insertions, 45 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index 73bfa9ffd80..1a33daae9a2 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -56,7 +56,7 @@
%% l3legacy.dtx (with options: `package')
%% l3deprecation.dtx (with options: `package,kernel')
%%
-%% Copyright (C) 1990-2020 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -69,7 +69,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2020-12-07}%
+\def\ExplFileDate{2021-01-09}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -7582,10 +7582,14 @@
\__kernel_tl_gset:Nx \g__sys_backend_tl
{
\sys_if_engine_xetex:TF
- { xdvipdfmx }
+ { xetex }
{
\sys_if_output_pdf:TF
- { pdfmode }
+ {
+ \sys_if_engine_pdftex:TF
+ { pdftex }
+ { luatex }
+ }
{ dvips }
}
}
@@ -12486,48 +12490,46 @@
\group_begin:
\cs_set_protected:Npn \__keyval_tmp:NN #1#2
{
- \cs_new:Npn \keyval_parse:NNn ##1 ##2 ##3
- { \__keyval_loop_active:NNw ##1 ##2 \s__keyval_mark ##3 #1 \s__keyval_tail #1 }
- \cs_new:Npn \__keyval_loop_active:NNw ##1 ##2 ##3 #1
+ \cs_new:Npn \keyval_parse:nnn ##1 ##2 ##3
+ { \__keyval_loop_active:nnw {##1} {##2} \s__keyval_mark ##3 #1 \s__keyval_tail #1 }
+ \cs_new_eq:NN \keyval_parse:NNn \keyval_parse:nnn
+ \cs_new:Npn \__keyval_loop_active:nnw ##1 ##2 ##3 #1
{
\__keyval_if_recursion_tail:w ##3
\__keyval_end_loop_active:w \s__keyval_tail
- \__keyval_loop_other:NNw ##1 ##2 ##3 , \s__keyval_tail ,
- \__keyval_loop_active:NNw ##1 ##2 \s__keyval_mark
+ \__keyval_loop_other:nnw {##1} {##2} ##3 , \s__keyval_tail ,
}
- \cs_new:Npn \__keyval_split_other:w ##1 = ##2 \s__keyval_mark ##3 ##4 \s__keyval_stop
+ \cs_new:Npn \__keyval_split_other:w ##1 = ##2 \s__keyval_mark ##3
{ ##3 ##1 \s__keyval_stop \s__keyval_mark ##2 }
- \cs_new:Npn \__keyval_split_active:w ##1 #2 ##2 \s__keyval_mark ##3 ##4 \s__keyval_stop
+ \cs_new:Npn \__keyval_split_active:w ##1 #2 ##2 \s__keyval_mark ##3
{ ##3 ##1 \s__keyval_stop \s__keyval_mark ##2 }
- \cs_new:Npn \__keyval_loop_other:NNw ##1 ##2 ##3 ,
+ \cs_new:Npn \__keyval_loop_other:nnw ##1 ##2 ##3 ,
{
\__keyval_if_recursion_tail:w ##3
\__keyval_end_loop_other:w \s__keyval_tail
\__keyval_split_active:w ##3 \s__keyval_nil
\s__keyval_mark \__keyval_split_active_auxi:w
#2 \s__keyval_mark \__keyval_clean_up_active:w
- \s__keyval_stop
- ##1 ##2
- \__keyval_loop_other:NNw ##1 ##2 \s__keyval_mark
+ {##1} {##2}
+ \s__keyval_mark
}
\cs_new:Npn \__keyval_split_active_auxi:w ##1 \s__keyval_stop
{
\__keyval_split_other:w ##1 \s__keyval_nil
\s__keyval_mark \__keyval_misplaced_equal_after_active_error:w
= \s__keyval_mark \__keyval_split_active_auxii:w
- \s__keyval_stop
}
\cs_new:Npn \__keyval_split_active_auxii:w
##1 \s__keyval_nil \s__keyval_mark \__keyval_misplaced_equal_after_active_error:w
\s__keyval_stop \s__keyval_mark
- { \__keyval_trim:nN { ##1 } \__keyval_split_active_auxiii:w }
+ ##2 \s__keyval_nil #2 \s__keyval_mark \__keyval_clean_up_active:w
+ { \__keyval_trim:nN {##1} \__keyval_split_active_auxiii:w ##2 \s__keyval_nil }
\cs_new:Npn \__keyval_split_active_auxiii:w ##1 ##2 \s__keyval_nil
{
\__keyval_split_active:w ##2 \s__keyval_nil
\s__keyval_mark \__keyval_misplaced_equal_in_split_error:w
#2 \s__keyval_mark \__keyval_split_active_auxiv:w
- \s__keyval_stop
- { ##1 }
+ {##1}
}
\cs_new:Npn \__keyval_split_active_auxiv:w
##1 \s__keyval_nil \s__keyval_mark \__keyval_misplaced_equal_in_split_error:w
@@ -12536,90 +12538,93 @@
\__keyval_split_other:w ##1 \s__keyval_nil
\s__keyval_mark \__keyval_misplaced_equal_in_split_error:w
= \s__keyval_mark \__keyval_split_active_auxv:w
- \s__keyval_stop
}
\cs_new:Npn \__keyval_split_active_auxv:w
##1 \s__keyval_nil \s__keyval_mark \__keyval_misplaced_equal_in_split_error:w
\s__keyval_stop \s__keyval_mark
- { \__keyval_trim:nN { ##1 } \__keyval_pair:nnNN }
+ { \__keyval_trim:nN { ##1 } \__keyval_pair:nnnn }
\cs_new:Npn \__keyval_clean_up_active:w
##1 \s__keyval_nil \s__keyval_mark \__keyval_split_active_auxi:w \s__keyval_stop \s__keyval_mark
{
\__keyval_split_other:w ##1 \s__keyval_nil
\s__keyval_mark \__keyval_split_other_auxi:w
= \s__keyval_mark \__keyval_clean_up_other:w
- \s__keyval_stop
}
\cs_new:Npn \__keyval_split_other_auxi:w ##1 \s__keyval_stop
{ \__keyval_trim:nN { ##1 } \__keyval_split_other_auxii:w }
- \cs_new:Npn \__keyval_split_other_auxii:w ##1 ##2 \s__keyval_nil
+ \cs_new:Npn \__keyval_split_other_auxii:w
+ ##1 ##2 \s__keyval_nil = \s__keyval_mark \__keyval_clean_up_other:w
{
\__keyval_split_other:w ##2 \s__keyval_nil
\s__keyval_mark \__keyval_misplaced_equal_in_split_error:w
= \s__keyval_mark \__keyval_split_other_auxiii:w
- \s__keyval_stop
{ ##1 }
}
\cs_new:Npn \__keyval_split_other_auxiii:w
##1 \s__keyval_nil \s__keyval_mark \__keyval_misplaced_equal_in_split_error:w
\s__keyval_stop \s__keyval_mark
- { \__keyval_trim:nN { ##1 } \__keyval_pair:nnNN }
+ { \__keyval_trim:nN { ##1 } \__keyval_pair:nnnn }
\cs_new:Npn \__keyval_clean_up_other:w
##1 \s__keyval_nil \s__keyval_mark \__keyval_split_other_auxi:w \s__keyval_stop \s__keyval_mark
{
\__keyval_if_blank:w ##1 \s__keyval_nil \s__keyval_stop \__keyval_blank_true:w
- \s__keyval_mark \s__keyval_stop \use:n
- { \__keyval_trim:nN { ##1 } \__keyval_key:nNN }
+ \s__keyval_mark \s__keyval_stop
+ \__keyval_trim:nN { ##1 } \__keyval_key:nn
}
\cs_new:Npn \__keyval_misplaced_equal_after_active_error:w
\s__keyval_mark ##1 \s__keyval_stop \s__keyval_mark ##2 \s__keyval_nil
- \s__keyval_mark ##3 \s__keyval_nil ##4 ##5
+ = \s__keyval_mark \__keyval_split_active_auxii:w
+ \s__keyval_mark ##3 \s__keyval_nil
+ #2 \s__keyval_mark \__keyval_clean_up_active:w
{
\__kernel_msg_expandable_error:nn
{ kernel } { misplaced-equals-sign }
+ \__keyval_loop_other:nnw
}
\cs_new:Npn \__keyval_misplaced_equal_in_split_error:w
\s__keyval_mark ##1 \s__keyval_stop \s__keyval_mark ##2 \s__keyval_nil
- ##3 ##4 ##5
+ ##3 \s__keyval_mark ##4 ##5
{
\__kernel_msg_expandable_error:nn
{ kernel } { misplaced-equals-sign }
+ \__keyval_loop_other:nnw
}
\cs_new:Npn \__keyval_end_loop_other:w
\s__keyval_tail
- \__keyval_split_active:w ##1 \s__keyval_nil
- \s__keyval_mark \__keyval_split_active_auxi:w
+ \__keyval_split_active:w
+ \s__keyval_mark \s__keyval_tail
+ \s__keyval_nil \s__keyval_mark
+ \__keyval_split_active_auxi:w
#2 \s__keyval_mark \__keyval_clean_up_active:w
- \s__keyval_stop
- ##2 ##3
- \__keyval_loop_other:NNw ##4 \s__keyval_mark
- { }
+ { \__keyval_loop_active:nnw }
\cs_new:Npn \__keyval_end_loop_active:w
\s__keyval_tail
- \__keyval_loop_other:NNw ##1 , \s__keyval_tail ,
- \__keyval_loop_active:NNw ##2 \s__keyval_mark
+ \__keyval_loop_other:nnw ##1 \s__keyval_mark \s__keyval_tail , \s__keyval_tail ,
{ }
}
\char_set_catcode_active:n { `\, }
\char_set_catcode_active:n { `\= }
\__keyval_tmp:NN , =
\group_end:
-\cs_new:Npn \__keyval_pair:nnNN #1 #2 #3 #4
+\cs_new:Npn \__keyval_pair:nnnn #1 #2 #3 #4
{
\__keyval_if_blank:w \s__keyval_mark #2 \s__keyval_nil \s__keyval_stop \__keyval_blank_key_error:w
\s__keyval_mark \s__keyval_stop
\exp_not:n { #4 { #2 } { #1 } }
+ \__keyval_loop_other:nnw {#3} {#4}
}
-\cs_new:Npn \__keyval_key:nNN #1 #2 #3
+\cs_new:Npn \__keyval_key:nn #1 #2
{
\__keyval_if_blank:w \s__keyval_mark #1 \s__keyval_nil \s__keyval_stop \__keyval_blank_key_error:w
\s__keyval_mark \s__keyval_stop
\exp_not:n { #2 { #1 } }
+ \__keyval_loop_other:nnw {#2}
}
\cs_new:Npn \__keyval_if_empty:w #1 \s__keyval_mark \s__keyval_stop { }
\cs_new:Npn \__keyval_if_blank:w \s__keyval_mark #1 { \__keyval_if_empty:w \s__keyval_mark }
\cs_new:Npn \__keyval_if_recursion_tail:w \s__keyval_mark #1 \s__keyval_tail { }
-\cs_new:Npn \__keyval_blank_true:w \s__keyval_mark \s__keyval_stop \use:n #1 #2 #3 { }
+\cs_new:Npn \__keyval_blank_true:w \s__keyval_mark \s__keyval_stop \__keyval_trim:nN #1 \__keyval_key:nn
+ { \__keyval_loop_other:nnw }
\cs_new:Npn \__keyval_blank_key_error:w \s__keyval_mark \s__keyval_stop \exp_not:n #1
{
\__kernel_msg_expandable_error:nn
@@ -12642,7 +12647,6 @@
\__keyval_trim_auxiii:w
#1 \s__keyval_nil
\__keyval_trim_auxiv:w
- \s__keyval_stop
}
\cs_new:Npn \__keyval_trim_auxi:w ##1 \s__keyval_mark #1 ##2 \s__keyval_mark ##3
{
@@ -12663,8 +12667,11 @@
##1 \s__keyval_nil
\__keyval_trim_auxiii:w
}
- \cs_new:Npn \__keyval_trim_auxiv:w \s__keyval_mark ##1 \s__keyval_nil ##2 \s__keyval_stop ##3
- { ##3 { ##1 } }
+ \cs_new:Npn \__keyval_trim_auxiv:w
+ \s__keyval_mark ##1 \s__keyval_nil
+ \__keyval_trim_auxiii:w \s__keyval_nil \__keyval_trim_auxiii:w
+ ##2
+ { ##2 { ##1 } }
}
\__keyval_tmp:n { ~ }
\group_end:
@@ -30879,15 +30886,28 @@
{
\str_if_eq:nnTF {#1} { \protect }
{ \__text_purify_protect:N }
+ { \__text_purify_encoding:N #1 }
+ }
+\cs_new:Npn \__text_purify_protect:N #1
+ {
+ \__text_if_recursion_tail_stop_do:Nn #1 { \__text_purify_end:w }
+ \__text_purify_loop:w
+ }
+\cs_new:Npn \__text_purify_encoding:N #1
+ {
+ \bool_lazy_or:nnTF
+ { \cs_if_eq_p:NN #1 \@current@cmd }
+ { \cs_if_eq_p:NN #1 \@changed@cmd }
+ { \__text_purify_encoding_escape:NN }
{
\__text_if_expandable:NTF #1
{ \exp_after:wN \__text_purify_loop:w #1 }
{ \__text_purify_loop:w }
}
}
-\cs_new:Npn \__text_purify_protect:N #1
+\cs_new:Npn \__text_purify_encoding_escape:NN #1#2
{
- \__text_if_recursion_tail_stop_do:Nn #1 { \__text_purify_end:w }
+ \__text_purify_store:n {#1}
\__text_purify_loop:w
}
\cs_new_protected:Npn \text_declare_purify_equivalent:Nn #1#2