summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3kernel/l3keys.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/l3kernel/l3keys.dtx')
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx84
1 files changed, 59 insertions, 25 deletions
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index 355de420bd..51bfbec712 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2021-11-12}
+% \date{Released 2021-11-22}
%
% \maketitle
%
@@ -1780,41 +1780,30 @@
%
% \subsection{Turning properties into actions}
%
-% \begin{macro}{\@@_bool_set:Nn, \@@_bool_set:cn}
+% \begin{macro}
+% {
+% \@@_bool_set:Nn, \@@_bool_set:cn,
+% \@@_bool_set_inverse:Nn, \@@_bool_set_inverse:cn
+% }
+% \begin{macro}{\@@_bool_set:Nnnn}
% Boolean keys are really just choices, but all done by hand. The
% second argument here is the scope: either empty or \texttt{ g } for
% global.
% \begin{macrocode}
\cs_new_protected:Npn \@@_bool_set:Nn #1#2
- {
- \bool_if_exist:NF #1 { \bool_new:N #1 }
- \@@_choice_make:
- \@@_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_str / false }
- { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
- \@@_cmd_set:nn { \l_keys_path_str / unknown }
- {
- \msg_error:nnx { keys } { boolean-values-only }
- \l_keys_key_str
- }
- \@@_default_set:n { true }
- }
+ { \@@_bool_set:Nnnn #1 {#2} { true } { false } }
\cs_generate_variant:Nn \@@_bool_set:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_bool_set_inverse:Nn, \@@_bool_set_inverse:cn}
-% Inverse boolean setting is much the same.
-% \begin{macrocode}
\cs_new_protected:Npn \@@_bool_set_inverse:Nn #1#2
+ { \@@_bool_set:Nnnn #1 {#2} { false } { true } }
+\cs_generate_variant:Nn \@@_bool_set_inverse:Nn { c }
+\cs_new_protected:Npn \@@_bool_set:Nnnn #1#2#3#4
{
\bool_if_exist:NF #1 { \bool_new:N #1 }
\@@_choice_make:
\@@_cmd_set:nx { \l_keys_path_str / true }
- { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
+ { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
\@@_cmd_set:nx { \l_keys_path_str / false }
- { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 }
+ { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
\@@_cmd_set:nn { \l_keys_path_str / unknown }
{
\msg_error:nnx { keys } { boolean-values-only }
@@ -1822,9 +1811,10 @@
}
\@@_default_set:n { true }
}
-\cs_generate_variant:Nn \@@_bool_set_inverse:Nn { c }
+\cs_generate_variant:Nn \@@_bool_set:Nn { c }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_choice_make:, \@@_multichoice_make:}
% \begin{macro}{\@@_choice_make:N}
@@ -1999,6 +1989,33 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_legacy_if_set:nn, \@@_legacy_if_inverse:nn}
+% \begin{macro}{\@@_legacy_if_inverse:nnnn}
+% Much the same as \pkg{expl3} booleans, except we assume that the switch
+% exists.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_legacy_if_set:nn #1#2
+ { \@@_legacy_if_set:nnnn {#1} {#2} { true } { false } }
+\cs_new_protected:Npn \@@_legacy_if_set_inverse:nn #1#2
+ { \@@_legacy_if_set:nnnn {#1} {#2} { false } { true } }
+\cs_new_protected:Npn \@@_legacy_if_set:nnnn #1#2#3#4
+ {
+ \@@_choice_make:
+ \@@_cmd_set:nx { \l_keys_path_str / true }
+ { \exp_not:c { legacy_if_#2 set_ #3 :n } { \exp_not:n {#1} } }
+ \@@_cmd_set:nx { \l_keys_path_str / false }
+ { \exp_not:c { legacy_if_#2 set_ #4 :n } { \exp_not:n {#1} } }
+ \@@_cmd_set:nn { \l_keys_path_str / unknown }
+ {
+ \msg_error:nnx { keys } { boolean-values-only }
+ \l_keys_key_str
+ }
+ \@@_default_set:n { true }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}{\@@_meta_make:n}
% \begin{macro}{\@@_meta_make:nn}
% To create a meta-key, simply set up to pass data through.
@@ -2347,6 +2364,23 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}
+% {
+% .legacy_if_set:n, .legacy_if_gset:n,
+% .legacy_if_set_inverse:n, .legacy_if_gset_inverse:n
+% }
+% \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_set:n } #1
+ { \@@_legacy_if_set:nn {#1} { } }
+\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_gset:n } #1
+ { \@@_legacy_if_set:nn {#1} { g } }
+\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_set_inverse:n } #1
+ { \@@_legacy_if_set_inverse:nn {#1} { } }
+\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_gset_inverse:n } #1
+ { \@@_legacy_if_set_inverse:nn {#1} { g } }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{.meta:n}
% Making a meta is handled internally.
% \begin{macrocode}