diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty | 396 |
1 files changed, 267 insertions, 129 deletions
diff --git a/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty b/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty index 9bc5164a748..9b542606a88 100644 --- a/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty +++ b/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty @@ -57,7 +57,7 @@ %% ----------------------------------------------------------------------- %% \RequirePackage{l3names} -\GetIdInfo$Id: xparse.dtx 1497 2009-08-31 19:17:53Z joseph $ +\GetIdInfo$Id: xparse.dtx 1727 2009-11-06 22:58:32Z joseph $ {Generic document command parser} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -69,6 +69,7 @@ \toks_new:N \l_xparse_arg_toks \toks_new:N \l_xparse_args_toks \toks_new:N \l_xparse_environment_args_toks +\bool_new:N \l_xparse_environment_bool \bool_new:N \l_xparse_error_bool \tl_new:N \l_xparse_function_tl \toks_new:N \l_xparse_last_arg_tl @@ -76,13 +77,15 @@ \int_new:N \l_xparse_m_args_int \bool_new:N \l_xparse_m_only_bool \int_new:N \l_xparse_mandatory_args_int +\int_new:N \l_xparse_nested_int +\toks_new:N \l_xparse_nested_toks \bool_new:N \l_xparse_processor_bool \int_new:N \l_xparse_processor_int \toks_new:N \l_xparse_signature_toks \tl_new:N \l_xparse_tmp_tl \int_new:N \l_xparse_total_args_int \quark_new:N \q_xparse_stop -\cs_new_nopar:Nn \xparse_add_grabber_mandatory:N { +\cs_new_nopar:Npn \xparse_add_grabber_mandatory:N #1 { \toks_put_right:Nx \l_xparse_signature_toks { \exp_not:c { xparse_grab_ #1 \bool_if:NT \l_xparse_long_bool { _long } :w @@ -91,7 +94,7 @@ \bool_set_false:N \l_xparse_long_bool \int_decr:N \l_xparse_mandatory_args_int } -\cs_new_nopar:Nn \xparse_add_grabber_optional:N { +\cs_new_nopar:Npn \xparse_add_grabber_optional:N #1 { \toks_put_right:Nx \l_xparse_signature_toks { \exp_not:c { xparse_grab_ #1 @@ -166,19 +169,19 @@ \toks_put_right:Nn \l_xparse_signature_toks { {#1} } \xparse_prepare_signature:N } -\cs_new_nopar:Nn \xparse_check_and_add:N { +\cs_new_nopar:Npn \xparse_check_and_add:N #1 { \cs_if_free:cTF { xparse_add_type_ #1 :w } { - \msg_error:nnx { xparse } { unknown-argument-type } {#1} + \msg_kernel_error:nnx { xparse } { unknown-argument-type } {#1} \xparse_add_type_m:w }{ \use:c { xparse_add_type_ #1 :w } } } -\cs_new:Nn \xparse_count_mandatory:n { +\cs_new:Npn \xparse_count_mandatory:n #1 { \int_zero:N \l_xparse_mandatory_args_int \xparse_count_mandatory:N #1 \q_nil } -\cs_new:Nn \xparse_count_mandatory:N { +\cs_new:Npn \xparse_count_mandatory:N #1 { \quark_if_nil:NF #1 { \prop_if_in:NnTF \c_xparse_shorthands_prop {#1} { \prop_get:NnN \c_xparse_shorthands_prop {#1} \l_xparse_tmp_tl @@ -188,7 +191,7 @@ } } } -\cs_new:Nn \xparse_count_mandatory_aux:N { +\cs_new:Npn \xparse_count_mandatory_aux:N #1 { \cs_if_free:cTF { xparse_count_type_ #1 :w } { \xparse_count_type_m:w }{ @@ -228,7 +231,19 @@ \int_incr:N \l_xparse_mandatory_args_int \xparse_count_mandatory:N } -\cs_new:Nn \xparse_declare_cmd:Nnn { +\cs_new:Npn \xparse_declare_cmd:Nnn #1#2 { + \cs_if_exist:NTF #1 + { + \msg_kernel_warning:nnxx { xparse } { redefine-command } + { \exp_not:N #1 } { \exp_not:n {#2} } + } + { + \msg_kernel_info:nnxx { xparse } { define-command } + { \exp_not:N #1 } { \exp_not:n {#2} } + } + \xparse_declare_cmd_aux:Nnn #1 {#2} +} +\cs_new:Npn \xparse_declare_cmd_aux:Nnn #1#2#3 { \xparse_count_mandatory:n {#2} \xparse_prepare_signature:n {#2} \bool_if:NTF \l_xparse_m_only_bool { @@ -237,12 +252,12 @@ \xparse_declare_cmd_mixed:Nn #1 {#3} } } -\cs_generate_variant:Nn \xparse_declare_cmd:Nnn { cnn } -\cs_new:Nn \xparse_declare_cmd_all_m:Nn { +\cs_generate_variant:Nn \xparse_declare_cmd_aux:Nnn { cnn } +\cs_new:Npn \xparse_declare_cmd_all_m:Nn #1#2 { \cs_generate_from_arg_count:NNnn #1 \cs_set_protected_nopar:Npn \l_xparse_total_args_int {#2} } -\cs_new:Nn \xparse_declare_cmd_mixed:Nn { +\cs_new:Npn \xparse_declare_cmd_mixed:Nn #1#2 { \cs_set_protected_nopar:Npx #1 { \exp_not:n { \int_zero:N \l_xparse_processor_int @@ -254,11 +269,11 @@ \cs_generate_from_arg_count:cNnn { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int {#2} } -\cs_new:Nn \xparse_declare_cmd_implementation:nNn { +\cs_new:Npn \xparse_declare_cmd_implementation:nNn #1#2#3 { \cs_generate_from_arg_count:cNnn { implementation_ #1 :w } \cs_set:Npn {#2} {#3} } -\cs_new:Nn \xparse_declare_cmd_interface:Nnn { +\cs_new:Npn \xparse_declare_cmd_interface:Nnn #1#2#3 { \xparse_prepare_signature:n {#3} \bool_if:NTF \l_xparse_m_only_bool { \xparse_declare_cmd_interface_all_m:Nn #1 {#2} @@ -268,12 +283,12 @@ \cs_generate_from_arg_count:cNnn { implementation_ #2 :w } \cs_set:Npn \l_xparse_total_args_int { ``#2'' } } -\cs_new:Nn \xparse_declare_cmd_interface_all_m:Nn { +\cs_new:Npn \xparse_declare_cmd_interface_all_m:Nn #1#2 { \cs_generate_from_arg_count:NNnn #1 \cs_set_protected_nopar:Npn \l_xparse_total_args_int { \use:c { implementation_ #2 :w } } } -\cs_new:Nn \xparse_declare_cmd_interface_mixed:Nn { +\cs_new:Npn \xparse_declare_cmd_interface_mixed:Nn #1#2 { \cs_set_protected_nopar:Npx #1 { \exp_not:n { \int_zero:N \l_xparse_processor_int @@ -286,20 +301,31 @@ { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int { \use:c { implementation_ #2 :w } } } -\cs_new:Nn \xparse_declare_env:nnnn { - \xparse_declare_cmd:cnn { environment_begin_ #1 :w } {#2} { +\cs_new:Npn \xparse_declare_env:nnnn #1#2#3#4 { + \bool_set_true:N \l_xparse_environment_bool + \cs_if_exist:cTF {#1} + { + \msg_kernel_warning:nnxx { xparse } { redefine-environment } + {#1} { \exp_not:n {#2} } + } + { + \msg_kernel_info:nnxx { xparse } { define-environment } + {#1} { \exp_not:n {#2} } + } + \xparse_declare_cmd_aux:cnn { environment_begin_ #1 :w } {#2} { \group_begin: \toks_set_eq:NN \l_xparse_environment_args_toks \l_xparse_args_toks #3 } + \bool_set_false:N \l_xparse_environment_bool \cs_set_nopar:cpx { environment_end_ #1 :w } { \exp_not:N \exp_last_unbraced:NV \exp_not:c { environment_end_ #1 _aux:N } \exp_not:N \l_xparse_environment_args_toks \exp_not:N \group_end: } - \cs_set_nopar:cx { environment_end_ #1 _aux:N } { + \cs_set_nopar:cpx { environment_end_ #1 _aux:N } ##1 { \exp_not:c { environment_end_ #1 _aux :w } } \cs_generate_from_arg_count:cNnn @@ -308,7 +334,7 @@ \cs_set_eq:cc {#1} { environment_begin_ #1 :w } \cs_set_eq:cc { end #1 } { environment_end_ #1 :w } } -\cs_new_nopar:Nn \xparse_flush_m_args: { +\cs_new_nopar:Npn \xparse_flush_m_args: { \cs_if_exist:cT { xparse_grab_m_ \int_use:N \l_xparse_m_args_int :w } { @@ -329,20 +355,24 @@ \prg_return_false: } } -\cs_new:Nn \xparse_prepare_signature:n { +\cs_new:Npn \xparse_prepare_signature:n #1 { \bool_set_false:N \l_xparse_long_bool \int_zero:N \l_xparse_m_args_int - \bool_set_true:N \l_xparse_m_only_bool + \bool_if:NTF \l_xparse_environment_bool { + \bool_set_false:N \l_xparse_m_only_bool + }{ + \bool_set_true:N \l_xparse_m_only_bool + } \bool_set_false:N \l_xparse_processor_bool \toks_clear:N \l_xparse_signature_toks \int_zero:N \l_xparse_total_args_int \xparse_prepare_signature:N #1 \q_nil } -\cs_new:Nn \xparse_prepare_signature:N { +\cs_new:Npn \xparse_prepare_signature:N #1 { \bool_set_false:N \l_xparse_processor_bool \xparse_prepare_signature_aux:N #1 } -\cs_new:Nn \xparse_prepare_signature_aux:N { +\cs_new:Npn \xparse_prepare_signature_aux:N #1 { \quark_if_nil:NTF #1 { \bool_if:NF \l_xparse_m_only_bool { \xparse_flush_m_args: @@ -352,19 +382,19 @@ \prop_get:NnN \c_xparse_shorthands_prop {#1} \l_xparse_tmp_tl \exp_last_unbraced:NV \xparse_prepare_signature:N \l_xparse_tmp_tl }{ - \int_incr:N \l_xparse_total_args_int + \int_incr:N \l_xparse_total_args_int \xparse_check_and_add:N #1 } } } -\cs_new:Nn \xparse_process_arg:n { +\cs_new:Npn \xparse_process_arg:n #1 { \int_incr:N \l_xparse_processor_int - \cs_set:cn { + \cs_set:cpn { xparse_processor_ \int_use:N \l_xparse_processor_int :n - } + } ##1 { #1 {##1} } } -\cs_new:Nn \xparse_add_arg:n { +\cs_new:Npn \xparse_add_arg:n #1 { \intexpr_compare:nTF { \l_xparse_processor_int = \c_zero } { \toks_put_right:Nn \l_xparse_args_toks { {#1} } }{ @@ -376,20 +406,24 @@ } } } -\cs_new:Nn \xparse_add_arg_aux:n { +\cs_generate_variant:Nn \xparse_add_arg:n { V } +\cs_new:Npn \xparse_add_arg_aux:n #1 { + \cs_set_eq:NN \ProcessedArgument \l_xparse_arg_toks \use:c { xparse_processor_ \int_use:N \l_xparse_processor_int :n } {#1} \int_decr:N \l_xparse_processor_int \intexpr_compare:nTF { \l_xparse_processor_int = \c_zero } { - \toks_put_right:No \l_xparse_args_toks { - \exp_after:wN { \toks_use:N \l_xparse_arg_toks } + \toks_put_right:Nx \l_xparse_args_toks { + { \exp_not:V \ProcessedArgument } } }{ - \xparse_add_arg_aux:V \l_xparse_arg_toks + \xparse_add_arg_aux:V \ProcessedArgument } } \cs_generate_variant:Nn \xparse_add_arg_aux:n { V } -\cs_new:Npn \xparse_grab_aux:w { } +\cs_new:Npn \xparse_grab_arg:w { } +\cs_new:Npn \xparse_grab_arg_aux_i:w { } +\cs_new:Npn \xparse_grab_arg_aux_ii:w { } \cs_new:Npn \xparse_grab_D:w #1#2#3#4 \l_xparse_args_toks { \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_nopar:Npn { _ignore_spaces } @@ -405,10 +439,28 @@ \l_xparse_args_toks { \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set:Npn { } } -\cs_set:Nn \xparse_grab_D_aux:NNnnNn { - #5 \xparse_grab_arg:w #1 ##1 #2 { - \xparse_add_arg:n {##1} - #4 \l_xparse_args_toks +\cs_new:Npn \xparse_grab_D_aux:NNnnNn #1#2#3#4#5#6 { + #5 \xparse_grab_arg:w #1 { + \peek_meaning:NTF \c_group_begin_token { + \xparse_grab_arg_aux_i:w + }{ + \xparse_grab_arg_aux_ii:w + } + } + #5 \xparse_grab_arg_aux_i:w ##1 { + \peek_charcode:NTF #2 { + \xparse_grab_arg_aux_ii:w { {##1} } + }{ + \xparse_grab_arg_aux_ii:w {##1} + } + } + #5 \xparse_grab_arg_aux_ii:w ##1 #2 { + \tl_if_in:nnTF {##1} {#1} { + \xparse_grab_D_nested:NNnNn #1 #2 {#4} #5 {##1} + }{ + \xparse_add_arg:n {##1} + #4 \l_xparse_args_toks + } } \use:c { peek_charcode #6 :NTF } #1 { \xparse_grab_arg:w @@ -417,6 +469,30 @@ #4 \l_xparse_args_toks } } +\cs_new:Npn \xparse_grab_D_nested:NNnNn #1#2#3#4#5 { + \int_zero:N \l_xparse_nested_int + \toks_set:Nn \l_xparse_nested_toks { #5 #2 } + \cs_set:Npn \xparse_grab_D_nested_aux:n ##1 { + \tl_if_eq:nnT {#1} {##1} { + \int_incr:N \l_xparse_nested_int + } + } + \tl_map_function:nN {#5} \xparse_grab_D_nested_aux:n + #4 \xparse_grab_arg:w ##1 #2 { + \int_decr:N \l_xparse_nested_int + \tl_map_function:nN {##1} \xparse_grab_D_nested_aux:n + \intexpr_compare:nTF { \l_xparse_nested_int = \c_zero } { + \toks_put_right:Nn \l_xparse_nested_toks {##1} + \xparse_add_arg:V \l_xparse_nested_toks + #3 \l_xparse_args_toks + }{ + \toks_put_right:Nn \l_xparse_nested_toks { ##1 #2 } + \xparse_grab_arg:w + } + } + \xparse_grab_arg:w +} +\cs_new:Npn \xparse_grab_D_nested_aux:n #1 { } \cs_new:Npn \xparse_grab_G:w #1#2 \l_xparse_args_toks { \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_nopar:Npn { _ignore_spaces } } @@ -429,7 +505,7 @@ \cs_new:Npn \xparse_grab_G_long_trailing:w #1#2 \l_xparse_args_toks { \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set:Npn { } } -\cs_set:Nn \xparse_grab_G_aux:nnNn { +\cs_set:Npn \xparse_grab_G_aux:nnNn #1#2#3#4 { #3 \xparse_grab_arg:w ##1 { \xparse_add_arg:n {##1} #2 \l_xparse_args_toks @@ -447,9 +523,9 @@ \cs_new:Npn \xparse_grab_l_long:w #1 \l_xparse_args_toks { \xparse_grab_l_aux:nN {#1} \cs_set:Npn } -\cs_new:Nn \xparse_grab_l_aux:nN { +\cs_new:Npn \xparse_grab_l_aux:nN #1#2 { #2 \xparse_grab_arg:w ##1## { - \xparse_add_arg:n \l_xparse_args_toks {##1} + \xparse_add_arg:n {##1} #1 \l_xparse_args_toks } \xparse_grab_arg:w @@ -544,7 +620,7 @@ \cs_new:Npn \xparse_grab_t_long_trailing:w #1#2 \l_xparse_args_toks { \xparse_grab_t_aux:NnNn #1 {#2} \cs_set:Npn { } } -\cs_new:Nn \xparse_grab_t_aux:NnNn { +\cs_new:Npn \xparse_grab_t_aux:NnNn #1#2#3#4 { #3 \xparse_grab_arg:w { \use:c { peek_charcode_remove #4 :NTF } #1 { \xparse_add_arg:n { \BooleanTrue } @@ -562,27 +638,27 @@ \cs_new:Npn \xparse_grab_u_long:w #1#2 \l_xparse_args_toks { \xparse_grab_u_aux:NnN {#1} {#2} \cs_set:Npn } -\cs_new:Nn \xparse_grab_u_aux:NnN { +\cs_new:Npn \xparse_grab_u_aux:NnN #1#2#3 { #3 \xparse_grab_arg:w ##1 #1 { \xparse_add_arg:n {##1} #2 \l_xparse_args_toks } \xparse_grab_arg:w } -\cs_new:Nn \xparse_process_to_str:n { - \toks_set:Nx \l_xparse_arg_toks { +\cs_new:Npn \xparse_process_to_str:n #1 { + \toks_set:Nx \ProcessedArgument { \tl_to_str:n {#1} } } -\cs_new:Nn \xparse_process_comma_split:n { +\cs_new:Npn \xparse_process_comma_split:n #1 { \tl_if_in:nnTF {#1} { , } { \xparse_process_comma_split_aux:w #1 \q_stop }{ - \toks_set:Nn \l_xparse_arg_toks { {#1} { \NoValue } } + \toks_set:Nn \ProcessedArgument { {#1} { \NoValue } } } } \cs_new:Npn \xparse_process_comma_split_aux:w #1 , #2 \q_stop { - \toks_set:Nn \l_xparse_arg_toks { {#1} {#2} } + \toks_set:Nn \ProcessedArgument { {#1} {#2} } } \cs_new:Npn \xparse_exp_add_type_d:w #1#2 { \xparse_exp_add_type_D:w #1 #2 { \NoValue } @@ -669,9 +745,9 @@ } \xparse_exp_prepare_function:N } -\cs_new_nopar:Nn \xparse_exp_check_and_add:N { +\cs_new_nopar:Npn \xparse_exp_check_and_add:N #1 { \cs_if_free:cTF { xparse_exp_add_type_ #1 :w } { - \msg_error:nnx { xparse } { unknown-argument-type } {#1} + \msg_kernel_error:nnx { xparse } { unknown-argument-type } {#1} \tl_set:Nn \l_xparse_last_arg_tl { m } \xparse_exp_add_type_m:w }{ @@ -679,7 +755,16 @@ \use:c { xparse_exp_add_type_ #1 :w } } } -\cs_new:Nn \xparse_exp_declare_cmd:Nnn { +\cs_new:Npn \xparse_exp_declare_cmd:Nnn #1#2#3 { + \cs_if_exist:NTF #1 + { + \msg_kernel_warning:nnxx { xparse } { redefine-command } + { \exp_not:N #1 } { \exp_not:n {#2} } + } + { + \msg_kernel_info:nnxx { xparse } { define-command } + { \exp_not:N #1 } { \exp_not:n {#2} } + } \tl_set:Nn \l_xparse_function_tl {#1} \xparse_exp_prepare_function:n {#2} \intexpr_compare:nTF { @@ -690,7 +775,7 @@ \xparse_exp_declare_cmd_mixed:Nn #1 {#3} } } -\cs_new:Nn \xparse_exp_declare_cmd_all_m:Nn { +\cs_new:Npn \xparse_exp_declare_cmd_all_m:Nn #1#2 { \bool_if:NTF \l_xparse_long_bool { \cs_generate_from_arg_count:NNnn #1 \cs_set:Npn \l_xparse_total_args_int {#2} @@ -699,14 +784,14 @@ #1 \cs_set_nopar:Npn \l_xparse_total_args_int {#2} } } -\cs_new:Nn \xparse_exp_declare_cmd_mixed:Nn { +\cs_new:Npn \xparse_exp_declare_cmd_mixed:Nn #1#2 { \exp_args:NnV \tl_if_in:nnTF { l m u } \l_xparse_last_arg_tl { \xparse_exp_declare_cmd_mixed_aux:Nn #1 {#2} }{ - \msg_error:nn { xparse } { expandable-ending-optional } + \msg_kernel_error:nn { xparse } { expandable-ending-optional } } } -\cs_new:Nn \xparse_exp_declare_cmd_mixed_aux:Nn { +\cs_new:Npn \xparse_exp_declare_cmd_mixed_aux:Nn #1#2 { \cs_set_nopar:Npx #1 { \exp_not:c { \token_to_str:N #1 1 } x \exp_not:N \q_xparse_stop } @@ -718,25 +803,27 @@ \cs_generate_from_arg_count:cNnn { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int {#2} } -\cs_new:Nn \xparse_exp_prepare_function:n { +\cs_new:Npn \xparse_exp_prepare_function:n #1 { \bool_set_false:N \l_xparse_error_bool \tl_if_in:nnT {#1} { > } { - \msg_error:nnx { xparse } { processor-in-expandable } {#1} + \msg_kernel_error:nnx { xparse } { processor-in-expandable } {#1} \bool_set_true:N \l_xparse_error_bool } \tl_if_in:nnT {#1} { g } { - \msg_error:nnx { xparse } { grouped-in-expandable } {#1} + \msg_kernel_error:nnx { xparse } { grouped-in-expandable } + { g } {#1} \bool_set_true:N \l_xparse_error_bool } \tl_if_in:nnT {#1} { G } { - \msg_error:nnx { xparse } { grouped-in-expandable } {#1} + \msg_kernel_error:nnx { xparse } { grouped-in-expandable } + { G } {#1} \bool_set_true:N \l_xparse_error_bool } \bool_if:NF \l_xparse_error_bool { \xparse_exp_prepare_function_aux:n {#1} } } -\cs_new:Nn \xparse_exp_prepare_function_aux:n { +\cs_new:Npn \xparse_exp_prepare_function_aux:n #1 { \cs_set_eq:NN \xparse_prepare_next:w \xparse_exp_prepare_function:N \cs_set_eq:NN \xparse_exp_set:cpx \cs_set_nopar:cpx \bool_set_false:N \l_xparse_long_bool @@ -748,25 +835,24 @@ } \xparse_exp_prepare_function:N #1 \q_nil } -\cs_new:Nn \xparse_exp_prepare_function:N { +\cs_new:Npn \xparse_exp_prepare_function:N #1 { \bool_if:NTF \l_xparse_long_bool { \xparse_exp_prepare_function_long:N #1 }{ \xparse_exp_prepare_function_short:N #1 } } -\cs_new:Nn \xparse_exp_prepare_function_long:N { +\cs_new:Npn \xparse_exp_prepare_function_long:N #1 { \quark_if_nil:NF #1 { \tl_if_eq:nnTF {#1} { + } { \xparse_exp_prepare_function_short:N }{ - \msg_error:nn { xparse } { inconsistent-long } + \msg_kernel_error:nn { xparse } { expandable-inconsistent-long } \xparse_exp_prepare_function_short:N #1 } - } } -\cs_new:Nn \xparse_exp_prepare_function_short:N { +\cs_new:Npn \xparse_exp_prepare_function_short:N #1 { \quark_if_nil:NF #1 { \prop_if_in:NnTF \c_xparse_shorthands_prop {#1} { \prop_get:NnN \c_xparse_shorthands_prop {#1} \l_xparse_tmp_tl @@ -782,104 +868,155 @@ } } \cs_new_eq:NN \xparse_exp_set:cpx \cs_set_nopar:cpx -\msg_new:nnnn { xparse } { command-already-defined } {% - Command name `\token_to_str:N #1' already defined!% -}{% - You have used \token_to_str:N \NewDocumentCommand\\% - with a command that already has a definition.\\% - Perhaps you meant \token_to_str:N \RenewDocumentCommand.% -} -\msg_new:nnnn { xparse } { command-not-yet-defined } {% - Command `\token_to_str:N #1' not yet defined!% -}{% - You have used \token_to_str:N \RenewDocumentCommand\\% - with a command that was never defined.\\% - Perhaps you meant \token_to_str:N \NewDocumentCommand.% -} -\msg_new:nnn { xparse } { environment-already-defined } {% - Environment `#1' already defined!% -} -\msg_new:nnn { xparse } { environment-not-yet-defined } {% - Environment `#1' not yet defined!% -} -\msg_new:nnnn { xparse } { expandable-ending-optional } {% - Expandable command signature ends in optional argument.% -}{% - Expandable functions must have a final mandatory argument.% -} -\msg_new:nnnn { xparse } { grouped-in-expandable } {% - Optional grouped arguments cannot be used with expandable functions.% -}{% - Argument specification `#1' contains an optional grouped argument:\\% - this is only supported for standard robust functions.% -} -\msg_new:nnnn { xparse } { inconsistent-long } {% - Inconsistent long arguments.% -}{% - Expandable commands must have all arguments long if any at all.% -} -\msg_new:nnnn { xparse } { processor-in-expandable } {% - Argument processors cannot be used with expandable functions.% -}{% - Argument specification `#1' contains a processor function:\\% - this is only supported for standard robust functions.% -} -\msg_new:nnn { xparse } { unknown-argument-type } {% - Unknown argument type `#1' replaced by `m'. Fingers crossed ...% -} +\msg_kernel_new:nnnn { xparse } { command-already-defined } + {Command `#1' already defined!} + {% + You have used \token_to_str:N \NewDocumentCommand\\% + with a command that already has a definition.\\% + Perhaps you meant \token_to_str:N \RenewDocumentCommand.% + } +\msg_kernel_new:nnnn { xparse } { command-not-yet-defined } + {Command `#1' not yet defined!} + {% + You have used \token_to_str:N \RenewDocumentCommand\\% + with a command that was never defined.\\% + Perhaps you meant \token_to_str:N \NewDocumentCommand.% + } +\msg_kernel_new:nnnn { xparse } { environment-already-defined } + {Environment `#1' already defined!} + {% + You have used \token_to_str:N \NewDocumentEnvironment\\% + with a command that already has a definition.\\% + Perhaps you meant \token_to_str:N \RenewDocumentEnvironment.% + } +\msg_kernel_new:nnnn { xparse } { environment-not-yet-defined } + {Environment `#1' not yet defined!} + {% + You have used \token_to_str:N \RenewDocumentEnvironment\\% + with a command that was never defined.\\% + Perhaps you meant \token_to_str:N \NewDocumentEnvironment.% + } +\msg_kernel_new:nnnn { xparse } { expandable-ending-optional } + {% + Signature for expandable command ends with \\% + optional argument \msg_line_context:.% + } + {% + Expandable commands must have a final mandatory argument\\% + (or no arguments at all). You cannot have a terminal optional\\% + argument with expandable commands.% + } +\msg_kernel_new:nnnn { xparse } { expandable-inconsistent-long } + {% + Inconsistent handling of long arguments for\\% + expandable command \msg_line_context:.% + } + {% + The arguments for an expandable command must either all be\\% + short or all be long. You have tried to mix the two types.% + } +\msg_kernel_new:nnnn { xparse } { grouped-in-expandable } + {% + Argument specifier `#1' forbidden in expandable commands + \msg_line_context:.% + } + {% + Argument specification `#2' contains the optional grouped + argument `#1':\\% + this is only supported for standard robust functions.% + } +\msg_kernel_new:nnnn { xparse } { processor-in-expandable } + {% + Argument processors cannot be used\\% + with expandable functions \msg_line_context:.% + } + {% + Argument specification `#1' contains a processor function:\\% + this is only supported for standard robust functions.% + } +\msg_kernel_new:nnnn { xparse } { unknown-argument-type } + {Unknown argument type `#1' replaced by `m'. Fingers crossed ...} + {% + The letter `#1' does not specify a known argument type.\\% + I'm assuming you want a standard mandatory argument (type `m').% + } +\msg_kernel_new:nnn { xparse } { define-command } + {% + Defining document command #1\\% + with arg. spec. `#2' \msg_line_context:.% + } +\msg_kernel_new:nnn { xparse } { define-environment } + {% + Defining document environment `#1'\\% + with arg. spec. `#2' \msg_line_context:.% + } +\msg_kernel_new:nnn { xparse } { redefine-command } + {% + Redefining document command #1\\% + with arg. spec. `#2' \msg_line_context:.% + } +\msg_kernel_new:nnn { xparse } { redefine-environment } + {% + Redefining document environment `#1'\\% + with arg. spec. `#2' \msg_line_context:.% + } \cs_new_eq:NN \BooleanFalse \c_false_bool \cs_new_eq:NN \BooleanTrue \c_true_bool -\xparse_declare_cmd:Nnn \DeclareDocumentCommand { +m +m +m } { +\cs_new_protected:Npn \DeclareDocumentCommand #1#2#3 { \xparse_declare_cmd:Nnn #1 {#2} {#3} } -\DeclareDocumentCommand \NewDocumentCommand { +m +m +m } { +\cs_new_protected:Npn \NewDocumentCommand #1#2#3 { \cs_if_exist:NTF #1 { - \msg_error:nnx { xparse } { command-already-defined } {#1} + \msg_kernel_error:nnx { xparse } { command-already-defined } + { \exp_not:N #1 } }{ \xparse_declare_cmd:Nnn #1 {#2} {#3} } } -\NewDocumentCommand \RenewDocumentCommand { +m +m +m } { +\cs_new_protected:Npn \RenewDocumentCommand #1#2#3 { \cs_if_exist:NTF #1 { \xparse_declare_cmd:Nnn #1 {#2} {#3} }{ - \msg_error:nnx { xparse } { command-not-yet-defined } {#1} + \msg_kernel_error:nnx { xparse } { command-not-yet-defined } + { \exp_not:N #1 } } } -\NewDocumentCommand \ProvideDocumentCommand { +m +m +m } { +\cs_new_protected:Npn \ProvideDocumentCommand #1#2#3 { \cs_if_exist:NF #1 { \xparse_declare_cmd:Nnn #1 {#2} {#3} } } -\NewDocumentCommand \DeclareDocumentCommandImplementation { m m +m } { +\cs_new_protected:Npn \DeclareDocumentCommandImplementation #1#2#3 { \xparse_declare_cmd_implementation:nNn {#1} #2 {#3} } -\NewDocumentCommand \DeclareDocumentCommandInterface { m m +m } { +\cs_new_protected:Npn \DeclareDocumentCommandInterface #1#2#3 { \xparse_declare_cmd_interface:Nnn #1 {#2} {#3} } -\NewDocumentCommand \DeclareDocumentEnvironment { m +m +m +m } { +\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4 { \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} } -\NewDocumentCommand \NewDocumentEnvironment { m +m +m +m } { - \cs_if_exist:cTF { environment_begin_ #1 :w } { - \msg_error:nnx { xparse } { environment-already-defined } {#1} +\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4 { + \cs_if_exist:cTF {#1} { + \msg_kernel_error:nnx { xparse } + { environment-already-defined } {#1} }{ \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} } } -\NewDocumentCommand \RenewDocumentEnvironment { m +m +m +m } { - \cs_if_exist:cTF { environment_begin_ #1 :w } { +\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4 { + \cs_if_exist:cTF {#1} { \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} }{ - \msg_error:nnx { xparse } { environment-not-yet-defined } {#1} + \msg_kernel_error:nnx { xparse } + { environment-not-yet-defined } {#1} } } -\NewDocumentCommand \ProvideDocumentEnvironment { m +m +m +m } { - \cs_if_exist:cF { environment_begin_ #1 :w } { +\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4 { + \cs_if_exist:cF { #1 } { \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} } } -\NewDocumentCommand \DeclareExpandableDocumentCommand { +m +m +m } { +\cs_new_protected:Npn \DeclareExpandableDocumentCommand #1#2#3 { \xparse_exp_declare_cmd:Nnn #1 {#2} {#3} } \cs_new_eq:NN \IfBooleanTF \bool_if:NTF @@ -893,7 +1030,8 @@ \cs_set:Npn \IfValueTF #1#2#3 { \xparse_if_no_value:nTF {#1} {#3} {#2} } -\NewDocumentCommand \NoValue { } { -NoValue- } +\cs_new_protected:Npn \NoValue { -NoValue- } +\cs_new:Npn \ProcessedArgument { } \endinput %% %% End of file `xparse.sty'. |