[latex3-commits] [git/LaTeX3-latex3-latex2e] develop: Update l3kernel to 2020-08-07 (1e9fb080)
Joseph Wright
joseph.wright at morningstar2.co.uk
Fri Aug 7 13:50:40 CEST 2020
Repository : https://github.com/latex3/latex2e
On branch : develop
Link : https://github.com/latex3/latex2e/commit/1e9fb0800e92358b3e4810777dab6411d0ce2132
>---------------------------------------------------------------
commit 1e9fb0800e92358b3e4810777dab6411d0ce2132
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Fri Aug 7 12:50:40 2020 +0100
Update l3kernel to 2020-08-07
>---------------------------------------------------------------
1e9fb0800e92358b3e4810777dab6411d0ce2132
texmf/tex/latex/l3kernel/expl3-code.tex | 391 ++++++++++++++++-------------
texmf/tex/latex/l3kernel/expl3-generic.tex | 2 +-
texmf/tex/latex/l3kernel/expl3.ltx | 34 ++-
texmf/tex/latex/l3kernel/expl3.sty | 32 ++-
4 files changed, 281 insertions(+), 178 deletions(-)
diff --git a/texmf/tex/latex/l3kernel/expl3-code.tex b/texmf/tex/latex/l3kernel/expl3-code.tex
index 6779946f..007e6bbf 100644
--- a/texmf/tex/latex/l3kernel/expl3-code.tex
+++ b/texmf/tex/latex/l3kernel/expl3-code.tex
@@ -69,7 +69,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -241,10 +241,9 @@
\fi
\expandafter\endgroup
\next
-\protected\def\ExplSyntaxOff{}%
\protected\edef\ExplSyntaxOff
{%
- \protected\def\ExplSyntaxOff{}%
+ \protected\def\noexpand\ExplSyntaxOff{}%
\catcode 9 = \the\catcode 9\relax
\catcode 32 = \the\catcode 32\relax
\catcode 34 = \the\catcode 34\relax
@@ -306,9 +305,7 @@
\let \tex_let:D \let
\begingroup
\long \def \__kernel_primitive:NN #1#2
- {
- \tex_global:D \tex_let:D #2 #1
- }
+ { \tex_global:D \tex_let:D #2 #1 }
\__kernel_primitive:NN \ \tex_space:D
\__kernel_primitive:NN \/ \tex_italiccorrection:D
\__kernel_primitive:NN \- \tex_hyphen:D
@@ -9509,6 +9506,7 @@
}
}
}
+\int_gset:Nn \tex_errorcontextlines:D { -1 }
\cs_new:Npn \msg_fatal_text:n #1
{
Fatal ~
@@ -9897,6 +9895,7 @@
{ \exp_not:c { #1 :nnxxxx } {##1} {##2} {##3} { } { } { } }
}
\__msg_kernel_class_new:nN { fatal } \__msg_fatal_code:nnnnnn
+ \__msg_kernel_class_new:nN { critical } \__msg_critical_code:nnnnnn
\cs_undefine:N \__kernel_msg_error:nnxx
\cs_undefine:N \__kernel_msg_error:nnx
\cs_undefine:N \__kernel_msg_error:nn
@@ -10135,13 +10134,13 @@
} { . }
}
\__kernel_msg_new:nnnn { kernel } { enable-debug }
- { To~use~'#1'~load~expl3~with~the~'enable-debug'~option. }
+ { To~use~'#1'~set~the~'enable-debug'~option. }
{
- The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
+ The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
some~internal~functions~in~expl3~have~been~appropriately~
defined.~This~only~happens~if~one~of~the~options~
- 'enable-debug',~'check-declarations'~or~'log-functions'~was~
- given~when~loading~expl3.
+ 'enable-debug',~'check-declarations'~or~'log-functions'~was~
+ given~as~an~option:~see~the~main~expl3~documentation.
}
\__kernel_msg_new:nnn { kernel } { bad-exp-end-f }
{ Misused~\exp_end_continue_f:w or~:nw }
@@ -11737,20 +11736,6 @@
#1 \\
.............
}
-\__kernel_msg_new:nnnn { kernel } { input-streams-exhausted }
- { Input~streams~exhausted }
- {
- TeX~can~only~open~up~to~16~input~streams~at~one~time.\\
- All~16~are~currently~in~use,~and~something~wanted~to~open~
- another~one.
- }
-\__kernel_msg_new:nnnn { kernel } { output-streams-exhausted }
- { Output~streams~exhausted }
- {
- TeX~can~only~open~up~to~16~output~streams~at~one~time.\\
- All~16~are~currently~in~use,~and~something~wanted~to~open~
- another~one.
- }
\__kernel_msg_new:nnnn { kernel } { unbalanced-quote-in-filename }
{ Unbalanced~quotes~in~file~name~'#1'. }
{
@@ -12513,14 +12498,11 @@
\bool_new:N \l__keys_tmp_bool
\tl_new:N \l__keys_tmpa_tl
\tl_new:N \l__keys_tmpb_tl
+\scan_new:N \s__keys_nil
+\scan_new:N \s__keys_mark
\scan_new:N \s__keys_stop
-\quark_new:N \q__keys_nil
\quark_new:N \q__keys_no_value
-\__kernel_quark_new_conditional:Nn \__keys_quark_if_nil:n { TF }
\__kernel_quark_new_conditional:Nn \__keys_quark_if_no_value:N { TF }
-\quark_new:N \q__keys_recursion_tail
-\quark_new:N \q__keys_recursion_stop
-\__kernel_quark_new_test:N \__keys_if_recursion_tail_stop:n
\cs_new_protected:Npn \keys_define:nn
{ \__keys_define:onn \l__keys_module_str }
\cs_new_protected:Npn \__keys_define:nnn #1#2#3
@@ -12549,52 +12531,49 @@
\str_if_empty:NF \l__keys_property_str
{
\__kernel_msg_error:nnxx { kernel } { key-property-unknown }
- { \l__keys_property_str } { \l_keys_path_str }
+ \l__keys_property_str \l_keys_path_str
}
}
}
\cs_new_protected:Npn \__keys_property_find:n #1
{
- \str_set:Nx \l__keys_property_str { \__keys_trim_spaces:n {#1} }
- \exp_after:wN \__keys_property_find:w \l__keys_property_str . .
- \s__keys_stop {#1}
+ \cs_set_nopar:Npx \l__keys_property_str { \__keys_trim_spaces:n { #1 } }
+ \exp_after:wN \__keys_property_find_auxi:w \l__keys_property_str
+ \s__keys_nil \__keys_property_find_auxii:w
+ . \s__keys_nil \__keys_property_find_err:w
}
-\cs_new_protected:Npn \__keys_property_find:w #1 . #2 . #3 \s__keys_stop #4
+\cs_new_protected:Npn \__keys_property_find_auxi:w #1 . #2 \s__keys_nil #3
{
- \tl_if_blank:nTF {#3}
- {
- \str_clear:N \l__keys_property_str
- \__kernel_msg_error:nnn { kernel } { key-no-property } {#4}
- }
- {
- \str_if_eq:nnTF {#3} { . }
- {
- \str_set:Nx \l_keys_path_str
- {
- \str_if_empty:NF \l__keys_module_str
- { \l__keys_module_str / }
- \tl_trim_spaces:n {#1}
- }
- \str_set:Nn \l__keys_property_str { . #2 }
- }
- {
- \str_set:Nx \l_keys_path_str { \l__keys_module_str / #1 . #2 }
- \__keys_property_search:w #3 \s__keys_stop
- }
- \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
- }
+ #3 #1 \s__keys_mark #2 \s__keys_nil #3
}
-\cs_new_protected:Npn \__keys_property_search:w #1 . #2 \s__keys_stop
+\cs_new_protected:Npn \__keys_property_find_auxii:w
+ #1 \s__keys_mark #2 \s__keys_nil \__keys_property_find_auxii:w . \s__keys_nil
+ \__keys_property_find_err:w
{
- \str_if_eq:nnTF {#2} { . }
- {
- \str_set:Nx \l_keys_path_str { \l_keys_path_str }
- \str_set:Nn \l__keys_property_str { . #1 }
- }
- {
- \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 }
- \__keys_property_search:w #2 \s__keys_stop
- }
+ \cs_set_nopar:Npx \l_keys_path_str
+ { \str_if_empty:NF \l__keys_module_str { \l__keys_module_str / } #1 }
+ \__keys_property_find_auxi:w #2 \s__keys_nil \__keys_property_find_auxiii:w . \s__keys_nil
+ \__keys_property_find_auxiv:w
+ }
+\cs_new_protected:Npn \__keys_property_find_auxiii:w #1 \s__keys_mark
+ {
+ \cs_set_nopar:Npx \l_keys_path_str { \l_keys_path_str . #1 }
+ \__keys_property_find_auxi:w
+ }
+\cs_new_protected:Npn \__keys_property_find_auxiv:w
+ #1 \s__keys_nil \__keys_property_find_auxiii:w
+ \s__keys_mark \s__keys_nil \__keys_property_find_auxiv:w
+ {
+ \cs_set_nopar:Npx \l__keys_property_str { . #1 }
+ \cs_set_nopar:Npx \l_keys_path_str
+ { \exp_after:wN \__keys_trim_spaces:n \exp_after:wN { \l_keys_path_str } }
+ \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
+ }
+\cs_new_protected:Npn \__keys_property_find_err:w
+ #1 \s__keys_nil #2 \__keys_property_find_err:w
+ {
+ \str_clear:N \l__keys_property_str
+ \__kernel_msg_error:nnn { kernel } { key-no-property } {#1}
}
\cs_new_protected:Npn \__keys_define_code:n #1
{
@@ -12604,9 +12583,8 @@
\l__keys_property_str \s__keys_stop
{ \use:c { \c__keys_props_root_str \l__keys_property_str } }
{
- \__kernel_msg_error:nnxx { kernel }
- { key-property-requires-value } { \l__keys_property_str }
- { \l_keys_path_str }
+ \__kernel_msg_error:nnxx { kernel } { key-property-requires-value }
+ \l__keys_property_str \l_keys_path_str
}
}
{ \use:c { \c__keys_props_root_str \l__keys_property_str } {#1} }
@@ -12625,7 +12603,7 @@
\__keys_cmd_set:nn { \l_keys_path_str / unknown }
{
\__kernel_msg_error:nnx { kernel } { boolean-values-only }
- { \l_keys_key_str }
+ \l_keys_key_str
}
\__keys_default_set:n { true }
}
@@ -12641,7 +12619,7 @@
\__keys_cmd_set:nn { \l_keys_path_str / unknown }
{
\__kernel_msg_error:nnx { kernel } { boolean-values-only }
- { \l_keys_key_str }
+ \l_keys_key_str
}
\__keys_default_set:n { true }
}
@@ -12660,7 +12638,7 @@
{ choice }
{
\__kernel_msg_error:nnxx { kernel } { nested-choice-key }
- { \l_keys_path_tl } { \__keys_parent:o \l_keys_path_str }
+ \l_keys_path_tl { \__keys_parent:o \l_keys_path_str }
}
{ \__keys_choice_make_aux:N #1 }
}
@@ -12670,11 +12648,11 @@
{
\cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
{ choice }
- \__keys_cmd_set:nn { \l_keys_path_str } { #1 {##1} }
+ \__keys_cmd_set:nn \l_keys_path_str { #1 {##1} }
\__keys_cmd_set:nn { \l_keys_path_str / unknown }
{
\__kernel_msg_error:nnxx { kernel } { key-choice-unknown }
- { \l_keys_path_str } {##1}
+ \l_keys_path_str {##1}
}
}
\cs_new_protected:Npn \__keys_choices_make:nn
@@ -12748,15 +12726,15 @@
{ \__keys_execute_inherit: }
{
\str_clear:N \l__keys_inherit_str
- \cs_if_exist_use:cT { \c__keys_code_root_str \l_keys_path_str } { {#1} }
+ \cs_if_exist:cT { \c__keys_code_root_str \l_keys_path_str }
+ { \__keys_execute:nn \l_keys_path_str {#1} }
}
}
\cs_new_protected:Npn \__keys_meta_make:n #1
{
\__keys_cmd_set:Vo \l_keys_path_str
{
- \exp_after:wN \keys_set:nn
- \exp_after:wN { \l__keys_module_str } {#1}
+ \exp_after:wN \keys_set:nn \exp_after:wN { \l__keys_module_str } {#1}
}
}
\cs_new_protected:Npn \__keys_meta_make:nn #1#2
@@ -12764,11 +12742,9 @@
\cs_new_protected:Npn \__keys_prop_put:Nn #1#2
{
\prop_if_exist:NF #1 { \prop_new:N #1 }
- \exp_after:wN \__keys_find_key_module:NNw
- \exp_after:wN \l__keys_tmpa_tl
- \exp_after:wN \l__keys_tmpb_tl
- \l_keys_path_str / \s__keys_stop
- \__keys_cmd_set:nx { \l_keys_path_str }
+ \exp_after:wN \__keys_find_key_module:wNN \l_keys_path_str \s__keys_stop
+ \l__keys_tmpa_tl \l__keys_tmpb_tl
+ \__keys_cmd_set:nx \l_keys_path_str
{
\exp_not:c { prop_ #2 put:Nnn }
\exp_not:N #1
@@ -12820,8 +12796,8 @@
\bool_if:NF \l__keys_no_value_bool
{
\__kernel_msg_error:nnxx { kernel } { value-forbidden }
- { \l_keys_path_str } { \l_keys_value_tl }
- \__keys_validate_cleanup:w
+ \l_keys_path_str \l_keys_value_tl
+ \use_none:nnn
}
}
\cs_new_protected:Npn \__keys_validate_required:
@@ -12829,15 +12805,14 @@
\bool_if:NT \l__keys_no_value_bool
{
\__kernel_msg_error:nnx { kernel } { value-required }
- { \l_keys_path_str }
- \__keys_validate_cleanup:w
+ \l_keys_path_str
+ \use_none:nnn
}
}
-\cs_new_protected:Npn \__keys_validate_cleanup:w #1 \cs_end: #2#3 { }
\cs_new_protected:Npn \__keys_variable_set:NnnN #1#2#3#4
{
\use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
- \__keys_cmd_set:nx { \l_keys_path_str }
+ \__keys_cmd_set:nx \l_keys_path_str
{
\exp_not:c { #2 _ #3 set:N #4 }
\exp_not:N #1
@@ -12878,7 +12853,7 @@
\cs_new_protected:cpn { \c__keys_props_root_str .choices:xn } #1
{ \exp_args:Nx \__keys_choices_make:nn #1 }
\cs_new_protected:cpn { \c__keys_props_root_str .code:n } #1
- { \__keys_cmd_set:nn { \l_keys_path_str } {#1} }
+ { \__keys_cmd_set:nn \l_keys_path_str {#1} }
\cs_new_protected:cpn { \c__keys_props_root_str .clist_set:N } #1
{ \__keys_variable_set:NnnN #1 { clist } { } n }
\cs_new_protected:cpn { \c__keys_props_root_str .clist_set:c } #1
@@ -13039,7 +13014,7 @@
\cs_new_protected:Npn \keys_set_known:nnN #1#2#3
{
\exp_args:No \__keys_set_known:nnnnN
- \l__keys_unused_clist { \q__keys_no_value } {#1} {#2} #3
+ \l__keys_unused_clist \q__keys_no_value {#1} {#2} #3
}
\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no }
\cs_new_protected:Npn \keys_set_known:nnnN #1#2#3#4
@@ -13052,11 +13027,11 @@
{
\clist_clear:N \l__keys_unused_clist
\__keys_set_known:nnn {#2} {#3} {#4}
- \tl_set:Nx #5 { \exp_not:o { \l__keys_unused_clist } }
+ \tl_set:Nx #5 { \exp_not:o \l__keys_unused_clist }
\tl_set:Nn \l__keys_unused_clist {#1}
}
\cs_new_protected:Npn \keys_set_known:nn #1#2
- { \__keys_set_known:nnn { \q__keys_no_value } {#1} {#2} }
+ { \__keys_set_known:nnn \q__keys_no_value {#1} {#2} }
\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , no }
\cs_new_protected:Npn \__keys_set_known:nnn #1#2#3
{
@@ -13081,7 +13056,7 @@
{
\exp_args:No \__keys_set_filter:nnnnnN
\l__keys_unused_clist
- { \q__keys_no_value } {#1} {#2} {#3} #4
+ \q__keys_no_value {#1} {#2} {#3} #4
}
\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
\cs_new_protected:Npn \keys_set_filter:nnnnN #1#2#3#4#5
@@ -13094,11 +13069,11 @@
{
\clist_clear:N \l__keys_unused_clist
\__keys_set_filter:nnnn {#2} {#3} {#4} {#5}
- \tl_set:Nx #6 { \exp_not:o { \l__keys_unused_clist } }
+ \tl_set:Nx #6 { \exp_not:o \l__keys_unused_clist }
\tl_set:Nn \l__keys_unused_clist {#1}
}
\cs_new_protected:Npn \keys_set_filter:nnn #1#2#3
- {\__keys_set_filter:nnnn { \q__keys_no_value } {#1} {#2} {#3} }
+ {\__keys_set_filter:nnnn \q__keys_no_value {#1} {#2} {#3} }
\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
\cs_new_protected:Npn \__keys_set_filter:nnnn #1#2#3#4
{
@@ -13168,30 +13143,41 @@
}
\str_clear:N \l__keys_module_str
\str_clear:N \l__keys_inherit_str
- \exp_after:wN \__keys_find_key_module:NNw
- \exp_after:wN \l__keys_module_str
- \exp_after:wN \l_keys_key_str
- \l_keys_path_str / \s__keys_stop
+ \exp_after:wN \__keys_find_key_module:wNN \l_keys_path_str \s__keys_stop
+ \l__keys_module_str \l_keys_key_str
\tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
\__keys_value_or_default:n {#3}
\bool_if:NTF \l__keys_selective_bool
- { \__keys_set_selective: }
- { \__keys_execute: }
+ \__keys_set_selective:
+ \__keys_execute:
\str_set:Nn \l__keys_module_str {#1}
}
\cs_generate_variant:Nn \__keys_set_keyval:nnn { o }
-\cs_new_protected:Npn \__keys_find_key_module:NNw #1#2#3 / #4 \s__keys_stop
+\cs_new_protected:Npn \__keys_find_key_module:wNN #1 \s__keys_stop #2 #3
{
- \tl_if_blank:nTF {#4}
- { \str_set:Nn #2 {#3} }
- {
- \str_put_right:Nx #1
- {
- \str_if_empty:NF #1 { / }
- #3
- }
- \__keys_find_key_module:NNw #1#2 #4 \s__keys_stop
- }
+ \__keys_find_key_module_auxi:Nw #2 #1 \s__keys_nil \__keys_find_key_module_auxii:Nw
+ / \s__keys_nil \__keys_find_key_module_auxiv:Nw #3
+ }
+\cs_new_protected:Npn \__keys_find_key_module_auxi:Nw #1 #2 / #3 \s__keys_nil #4
+ {
+ #4 #1 #2 \s__keys_mark #3 \s__keys_nil #4
+ }
+\cs_new_protected:Npn \__keys_find_key_module_auxii:Nw
+ #1 #2 \s__keys_mark #3 \s__keys_nil \__keys_find_key_module_auxii:Nw
+ {
+ \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+ \__keys_find_key_module_auxi:Nw #1 #3 \s__keys_nil \__keys_find_key_module_auxiii:Nw
+ }
+\cs_new_protected:Npn \__keys_find_key_module_auxiii:Nw #1 #2 \s__keys_mark
+ {
+ \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+ \__keys_find_key_module_auxi:Nw #1
+ }
+\cs_new_protected:Npn \__keys_find_key_module_auxiv:Nw
+ #1 #2 \s__keys_nil #3 \s__keys_mark
+ \s__keys_nil \__keys_find_key_module_auxiv:Nw #4
+ {
+ \cs_set_nopar:Npn #4 { #2 }
}
\cs_new_protected:Npn \__keys_set_selective:
{
@@ -13203,8 +13189,8 @@
}
{
\bool_if:NTF \l__keys_filtered_bool
- { \__keys_execute: }
- { \__keys_store_unused: }
+ \__keys_execute:
+ \__keys_store_unused:
}
}
\cs_new_protected:Npn \__keys_check_groups:
@@ -13217,20 +13203,20 @@
\str_if_eq:nnT {##1} {####1}
{
\bool_set_true:N \l__keys_tmp_bool
- \clist_map_break:n { \seq_map_break: }
+ \clist_map_break:n \seq_map_break:
}
}
}
\bool_if:NTF \l__keys_tmp_bool
{
\bool_if:NTF \l__keys_filtered_bool
- { \__keys_store_unused: }
- { \__keys_execute: }
+ \__keys_store_unused:
+ \__keys_execute:
}
{
\bool_if:NTF \l__keys_filtered_bool
- { \__keys_execute: }
- { \__keys_store_unused: }
+ \__keys_execute:
+ \__keys_store_unused:
}
}
\cs_new_protected:Npn \__keys_value_or_default:n #1
@@ -13272,8 +13258,7 @@
\cs_if_exist:cTF { \c__keys_code_root_str \l_keys_path_str }
{
\cs_if_exist_use:c { \c__keys_validate_root_str \l_keys_path_str }
- \cs:w \c__keys_code_root_str \l_keys_path_str \exp_after:wN \cs_end:
- \exp_after:wN { \l_keys_value_tl }
+ \__keys_execute:no \l_keys_path_str \l_keys_value_tl
}
{
\cs_if_exist:cTF
@@ -13292,10 +13277,8 @@
{
\str_set:Nn \l__keys_inherit_str {##1}
\cs_if_exist_use:c { \c__keys_validate_root_str ##1 / \l_keys_key_str }
- \cs:w \c__keys_code_root_str ##1 / \l_keys_key_str
- \exp_after:wN \cs_end: \exp_after:wN
- { \l_keys_value_tl }
- \clist_map_break:n { \use_none:n }
+ \__keys_execute:no { ##1 / \l_keys_key_str } \l_keys_value_tl
+ \clist_map_break:n \use_none:n
}
}
\__keys_execute_unknown:
@@ -13307,24 +13290,22 @@
{
\cs_if_exist:cTF
{ \c__keys_code_root_str \l__keys_module_str / unknown }
- {
- \cs:w \c__keys_code_root_str \l__keys_module_str / unknown
- \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
- }
+ { \__keys_execute:no { \l__keys_module_str / unknown } \l_keys_value_tl }
{
\__kernel_msg_error:nnxx { kernel } { key-unknown }
- { \l_keys_path_str } { \l__keys_module_str }
+ \l_keys_path_str \l__keys_module_str
}
}
}
\cs_new:Npn \__keys_execute:nn #1#2
+ { \__keys_execute:no {#1} { \prg_do_nothing: #2 } }
+\cs_new:Npn \__keys_execute:no #1#2
{
- \cs_if_exist:cTF { \c__keys_code_root_str #1 }
+ \exp_args:NNo \exp_args:No \use:n
{
\cs:w \c__keys_code_root_str #1 \exp_after:wN \cs_end:
- \exp_after:wN { \l_keys_value_tl }
+ \exp_after:wN {#2}
}
- {#2}
}
\cs_new_protected:Npn \__keys_store_unused:
{
@@ -13332,7 +13313,7 @@
{
\clist_put_right:Nx \l__keys_unused_clist
{
- \exp_not:o \l_keys_key_str
+ \l_keys_key_str
\bool_if:NF \l__keys_no_value_bool
{ = { \exp_not:o \l_keys_value_tl } }
}
@@ -13342,7 +13323,7 @@
{
\clist_put_right:Nx \l__keys_unused_clist
{
- \exp_not:o \l_keys_path_str
+ \l_keys_path_str
\bool_if:NF \l__keys_no_value_bool
{ = { \exp_not:o \l_keys_value_tl } }
}
@@ -13386,7 +13367,7 @@
\cs_new:Npn \__keys_choice_find:n #1
{
\str_if_empty:NTF \l__keys_inherit_str
- { \__keys_choice_find:nn { \l_keys_path_str } {#1} }
+ { \__keys_choice_find:nn \l_keys_path_str {#1} }
{
\__keys_choice_find:nn
{ \l__keys_inherit_str / \l_keys_key_str } {#1}
@@ -13395,46 +13376,63 @@
\cs_new:Npn \__keys_choice_find:nn #1#2
{
\cs_if_exist:cTF { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} }
- { \use:c { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} } {#2} }
- { \use:c { \c__keys_code_root_str #1 / unknown } {#2} }
+ { \__keys_execute:nn { #1 / \__keys_trim_spaces:n {#2} } {#2} }
+ { \__keys_execute:nn { #1 / unknown } {#2} }
}
\cs_new:Npn \__keys_multichoice_find:n #1
{ \clist_map_function:nN {#1} \__keys_choice_find:n }
-\cs_new:Npn \__keys_parent:n #1
- { \__keys_parent:w #1 / / \s__keys_stop { } }
-\cs_generate_variant:Nn \__keys_parent:n { o }
-\cs_new:Npn \__keys_parent:w #1 / #2 / #3 \s__keys_stop #4
+\cs_new:Npn \__keys_parent:o #1
{
- \tl_if_blank:nTF {#2}
- {
- \tl_if_blank:nF {#4}
- { \use_none:n #4 }
- }
- {
- \__keys_parent:w #2 / #3 \s__keys_stop { #4 / #1 }
- }
+ \exp_after:wN \__keys_parent_auxi:w #1 \q_nil \__keys_parent_auxii:w
+ / \q_nil \__keys_parent_auxiv:w
}
-\cs_new:Npn \__keys_trim_spaces:n #1
+\cs_new:Npn \__keys_parent_auxi:w #1 / #2 \q_nil #3
{
- \exp_after:wN \__keys_trim_spaces_auxi:w \tl_to_str:n {#1}
- / \q__keys_nil \s__keys_stop
+ #3 { #1 } #2 \q_nil #3
}
-\cs_new:Npn \__keys_trim_spaces_auxi:w #1 / #2 \s__keys_stop
+\cs_new:Npn \__keys_parent_auxii:w #1 #2 \q_nil \__keys_parent_auxii:w
+ {
+ #1 \__keys_parent_auxi:w #2 \q_nil \__keys_parent_auxiii:n
+ }
+\cs_new:Npn \__keys_parent_auxiii:n #1
+ {
+ / #1 \__keys_parent_auxi:w
+ }
+\cs_new:Npn \__keys_parent_auxiv:w #1 \q_nil \__keys_parent_auxiv:w
{
- \__keys_quark_if_nil:nTF {#2}
- { \tl_trim_spaces:n {#1} }
- { \__keys_trim_spaces_auxii:w #1 / #2 }
}
-\cs_new:Npn \__keys_trim_spaces_auxii:w #1 / #2 / \q__keys_nil
+\group_begin:
+ \cs_set:Npn \__keys_tmp:n #1
+ {
+ \cs_new:Npn \__keys_trim_spaces:n ##1
+ {
+ \exp_after:wN \__keys_trim_spaces_auxi:w \tl_to_str:n { / ##1 } /
+ \s__keys_nil \__keys_trim_spaces_auxi:w
+ \s__keys_mark \__keys_trim_spaces_auxii:w
+ #1 / #1
+ \s__keys_nil \__keys_trim_spaces_auxii:w
+ \s__keys_mark \__keys_trim_spaces_auxiii:w
+ }
+ }
+ \__keys_tmp:n { ~ }
+\group_end:
+\cs_new:Npn \__keys_trim_spaces_auxi:w #1 ~ / #2 \s__keys_nil #3
{
- \tl_trim_spaces:n {#1}
- \__keys_trim_spaces_auxiii:w #2 / \q__keys_recursion_tail / \q__keys_recursion_stop
+ #3 #1 / #2 \s__keys_nil #3
}
-\cs_set:Npn \__keys_trim_spaces_auxiii:w #1 /
+\cs_new:Npn \__keys_trim_spaces_auxii:w #1 / ~ #2 \s__keys_mark #3
{
- \__keys_if_recursion_tail_stop:n {#1}
- / \tl_trim_spaces:n { #1 }
- \__keys_trim_spaces_auxiii:w
+ #3 #1 / #2 \s__keys_mark #3
+ }
+\cs_new:Npn \__keys_trim_spaces_auxiii:w
+ / #1 /
+ \s__keys_nil \__keys_trim_spaces_auxi:w
+ \s__keys_mark \__keys_trim_spaces_auxii:w
+ /
+ \s__keys_nil \__keys_trim_spaces_auxii:w
+ \s__keys_mark \__keys_trim_spaces_auxiii:w
+ {
+ #1
}
\prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF }
{
@@ -20124,7 +20122,11 @@
\__kernel_chk_if_free_cs:N #1
\__cctab_new:N #1
}
- \cs_new_eq:NN \__cctab_new:N \newcatcodetable
+ \cs_new_protected:Npn \__cctab_new:N #1
+ {
+ \newcatcodetable #1
+ \tex_initcatcodetable:D #1
+ }
}
{
\cs_new_protected:Npn \__cctab_new:N #1
@@ -20348,6 +20350,13 @@
{
\int_compare:nNnTF {#1-1} < { \e at alloc@ccodetable at count }
}
+ \cs_if_exist:NT \c_syst_catcodes_n
+ {
+ \cs_gset_protected:Npn \__cctab_chk_if_valid_aux:NTF #1
+ {
+ \int_compare:nTF { #1 <= \c_syst_catcodes_n }
+ }
+ }
}
{
\cs_new_protected:Npn \__cctab_chk_if_valid_aux:NTF #1
@@ -26538,7 +26547,7 @@
\cs_new_protected:Npn \__color_select:N #1
{ \exp_after:wN \__color_select:nn #1 }
\cs_new_protected:Npn \__color_select:nn #1#2
- { \use:c { __color_backend_ #1 :n } {#2} }
+ { \use:c { __color_backend_select_ #1 :n } {#2} }
\tl_new:N \l__color_current_tl
\tl_set:Nn \l__color_current_tl { { gray } { 0 } }
%% File: l3coffins.dtx
@@ -26673,8 +26682,7 @@
#4 #1
{
\dim_set:Nn \tex_hsize:D {#2}
- \dim_set_eq:NN \linewidth \tex_hsize:D
- \dim_set_eq:NN \columnwidth \tex_hsize:D
+ \__coffin_set_vertical_aux:
#3
}
#5 #1
@@ -26692,6 +26700,13 @@
\box_clear:N \l__coffin_internal_box
}
}
+\cs_new_protected:Npx \__coffin_set_vertical_aux:
+ {
+ \cs_if_exist:NT \linewidth
+ { \dim_set_eq:NN \linewidth \tex_hsize:D }
+ \cs_if_exist:NT \columnwidth
+ { \dim_set_eq:NN \columnwidth \tex_hsize:D }
+ }
\cs_new_protected:Npn \hcoffin_set:Nw #1
{
\__coffin_if_exist:NT #1
@@ -26740,8 +26755,7 @@
{
#3 #1
\dim_set:Nn \tex_hsize:D {#2}
- \dim_set_eq:NN \linewidth \tex_hsize:D
- \dim_set_eq:NN \columnwidth \tex_hsize:D
+ \__coffin_set_vertical_aux:
\cs_set_protected:Npn #4
{
#5
@@ -27571,15 +27585,42 @@
\dim_new:N \l__coffin_display_y_dim
\prop_new:N \l__coffin_display_poles_prop
\tl_new:N \l__coffin_display_font_tl
-\tl_set:Nn \l__coffin_display_font_tl { \sffamily \tiny }
-\cs_new_protected:Npn \__coffin_color:n #1
- { \cs_if_exist:NT \color { \color {#1} } }
+\cs_if_exist:NTF \AtBeginDocument
+ { \AtBeginDocument }
+ { \use:n }
+ {
+ \tl_set:Nx \l__coffin_display_font_tl
+ {
+ \cs_if_exist:NT \sffamily { \exp_not:N \sffamily }
+ \cs_if_exist:NT \tiny { \exp_not:N \tiny }
+ }
+ }
+\cs_if_exist:NTF \AtBeginDocument
+ { \AtBeginDocument }
+ { \use:n }
+ {
+ \cs_new_protected:Npx \__coffin_color:n #1
+ {
+ \cs_if_exist:NTF \color_select:n
+ { \color_select:n {#1} }
+ {
+ \cs_if_exist:NT \color
+ { \exp_not:N \color {#1} }
+ }
+ }
+ }
+\cs_new_protected:Npx \__coffin_rule:nn #1#2
+ {
+ \cs_if_exist:NTF \rule
+ { \exp_not:N \rule {#1} {#2} }
+ { \hbox:n { \tex_vrule:D width #1 height #2 \scan_stop: } }
+ }
\cs_new_protected:Npn \coffin_mark_handle:Nnnn #1#2#3#4
{
\hcoffin_set:Nn \l__coffin_display_pole_coffin
{
\__coffin_color:n {#4}
- \rule { 1pt } { 1pt }
+ \__coffin_rule:nn { 1pt } { 1pt }
}
\__coffin_attach_mark:NnnNnnnn #1 {#2} {#3}
\l__coffin_display_pole_coffin { hc } { vc } { 0pt } { 0pt }
@@ -27624,7 +27665,7 @@
\hcoffin_set:Nn \l__coffin_display_pole_coffin
{
\__coffin_color:n {#2}
- \rule { 1pt } { 1pt }
+ \__coffin_rule:nn { 1pt } { 1pt }
}
\prop_set_eq:Nc \l__coffin_display_poles_prop
{ coffin ~ \__coffin_to_value:N #1 ~ poles }
diff --git a/texmf/tex/latex/l3kernel/expl3-generic.tex b/texmf/tex/latex/l3kernel/expl3-generic.tex
index fd282142..45e33b3c 100644
--- a/texmf/tex/latex/l3kernel/expl3-generic.tex
+++ b/texmf/tex/latex/l3kernel/expl3-generic.tex
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\def\tempa{LaTeX2e}%
diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx
index e9c2f3e0..a17e63e2 100644
--- a/texmf/tex/latex/l3kernel/expl3.ltx
+++ b/texmf/tex/latex/l3kernel/expl3.ltx
@@ -19,8 +19,10 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
\let\ExplLoaderFileDate\ExplFileDate
+\global\expandafter\let\csname\detokenize
+ {c__kernel_expl_date_tl}\endcsname\ExplFileDate
\everyjob\expandafter{\the\everyjob
\message{L3 programming layer <\ExplFileDate>}%
}
@@ -58,6 +60,36 @@
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\expandafter\endinput
\fi
+\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
+ \expandafter\ifx\csname\detokenize
+ {c__kernel_expl_date_tl}\endcsname\ExplLoaderFileDate
+ \else
+ \ExplSyntaxOn
+ \__kernel_msg_set:nnn { kernel } { mismatched-expl3 }
+ {
+ Mismatched~expl3~detected!~Loading~expl3~will~abort.
+ \\ \\
+ The~version~of~expl3~preloaded~in~LaTeX~is~
+ \c__kernel_expl_date_tl,~but~the~version~of~expl3~you~are~
+ trying~to~load~is~dated~\ExplLoaderFileDate.~This~is~most~
+ likely~due~to~a~stray~format~file~in~the~user~tree.~Please~
+ make~sure~that~your~LaTeX~format~is~updated.
+ }
+ \exp_after:wN \ExplSyntaxOff \use:n
+ {
+ \__kernel_msg_critical:nn { kernel } { mismatched-expl3 }
+ \use:c { fi: } \use:c { fi: }
+ }
+ \fi
+\else
+ \ifodd\csname\detokenize{l__kernel_expl_bool}\endcsname
+ \else
+ \ExplSyntaxOn
+ \bool_if_exist:NF \g__expl_reload_bool
+ { \bool_new:N \g__expl_reload_bool }
+ \ExplSyntaxOff
+ \fi
+\fi
\ifcsname\detokenize{g__expl_reload_bool}\endcsname
\ExplSyntaxOn
\bool_gset_true:N \g__expl_reload_bool
diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty
index d42516b6..25ce52d3 100644
--- a/texmf/tex/latex/l3kernel/expl3.sty
+++ b/texmf/tex/latex/l3kernel/expl3.sty
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
@@ -60,6 +60,36 @@
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\expandafter\endinput
\fi
+\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
+ \expandafter\ifx\csname\detokenize
+ {c__kernel_expl_date_tl}\endcsname\ExplLoaderFileDate
+ \else
+ \ExplSyntaxOn
+ \__kernel_msg_set:nnn { kernel } { mismatched-expl3 }
+ {
+ Mismatched~expl3~detected!~Loading~expl3~will~abort.
+ \\ \\
+ The~version~of~expl3~preloaded~in~LaTeX~is~
+ \c__kernel_expl_date_tl,~but~the~version~of~expl3~you~are~
+ trying~to~load~is~dated~\ExplLoaderFileDate.~This~is~most~
+ likely~due~to~a~stray~format~file~in~the~user~tree.~Please~
+ make~sure~that~your~LaTeX~format~is~updated.
+ }
+ \exp_after:wN \ExplSyntaxOff \use:n
+ {
+ \__kernel_msg_critical:nn { kernel } { mismatched-expl3 }
+ \use:c { fi: } \use:c { fi: }
+ }
+ \fi
+\else
+ \ifodd\csname\detokenize{l__kernel_expl_bool}\endcsname
+ \else
+ \ExplSyntaxOn
+ \bool_if_exist:NF \g__expl_reload_bool
+ { \bool_new:N \g__expl_reload_bool }
+ \ExplSyntaxOff
+ \fi
+\fi
\ifcsname\detokenize{g__expl_reload_bool}\endcsname
\ExplSyntaxOn
\bool_gset_true:N \g__expl_reload_bool
More information about the latex3-commits
mailing list.