diff options
Diffstat (limited to 'macros/latex/contrib/l3kernel/l3keys.dtx')
-rw-r--r-- | macros/latex/contrib/l3kernel/l3keys.dtx | 433 |
1 files changed, 219 insertions, 214 deletions
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx index 7f2b4ad391..d172a1a041 100644 --- a/macros/latex/contrib/l3kernel/l3keys.dtx +++ b/macros/latex/contrib/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -639,8 +639,8 @@ % later. % \end{function} % -% \begin{variable}[updated = 2015-07-14] -% {\l_keys_key_tl, \l_keys_path_tl, \l_keys_value_tl} +% \begin{variable}[updated = 2020-02-08] +% {\l_keys_key_str, \l_keys_path_str, \l_keys_value_tl} % For each key processed, information of the full \emph{path} of the % key, the \emph{name} of the key and the \emph{value} of the key is % available within three token list variables. These may be used within @@ -661,13 +661,12 @@ % \keys_set:nn { mymodule } { subset / key-a = some-value } % \end{verbatim} % has path \texttt{mymodule/subset/key-a}. This information is stored in -% \cs{l_keys_path_tl}, and will have been processed by \cs{tl_to_str:n}. +% \cs{l_keys_path_str}. % % The \emph{name} of the key is the part of the path after the last % \texttt{/}, and thus is not unique. In the preceding examples, both keys % have name \texttt{key-a} despite having different paths. This information -% is stored in \cs{l_keys_key_tl}, and will have been processed by -% \cs{tl_to_str:n}. +% is stored in \cs{l_keys_key_str}. % \end{variable} % % \section{Handling of unknown keys} @@ -681,7 +680,7 @@ % \keys_define:nn { mymodule } % { % unknown .code:n = -% You~tried~to~set~key~'\l_keys_key_tl'~to~'#1'. +% You~tried~to~set~key~'\l_keys_key_str'~to~'#1'. % } % \end{verbatim} % @@ -1169,28 +1168,28 @@ % % \begin{variable} % { -% \c_@@_code_root_tl , -% \c_@@_default_root_tl , -% \c_@@_groups_root_tl , -% \c_@@_inherit_root_tl , -% \c_@@_type_root_tl , -% \c_@@_validate_root_tl +% \c_@@_code_root_str , +% \c_@@_default_root_str , +% \c_@@_groups_root_str , +% \c_@@_inherit_root_str , +% \c_@@_type_root_str , +% \c_@@_validate_root_str % } % Various storage areas for the different data which make up keys. % \begin{macrocode} -\tl_const:Nn \c_@@_code_root_tl { key~code~>~ } -\tl_const:Nn \c_@@_default_root_tl { key~default~>~ } -\tl_const:Nn \c_@@_groups_root_tl { key~groups~>~ } -\tl_const:Nn \c_@@_inherit_root_tl { key~inherit~>~ } -\tl_const:Nn \c_@@_type_root_tl { key~type~>~ } -\tl_const:Nn \c_@@_validate_root_tl { key~validate~>~ } +\str_const:Nn \c_@@_code_root_str { key~code~>~ } +\str_const:Nn \c_@@_default_root_str { key~default~>~ } +\str_const:Nn \c_@@_groups_root_str { key~groups~>~ } +\str_const:Nn \c_@@_inherit_root_str { key~inherit~>~ } +\str_const:Nn \c_@@_type_root_str { key~type~>~ } +\str_const:Nn \c_@@_validate_root_str { key~validate~>~ } % \end{macrocode} % \end{variable} % -% \begin{variable}{\c_@@_props_root_tl} +% \begin{variable}{\c_@@_props_root_str} % The prefix for storing properties. % \begin{macrocode} -\tl_const:Nn \c_@@_props_root_tl { key~prop~>~ } +\str_const:Nn \c_@@_props_root_str { key~prop~>~ } % \end{macrocode} % \end{variable} % @@ -1212,17 +1211,19 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_keys_key_tl} -% The name of a key itself: needed when setting keys. +% \begin{variable}{\l_keys_key_str, \l_keys_key_tl} +% The name of a key itself: needed when setting keys. The |tl| version +% is deprecated but has to be handled manually. % \begin{macrocode} +\str_new:N \l_keys_key_str \tl_new:N \l_keys_key_tl % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_module_tl} +% \begin{variable}{\l_@@_module_str} % The module for an entire set of keys. % \begin{macrocode} -\tl_new:N \l_@@_module_tl +\str_new:N \l_@@_module_str % \end{macrocode} % \end{variable} % @@ -1241,33 +1242,36 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_keys_path_tl} +% \begin{variable}{\l_keys_path_str, \l_keys_path_tl} % The \enquote{path} of the current key is stored here: this is -% available to the programmer and so is public. +% available to the programmer and so is public. The older version is +% deprecated but has to be handled manually. % \begin{macrocode} +\str_new:N \l_keys_path_str \tl_new:N \l_keys_path_tl % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_inherit_tl} +% \begin{variable}{\l_@@_inherit_str} % \begin{macrocode} -\tl_new:N \l_@@_inherit_tl +\str_new:N \l_@@_inherit_str % \end{macrocode} % \end{variable} % % \begin{variable}{\l_@@_relative_tl} -% The relative path for passing keys back to the user. +% The relative path for passing keys back to the user. As this can +% be explicitly no-value, it must be a token list. % \begin{macrocode} \tl_new:N \l_@@_relative_tl \tl_set:Nn \l_@@_relative_tl { \q_no_value } % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_property_tl} +% \begin{variable}{\l_@@_property_str} % The \enquote{property} begin set for a key at definition time is % stored here. % \begin{macrocode} -\tl_new:N \l_@@_property_tl +\str_new:N \l_@@_property_str % \end{macrocode} % \end{variable} % @@ -1321,12 +1325,12 @@ % removing any leading |/| (which is not needed here). % \begin{macrocode} \cs_new_protected:Npn \keys_define:nn - { \@@_define:onn \l_@@_module_tl } + { \@@_define:onn \l_@@_module_str } \cs_new_protected:Npn \@@_define:nnn #1#2#3 { - \tl_set:Nx \l_@@_module_tl { \@@_trim_spaces:n {#2} } + \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} } \keyval_parse:NNn \@@_define:n \@@_define:nn {#3} - \tl_set:Nn \l_@@_module_tl {#1} + \str_set:Nn \l_@@_module_str {#1} } \cs_generate_variant:Nn \@@_define:nnn { o } % \end{macrocode} @@ -1354,14 +1358,13 @@ \cs_new_protected:Npn \@@_define_aux:nn #1#2 { \@@_property_find:n {#1} - \cs_if_exist:cTF { \c_@@_props_root_tl \l_@@_property_tl } - { \@@_define_code:n {#2} - } + \cs_if_exist:cTF { \c_@@_props_root_str \l_@@_property_str } + { \@@_define_code:n {#2} } { - \tl_if_empty:NF \l_@@_property_tl + \str_if_empty:NF \l_@@_property_str { \__kernel_msg_error:nnxx { kernel } { key-property-unknown } - { \l_@@_property_tl } { \l_keys_path_tl } + { \l_@@_property_str } { \l_keys_path_str } } } } @@ -1378,43 +1381,44 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_property_find:n #1 { - \tl_set:Nx \l_@@_property_tl { \@@_trim_spaces:n {#1} } - \exp_after:wN \@@_property_find:w \l_@@_property_tl . . + \str_set:Nx \l_@@_property_str { \@@_trim_spaces:n {#1} } + \exp_after:wN \@@_property_find:w \l_@@_property_str . . \q_stop {#1} } \cs_new_protected:Npn \@@_property_find:w #1 . #2 . #3 \q_stop #4 { \tl_if_blank:nTF {#3} { - \tl_clear:N \l_@@_property_tl + \str_clear:N \l_@@_property_str \__kernel_msg_error:nnn { kernel } { key-no-property } {#4} } { \str_if_eq:nnTF {#3} { . } { - \tl_set:Nx \l_keys_path_tl + \str_set:Nx \l_keys_path_str { - \tl_if_empty:NF \l_@@_module_tl - { \l_@@_module_tl / } + \str_if_empty:NF \l_@@_module_str + { \l_@@_module_str / } \tl_trim_spaces:n {#1} } - \tl_set:Nn \l_@@_property_tl { . #2 } + \str_set:Nn \l_@@_property_str { . #2 } } { - \tl_set:Nx \l_keys_path_tl { \l_@@_module_tl / #1 . #2 } + \str_set:Nx \l_keys_path_str { \l_@@_module_str / #1 . #2 } \@@_property_search:w #3 \q_stop } + \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str } } \cs_new_protected:Npn \@@_property_search:w #1 . #2 \q_stop { \str_if_eq:nnTF {#2} { . } { - \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl } - \tl_set:Nn \l_@@_property_tl { . #1 } + \str_set:Nx \l_keys_path_str { \l_keys_path_str } + \str_set:Nn \l_@@_property_str { . #1 } } { - \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl . #1 } + \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 } \@@_property_search:w #2 \q_stop } } @@ -1435,15 +1439,15 @@ \bool_if:NTF \l_@@_no_value_bool { \exp_after:wN \@@_define_code:w - \l_@@_property_tl \q_stop - { \use:c { \c_@@_props_root_tl \l_@@_property_tl } } + \l_@@_property_str \q_stop + { \use:c { \c_@@_props_root_str \l_@@_property_str } } { \__kernel_msg_error:nnxx { kernel } - { key-property-requires-value } { \l_@@_property_tl } - { \l_keys_path_tl } + { key-property-requires-value } { \l_@@_property_str } + { \l_keys_path_str } } } - { \use:c { \c_@@_props_root_tl \l_@@_property_tl } {#1} } + { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} } } \exp_last_unbraced:NNNNo \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \q_stop @@ -1463,14 +1467,14 @@ { \bool_if_exist:NF #1 { \bool_new:N #1 } \@@_choice_make: - \@@_cmd_set:nx { \l_keys_path_tl / true } + \@@_cmd_set:nx { \l_keys_path_str / true } { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 } - \@@_cmd_set:nx { \l_keys_path_tl / false } + \@@_cmd_set:nx { \l_keys_path_str / false } { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 } - \@@_cmd_set:nn { \l_keys_path_tl / unknown } + \@@_cmd_set:nn { \l_keys_path_str / unknown } { \__kernel_msg_error:nnx { kernel } { boolean-values-only } - { \l_keys_key_tl } + { \l_keys_key_str } } \@@_default_set:n { true } } @@ -1485,14 +1489,14 @@ { \bool_if_exist:NF #1 { \bool_new:N #1 } \@@_choice_make: - \@@_cmd_set:nx { \l_keys_path_tl / true } + \@@_cmd_set:nx { \l_keys_path_str / true } { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 } - \@@_cmd_set:nx { \l_keys_path_tl / false } + \@@_cmd_set:nx { \l_keys_path_str / false } { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 } - \@@_cmd_set:nn { \l_keys_path_tl / unknown } + \@@_cmd_set:nn { \l_keys_path_str / unknown } { \__kernel_msg_error:nnx { kernel } { boolean-values-only } - { \l_keys_key_tl } + { \l_keys_key_str } } \@@_default_set:n { true } } @@ -1514,14 +1518,14 @@ \cs_new_protected:Npn \@@_choice_make:N #1 { \cs_if_exist:cTF - { \c_@@_type_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_type_root_str \@@_parent:o \l_keys_path_str } { \str_if_eq:vnTF - { \c_@@_type_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_type_root_str \@@_parent:o \l_keys_path_str } { choice } { \__kernel_msg_error:nnxx { kernel } { nested-choice-key } - { \l_keys_path_tl } { \@@_parent:o \l_keys_path_tl } + { \l_keys_path_tl } { \@@_parent:o \l_keys_path_str } } { \@@_choice_make_aux:N #1 } } @@ -1529,13 +1533,13 @@ } \cs_new_protected:Npn \@@_choice_make_aux:N #1 { - \cs_set_nopar:cpn { \c_@@_type_root_tl \l_keys_path_tl } + \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str } { choice } - \@@_cmd_set:nn { \l_keys_path_tl } { #1 {##1} } - \@@_cmd_set:nn { \l_keys_path_tl / unknown } + \@@_cmd_set:nn { \l_keys_path_str } { #1 {##1} } + \@@_cmd_set:nn { \l_keys_path_str / unknown } { \__kernel_msg_error:nnxx { kernel } { key-choice-unknown } - { \l_keys_path_tl } {##1} + { \l_keys_path_str } {##1} } } % \end{macrocode} @@ -1560,7 +1564,7 @@ { \int_incr:N \l_keys_choice_int \@@_cmd_set:nx - { \l_keys_path_tl / \@@_trim_spaces:n {##1} } + { \l_keys_path_str / \@@_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 @@ -1579,7 +1583,7 @@ % defining a new key, then saves the code. % \begin{macrocode} \cs_new_protected:Npn \@@_cmd_set:nn #1#2 - { \cs_set_protected:cpn { \c_@@_code_root_tl #1 } ##1 {#2} } + { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} } \cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo } % \end{macrocode} % \end{macro} @@ -1593,12 +1597,12 @@ \tl_if_empty:nTF {#1} { \cs_set_eq:cN - { \c_@@_default_root_tl \l_keys_path_tl } + { \c_@@_default_root_str \l_keys_path_str } \tex_undefined:D } { \cs_set_nopar:cpx - { \c_@@_default_root_tl \l_keys_path_tl } + { \c_@@_default_root_str \l_keys_path_str } { \exp_not:n {#1} } \@@_value_requirement:nn { required } { false } } @@ -1618,11 +1622,11 @@ \clist_set:Nn \l_@@_groups_clist {#1} \clist_if_empty:NTF \l_@@_groups_clist { - \cs_set_eq:cN { \c_@@_groups_root_tl \l_keys_path_tl } + \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str } \tex_undefined:D } { - \cs_set_eq:cN { \c_@@_groups_root_tl \l_keys_path_tl } + \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str } \l_@@_groups_clist } } @@ -1636,7 +1640,7 @@ \cs_new_protected:Npn \@@_inherit:n #1 { \@@_undefine: - \cs_set_nopar:cpn { \c_@@_inherit_root_tl \l_keys_path_tl } {#1} + \cs_set_nopar:cpn { \c_@@_inherit_root_str \l_keys_path_str } {#1} } % \end{macrocode} % \end{macro} @@ -1647,11 +1651,11 @@ \cs_new_protected:Npn \@@_initialise:n #1 { \cs_if_exist:cTF - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \@@_execute_inherit: } { - \tl_clear:N \l_@@_inherit_tl - \cs_if_exist_use:cT { \c_@@_code_root_tl \l_keys_path_tl } { {#1} } + \str_clear:N \l_@@_inherit_str + \cs_if_exist_use:cT { \c_@@_code_root_str \l_keys_path_str } { {#1} } } } % \end{macrocode} @@ -1663,14 +1667,14 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_meta_make:n #1 { - \@@_cmd_set:Vo \l_keys_path_tl + \@@_cmd_set:Vo \l_keys_path_str { \exp_after:wN \keys_set:nn - \exp_after:wN { \l_@@_module_tl } {#1} + \exp_after:wN { \l_@@_module_str } {#1} } } \cs_new_protected:Npn \@@_meta_make:nn #1#2 - { \@@_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } } + { \@@_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } } % \end{macrocode} % \end{macro} % \end{macro} @@ -1684,8 +1688,8 @@ \exp_after:wN \@@_find_key_module:NNw \exp_after:wN \l_@@_tmpa_tl \exp_after:wN \l_@@_tmpb_tl - \l_keys_path_tl / \q_stop - \@@_cmd_set:nx { \l_keys_path_tl } + \l_keys_path_str / \q_stop + \@@_cmd_set:nx { \l_keys_path_str } { \exp_not:c { prop_ #2 put:Nnn } \exp_not:N #1 @@ -1707,7 +1711,7 @@ { code , default , groups , inherit , type , validate } { \cs_set_eq:cN - { \tl_use:c { c_@@_ ##1 _root_tl } \l_keys_path_tl } + { \tl_use:c { c_@@_ ##1 _root_str } \l_keys_path_str } \tex_undefined:D } } @@ -1730,17 +1734,17 @@ { true } { \cs_set_eq:cc - { \c_@@_validate_root_tl \l_keys_path_tl } + { \c_@@_validate_root_str \l_keys_path_str } { @@_validate_ #1 : } } { false } { \cs_if_eq:ccT - { \c_@@_validate_root_tl \l_keys_path_tl } + { \c_@@_validate_root_str \l_keys_path_str } { @@_validate_ #1 : } { \cs_set_eq:cN - { \c_@@_validate_root_tl \l_keys_path_tl } + { \c_@@_validate_root_str \l_keys_path_str } \tex_undefined:D } } @@ -1756,7 +1760,7 @@ \bool_if:NF \l_@@_no_value_bool { \__kernel_msg_error:nnxx { kernel } { value-forbidden } - { \l_keys_path_tl } { \l_keys_value_tl } + { \l_keys_path_str } { \l_keys_value_tl } \@@_validate_cleanup:w } } @@ -1765,7 +1769,7 @@ \bool_if:NT \l_@@_no_value_bool { \__kernel_msg_error:nnx { kernel } { value-required } - { \l_keys_path_tl } + { \l_keys_path_str } \@@_validate_cleanup:w } } @@ -1783,7 +1787,7 @@ \cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4 { \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 } - \@@_cmd_set:nx { \l_keys_path_tl } + \@@_cmd_set:nx { \l_keys_path_str } { \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 @@ -1816,13 +1820,13 @@ % \begin{macro}{.bool_gset:N, .bool_gset:c} % One function for this. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:N } #1 { \@@_bool_set:Nn #1 { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:c } #1 { \@@_bool_set:cn {#1} { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:N } #1 { \@@_bool_set:Nn #1 { g } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:c } #1 { \@@_bool_set:cn {#1} { g } } % \end{macrocode} % \end{macro} @@ -1832,13 +1836,13 @@ % \begin{macro}{.bool_gset_inverse:N, .bool_gset_inverse:c} % One function for this. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:N } #1 { \@@_bool_set_inverse:Nn #1 { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:c } #1 { \@@_bool_set_inverse:cn {#1} { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:N } #1 { \@@_bool_set_inverse:Nn #1 { g } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:c } #1 { \@@_bool_set_inverse:cn {#1} { g } } % \end{macrocode} % \end{macro} @@ -1848,7 +1852,7 @@ % Making a choice is handled internally, as it is also needed by % \texttt{.generate_choices:n}. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .choice: } +\cs_new_protected:cpn { \c_@@_props_root_str .choice: } { \@@_choice_make: } % \end{macrocode} % \end{macro} @@ -1859,13 +1863,13 @@ % Here, |#1| consists of two separate % arguments, hence the slightly odd-looking implementation. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:nn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:nn } #1 { \@@_choices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:Vn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:Vn } #1 { \exp_args:NV \@@_choices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:on } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:on } #1 { \exp_args:No \@@_choices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:xn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:xn } #1 { \exp_args:Nx \@@_choices_make:nn #1 } % \end{macrocode} % \end{macro} @@ -1874,21 +1878,21 @@ % Creating code is simply a case of passing through to the underlying % \texttt{set} function. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .code:n } #1 - { \@@_cmd_set:nn { \l_keys_path_tl } {#1} } +\cs_new_protected:cpn { \c_@@_props_root_str .code:n } #1 + { \@@_cmd_set:nn { \l_keys_path_str } {#1} } % \end{macrocode} % \end{macro} % % \begin{macro}{.clist_set:N, .clist_set:c} % \begin{macro}{.clist_gset:N, .clist_gset:c} % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:N } #1 { \@@_variable_set:NnnN #1 { clist } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:c } #1 { \@@_variable_set:cnnN {#1} { clist } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:N } #1 { \@@_variable_set:NnnN #1 { clist } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:c } #1 { \@@_variable_set:cnnN {#1} { clist } { g } n } % \end{macrocode} % \end{macro} @@ -1897,13 +1901,13 @@ % \begin{macro}{.default:n, .default:V, .default:o, .default:x} % Expansion is left to the internal functions. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .default:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:n } #1 { \@@_default_set:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .default:V } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:V } #1 { \exp_args:NV \@@_default_set:n #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .default:o } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:o } #1 { \exp_args:No \@@_default_set:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .default:x } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:x } #1 { \exp_args:Nx \@@_default_set:n {#1} } % \end{macrocode} % \end{macro} @@ -1912,13 +1916,13 @@ % \begin{macro}{.dim_gset:N, .dim_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:N } #1 { \@@_variable_set_required:NnnN #1 { dim } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:c } #1 { \@@_variable_set_required:cnnN {#1} { dim } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:N } #1 { \@@_variable_set_required:NnnN #1 { dim } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { dim } { g } n } % \end{macrocode} % \end{macro} @@ -1928,13 +1932,13 @@ % \begin{macro}{.fp_gset:N, .fp_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:N } #1 { \@@_variable_set_required:NnnN #1 { fp } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:c } #1 { \@@_variable_set_required:cnnN {#1} { fp } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:N } #1 { \@@_variable_set_required:NnnN #1 { fp } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { fp } { g } n } % \end{macrocode} % \end{macro} @@ -1943,7 +1947,7 @@ % \begin{macro}{.groups:n} % A single property to create groups of keys. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .groups:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .groups:n } #1 { \@@_groups_set:n {#1} } % \end{macrocode} % \end{macro} @@ -1951,7 +1955,7 @@ % \begin{macro}{.inherit:n} % Nothing complex: only one variant at the moment! % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .inherit:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .inherit:n } #1 { \@@_inherit:n {#1} } % \end{macrocode} % \end{macro} @@ -1959,13 +1963,13 @@ % \begin{macro}{.initial:n, .initial:V, .initial:o, .initial:x} % The standard hand-off approach. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:n } #1 { \@@_initialise:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:V } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:V } #1 { \exp_args:NV \@@_initialise:n #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:o } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:o } #1 { \exp_args:No \@@_initialise:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:x } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:x } #1 { \exp_args:Nx \@@_initialise:n {#1} } % \end{macrocode} % \end{macro} @@ -1974,13 +1978,13 @@ % \begin{macro}{.int_gset:N, .int_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_set:N } #1 { \@@_variable_set_required:NnnN #1 { int } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_set:c } #1 { \@@_variable_set_required:cnnN {#1} { int } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:N } #1 { \@@_variable_set_required:NnnN #1 { int } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { int } { g } n } % \end{macrocode} % \end{macro} @@ -1989,7 +1993,7 @@ % \begin{macro}{.meta:n} % Making a meta is handled internally. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .meta:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .meta:n } #1 { \@@_meta_make:n {#1} } % \end{macrocode} % \end{macro} @@ -1998,7 +2002,7 @@ % Meta with path: potentially lots of variants, but for the moment % no so many defined. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .meta:nn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .meta:nn } #1 { \@@_meta_make:nn #1 } % \end{macrocode} % \end{macro} @@ -2012,15 +2016,15 @@ % The same idea as \texttt{.choice:} and \texttt{.choices:nn}, but % where more than one choice is allowed. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoice: } +\cs_new_protected:cpn { \c_@@_props_root_str .multichoice: } { \@@_multichoice_make: } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:nn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:nn } #1 { \@@_multichoices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:Vn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:Vn } #1 { \exp_args:NV \@@_multichoices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:on } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:on } #1 { \exp_args:No \@@_multichoices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:xn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:xn } #1 { \exp_args:Nx \@@_multichoices_make:nn #1 } % \end{macrocode} % \end{macro} @@ -2029,13 +2033,13 @@ % \begin{macro}{.muskip_set:N, .muskip_set:c, .muskip_gset:N, .muskip_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:N } #1 { \@@_variable_set_required:NnnN #1 { muskip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:c } #1 { \@@_variable_set_required:cnnN {#1} { muskip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:N } #1 { \@@_variable_set_required:NnnN #1 { muskip } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { muskip } { g } n } % \end{macrocode} % \end{macro} @@ -2043,13 +2047,13 @@ % \begin{macro}{.prop_put:N, .prop_put:c, .prop_gput:N, .prop_gput:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:N } #1 { \@@_prop_put:Nn #1 { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:c } #1 { \@@_prop_put:cn {#1} { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:N } #1 { \@@_prop_put:Nn #1 { g } } -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:c } #1 { \@@_prop_put:cn {#1} { g } } % \end{macrocode} % \end{macro} @@ -2058,13 +2062,13 @@ % \begin{macro}{.skip_gset:N, .skip_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:N } #1 { \@@_variable_set_required:NnnN #1 { skip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:c } #1 { \@@_variable_set_required:cnnN {#1} { skip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:N } #1 { \@@_variable_set_required:NnnN #1 { skip } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { skip } { g } n } % \end{macrocode} % \end{macro} @@ -2076,21 +2080,21 @@ % \begin{macro}{.tl_gset_x:N, .tl_gset_x:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:N } #1 { \@@_variable_set:NnnN #1 { tl } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:c } #1 { \@@_variable_set:cnnN {#1} { tl } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1 { \@@_variable_set:NnnN #1 { tl } { } x } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1 { \@@_variable_set:cnnN {#1} { tl } { } x } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:N } #1 { \@@_variable_set:NnnN #1 { tl } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:c } #1 { \@@_variable_set:cnnN {#1} { tl } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1 { \@@_variable_set:NnnN #1 { tl } { g } x } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1 { \@@_variable_set:cnnN {#1} { tl } { g } x } % \end{macrocode} % \end{macro} @@ -2101,7 +2105,7 @@ % \begin{macro}{.undefine:} % Another simple wrapper. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .undefine: } +\cs_new_protected:cpn { \c_@@_props_root_str .undefine: } { \@@_undefine: } % \end{macrocode} % \end{macro} @@ -2110,9 +2114,9 @@ % \begin{macro}{.value_required:n} % These are very similar, so both call the same function. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .value_forbidden:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .value_forbidden:n } #1 { \@@_value_requirement:nn { forbidden } {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .value_required:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .value_required:n } #1 { \@@_value_requirement:nn { required } {#1} } % \end{macrocode} % \end{macro} @@ -2150,12 +2154,12 @@ } \cs_generate_variant:Nn \keys_set:nn { nV , nv , no } \cs_new_protected:Npn \@@_set:nn #1#2 - { \exp_args:No \@@_set:nnn \l_@@_module_tl {#1} {#2} } + { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} } \cs_new_protected:Npn \@@_set:nnn #1#2#3 { - \tl_set:Nx \l_@@_module_tl { \@@_trim_spaces:n {#2} } + \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} } \keyval_parse:NNn \@@_set_keyval:n \@@_set_keyval:nn {#3} - \tl_set:Nn \l_@@_module_tl {#1} + \str_set:Nn \l_@@_module_str {#1} } % \end{macrocode} % \end{macro} @@ -2354,12 +2358,12 @@ \cs_new_protected:Npn \@@_set_keyval:n #1 { \bool_set_true:N \l_@@_no_value_bool - \@@_set_keyval:onn \l_@@_module_tl {#1} { } + \@@_set_keyval:onn \l_@@_module_str {#1} { } } \cs_new_protected:Npn \@@_set_keyval:nn #1#2 { \bool_set_false:N \l_@@_no_value_bool - \@@_set_keyval:onn \l_@@_module_tl {#1} {#2} + \@@_set_keyval:onn \l_@@_module_str {#1} {#2} } % \end{macrocode} % The key path here can be fully defined, after which there is a search @@ -2370,33 +2374,34 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_set_keyval:nnn #1#2#3 { - \tl_set:Nx \l_keys_path_tl + \tl_set:Nx \l_keys_path_str { \tl_if_blank:nF {#1} { #1 / } \@@_trim_spaces:n {#2} } - \tl_clear:N \l_@@_module_tl - \tl_clear:N \l_@@_inherit_tl + \str_clear:N \l_@@_module_str + \str_clear:N \l_@@_inherit_str \exp_after:wN \@@_find_key_module:NNw - \exp_after:wN \l_@@_module_tl - \exp_after:wN \l_keys_key_tl - \l_keys_path_tl / \q_stop + \exp_after:wN \l_@@_module_str + \exp_after:wN \l_keys_key_str + \l_keys_path_str / \q_stop + \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str \@@_value_or_default:n {#3} \bool_if:NTF \l_@@_selective_bool { \@@_set_selective: } { \@@_execute: } - \tl_set:Nn \l_@@_module_tl {#1} + \str_set:Nn \l_@@_module_str {#1} } \cs_generate_variant:Nn \@@_set_keyval:nnn { o } \cs_new_protected:Npn \@@_find_key_module:NNw #1#2#3 / #4 \q_stop { \tl_if_blank:nTF {#4} - { \tl_set:Nn #2 {#3} } + { \str_set:Nn #2 {#3} } { - \tl_put_right:Nx #1 + \str_put_right:Nx #1 { - \tl_if_empty:NF #1 { / } + \str_if_empty:NF #1 { / } #3 } \@@_find_key_module:NNw #1#2 #4 \q_stop @@ -2410,10 +2415,10 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_set_selective: { - \cs_if_exist:cTF { \c_@@_groups_root_tl \l_keys_path_tl } + \cs_if_exist:cTF { \c_@@_groups_root_str \l_keys_path_str } { \clist_set_eq:Nc \l_@@_groups_clist - { \c_@@_groups_root_tl \l_keys_path_tl } + { \c_@@_groups_root_str \l_keys_path_str } \@@_check_groups: } { @@ -2469,16 +2474,16 @@ { \bool_if:NTF \l_@@_no_value_bool { - \cs_if_exist:cTF { \c_@@_default_root_tl \l_keys_path_tl } + \cs_if_exist:cTF { \c_@@_default_root_str \l_keys_path_str } { \tl_set_eq:Nc \l_keys_value_tl - { \c_@@_default_root_tl \l_keys_path_tl } + { \c_@@_default_root_str \l_keys_path_str } } { \tl_clear:N \l_keys_value_tl \cs_if_exist:cT - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \@@_default_inherit: } } } @@ -2487,14 +2492,14 @@ \cs_new_protected:Npn \@@_default_inherit: { \clist_map_inline:cn - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \cs_if_exist:cT - { \c_@@_default_root_tl ##1 / \l_keys_key_tl } + { \c_@@_default_root_str ##1 / \l_keys_key_str } { \tl_set_eq:Nc \l_keys_value_tl - { \c_@@_default_root_tl ##1 / \l_keys_key_tl } + { \c_@@_default_root_str ##1 / \l_keys_key_str } \clist_map_break: } } @@ -2514,15 +2519,15 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_execute: { - \cs_if_exist:cTF { \c_@@_code_root_tl \l_keys_path_tl } + \cs_if_exist:cTF { \c_@@_code_root_str \l_keys_path_str } { - \cs_if_exist_use:c { \c_@@_validate_root_tl \l_keys_path_tl } - \cs:w \c_@@_code_root_tl \l_keys_path_tl \exp_after:wN \cs_end: + \cs_if_exist_use:c { \c_@@_validate_root_str \l_keys_path_str } + \cs:w \c_@@_code_root_str \l_keys_path_str \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl } } { \cs_if_exist:cTF - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \@@_execute_inherit: } { \@@_execute_unknown: } } @@ -2535,14 +2540,14 @@ \cs_new_protected:Npn \@@_execute_inherit: { \clist_map_inline:cn - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \cs_if_exist:cT - { \c_@@_code_root_tl ##1 / \l_keys_key_tl } + { \c_@@_code_root_str ##1 / \l_keys_key_str } { - \tl_set:Nn \l_@@_inherit_tl {##1} - \cs_if_exist_use:c { \c_@@_validate_root_tl ##1 / \l_keys_key_tl } - \cs:w \c_@@_code_root_tl ##1 / \l_keys_key_tl + \str_set:Nn \l_@@_inherit_str {##1} + \cs_if_exist_use:c { \c_@@_validate_root_str ##1 / \l_keys_key_str } + \cs:w \c_@@_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 } @@ -2556,22 +2561,22 @@ { \@@_store_unused: } { \cs_if_exist:cTF - { \c_@@_code_root_tl \l_@@_module_tl / unknown } + { \c_@@_code_root_str \l_@@_module_str / unknown } { - \cs:w \c_@@_code_root_tl \l_@@_module_tl / unknown + \cs:w \c_@@_code_root_str \l_@@_module_str / unknown \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl } } { \__kernel_msg_error:nnxx { kernel } { key-unknown } - { \l_keys_path_tl } { \l_@@_module_tl } + { \l_keys_path_str } { \l_@@_module_str } } } } \cs_new:Npn \@@_execute:nn #1#2 { - \cs_if_exist:cTF { \c_@@_code_root_tl #1 } + \cs_if_exist:cTF { \c_@@_code_root_str #1 } { - \cs:w \c_@@_code_root_tl #1 \exp_after:wN \cs_end: + \cs:w \c_@@_code_root_str #1 \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl } } {#2} @@ -2589,7 +2594,7 @@ { \clist_put_right:Nx \l_@@_unused_clist { - \exp_not:o \l_keys_key_tl + \exp_not:o \l_keys_key_str \bool_if:NF \l_@@_no_value_bool { = { \exp_not:o \l_keys_value_tl } } } @@ -2599,7 +2604,7 @@ { \clist_put_right:Nx \l_@@_unused_clist { - \exp_not:o \l_keys_path_tl + \exp_not:o \l_keys_path_str \bool_if:NF \l_@@_no_value_bool { = { \exp_not:o \l_keys_value_tl } } } @@ -2622,7 +2627,7 @@ \tl_if_blank:nF {##1} { \__kernel_msg_error:nnxx { kernel } { bad-relative-key-path } - \l_keys_path_tl + \l_keys_path_str \l_@@_relative_tl } \clist_put_right:Nx \l_@@_unused_clist @@ -2634,7 +2639,7 @@ } \use:x { - \@@_store_unused:w \l_keys_path_tl + \@@_store_unused:w \l_keys_path_str \l_@@_relative_tl / \l_@@_relative_tl / \exp_not:N \q_stop } @@ -2655,18 +2660,18 @@ % \begin{macrocode} \cs_new:Npn \@@_choice_find:n #1 { - \tl_if_empty:NTF \l_@@_inherit_tl - { \@@_choice_find:nn { \l_keys_path_tl } {#1} } + \str_if_empty:NTF \l_@@_inherit_str + { \@@_choice_find:nn { \l_keys_path_str } {#1} } { \@@_choice_find:nn - { \l_@@_inherit_tl / \l_keys_key_tl } {#1} + { \l_@@_inherit_str / \l_keys_key_str } {#1} } } \cs_new:Npn \@@_choice_find:nn #1#2 { - \cs_if_exist:cTF { \c_@@_code_root_tl #1 / \@@_trim_spaces:n {#2} } - { \use:c { \c_@@_code_root_tl #1 / \@@_trim_spaces:n {#2} } {#2} } - { \use:c { \c_@@_code_root_tl #1 / unknown } {#2} } + \cs_if_exist:cTF { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} } + { \use:c { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} } {#2} } + { \use:c { \c_@@_code_root_str #1 / unknown } {#2} } } \cs_new:Npn \@@_multichoice_find:n #1 { \clist_map_function:nN {#1} \@@_choice_find:n } @@ -2742,7 +2747,7 @@ \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF } { \cs_if_exist:cTF - { \c_@@_code_root_tl \@@_trim_spaces:n { #1 / #2 } } + { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 } } { \prg_return_true: } { \prg_return_false: } } @@ -2756,7 +2761,7 @@ { p , T , F , TF } { \cs_if_exist:cTF - { \c_@@_code_root_tl \@@_trim_spaces:n { #1 / #2 / #3 } } + { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 / #3 } } { \prg_return_true: } { \prg_return_false: } } @@ -2781,7 +2786,7 @@ { \exp_args:Nc \cs_replacement_spec:N { - \c_@@_code_root_tl + \c_@@_code_root_str \@@_trim_spaces:n { #2 / #3 } } } |