summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3kernel
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-02-16 22:39:34 +0000
committerKarl Berry <karl@freefriends.org>2019-02-16 22:39:34 +0000
commit0d6184fa42ed741f956e55a1c6e7d48ab0cac9d8 (patch)
tree683bec4b5fa84f1f9b84aaf0d4fdf8db2be83728 /Master/texmf-dist/tex/latex/l3kernel
parentf3d6932fe4c7946fdb0582306715b251bf561f7e (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')
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex379
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvips.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def2
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