[latex3-commits] [git/LaTeX3-latex3-latex2e] develop: Update l3kernel and l3packages to 2021-11-12 (9de12cca)

Joseph Wright joseph.wright at morningstar2.co.uk
Fri Nov 12 14:13:24 CET 2021


Repository : https://github.com/latex3/latex2e
On branch  : develop
Link       : https://github.com/latex3/latex2e/commit/9de12cca6b31ab1e553128799b69f071f438b476

>---------------------------------------------------------------

commit 9de12cca6b31ab1e553128799b69f071f438b476
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Fri Nov 12 12:56:14 2021 +0000

    Update l3kernel and l3packages to 2021-11-12


>---------------------------------------------------------------

9de12cca6b31ab1e553128799b69f071f438b476
 texmf/tex/latex/l3kernel/expl3-code.tex      | 196 ++++++++++++---------------
 texmf/tex/latex/l3kernel/expl3-generic.tex   |   2 +-
 texmf/tex/latex/l3kernel/expl3.ltx           |   2 +-
 texmf/tex/latex/l3kernel/expl3.sty           |   2 +-
 texmf/tex/latex/l3packages/xparse/xparse.sty |   6 +-
 5 files changed, 96 insertions(+), 112 deletions(-)

diff --git a/texmf/tex/latex/l3kernel/expl3-code.tex b/texmf/tex/latex/l3kernel/expl3-code.tex
index 65bd533c..acd75465 100644
--- a/texmf/tex/latex/l3kernel/expl3-code.tex
+++ b/texmf/tex/latex/l3kernel/expl3-code.tex
@@ -70,7 +70,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2021-10-18}%
+\def\ExplFileDate{2021-11-12}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -4962,23 +4962,20 @@
   }
 \prg_new_conditional:Npnn \str_if_eq:nn #1#2 { p , T , F , TF }
   {
-    \if_int_compare:w
-      \__str_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#2} }
-      = \c_zero_int
+    \if:w 0 \__str_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#2} }
       \prg_return_true: \else: \prg_return_false: \fi:
   }
 \prg_generate_conditional_variant:Nnn \str_if_eq:nn
   { V , v , o , nV , no , VV , nv } { p , T , F , TF }
 \prg_new_conditional:Npnn \str_if_eq:ee #1#2 { p , T , F , TF }
   {
-    \if_int_compare:w \__str_if_eq:nn {#1} {#2} = \c_zero_int
+    \if:w 0 \__str_if_eq:nn {#1} {#2}
       \prg_return_true: \else: \prg_return_false: \fi:
   }
 \prg_new_conditional:Npnn \str_if_eq:NN #1#2 { p , TF , T , F }
   {
-    \if_int_compare:w
-      \__str_if_eq:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 }
-      = \c_zero_int \prg_return_true: \else: \prg_return_false: \fi:
+    \if:w 0 \__str_if_eq:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 }
+      \prg_return_true: \else: \prg_return_false: \fi:
   }
 \prg_generate_conditional_variant:Nnn \str_if_eq:NN
   { c , Nc , cc } { T , F , TF , p }
@@ -7117,12 +7114,13 @@
     \fi:
   }
 \prg_generate_conditional_variant:Nnn \bool_if:N { c } { p , T , F , TF }
+\cs_new:Npn \bool_to_str:N #1 { \bool_if:NTF #1 { true } { false } }
+\cs_generate_variant:Nn \bool_to_str:N { c }
+\cs_new:Npn \bool_to_str:n #1 { \bool_if:nTF {#1} { true } { false } }
 \cs_new_protected:Npn \bool_show:n
-  { \msg_show_eval:Nn \__bool_to_str:n }
+  { \msg_show_eval:Nn \bool_to_str:n }
 \cs_new_protected:Npn \bool_log:n
