summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty')
-rw-r--r--Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty396
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'.