diff options
author | Karl Berry <karl@freefriends.org> | 2019-02-16 22:39:34 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-02-16 22:39:34 +0000 |
commit | 0d6184fa42ed741f956e55a1c6e7d48ab0cac9d8 (patch) | |
tree | 683bec4b5fa84f1f9b84aaf0d4fdf8db2be83728 /Master/texmf-dist/tex/latex/l3kernel | |
parent | f3d6932fe4c7946fdb0582306715b251bf561f7e (diff) |
l3kernel (16feb19)
git-svn-id: svn://tug.org/texlive/trunk@50036 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel')
8 files changed, 287 insertions, 106 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 736147cc2ef..b8e24f7b71a 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -63,7 +63,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-01-28}% +\def\ExplFileDate{2019-02-15}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -1445,6 +1445,32 @@ \tex_let:D \tex_mapfile:D \tex_undefined:D \tex_let:D \tex_mapline:D \tex_undefined:D \tex_fi:D +\tex_begingroup:D + \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_time:D } + \tex_edef:D \l_tmpb_tl { \tex_string:D \time } + \tex_ifx:D \l_tmpa_tl \l_tmpb_tl + \tex_else:D + \tex_global:D \tex_let:D \tex_time:D \tex_undefined:D + \tex_fi:D + \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_day:D } + \tex_edef:D \l_tmpb_tl { \tex_string:D \day } + \tex_ifx:D \l_tmpa_tl \l_tmpb_tl + \tex_else:D + \tex_global:D \tex_let:D \tex_day:D \tex_undefined:D + \tex_fi:D + \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_month:D } + \tex_edef:D \l_tmpb_tl { \tex_string:D \month } + \tex_ifx:D \l_tmpa_tl \l_tmpb_tl + \tex_else:D + \tex_global:D \tex_let:D \tex_month:D \tex_undefined:D + \tex_fi:D + \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_year:D } + \tex_edef:D \l_tmpb_tl { \tex_string:D \year } + \tex_ifx:D \l_tmpa_tl \l_tmpb_tl + \tex_else:D + \tex_global:D \tex_let:D \tex_year:D \tex_undefined:D + \tex_fi:D +\tex_endgroup:D \tex_ifdefined:D \tex_luatexversion:D \tex_let:D \tex_pdftexbanner:D \tex_undefined:D \tex_let:D \tex_pdftexrevision:D \tex_undefined:D @@ -4075,7 +4101,7 @@ { \str_map_inline:nn {##1} { - \str_if_in:nnF { NnpcofVvx } {####1} + \str_if_in:nnF { NnpcofeVvx } {####1} { \__kernel_msg_error:nnnn { kernel } { invalid-exp-args } {####1} {##1} @@ -7705,12 +7731,12 @@ %% File: l3sys.dtx \str_const:Nx \c_sys_jobname_str { \tex_jobname:D } \int_const:Nn \c_sys_minute_int - { \int_mod:nn { \tex_time:D } { 60 } } + { \int_mod:nn { \tex_primitive:D \time } { 60 } } \int_const:Nn \c_sys_hour_int - { \int_div_truncate:nn { \tex_time:D } { 60 } } -\int_const:Nn \c_sys_day_int { \tex_day:D } -\int_const:Nn \c_sys_month_int { \tex_month:D } -\int_const:Nn \c_sys_year_int { \tex_year:D } + { \int_div_truncate:nn { \tex_primitive:D \time } { 60 } } +\int_const:Nn \c_sys_day_int { \tex_primitive:D \day } +\int_const:Nn \c_sys_month_int { \tex_primitive:D \month } +\int_const:Nn \c_sys_year_int { \tex_primitive:D \year } \cs_new_protected:Npn \__sys_const:nn #1#2 { \bool_if:nTF {#2} @@ -12027,6 +12053,8 @@ \bool_new:N \l__keys_only_known_bool \tl_new:N \l_keys_path_tl \tl_new:N \l__keys_inherit_tl +\tl_new:N \l__keys_relative_tl +\tl_set:Nn \l__keys_relative_tl { \q_no_value } \tl_new:N \l__keys_property_tl \bool_new:N \l__keys_selective_bool \bool_new:N \l__keys_filtered_bool @@ -12034,11 +12062,13 @@ \tl_new:N \l__keys_unused_clist \tl_new:N \l_keys_value_tl \bool_new:N \l__keys_tmp_bool +\tl_new:N \l__keys_tmpa_tl +\tl_new:N \l__keys_tmpb_tl \cs_new_protected:Npn \keys_define:nn { \__keys_define:onn \l__keys_module_tl } \cs_new_protected:Npn \__keys_define:nnn #1#2#3 { - \tl_set:Nx \l__keys_module_tl { \__keys_remove_spaces:n {#2} } + \tl_set:Nx \l__keys_module_tl { \__keys_trim_spaces:n {#2} } \keyval_parse:NNn \__keys_define:n \__keys_define:nn {#3} \tl_set:Nn \l__keys_module_tl {#1} } @@ -12068,7 +12098,7 @@ } \cs_new_protected:Npn \__keys_property_find:n #1 { - \tl_set:Nx \l__keys_property_tl { \__keys_remove_spaces:n {#1} } + \tl_set:Nx \l__keys_property_tl { \__keys_trim_spaces:n {#1} } \exp_after:wN \__keys_property_find:w \l__keys_property_tl . . \q_stop {#1} } @@ -12201,7 +12231,7 @@ { \int_incr:N \l_keys_choice_int \__keys_cmd_set:nx - { \l_keys_path_tl / \__keys_remove_spaces:n {##1} } + { \l_keys_path_tl / \__keys_trim_spaces:n {##1} } { \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1} \int_set:Nn \exp_not:N \l_keys_choice_int @@ -12228,7 +12258,7 @@ \tex_undefined:D } { - \cs_set:cpx + \cs_set_nopar:cpx { \c__keys_default_root_tl \l_keys_path_tl } { \exp_not:n {#1} } } @@ -12265,6 +12295,22 @@ } \cs_new_protected:Npn \__keys_meta_make:nn #1#2 { \__keys_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } } +\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_tl / \q_stop + \__keys_cmd_set:nx { \l_keys_path_tl } + { + \exp_not:c { prop_ #2 put:Nnn } + \exp_not:N #1 + { \l__keys_tmpb_tl } + \exp_not:n { {##1} } + } + } +\cs_generate_variant:Nn \__keys_prop_put:Nn { c } \cs_new_protected:Npn \__keys_undefine: { \clist_map_inline:nn @@ -12427,6 +12473,14 @@ { \exp_args:No \__keys_multichoices_make:nn #1 } \cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:xn } #1 { \exp_args:Nx \__keys_multichoices_make:nn #1 } +\cs_new_protected:cpn { \c__keys_props_root_tl .prop_put:N } #1 + { \__keys_prop_put:Nn #1 { } } +\cs_new_protected:cpn { \c__keys_props_root_tl .prop_put:c } #1 + { \__keys_prop_put:cn {#1} { } } +\cs_new_protected:cpn { \c__keys_props_root_tl .prop_gput:N } #1 + { \__keys_prop_put:Nn #1 { g } } +\cs_new_protected:cpn { \c__keys_props_root_tl .prop_gput:c } #1 + { \__keys_prop_put:cn {#1} { g } } \cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:N } #1 { \__keys_variable_set:NnnN #1 { skip } { } n } \cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:c } #1 @@ -12457,136 +12511,189 @@ { \__keys_value_requirement:nn { forbidden } {#1} } \cs_new_protected:cpn { \c__keys_props_root_tl .value_required:n } #1 { \__keys_value_requirement:nn { required } {#1} } -\cs_new_protected:Npn \keys_set:nn - { \__keys_set:onn { \l__keys_module_tl } } +\cs_new_protected:Npn \keys_set:nn #1#2 + { + \use:x + { + \bool_set_false:N \exp_not:N \l__keys_only_known_bool + \bool_set_false:N \exp_not:N \l__keys_filtered_bool + \bool_set_false:N \exp_not:N \l__keys_selective_bool + \tl_set:Nn \exp_not:N \l__keys_relative_tl + { \exp_not:N \q_no_value } + \__keys_set:nn \exp_not:n { {#1} {#2} } + \bool_if:NT \l__keys_only_known_bool + { \bool_set_true:N \exp_not:N \l__keys_only_known_bool } + \bool_if:NT \l__keys_filtered_bool + { \bool_set_true:N \exp_not:N \l__keys_filtered_bool } + \bool_if:NT \l__keys_selective_bool + { \bool_set_true:N \exp_not:N \l__keys_selective_bool } + \tl_set:Nn \exp_not:N \l__keys_relative_tl + { \exp_not:o \l__keys_relative_tl } + } + } +\cs_generate_variant:Nn \keys_set:nn { nV , nv , no } +\cs_new_protected:Npn \__keys_set:nn #1#2 + { \exp_args:No \__keys_set:nnn \l__keys_module_tl {#1} {#2} } \cs_new_protected:Npn \__keys_set:nnn #1#2#3 { - \tl_set:Nx \l__keys_module_tl { \__keys_remove_spaces:n {#2} } - \keyval_parse:NNn \__keys_set:n \__keys_set:nn {#3} + \tl_set:Nx \l__keys_module_tl { \__keys_trim_spaces:n {#2} } + \keyval_parse:NNn \__keys_set_keyval:n \__keys_set_keyval:nn {#3} \tl_set:Nn \l__keys_module_tl {#1} } -\cs_generate_variant:Nn \keys_set:nn { nV , nv , no } -\cs_generate_variant:Nn \__keys_set:nnn { o } -\cs_new_protected:Npn \keys_set_known:nnN - { \__keys_set_known:onnN \l__keys_unused_clist } +\cs_new_protected:Npn \keys_set_known:nnN #1#2#3 + { + \exp_args:No \__keys_set_known:nnnnN + \l__keys_unused_clist { \q_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 +\cs_new_protected:Npn \keys_set_known:nnnN #1#2#3#4 + { + \exp_args:No \__keys_set_known:nnnnN + \l__keys_unused_clist {#3} {#1} {#2} #4 + } +\cs_generate_variant:Nn \keys_set_known:nnnN { nV , nv , no } +\cs_new_protected:Npn \__keys_set_known:nnnnN #1#2#3#4#5 { \clist_clear:N \l__keys_unused_clist - \keys_set_known:nn {#2} {#3} - \tl_set:Nx #4 { \exp_not:o { \l__keys_unused_clist } } + \__keys_set_known:nnn {#2} {#3} {#4} + \tl_set:Nx #5 { \exp_not:o { \l__keys_unused_clist } } \tl_set:Nn \l__keys_unused_clist {#1} } -\cs_generate_variant:Nn \__keys_set_known:nnnN { o } \cs_new_protected:Npn \keys_set_known:nn #1#2 + { \__keys_set_known:nnn { \q_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 { - \bool_if:NTF \l__keys_only_known_bool - { \keys_set:nn } - { \__keys_set_known:nn } - {#1} {#2} + \use:x + { + \bool_set_true:N \exp_not:N \l__keys_only_known_bool + \bool_set_false:N \exp_not:N \l__keys_filtered_bool + \bool_set_false:N \exp_not:N \l__keys_selective_bool + \tl_set:Nn \exp_not:N \l__keys_relative_tl { \exp_not:n {#1} } + \__keys_set:nn \exp_not:n { {#2} {#3} } + \bool_if:NF \l__keys_only_known_bool + { \bool_set_false:N \exp_not:N \l__keys_only_known_bool } + \bool_if:NT \l__keys_filtered_bool + { \bool_set_true:N \exp_not:N \l__keys_filtered_bool } + \bool_if:NT \l__keys_selective_bool + { \bool_set_true:N \exp_not:N \l__keys_selective_bool } + \tl_set:Nn \exp_not:N \l__keys_relative_tl + { \exp_not:o \l__keys_relative_tl } + } } -\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , no } -\cs_new_protected:Npn \__keys_set_known:nn #1#2 +\cs_new_protected:Npn \keys_set_filter:nnnN #1#2#3#4 { - \bool_set_true:N \l__keys_only_known_bool - \keys_set:nn {#1} {#2} - \bool_set_false:N \l__keys_only_known_bool + \exp_args:No \__keys_set_filter:nnnnnN + \l__keys_unused_clist + { \q_no_value } {#1} {#2} {#3} #4 } -\cs_new_protected:Npn \keys_set_filter:nnnN - { \__keys_set_filter:onnnN \l__keys_unused_clist } \cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno } -\cs_new_protected:Npn \__keys_set_filter:nnnnN #1#2#3#4#5 +\cs_new_protected:Npn \keys_set_filter:nnnnN #1#2#3#4#5 + { + \exp_args:No \__keys_set_filter:nnnnnN + \l__keys_unused_clist {#4} {#1} {#2} {#3} #5 + } +\cs_generate_variant:Nn \keys_set_filter:nnnnN { nnV , nnv , nno } +\cs_new_protected:Npn \__keys_set_filter:nnnnnN #1#2#3#4#5#6 { \clist_clear:N \l__keys_unused_clist - \keys_set_filter:nnn {#2} {#3} {#4} - \tl_set:Nx #5 { \exp_not:o { \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:Nn \l__keys_unused_clist {#1} } -\cs_generate_variant:Nn \__keys_set_filter:nnnnN { o } \cs_new_protected:Npn \keys_set_filter:nnn #1#2#3 - { - \bool_if:NTF \l__keys_filtered_bool - { \__keys_set_selective:nnn } - { \__keys_set_filter:nnn } - {#1} {#2} {#3} - } + {\__keys_set_filter:nnnn { \q_no_value } {#1} {#2} {#3} } \cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno } -\cs_new_protected:Npn \__keys_set_filter:nnn #1#2#3 +\cs_new_protected:Npn \__keys_set_filter:nnnn #1#2#3#4 { - \bool_set_true:N \l__keys_filtered_bool - \__keys_set_selective:nnn {#1} {#2} {#3} - \bool_set_false:N \l__keys_filtered_bool + \use:x + { + \bool_set_false:N \exp_not:N \l__keys_only_known_bool + \bool_set_true:N \exp_not:N \l__keys_filtered_bool + \bool_set_true:N \exp_not:N \l__keys_selective_bool + \tl_set:Nn \exp_not:N \l__keys_relative_tl { \exp_not:n {#1} } + \__keys_set_selective:nnn \exp_not:n { {#2} {#3} {#4} } + \bool_if:NT \l__keys_only_known_bool + { \bool_set_true:N \exp_not:N \l__keys_only_known_bool } + \bool_if:NF \l__keys_filtered_bool + { \bool_set_false:N \exp_not:N \l__keys_filtered_bool } + \bool_if:NF \l__keys_selective_bool + { \bool_set_false:N \exp_not:N \l__keys_selective_bool } + \tl_set:Nn \exp_not:N \l__keys_relative_tl + { \exp_not:o \l__keys_relative_tl } + } } \cs_new_protected:Npn \keys_set_groups:nnn #1#2#3 { - \bool_if:NTF \l__keys_filtered_bool - { \__keys_set_groups:nnn } - { \__keys_set_selective:nnn } - {#1} {#2} {#3} + \use:x + { + \bool_set_false:N \exp_not:N \l__keys_only_known_bool + \bool_set_false:N \exp_not:N \l__keys_filtered_bool + \bool_set_true:N \exp_not:N \l__keys_selective_bool + \tl_set:Nn \exp_not:N \l__keys_relative_tl + { \exp_not:N \q_no_value } + \__keys_set_selective:nnn \exp_not:n { {#1} {#2} {#3} } + \bool_if:NT \l__keys_only_known_bool + { \bool_set_true:N \exp_not:N \l__keys_only_known_bool } + \bool_if:NF \l__keys_filtered_bool + { \bool_set_true:N \exp_not:N \l__keys_filtered_bool } + \bool_if:NF \l__keys_selective_bool + { \bool_set_false:N \exp_not:N \l__keys_selective_bool } + \tl_set:Nn \exp_not:N \l__keys_relative_tl + { \exp_not:o \l__keys_relative_tl } + } } \cs_generate_variant:Nn \keys_set_groups:nnn { nnV , nnv , nno } -\cs_new_protected:Npn \__keys_set_groups:nnn #1#2#3 - { - \bool_set_false:N \l__keys_filtered_bool - \__keys_set_selective:nnn {#1} {#2} {#3} - \bool_set_true:N \l__keys_filtered_bool - } \cs_new_protected:Npn \__keys_set_selective:nnn - { \__keys_set_selective:onnn \l__keys_selective_seq } + { \exp_args:No \__keys_set_selective:nnnn \l__keys_selective_seq } \cs_new_protected:Npn \__keys_set_selective:nnnn #1#2#3#4 { \seq_set_from_clist:Nn \l__keys_selective_seq {#3} - \bool_if:NTF \l__keys_selective_bool - { \keys_set:nn } - { \__keys_set_selective:nn } - {#2} {#4} + \__keys_set:nn {#2} {#4} \tl_set:Nn \l__keys_selective_seq {#1} } -\cs_generate_variant:Nn \__keys_set_selective:nnnn { o } -\cs_new_protected:Npn \__keys_set_selective:nn #1#2 - { - \bool_set_true:N \l__keys_selective_bool - \keys_set:nn {#1} {#2} - \bool_set_false:N \l__keys_selective_bool - } -\cs_new_protected:Npn \__keys_set:n #1 +\cs_new_protected:Npn \__keys_set_keyval:n #1 { \bool_set_true:N \l__keys_no_value_bool - \__keys_set_aux:onn \l__keys_module_tl {#1} { } + \__keys_set_keyval:onn \l__keys_module_tl {#1} { } } -\cs_new_protected:Npn \__keys_set:nn #1#2 +\cs_new_protected:Npn \__keys_set_keyval:nn #1#2 { \bool_set_false:N \l__keys_no_value_bool - \__keys_set_aux:onn \l__keys_module_tl {#1} {#2} + \__keys_set_keyval:onn \l__keys_module_tl {#1} {#2} } -\cs_new_protected:Npn \__keys_set_aux:nnn #1#2#3 +\cs_new_protected:Npn \__keys_set_keyval:nnn #1#2#3 { \tl_set:Nx \l_keys_path_tl { \tl_if_blank:nF {#1} { #1 / } - \__keys_remove_spaces:n {#2} + \__keys_trim_spaces:n {#2} } \tl_clear:N \l__keys_module_tl - \exp_after:wN \__keys_find_key_module:w \l_keys_path_tl / \q_stop + \tl_clear:N \l__keys_inherit_tl + \exp_after:wN \__keys_find_key_module:NNw + \exp_after:wN \l__keys_module_tl + \exp_after:wN \l_keys_key_tl + \l_keys_path_tl / \q_stop \__keys_value_or_default:n {#3} \bool_if:NTF \l__keys_selective_bool { \__keys_set_selective: } { \__keys_execute: } \tl_set:Nn \l__keys_module_tl {#1} } -\cs_generate_variant:Nn \__keys_set_aux:nnn { o } -\cs_new_protected:Npn \__keys_find_key_module:w #1 / #2 \q_stop +\cs_generate_variant:Nn \__keys_set_keyval:nnn { o } +\cs_new_protected:Npn \__keys_find_key_module:NNw #1#2#3 / #4 \q_stop { - \tl_if_blank:nTF {#2} - { \tl_set:Nn \l_keys_key_tl {#1} } + \tl_if_blank:nTF {#4} + { \tl_set:Nn #2 {#3} } { - \tl_put_right:Nx \l__keys_module_tl + \tl_put_right:Nx #1 { - \tl_if_empty:NF \l__keys_module_tl { / } - #1 + \tl_if_empty:NF #1 { / } + #3 } - \__keys_find_key_module:w #2 \q_stop + \__keys_find_key_module:NNw #1#2 #4 \q_stop } } \cs_new_protected:Npn \__keys_set_selective: @@ -12639,10 +12746,30 @@ \l_keys_value_tl { \c__keys_default_root_tl \l_keys_path_tl } } - { \tl_clear:N \l_keys_value_tl } + { + \tl_clear:N \l_keys_value_tl + \cs_if_exist:cT + { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl } + { \__keys_default_inherit: } + } } { \tl_set:Nn \l_keys_value_tl {#1} } } +\cs_new_protected:Npn \__keys_default_inherit: + { + \clist_map_inline:cn + { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl } + { + \cs_if_exist:cT + { \c__keys_default_root_tl ##1 / \l_keys_key_tl } + { + \tl_set_eq:Nc + \l_keys_value_tl + { \c__keys_default_root_tl ##1 / \l_keys_key_tl } + \clist_map_break: + } + } + } \cs_new_protected:Npn \__keys_execute: { \cs_if_exist:cTF { \c__keys_code_root_tl \l_keys_path_tl } @@ -12703,13 +12830,61 @@ } \cs_new_protected:Npn \__keys_store_unused: { - \clist_put_right:Nx \l__keys_unused_clist + \quark_if_no_value:NTF \l__keys_relative_tl + { + \clist_put_right:Nx \l__keys_unused_clist + { + \exp_not:o \l_keys_key_tl + \bool_if:NF \l__keys_no_value_bool + { = { \exp_not:o \l_keys_value_tl } } + } + } + { + \tl_if_empty:NTF \l__keys_relative_tl + { + \clist_put_right:Nx \l__keys_unused_clist + { + \exp_not:o \l_keys_path_tl + \bool_if:NF \l__keys_no_value_bool + { = { \exp_not:o \l_keys_value_tl } } + } + } + { \__keys_store_unused_aux: } + } + } +\cs_new_protected:Npn \__keys_store_unused_aux: + { + \tl_set:Nx \l__keys_relative_tl + { \exp_args:No \__keys_trim_spaces:n \l__keys_relative_tl } + \use:x { - \exp_not:o \l_keys_key_tl - \bool_if:NF \l__keys_no_value_bool - { = { \exp_not:o \l_keys_value_tl } } + \cs_set_protected:Npn \__keys_store_unused:w + ####1 \l__keys_relative_tl / + ####2 \l__keys_relative_tl / + ####3 \exp_not:N \q_stop + } + { + \tl_if_blank:nF {##1} + { + \__kernel_msg_error:nnxx { kernel } { bad-relative-key-path } + \l_keys_path_tl + \l__keys_relative_tl + } + \clist_put_right:Nx \l__keys_unused_clist + { + \exp_not:n {##2} + \bool_if:NF \l__keys_no_value_bool + { = { \exp_not:o \l_keys_value_tl } } + } + } + \use:x + { + \__keys_store_unused:w \l_keys_path_tl + \l__keys_relative_tl / \l__keys_relative_tl / + \exp_not:N \q_stop } } +\cs_new_protected:Npn \__keys_store_unused:w { } \cs_new:Npn \__keys_choice_find:n #1 { \tl_if_empty:NTF \l__keys_inherit_tl @@ -12721,8 +12896,8 @@ } \cs_new:Npn \__keys_choice_find:nn #1#2 { - \cs_if_exist:cTF { \c__keys_code_root_tl #1 / \__keys_remove_spaces:n {#2} } - { \use:c { \c__keys_code_root_tl #1 / \__keys_remove_spaces:n {#2} } {#2} } + \cs_if_exist:cTF { \c__keys_code_root_tl #1 / \__keys_trim_spaces:n {#2} } + { \use:c { \c__keys_code_root_tl #1 / \__keys_trim_spaces:n {#2} } {#2} } { \use:c { \c__keys_code_root_tl #1 / unknown } {#2} } } \cs_new:Npn \__keys_multichoice_find:n #1 @@ -12733,17 +12908,20 @@ \cs_new:Npn \__keys_parent:w #1 / #2 / #3 \q_stop #4 { \tl_if_blank:nTF {#2} - { \use_none:n #4 } + { + \tl_if_blank:nF {#4} + { \use_none:n #4 } + } { \__keys_parent:w #2 / #3 \q_stop { #4 / #1 } } } -\cs_new:Npn \__keys_remove_spaces:n #1 +\cs_new:Npn \__keys_trim_spaces:n #1 { \tl_trim_spaces:o { \tl_to_str:n {#1} } } \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF } { \cs_if_exist:cTF - { \c__keys_code_root_tl \__keys_remove_spaces:n { #1 / #2 } } + { \c__keys_code_root_tl \__keys_trim_spaces:n { #1 / #2 } } { \prg_return_true: } { \prg_return_false: } } @@ -12751,7 +12929,7 @@ { p , T , F , TF } { \cs_if_exist:cTF - { \c__keys_code_root_tl \__keys_remove_spaces:n { #1 / #2 / #3 } } + { \c__keys_code_root_tl \__keys_trim_spaces:n { #1 / #2 / #3 } } { \prg_return_true: } { \prg_return_false: } } @@ -12762,7 +12940,7 @@ \cs_new_protected:Npn \__keys_show:Nnn #1#2#3 { #1 { LaTeX / kernel } { show-key } - { \__keys_remove_spaces:n { #2 / #3 } } + { \__keys_trim_spaces:n { #2 / #3 } } { \keys_if_exist:nnT {#2} {#3} { @@ -12771,13 +12949,16 @@ \exp_args:Nc \token_get_replacement_spec:N { \c__keys_code_root_tl - \__keys_remove_spaces:n { #2 / #3 } + \__keys_trim_spaces:n { #2 / #3 } } } } } { } { } } +\__kernel_msg_new:nnnn { kernel } { bad-relative-key-path } + { The~key~'#1'~is~not~inside~the~'#2'~path. } + { The~key~'#1'~cannot~be~expressed~relative~to~path~'#2'. } \__kernel_msg_new:nnnn { kernel } { boolean-values-only } { Key~'#1'~accepts~boolean~values~only. } { The~key~'#1'~only~accepts~the~values~'true'~and~'false'. } @@ -26319,7 +26500,7 @@ { 2 + \tl_count_tokens:n {#2} + } \__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } \cs_new_protected:Npn \tl_set_from_file:Nnn #1#2#3 - { \file_get:nnN {#2} {#3} #1 } + { \file_get:nnN {#3} {#2} #1 } \cs_generate_variant:Nn \tl_set_from_file:Nnn { c } \__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } \cs_new_protected:Npn \tl_gset_from_file:Nnn #1#2#3 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index a261d8479a9..e7d654d6a8a 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/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{2019-01-28}% +\def\ExplFileDate{2019-02-15}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index e99ddd19f45..d769fe86182 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-01-28}% +\def\ExplFileDate{2019-02-15}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def index bf2801a5f87..9c6af22ed72 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx \ProvidesExplFile - {l3dvipdfmx.def}{2019-01-28}{} + {l3dvipdfmx.def}{2019-02-15}{} {L3 Experimental driver: dvipdfmx} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def index 4a5360acf1d..dd10a02d9f9 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx \ProvidesExplFile - {l3dvips.def}{2019-01-28}{} + {l3dvips.def}{2019-02-15}{} {L3 Experimental driver: dvips} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def index 3de26c06f55..b6abca2dd71 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx \ProvidesExplFile - {l3dvisvgm.def}{2019-01-28}{} + {l3dvisvgm.def}{2019-02-15}{} {L3 Experimental driver: dvisvgm} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def index b450be1a246..997a498f6f6 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx \ProvidesExplFile - {l3pdfmode.def}{2019-01-28}{} + {l3pdfmode.def}{2019-02-15}{} {L3 Experimental driver: PDF mode} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def index 2c554d054f4..2684228d0c7 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx \ProvidesExplFile - {l3xdvipdfmx.def}{2019-01-28}{} + {l3xdvipdfmx.def}{2019-02-15}{} {L3 Experimental driver: xdvipdfmx} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 |