-  { \msg_log_eval:Nn \__bool_to_str:n }
-\cs_new:Npn \__bool_to_str:n #1
-  { \bool_if:nTF {#1} { true } { false } }
+  { \msg_log_eval:Nn \bool_to_str:n }
 \cs_new_protected:Npn \bool_show:N { \__bool_show:NN \tl_show:n }
 \cs_generate_variant:Nn \bool_show:N { c }
 \cs_new_protected:Npn \bool_log:N { \__bool_show:NN \tl_log:n }
@@ -9493,83 +9491,51 @@
 \cs_new_protected:Npn \__prop_concat:NNNN #1#2#3#4
   {
     \prop_set_eq:NN \l__prop_internal_prop #3
-    \prop_map_tokens:Nn #4 { \prop_put:Nnn \l__prop_internal_prop }
+    \prop_map_inline:Nn #4 { \prop_put:Nnn \l__prop_internal_prop {##1} {##2} }
     #1 #2 \l__prop_internal_prop
   }
-\cs_new_protected:Npn \prop_set_from_keyval:Nn #1#2
+\cs_new_protected:Npn \prop_set_from_keyval:Nn #1
   {
-    \prop_clear:N \l__prop_internal_prop
-    \__prop_from_keyval:n {#2}
-    \prop_set_eq:NN #1 \l__prop_internal_prop
-    \prop_clear:N \l__prop_internal_prop
+    \prop_clear:N #1
+    \prop_put_from_keyval:Nn #1
   }
 \cs_generate_variant:Nn \prop_set_from_keyval:Nn { c }
-\cs_new_protected:Npn \prop_gset_from_keyval:Nn #1#2
+\cs_new_protected:Npn \prop_gset_from_keyval:Nn #1
   {
-    \prop_clear:N \l__prop_internal_prop
-    \__prop_from_keyval:n {#2}
-    \prop_gset_eq:NN #1 \l__prop_internal_prop
-    \prop_clear:N \l__prop_internal_prop
+    \prop_gclear:N #1
+    \prop_gput_from_keyval:Nn #1
   }
 \cs_generate_variant:Nn \prop_gset_from_keyval:Nn { c }
 \cs_new_protected:Npn \prop_const_from_keyval:Nn #1#2
   {
-    \prop_clear:N \l__prop_internal_prop
-    \__prop_from_keyval:n {#2}
+    \prop_set_from_keyval:Nn \l__prop_internal_prop {#2}
     \tl_const:Nx #1 { \exp_not:o \l__prop_internal_prop }
     \prop_clear:N \l__prop_internal_prop
   }
 \cs_generate_variant:Nn \prop_const_from_keyval:Nn { c }
-\cs_new_protected:Npn \prop_put_from_keyval:Nn #1#2
+\cs_new_protected:Npn \prop_put_from_keyval:Nn
   {
-    \prop_set_eq:NN \l__prop_internal_prop #1
-    \__prop_from_keyval:n {#2}
-    \prop_set_eq:NN #1 \l__prop_internal_prop
-    \prop_clear:N \l__prop_internal_prop
+    \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool
+      { \__prop_keyval_parse:NNNn \c_true_bool }
+      { \__prop_keyval_parse:NNNn \c_false_bool }
+      \prop_put:Nnn
   }
 \cs_generate_variant:Nn \prop_put_from_keyval:Nn { c }
-\cs_new_protected:Npn \prop_gput_from_keyval:Nn #1#2
+\cs_new_protected:Npn \prop_gput_from_keyval:Nn
   {
-    \prop_set_eq:NN \l__prop_internal_prop #1
-    \__prop_from_keyval:n {#2}
-    \prop_gset_eq:NN #1 \l__prop_internal_prop
-    \prop_clear:N \l__prop_internal_prop
+    \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool
+      { \__prop_keyval_parse:NNNn \c_true_bool }
+      { \__prop_keyval_parse:NNNn \c_false_bool }
+      \prop_gput:Nnn
   }
 \cs_generate_variant:Nn \prop_gput_from_keyval:Nn { c }
-\cs_new_protected:Npn \__prop_from_keyval:n #1
-  {
-    \__prop_from_keyval_loop:w \prg_do_nothing: #1 ,
-      \q__prop_recursion_tail , \q__prop_recursion_stop
-  }
-\cs_new_protected:Npn \__prop_from_keyval_loop:w #1 ,
-  {
-    \__prop_if_recursion_tail_stop:o {#1}
-    \__prop_from_keyval_split:Nw \__prop_from_keyval_key:n
-      #1 = = \s__prop_stop {#1}
-    \__prop_from_keyval_loop:w \prg_do_nothing:
-  }
-\cs_new_protected:Npn \__prop_from_keyval_split:Nw #1#2 =
-  { \tl_trim_spaces_apply:oN {#2} #1 }
-\cs_new_protected:Npn \__prop_from_keyval_key:n #1
-  { \__prop_from_keyval_key:w #1 \s__prop_mark }
-\cs_new_protected:Npn \__prop_from_keyval_key:w #1 \s__prop_mark #2 \s__prop_stop
+\cs_new_protected:Npn \__prop_missing_eq:n
+  { \msg_error:nnn { prop } { prop-keyval } }
+\cs_new_protected:Npn \__prop_keyval_parse:NNNn #1#2#3#4
   {
-    \__prop_from_keyval_split:Nw \__prop_from_keyval_value:n
-      \prg_do_nothing: #2 \s__prop_stop {#1}
-  }
-\cs_new_protected:Npn \__prop_from_keyval_value:n #1
-  { \__prop_from_keyval_value:w #1 \s__prop_mark }
-\cs_new_protected:Npn \__prop_from_keyval_value:w #1 \s__prop_mark #2 \s__prop_stop #3#4
-  {
-    \tl_if_single:nTF {#2}
-      { \prop_put:Nnn \l__prop_internal_prop {#3} {#1} }
-      {
-        \tl_if_empty:nF { #3 #1 #2 }
-          {
-            \msg_error:nnx { prop } { prop-keyval }
-              { \exp_not:o {#4} }
-          }
-      }
+    \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool \c_true_bool
+    \keyval_parse:nnn \__prop_missing_eq:n { #2 #3 } {#4}
+    \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool #1
   }
 \cs_new_protected:Npn \__prop_split:NnTF #1#2
   { \exp_args:NNo \__prop_split_aux:NnTF #1 { \tl_to_str:n {#2} } }
@@ -10640,7 +10606,7 @@
 \msg_new:nnn { prg } { negative-replication }
   { Negative~argument~for~\iow_char:N\\prg_replicate:nn. }
 \msg_new:nnn { prop } { prop-keyval }
-  { Missing/extra~'='~in~'#1'~(in~'..._keyval:Nn') }
+  { Missing~'='~in~'#1'~(in~'..._keyval:Nn') }
 \msg_new:nnn { kernel } { unknown-comparison }
   { Relation~'#1'~not~among~=,<,>,==,!=,<=,>=. }
 \msg_new:nnn { kernel } { zero-step }
@@ -12776,6 +12742,7 @@
 \scan_new:N \s__keyval_mark
 \scan_new:N \s__keyval_stop
 \scan_new:N \s__keyval_tail
+\bool_new:N \l__kernel_keyval_allow_blank_keys_bool
 \group_begin:
   \cs_set_protected:Npn \__keyval_tmp:w #1#2
     {
@@ -12946,9 +12913,11 @@
 \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 \__keyval_trim:nN #1 \__keyval_key:nn
   { \__keyval_loop_other:nnw }
-\cs_new:Npn \__keyval_blank_key_error:w #1 \__keyval_loop_other:nnw
+\cs_new:Npn \__keyval_blank_key_error:w \s__keyval_mark \s__keyval_stop #1 \__keyval_loop_other:nnw
   {
-    \msg_expandable_error:nn { keyval } { blank-key-name }
+    \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool
+      { #1 }
+      { \msg_expandable_error:nn { keyval } { blank-key-name } }
     \__keyval_loop_other:nnw
   }
 \msg_new:nnn { keyval } { misplaced-equals-sign }
@@ -13316,7 +13285,7 @@
       }
       {
         \msg_error:nnx { keys }
-          { property-boolean-values-only }
+          { boolean-values-only }
           { .value_ #1 :n }
       }
   }
@@ -13489,6 +13458,22 @@
   { \__keys_variable_set_required:NnnN #1 { skip } { g } n }
 \cs_new_protected:cpn { \c__keys_props_root_str .skip_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { skip } { g } n }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_set:N } #1
+  { \__keys_variable_set:NnnN #1 { str } { } n }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_set:c } #1
+  { \__keys_variable_set:cnnN {#1} { str } { } n }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_set_x:N } #1
+  { \__keys_variable_set:NnnN #1 { str } { } x }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_set_x:c } #1
+  { \__keys_variable_set:cnnN {#1} { str } { } x }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_gset:N } #1
+  { \__keys_variable_set:NnnN #1 { str } { g } n }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_gset:c } #1
+  { \__keys_variable_set:cnnN {#1} { str } { g } n }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_gset_x:N } #1
+  { \__keys_variable_set:NnnN #1 { str } { g } x }
+\cs_new_protected:cpn { \c__keys_props_root_str .str_gset_x:c } #1
+  { \__keys_variable_set:cnnN {#1} { str } { g } x }
 \cs_new_protected:cpn { \c__keys_props_root_str .tl_set:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { } n }
 \cs_new_protected:cpn { \c__keys_props_root_str .tl_set:c } #1
@@ -15782,9 +15767,7 @@
   {
     \if_catcode:w \scan_stop: \exp_not:N #1
       \if_meaning:w \scan_stop: #1
-        \if_int_compare:w
-            \__fp_str_if_eq:nn { \s__fp } { \exp_not:N #1 }
-            = \c_zero_int
+        \if:w 0 \__fp_str_if_eq:nn { \s__fp } { \exp_not:N #1 }
           0
           \msg_expandable_error:nnn
             { fp } { after-e } { floating~point~ }
@@ -15796,9 +15779,7 @@
           \prg_return_false:
         \fi:
       \else:
-        \if_int_compare:w
-            \__fp_str_if_eq:nn { \int_value:w #1 } { \tex_the:D #1 }
-            = \c_zero_int
+        \if:w 0 \__fp_str_if_eq:nn { \int_value:w #1 } { \tex_the:D #1 }
           \int_value:w #1
         \else:
           0
@@ -16084,9 +16065,7 @@
 \cs_new:Npn \__fp_parse_infix:NN #1 #2
   {
     \if_catcode:w \scan_stop: \exp_not:N #2
-      \if_int_compare:w
-          \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 }
-          = \c_zero_int
+      \if:w 0 \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 }
         \exp_after:wN \exp_after:wN
         \exp_after:wN \__fp_parse_infix_mark:NNN
       \else:
@@ -16128,9 +16107,7 @@
 \cs_new:Npn \__fp_parse_infix_after_paren:NN #1 #2
   {
     \if_catcode:w \scan_stop: \exp_not:N #2
-      \if_int_compare:w
-          \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 }
-          = \c_zero_int
+      \if:w 0 \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 }
         \exp_after:wN \exp_after:wN
         \exp_after:wN \__fp_parse_infix_mark:NNN
       \else:
@@ -18769,8 +18746,7 @@
 \cs_new:Npn \__fp_pow_normal_o:ww
     \s__fp \__fp_chk:w 1 #1#2#3; \s__fp \__fp_chk:w #4#5
   {
-    \if_int_compare:w \__fp_str_if_eq:nn { #2 #3 }
-              { 1 {1000} {0000} {0000} {0000} } = \c_zero_int
+    \if:w 0 \__fp_str_if_eq:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} }
       \if_int_compare:w #4 #1 = 32 \exp_stop_f:
         \exp_after:wN \__fp_case_return_ii_o:ww
       \fi:
@@ -27973,18 +27949,18 @@
     \tl_set:Nx #4
       {
         \cs_if_exist:cTF { __color_convert_ #1 _ #2 :w }
-          { \use:c { __color_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s__color_stop }
+          { \use:c { __color_convert_ #1 _ #2 :w } #3 \s__color_stop }
           { \use:c { c__color_fallback_ #2 _tl } }
       }
   }
 \cs_generate_variant:Nn \__color_convert:nnnN { nV , nnV }
-\cs_new:Npn \__color_convert_gray_rgb:w #1 ~ #2 \s__color_stop
+\cs_new:Npn \__color_convert_gray_rgb:w #1 \s__color_stop
   { #1 ~ #1 ~ #1 }
-\cs_new:Npn \__color_convert_gray_cmyk:w #1 ~ #2 \s__color_stop
+\cs_new:Npn \__color_convert_gray_cmyk:w #1 \s__color_stop
   { 0 ~ 0 ~ 0 ~ \fp_eval:n { 1 - #1 } }
-\cs_new:Npn \__color_convert_rgb_gray:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
+\cs_new:Npn \__color_convert_rgb_gray:w #1 ~ #2 ~ #3 \s__color_stop
   { \fp_eval:n { 0.3 * #1 + 0.59 * #2 + 0.11 * #3 } }
-\cs_new:Npn \__color_convert_rgb_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
+\cs_new:Npn \__color_convert_rgb_cmyk:w #1 ~ #2 ~ #3 \s__color_stop
   {
     \exp_args:Nf \__color_convert_rgb_cmyk:nnnn
       { \fp_eval:n { min ( 1 - #1 , 1 - #2 , 1 - #3 ) } } {#1} {#2} {#3}
@@ -27996,9 +27972,9 @@
     \fp_eval:n { min ( 1 , max ( 0 , 1 - #4 - #1 ) ) } \c_space_tl
     #1
   }
-\cs_new:Npn \__color_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s__color_stop
+\cs_new:Npn \__color_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
   { \fp_eval:n { 1 - min ( 1 , 0.3 * #1 + 0.59 * #2 + 0.11 * #3 + #4 ) } }
-\cs_new:Npn \__color_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s__color_stop
+\cs_new:Npn \__color_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
   {
     \fp_eval:n { 1 - min ( 1 , #1 + #4 ) } \c_space_tl
     \fp_eval:n { 1 - min ( 1 , #2 + #4 ) } \c_space_tl
@@ -28636,7 +28612,10 @@
   {
     \fp_compare:nNnTF {#1} = { 0 }
       { 00 }
-      { \int_to_Hex:n { \fp_to_int:n { #1 * 255 } } }
+      {
+        \fp_compare:nNnT { #1 * 255 } < { 16 } { 0 }
+        \int_to_Hex:n { \fp_to_int:n { #1 * 255 } }
+      }
   }
 \cs_new_protected:cpn { __color_export_space-sep-rgb:Nw } #1#2 \s__color_stop
   { \tl_set:Nn #1 {#2} }
@@ -28791,7 +28770,7 @@
   }
 \cs_new_protected:Npn \__color_model_separation_cmyk:nnnnnn #1#2#3#4#5#6
   {
-    \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop
+    \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 \s__color_stop
       {
          \fp_eval:n {##1 * #3} ~
          \fp_eval:n {##1 * #4} ~
@@ -28806,7 +28785,7 @@
   }
 \cs_new_protected:Npn \__color_model_separation_rgb:nnnnnn #1#2#3#4#5#6
   {
-    \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop
+    \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 \s__color_stop
       {
          \fp_eval:n {##1 * #3} ~
          \fp_eval:n {##1 * #4} ~
@@ -28820,16 +28799,16 @@
   }
 \cs_new_protected:Npn \__color_model_separation_gray:nnnnnn #1#2#3#4#5#6
   {
-    \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop
+    \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 \s__color_stop
       {
         \fp_eval:n {##1 * #3} ~
         \fp_eval:n {##1 * #3} ~
         \fp_eval:n {##1 * #3} ~
         \fp_eval:n {##1 * #3}
       }
-    \cs_new:cpn { __color_convert_ #1 _gray:w } ##1 ~ ##2 \s__color_stop
+    \cs_new:cpn { __color_convert_ #1 _gray:w } ##1 \s__color_stop
       { \fp_eval:n {##1 * #3} }
-    \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop
+    \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 \s__color_stop
       {
         \fp_eval:n {##1 * #3} ~
         \fp_eval:n {##1 * #3} ~
@@ -28840,11 +28819,11 @@
   }
 \cs_new_protected:Npn \__color_model_convert:nnn #1#2#3
   {
-    \cs_new:cpx { __color_convert_ #1 _ #3 :w } ##1 ~ ##2 \s__color_stop
+    \cs_new:cpx { __color_convert_ #1 _ #3 :w } ##1 \s__color_stop
       {
         \exp_not:N \exp_args:NNe \exp_not:N \use:nn
         \exp_not:c { __color_convert_  #2 _ #3 :w }
-          { \exp_not:c { __color_convert_ #1 _ #2 :w } ##1 ~ ##2 \s__color_stop }
+          { \exp_not:c { __color_convert_ #1 _ #2 :w } ##1 \s__color_stop }
           \c_space_tl \exp_not:N \s__color_stop
       }
   }
@@ -28865,11 +28844,11 @@
     \tl_if_exist:cTF { c__color_model_whitepoint_CIELAB_ #1 _tl }
       {
         \__color_backend_separation_init_CIELAB:nnn {#1} {#3} { #4 ~ #5 ~ #6 }
-        \cs_new:cpn { __color_convert_ #2 _cmyk:w } ##1 ~ ##2 \s__color_stop
+        \cs_new:cpn { __color_convert_ #2 _cmyk:w } ##1 \s__color_stop
           { 0 ~ 0 ~ 0 ~ 1 }
-        \cs_new:cpn { __color_convert_ #2 _rgb:w } ##1 ~ ##2 \s__color_stop
+        \cs_new:cpn { __color_convert_ #2 _rgb:w } ##1 \s__color_stop
           { 1 ~ 1 ~ 1 }
-        \cs_new:cpn { __color_convert_ #2 _gray:w } ##1 ~ ##2 \s__color_stop
+        \cs_new:cpn { __color_convert_ #2 _gray:w } ##1 \s__color_stop
           { 1 }
       }
       {
@@ -29047,7 +29026,7 @@
         \prop_get:NnN \g__color_alternative_values_prop {##1}
           \l__color_value_tl
         \exp_after:wN \__color_model_devicen_transform:w
-          \l__color_value_tl , 0 , 0 , 0 \s__color_stop {#1} {#2}
+          \l__color_value_tl , 0 , 0 , 0 , \s__color_stop {#1} {#2}
       }
     \tl_put_right:Nx \l__color_internal_tl
       {
@@ -29085,7 +29064,7 @@
   { \__color_model_devicen_transform:nnn {#5} { 1 } {#1} }
 \cs_new_protected:cpn { __color_model_devicen_transform_3:nnnnn } #1#2#3#4#5
   {
-    \clist_map_inline { #1 , #2 , #3 }
+    \clist_map_inline:nn { #1 , #2 , #3 }
       { \__color_model_devicen_transform:nnn {#5} { 3 } {##1} }
   }
 \cs_new_protected:cpn { __color_model_devicen_transform_4:nnnnn } #1#2#3#4#5
@@ -29137,8 +29116,9 @@
       {
         \exp_not:c { __color_convert_devicen_ #2 : \prg_replicate:nn {#3} { n } w }
           \prg_replicate:nn {#3} { { 1 } }
-          ##1 \exp_not:N \s__color_mark
+          ##1 ~ \exp_not:N \s__color_mark
           \clist_map_function:nN {#4} \__color_model_devicen_convert:n
+          {}
           \exp_not:N \s__color_stop
       }
   }
@@ -29220,7 +29200,7 @@
 \cs_new:Npn \__color_convert_devicen_rgb:nnnw
   #1#2#3#4 ~ #5 \s__color_mark #6#7 \s__color_stop
   {
-    \__color_convert_devicen_cmyk:nnnnnn {#4} {#1} {#2} {#3} #6
+    \__color_convert_devicen_rgb:nnnnnnn {#4} {#1} {#2} {#3} #6
       #5 \s__color_mark #7 \s__color_stop
   }
 \cs_new:Npn \__color_convert_devicen_rgb:nnnnnnn #1#2#3#4#5#6#7
diff --git a/texmf/tex/latex/l3kernel/expl3-generic.tex b/texmf/tex/latex/l3kernel/expl3-generic.tex
index 3d1e1a7d..3e0a8141 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{2021-10-18}%
+\def\ExplFileDate{2021-11-12}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx
index 64ef124d..b581aa5d 100644
--- a/texmf/tex/latex/l3kernel/expl3.ltx
+++ b/texmf/tex/latex/l3kernel/expl3.ltx
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2021-10-18}%
+\def\ExplFileDate{2021-11-12}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty
index a76be7b8..068438f5 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{2021-10-18}%
+\def\ExplFileDate{2021-11-12}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%
diff --git a/texmf/tex/latex/l3packages/xparse/xparse.sty b/texmf/tex/latex/l3packages/xparse/xparse.sty
index 1dcf1ecb..9e84418e 100644
--- a/texmf/tex/latex/l3packages/xparse/xparse.sty
+++ b/texmf/tex/latex/l3packages/xparse/xparse.sty
@@ -60,7 +60,7 @@
       }
   }
 \ExplSyntaxOff
-\ProvidesExplPackage{xparse}{2021-08-27}{}
+\ProvidesExplPackage{xparse}{2021-11-12}{}
   {L3 Experimental document command parser}
 \clist_new:N \l__cmd_options_clist
 \DeclareOption* { \clist_put_right:NV \l__cmd_options_clist \CurrentOption }
@@ -153,6 +153,10 @@
       { \exp_not:c  { \l__cmd_expandable_aux_name_tl } }
     \__cmd_prepare_signature:N
   }
+\cs_new_protected:Npn \__cmd_copy_grabber_u:w #1 #2 #3
+  { \__cmd_copy_grabber_D:w {#1} {#2} {#3} { } { } }
+\tl_const:Nn \c__cmd_show_type_u_tl { 3 }
+\tl_const:Nn \c__cmd_show_type_G_tl { 3 }
 \cs_new_protected:Npn \__cmd_grab_G:w #1 \__cmd_run_code:
   {
     \__cmd_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn





More information about the latex3-commits mailing list.