summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/expl3/l3keys.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/expl3/l3keys.sty')
-rw-r--r--Master/texmf-dist/tex/latex/expl3/l3keys.sty242
1 files changed, 90 insertions, 152 deletions
diff --git a/Master/texmf-dist/tex/latex/expl3/l3keys.sty b/Master/texmf-dist/tex/latex/expl3/l3keys.sty
index 0029aedf9b4..f683a8357e2 100644
--- a/Master/texmf-dist/tex/latex/expl3/l3keys.sty
+++ b/Master/texmf-dist/tex/latex/expl3/l3keys.sty
@@ -48,7 +48,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3names}
-\GetIdInfo$Id: l3keys.dtx 1504 2009-09-03 20:29:00Z joseph $
+\GetIdInfo$Id: l3keys.dtx 1542 2009-09-17 07:38:53Z joseph $
{L3 Experimental key-value support}
\ProvidesExplPackage
{\filename}{\filedate}{\fileversion}{\filedescription}
@@ -59,6 +59,7 @@
\tl_new:Nn \c_keys_value_required_tl { required }
\int_new:N \l_keys_choice_int
\tl_new:N \l_keys_choice_tl
+\tl_new:N \l_keys_choice_code_tl
\tl_new:N \l_keys_key_tl
\tl_new:N \l_keys_path_tl
\tl_new:N \l_keys_property_tl
@@ -67,81 +68,75 @@
\tl_new:Nn \l_keys_nesting_tl { none }
\bool_new:N \l_keys_no_value_bool
\toks_new:N \l_keys_value_toks
-\quark_new:N \q_keys_stop
-\cs_new:Npn \keys_arguments_tidy:w #1 \q_keys_stop { }
-\cs_new_nopar:Nn \keys_bool_set:N {
- \keys_cmd_set:nNx { \l_keys_path_tl / true } 1 {
- \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_true:N }
+\cs_new_nopar:Nn \keys_bool_set:NN {
+ \keys_cmd_set:nx { \l_keys_path_tl / true } {
+ \exp_not:c { bool_ #2 set_true:N }
\exp_not:N #1
}
- \keys_cmd_set:nNx { \l_keys_path_tl / false } 1 {
+ \keys_cmd_set:nx { \l_keys_path_tl / false } {
\exp_not:N \use:c
- { bool_ \keys_variable_get_scope:N #1 set_false:N }
+ { bool_ #2 set_false:N }
\exp_not:N #1
}
- \keys_bool_set_aux:N #1
-}
-\cs_new_nopar:Nn \keys_bool_set_inverse:N {
- \keys_cmd_set:nNx { \l_keys_path_tl / true } 1 {
- \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_false:N }
- \exp_not:N #1
- }
- \keys_cmd_set:nNx { \l_keys_path_tl / false } 1 {
- \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_true:N }
- \exp_not:N #1
- }
- \keys_bool_set_aux:N #1
-}
-\cs_new_nopar:Nn \keys_bool_set_aux:N {
\keys_choice_make:
\cs_if_exist:NF #1 {
\bool_new:N #1
}
\keys_default_set:n { true }
}
+\cs_new:Nn \keys_choice_code_store:x {
+ \tl_set:cx { \c_keys_root_tl \l_keys_path_tl .choice_code_tl } {#1}
+}
\cs_new_nopar:Nn \keys_choice_find:n {
\keys_execute_aux:nn { \l_keys_path_tl / #1 } {
\keys_execute_aux:nn { \l_keys_path_tl / unknown } { }
}
}
\cs_new_nopar:Nn \keys_choice_make: {
- \keys_cmd_set:nNn { \l_keys_path_tl } 1 {
+ \keys_cmd_set:nn { \l_keys_path_tl } {
\keys_choice_find:n {##1}
}
- \keys_cmd_set:nNn { \l_keys_path_tl / unknown } 1 {
+ \keys_cmd_set:nn { \l_keys_path_tl / unknown } {
\msg_kernel_error:nxx { key-choice-unknown } { \l_keys_path_tl }
{##1}
}
}
-\cs_new:Nn \keys_choices_generate:nx {
+\cs_new:Nn \keys_choices_generate:n {
\keys_choice_make:
\int_zero:N \l_keys_choice_int
- \cs_set_nopar:Nn \keys_choices_generate_aux:n {
- \int_incr:N \l_keys_choice_int
- \keys_cmd_set:nNx { \l_keys_path_tl / ##1 } 1 {
- \exp_not:n { \tl_set:Nn \l_keys_choice_tl } {##1}
- \exp_not:n { \int_set:Nn \l_keys_choice_int }
- { \int_use:N \l_keys_choice_int }
- #2
+ \cs_if_exist:cTF {
+ \c_keys_root_tl \l_keys_path_tl .choice_code_tl
+ } {
+ \tl_set:Nv \l_keys_choice_code_tl {
+ \c_keys_root_tl \l_keys_path_tl .choice_code_tl
}
+ }{
+ \tl_clear:N \l_keys_choice_code_tl
}
\clist_map_function:nN {#1} \keys_choices_generate_aux:n
}
-\cs_new_nopar:Nn \keys_choices_generate_aux:n { }
-\cs_new:Nn \keys_cmd_set:nNn {
- \keys_cmd_set_aux:nN {#1} #2
- \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:w }
- \cs_set:Npn #2 { #3 \keys_arguments_tidy:w }
+\cs_new_nopar:Nn \keys_choices_generate_aux:n {
+ \int_incr:N \l_keys_choice_int
+ \keys_cmd_set:nx { \l_keys_path_tl / #1 } {
+ \exp_not:n { \tl_set:Nn \l_keys_choice_tl } {#1}
+ \exp_not:n { \int_set:Nn \l_keys_choice_int }
+ { \int_use:N \l_keys_choice_int }
+ \exp_not:V \l_keys_choice_code_tl
+ }
+}
+\cs_new:Nn \keys_cmd_set:nn {
+ \keys_cmd_set_aux:n {#1}
+ \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:n }
+ \cs_set:Npn 1 {#2}
}
-\cs_new:Nn \keys_cmd_set:nNx {
- \keys_cmd_set_aux:nN {#1} #2
- \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:w }
- \cs_set:Npx #2 { #3 \exp_not:N \keys_arguments_tidy:w }
+\cs_new:Nn \keys_cmd_set:nx {
+ \keys_cmd_set_aux:n {#1}
+ \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:n }
+ \cs_set:Npx 1 {#2}
}
-\cs_new_nopar:Nn \keys_cmd_set_aux:nN {
+\cs_new_nopar:Nn \keys_cmd_set_aux:n {
\keys_property_undefine:n { #1 .default_tl }
- \num_set:cn { \c_keys_root_tl #1 .args_num } {#2}
- \tl_set:cn { \c_keys_root_tl #1 .req_tl } { }
+ \tl_set:cn { \c_keys_root_tl #1 .req_tl } { }
}
\cs_new:Nn \keys_default_set:n {
\tl_set:cn { \c_keys_root_tl \l_keys_path_tl .default_tl } {#1}
@@ -185,20 +180,13 @@
\exp_args:Nc \cs_get_arg_count_from_signature:N
{ \l_keys_property_tl } = \c_zero
} {
- \keys_tmp:w \q_keys_stop
+ \keys_tmp:w
}{
\msg_kernel_error:nx { key-property-value-required }
{ \l_keys_property_tl }
}
}{
- \intexpr_compare:nTF {
- \exp_args:Nc \cs_get_arg_count_from_signature:N
- { \l_keys_property_tl } = \c_one
- } {
- \keys_tmp:w {#1} \q_keys_stop
- }{
- \keys_tmp:w #1 { } { } { } { } { } { } { } { } { } \q_keys_stop
- }
+ \keys_tmp:w {#1}
}
}
\cs_new_nopar:Nn \keys_execute: {
@@ -212,22 +200,15 @@
}
}
\cs_new_nopar:Nn \keys_execute_aux:nn {
- \cs_set_eq:Nc \keys_tmp:w { \c_keys_root_tl #1 .cmd:w }
+ \cs_set_eq:Nc \keys_tmp:w { \c_keys_root_tl #1 .cmd:n }
\cs_if_exist:NTF \keys_tmp:w {
- \intexpr_compare:nTF {
- \num_use:c { \c_keys_root_tl #1 .args_num } = \c_one
- } {
- \exp_args:NV \keys_tmp:w \l_keys_value_toks \q_keys_stop
- }{
- \exp_after:wN \keys_tmp:w \toks_use:N \l_keys_value_toks
- { } { } { } { } { } { } { } { } { } \q_keys_stop
- }
+ \exp_args:NV \keys_tmp:w \l_keys_value_toks
}{
#2
}
}
\prg_set_conditional:Nnn \keys_if_exist:nn {TF,T,F} {
- \cs_if_exist:cTF { \c_keys_root_tl #1 / #2 .cmd:w } {
+ \cs_if_exist:cTF { \c_keys_root_tl #1 / #2 .cmd:n } {
\prg_return_true:
}{
\prg_return_false:
@@ -238,16 +219,8 @@
\c_keys_root_tl \l_keys_path_tl .req_tl
}
}
-\cs_new:Nn \keys_initial_value:n {
- \toks_set:Nn \l_keys_value_toks {#1}
- \keys_execute_aux:nn { \l_keys_path_tl } {
- \msg_kernel_error:nx { key-initial-without-code }
- { \l_keys_path_tl }
- }
-}
-\cs_generate_variant:Nn \keys_initial_value:n { V }
\cs_new_nopar:Nn \keys_meta_make:n {
- \keys_cmd_set:nNx { \l_keys_path_tl } 1 {
+ \keys_cmd_set:nx { \l_keys_path_tl } {
\exp_not:N \keys_set:nn { \l_keys_module_tl } {#1}
}
}
@@ -275,8 +248,7 @@
}
}
\cs_new_nopar:Nn \keys_property_new:nn {
- \cs_new:cn { \c_keys_properties_root_tl #1 }
- { #2 \keys_arguments_tidy:w }
+ \cs_new:cn { \c_keys_properties_root_tl #1 } {#2}
}
\cs_new_nopar:Nn \keys_property_undefine:n {
\cs_set_eq:cN { \c_keys_root_tl #1 } \c_undefined
@@ -330,7 +302,7 @@
}
}
\cs_new_nopar:Nn \keys_show:nn {
- \cs_show:c { \c_keys_root_tl #1 / \tl_to_str:n {#2} .cmd:w }
+ \cs_show:c { \c_keys_root_tl #1 / \tl_to_str:n {#2} .cmd:n }
}
\cs_new:Npn \keys_tmp:w {}
\cs_new:Nn \keys_value_or_default:n {
@@ -347,75 +319,34 @@
\tl_set_eq:cc { \c_keys_root_tl \l_keys_path_tl .req_tl }
{ c_keys_value_ #1 _tl }
}
-\group_begin:
- \char_set_lccode:nn {`\&} {`\g}
- \char_make_other:N \&
-\tl_to_lowercase:n {
- \group_end:
- \cs_new_nopar:Nn \keys_variable_get_scope:N {
- \exp_last_unbraced:Nf \keys_variable_get_scope_aux:w
- { \cs_to_str:N #1 \exp_stop_f: \q_nil }
+\cs_new_nopar:Nn \keys_variable_set:NnNN {
+ \cs_if_exist:NF #1 {
+ \use:c { #2 _new:N } #1
}
- \cs_new_nopar:Npn \keys_variable_get_scope_aux:w #1#2 \q_nil {
- \token_if_eq_meaning:NNT & #1 {g}
+ \keys_cmd_set:nx { \l_keys_path_tl } {
+ \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 {##1}
}
}
-\group_begin:
- \char_set_lccode:nn {`\&} {`\_}
- \char_make_other:N \&
-\tl_to_lowercase:n {
- \group_end:
- \cs_new_nopar:Nn \keys_variable_get_type:N {
- \exp_after:wN \keys_variable_get_type_aux:w
- \token_to_str:N #1 & a \q_nil
- }
- \cs_new_nopar:Npn \keys_variable_get_type_aux:w #1 & #2#3 \q_nil {
- \token_if_eq_meaning:NNTF a #2 {
- #1
- }{
- \keys_variable_get_type_aux:w #2#3 \q_nil
- }
- }
-}
-\cs_new_nopar:Nn \keys_variable_set:NN {
- \cs_if_exist:cF {
- \keys_variable_get_type:N #2 _
- \keys_variable_get_scope:N #2 set:N #1
- } {
- \msg_kernel_error:nxx { key-no-set-function } {
- \exp_not:c {
- \keys_variable_get_type:N #2 _
- \keys_variable_get_scope:N #2 set:N #1
- }
- } {#2}
- }
- \cs_if_exist:NF #2 {
- \use:c { \keys_variable_get_type:N #2 _new:N } #2
- }
- \keys_cmd_set:nNx { \l_keys_path_tl } 1 {
- \exp_not:c {
- \keys_variable_get_type:N #2 _
- \keys_variable_get_scope:N #2 set:N #1
- } \exp_not:N #2 {##1}
- }
+\keys_property_new:nn { .bool_set:N } {
+ \keys_bool_set:NN #1 { }
}
-\keys_property_new:nn { .bool:N } {
- \keys_bool_set:N #1
+\keys_property_new:nn { .bool_gset:N } {
+ \keys_bool_set:NN #1 n
}
\keys_property_new:nn { .choice: } {
\keys_choice_make:
}
-\keys_property_new:nn { .code:n } {
- \keys_cmd_set:nNn { \l_keys_path_tl } 1 {#1}
+\keys_property_new:nn { .choice_code:n } {
+ \keys_choice_code_store:x { \exp_not:n {#1} }
}
-\keys_property_new:nn { .code:Nn } {
- \keys_cmd_set:nNn { \l_keys_path_tl } #1 {#2}
+\keys_property_new:nn { .choice_code:x } {
+ \keys_choice_code_store:x {#1}
}
-\keys_property_new:nn { .code:x } {
- \keys_cmd_set:nNx { \l_keys_path_tl } 1 {#1}
+\keys_property_new:nn { .code:n } {
+ \keys_cmd_set:nn { \l_keys_path_tl } {#1}
}
-\keys_property_new:nn { .code:Nx } {
- \keys_cmd_set:nNx { \l_keys_path_tl } #1 {#2}
+\keys_property_new:nn { .code:x } {
+ \keys_cmd_set:nx { \l_keys_path_tl } {#1}
}
\keys_property_new:nn { .default:n } {
\keys_default_set:n {#1}
@@ -423,25 +354,20 @@
\keys_property_new:nn { .default:V } {
\keys_default_set:V #1
}
-\keys_property_new:nn { .function:N } {
- \keys_cmd_set:nNn { \l_keys_path_tl } 1 {
- \cs_set:Nn #1 {##1}
- }
- \cs_if_free:NT #1 {
- \cs_set:Nn #1 { }
- }
+\keys_property_new:nn { .dim_set:N } {
+ \keys_variable_set:NnNN #1 { dim } { } n
}
-\keys_property_new:nn { .generate_choices:nn } {
- \keys_choices_generate:nx {#1} { \exp_not:n {#2} }
+\keys_property_new:nn { .dim_gset:N } {
+ \keys_variable_set:NnNN #1 { dim } g n
}
-\keys_property_new:nn { .generate_choices:nx } {
- \keys_choices_generate:nx {#1} {#2}
+\keys_property_new:nn { .generate_choices:n } {
+ \keys_choices_generate:n {#1}
}
-\keys_property_new:nn { .initial:n } {
- \keys_initial_value:n {#1}
+\keys_property_new:nn { .int_set:N } {
+ \keys_variable_set:NnNN #1 { int } { } n
}
-\keys_property_new:nn { .initial:V } {
- \keys_initial_value:V #1
+\keys_property_new:nn { .int_gset:N } {
+ \keys_variable_set:NnNN #1 { int } g n
}
\keys_property_new:nn { .meta:n } {
\keys_meta_make:n {#1}
@@ -449,11 +375,23 @@
\keys_property_new:nn { .meta:x } {
\keys_meta_make:x {#1}
}
-\keys_property_new:nn { .set:N } {
- \keys_variable_set:NN n #1
+\keys_property_new:nn { .skip_set:N } {
+ \keys_variable_set:NnNN #1 { skip } { } n
+}
+\keys_property_new:nn { .skip_gset:N } {
+ \keys_variable_set:NnNN #1 { skip } g n
+}
+\keys_property_new:nn { .tl_set:N } {
+ \keys_variable_set:NnNN #1 { tl } { } n
+}
+\keys_property_new:nn { .tl_set_x:N } {
+ \keys_variable_set:NnNN #1 { tl } { } x
+}
+\keys_property_new:nn { .tl_gset:N } {
+ \keys_variable_set:NnNN #1 { tl } g n
}
-\keys_property_new:nn { .set_x:N } {
- \keys_variable_set:NN x #1
+\keys_property_new:nn { .tl_gset_x:N } {
+ \keys_variable_set:NnNN #1 { tl } g x
}
\keys_property_new:nn { .value_forbidden: } {
\keys_value_requirement:n { forbidden }