Skip to content

Commit

Permalink
Enable key inheritance for defaults (fixes #504)
Browse files Browse the repository at this point in the history
  • Loading branch information
josephwright committed Jan 29, 2019
1 parent ef1278b commit 3008882
Show file tree
Hide file tree
Showing 14 changed files with 44 additions and 3 deletions.
1 change: 1 addition & 0 deletions l3kernel/CHANGELOG.md
Expand Up @@ -15,6 +15,7 @@ this project uses date-based 'snapshot' version identifiers.
### Fixed

- Handling of nested key setting when filtering, _etc._ (see #526)
- Inheritance of default values (see #504)

## [2019-01-28]

Expand Down
29 changes: 27 additions & 2 deletions l3kernel/l3keys.dtx
Expand Up @@ -2364,6 +2364,7 @@
% \end{macro}
%
% \begin{macro}{\@@_value_or_default:n}
% \begin{macro}{\@@_default_inherit:}
% If a value is given, return it as |#1|, otherwise send a default if
% available.
% \begin{macrocode}
Expand All @@ -2377,12 +2378,33 @@
\l_keys_value_tl
{ \c_@@_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_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
{ \@@_default_inherit: }
}
}
{ \tl_set:Nn \l_keys_value_tl {#1} }
}
\cs_new_protected:Npn \@@_default_inherit:
{
\clist_map_inline:cn
{ \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
{
\cs_if_exist:cT
{ \c_@@_default_root_tl ##1 / \l_keys_key_tl }
{
\tl_set_eq:Nc
\l_keys_value_tl
{ \c_@@_default_root_tl ##1 / \l_keys_key_tl }
\clist_map_break:
}
}
}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@@_execute:, \@@_execute_inherit:, \@@_execute_unknown:}
% \begin{macro}[EXP]{\@@_execute:nn}
Expand Down Expand Up @@ -2567,7 +2589,10 @@
\cs_new:Npn \@@_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 }
}
{
\@@_parent:w #2 / #3 \q_stop { #4 / #1 }
}
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl001.luatex.tlg
Expand Up @@ -3382,6 +3382,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl001.ptex.tlg
Expand Up @@ -3675,6 +3675,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl001.tlg
Expand Up @@ -3675,6 +3675,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl001.uptex.tlg
Expand Up @@ -3675,6 +3675,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl001.xetex.tlg
Expand Up @@ -3420,6 +3420,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl003.luatex.tlg
Expand Up @@ -3382,6 +3382,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl003.ptex.tlg
Expand Up @@ -3675,6 +3675,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl003.tlg
Expand Up @@ -3675,6 +3675,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl003.uptex.tlg
Expand Up @@ -3675,6 +3675,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
1 change: 1 addition & 0 deletions l3kernel/testfiles/m3expl003.xetex.tlg
Expand Up @@ -3420,6 +3420,7 @@ Defining \__keys_find_key_module:w on line ...
Defining \__keys_set_selective: on line ...
Defining \__keys_check_groups: on line ...
Defining \__keys_value_or_default:n on line ...
Defining \__keys_default_inherit: on line ...
Defining \__keys_execute: on line ...
Defining \__keys_execute_inherit: on line ...
Defining \__keys_execute_unknown: on line ...
Expand Down
4 changes: 3 additions & 1 deletion l3kernel/testfiles/m3keys003.lvt
Expand Up @@ -160,6 +160,7 @@
\keys_define:nn { module }
{
key-one .code:n = \tl_show:n {#1} ,
key-one .default:n = foo ,
key-two .choices:nn = { a , b } { \tl_show:n {#1} }
}
\keys_define:nn { module-two }
Expand All @@ -169,7 +170,8 @@
\keys_set:nn { module-two / path }
{
key-one = a ,
key-two = b
key-two = b ,
key-one
}
\keys_set:nn { module-two / path }
{
Expand Down
3 changes: 3 additions & 0 deletions l3kernel/testfiles/m3keys003.tlg
Expand Up @@ -136,6 +136,9 @@ l. ... }
> b.
<recently read> }
l. ... }
> foo.
<recently read> }
l. ... }
! LaTeX3 Error: The key 'module-two/path/key-not-defined' is unknown and is
(LaTeX3) being ignored.
For immediate help type H <return>.
Expand Down

0 comments on commit 3008882

Please sign in to comment.