summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty')
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty1270
1 files changed, 1270 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
new file mode 100644
index 00000000000..be93d481af1
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
@@ -0,0 +1,1270 @@
+%%
+%% This is file `xparse.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xparse.dtx (with options: `package')
+%%
+%% EXPERIMENTAL CODE
+%%
+%% Do not distribute this file without also distributing the
+%% source files specified above.
+%%
+%% Do not distribute a modified version of this file.
+%%
+%% File: xparse.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley,
+%% David Carlisle
+%% (C) Copyright 2004-2008 Frank Mittelbach,
+%% The LaTeX3 Project
+%% (C) Copyright 2009-2011 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3packages bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+%%
+\RequirePackage{expl3}
+\GetIdInfo$Id: xparse.dtx 2492 2011-07-02 13:40:38Z joseph $
+ {L3 Experimental document command parser}
+\ProvidesExplPackage
+ {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+\RequirePackage{expl3}
+\@ifpackagelater { l3token } { 2011/07/02 }
+ { }
+ {
+ \PackageError { xparse } { Support~package~l3kernel~too~old. }
+ {
+ Please~install~an~up~to~date~version~of~l3kernel~
+ using~your~TeX~package~manager~or~from~CTAN.\\ \\
+ Loading~xparse~will~abort!
+ }
+ \tex_endinput:D
+ }
+\prop_new:N \c_xparse_shorthands_prop
+\prop_put:Nnn \c_xparse_shorthands_prop { o } { d[] }
+\prop_put:Nnn \c_xparse_shorthands_prop { O } { D[] }
+\prop_put:Nnn \c_xparse_shorthands_prop { s } { t* }
+ %\end{variable}
+\tl_new:N \l_xparse_arg_tl
+\tl_new:N \l_xparse_args_tl
+\bool_new:N \l_xparse_environment_bool
+\bool_new:N \l_xparse_error_bool
+\tl_new:N \l_xparse_function_tl
+\tl_new:N \l_xparse_last_arg_tl
+\bool_new:N \l_xparse_long_bool
+\int_new:N \l_xparse_m_args_int
+\bool_new:N \l_xparse_m_only_bool
+\int_new:N \l_xparse_mandatory_args_int
+\bool_new:N \l_xparse_processor_bool
+\int_new:N \l_xparse_processor_int
+\tl_new:N \l_xparse_signature_tl
+\tl_new:N \l_xparse_tmp_tl
+\int_new:N \l_xparse_total_args_int
+\cs_new_protected_nopar:Npn \xparse_add_grabber_mandatory:N #1
+ {
+ \tl_put_right:Nx \l_xparse_signature_tl
+ {
+ \exp_not:c
+ { xparse_grab_ #1 \bool_if:NT \l_xparse_long_bool { _long } :w }
+ }
+ \bool_set_false:N \l_xparse_long_bool
+ \int_decr:N \l_xparse_mandatory_args_int
+ }
+\cs_new_protected_nopar:Npn \xparse_add_grabber_optional:N #1
+ {
+ \tl_put_right:Nx \l_xparse_signature_tl
+ {
+ \exp_not:c
+ {
+ xparse_grab_ #1
+ \bool_if:NT \l_xparse_long_bool { _long }
+ \int_compare:nNnF \l_xparse_mandatory_args_int > \c_zero
+ { _trailing }
+ :w
+ }
+ }
+ \bool_set_false:N \l_xparse_long_bool
+ }
+\cs_new_protected_nopar:cpn { xparse_add_type_+:w }
+ {
+ \xparse_flush_m_args:
+ \bool_set_true:N \l_xparse_long_bool
+ \bool_set_false:N \l_xparse_m_only_bool
+ \int_decr:N \l_xparse_total_args_int
+ \xparse_prepare_signature:N
+ }
+\cs_new_protected:cpn { xparse_add_type_>:w } #1
+ {
+ \bool_set_true:N \l_xparse_processor_bool
+ \xparse_flush_m_args:
+ \int_decr:N \l_xparse_total_args_int
+ \tl_put_right:Nn \l_xparse_signature_tl { \xparse_process_arg:n {#1} }
+ \xparse_prepare_signature_aux:N
+ }
+\cs_new_protected:Npn \xparse_add_type_d:w #1#2
+ { \xparse_add_type_D:w #1 #2 { \NoValue } }
+\cs_new_protected:Npn \xparse_add_type_D:w #1#2#3
+ {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_optional:N D
+ \tl_put_right:Nn \l_xparse_signature_tl { #1 #2 {#3} }
+ \xparse_prepare_signature:N
+ }
+\cs_new_protected_nopar:Npn \xparse_add_type_g:w
+ { \xparse_add_type_G:w { \NoValue } }
+\cs_new_protected:Npn \xparse_add_type_G:w #1
+ {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_optional:N G
+ \tl_put_right:Nn \l_xparse_signature_tl { {#1} }
+ \xparse_prepare_signature:N
+ }
+\cs_new_protected_nopar:Npn \xparse_add_type_l:w
+ {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_mandatory:N l
+ \xparse_prepare_signature:N
+ }
+\cs_new_protected_nopar:Npn \xparse_add_type_m:w
+ {
+ \bool_if:nTF { \l_xparse_long_bool || \l_xparse_processor_bool }
+ {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_mandatory:N m
+ }
+ { \int_incr:N \l_xparse_m_args_int }
+ \xparse_prepare_signature:N
+ }
+\cs_new_protected:Npn \xparse_add_type_t:w #1
+ {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_optional:N t
+ \tl_put_right:Nn \l_xparse_signature_tl { #1 }
+ \xparse_prepare_signature:N
+ }
+\cs_new_protected:Npn \xparse_add_type_u:w #1
+ {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_mandatory:N u
+ \tl_put_right:Nn \l_xparse_signature_tl { {#1} }
+ \xparse_prepare_signature:N
+ }
+\cs_new_protected_nopar:Npn \xparse_check_and_add:N #1
+ {
+ \cs_if_free:cTF { xparse_add_type_ #1 :w }
+ {
+ \msg_error:nnx { xparse } { unknown-argument-type }
+ { \tl_to_str:n {#1} }
+ \xparse_add_type_m:w
+ }
+ { \use:c { xparse_add_type_ #1 :w } }
+ }
+\cs_new_protected:Npn \xparse_count_mandatory:n #1
+ {
+ \int_zero:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N #1 \q_nil
+ }
+\cs_new_protected: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
+ \exp_last_unbraced:NV \xparse_count_mandatory:N \l_xparse_tmp_tl
+ }
+ { \xparse_count_mandatory_aux:N #1 }
+ }
+ }
+\cs_new_protected:Npn \xparse_count_mandatory_aux:N #1
+ {
+ \cs_if_free:cTF { xparse_count_type_ #1 :w }
+ { \xparse_count_type_m:w }
+ { \use:c { xparse_count_type_ #1 :w } }
+ }
+\cs_new_protected:cpn { xparse_count_type_>:w } #1
+ { \xparse_count_mandatory:N }
+\cs_new_protected_nopar:cpn { xparse_count_type_+:w }
+ { \xparse_count_mandatory:N }
+\cs_new_protected:Npn \xparse_count_type_d:w #1#2
+ { \xparse_count_mandatory:N }
+\cs_new_protected:Npn \xparse_count_type_D:w #1#2#3
+ { \xparse_count_mandatory:N }
+\cs_new_protected_nopar:Npn \xparse_count_type_g:w
+ { \xparse_count_mandatory:N }
+\cs_new_protected:Npn \xparse_count_type_G:w #1
+ { \xparse_count_mandatory:N }
+\cs_new_protected_nopar:Npn \xparse_count_type_l:w
+ {
+ \int_incr:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N
+ }
+\cs_new_protected_nopar:Npn \xparse_count_type_m:w
+ {
+ \int_incr:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N
+ }
+\cs_new_protected:Npn \xparse_count_type_t:w #1
+ { \xparse_count_mandatory:N }
+\cs_new_protected:Npn \xparse_count_type_u:w #1
+ {
+ \int_incr:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N
+ }
+\cs_new_protected:Npn \xparse_declare_cmd:Nnn #1#2
+ {
+ \cs_if_exist:NTF #1
+ {
+ \msg_warning:nnxx { xparse } { redefine-command }
+ { \token_to_str:N #1 } { \tl_to_str:n {#2} }
+ }
+ {
+ \msg_info:nnxx { xparse } { define-command }
+ { \token_to_str:N #1 } { \tl_to_str:n {#2} }
+ }
+ \xparse_declare_cmd_aux:Nnn #1 {#2}
+ }
+\cs_new_protected:Npn \xparse_declare_cmd_aux:Nnn #1#2#3
+ {
+ \tl_clear_new:c { l_xparse_ \token_to_str:N #1 _arg_spec_tl }
+ \tl_set:cn { l_xparse_ \token_to_str:N #1 _arg_spec_tl } {#2}
+ \xparse_count_mandatory:n {#2}
+ \xparse_prepare_signature:n {#2}
+ \bool_if:NTF \l_xparse_m_only_bool
+ { \xparse_declare_cmd_all_m:Nn #1 {#3} }
+ { \xparse_declare_cmd_mixed:Nn #1 {#3} }
+ }
+\cs_generate_variant:Nn \xparse_declare_cmd_aux:Nnn { cnn }
+\cs_new_protected: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_protected:Npn \xparse_declare_cmd_mixed:Nn #1#2
+ {
+ \group_begin:
+ \tex_escapechar:D 92 \scan_stop:
+ \tl_set:Nx \l_xparse_function_tl { \token_to_str:N #1 }
+ \exp_args:NNNo \group_end:
+ \tl_set:Nn \l_xparse_function_tl { \l_xparse_function_tl }
+ \cs_set_protected_nopar:Npx #1
+ {
+ \exp_not:n
+ {
+ \int_zero:N \l_xparse_processor_int
+ \tl_set:Nn \l_xparse_args_tl
+ }
+ { \exp_not:c { \l_xparse_function_tl } }
+ \exp_not:o \l_xparse_signature_tl
+ \exp_not:N \l_xparse_args_tl
+ }
+ \cs_generate_from_arg_count:cNnn
+ { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int {#2}
+ }
+\cs_new_protected: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_protected: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} }
+ { \xparse_declare_cmd_interface_mixed:Nn #1 {#2} }
+ \cs_generate_from_arg_count:cNnn { implementation_ #2 :w }
+ \cs_set:Npn \l_xparse_total_args_int { '#2' }
+ }
+\cs_new_protected: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_protected: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
+ \tl_set:Nn \l_xparse_args_tl
+ }
+ { \exp_not:c { \token_to_str:N #1 } }
+ \exp_not:o \l_xparse_signature_tl
+ \exp_not:N \l_xparse_args_tl
+ }
+ \cs_generate_from_arg_count:cNnn
+ { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int
+ { \use:c { implementation_ #2 :w } }
+ }
+\cs_new_protected:Npn \xparse_declare_env:nnnn #1#2#3#4
+ {
+ \bool_set_true:N \l_xparse_environment_bool
+ \cs_if_exist:cTF {#1}
+ {
+ \msg_warning:nnxx { xparse } { redefine-environment }
+ { \tl_to_str:n {#1} } { \tl_to_str:n {#2} }
+ }
+ {
+ \msg_info:nnxx { xparse } { define-environment }
+ { \tl_to_str:n {#1} } { \tl_to_str:n {#2} }
+ }
+ \xparse_declare_cmd_aux:cnn { environment_begin_ #1 :w } {#2}
+ {
+ \group_begin:
+ \cs_set_protected_nopar:cpx { environment_end_ #1 :w }
+ {
+ \exp_not:c { environment_end_ #1 _aux:N }
+ \exp_not:o \l_xparse_args_tl
+ \group_end:
+ }
+ #3
+ }
+ \cs_set_protected_nopar:cpx { environment_end_ #1 : }
+ { \exp_not:c { environment_end_ #1 :w } }
+ \bool_set_false:N \l_xparse_environment_bool
+ \cs_set_nopar:cpx { environment_end_ #1 _aux:N } ##1
+ { \exp_not:c { environment_end_ #1 _aux :w } }
+ \cs_generate_from_arg_count:cNnn
+ { environment_end_ #1 _aux :w } \cs_set:Npn
+ \l_xparse_total_args_int {#4}
+ \cs_set_eq:cc {#1} { environment_begin_ #1 :w }
+ \cs_set_eq:cc { end #1 } { environment_end_ #1 : }
+ }
+\cs_new_protected_nopar:Npn \xparse_flush_m_args:
+ {
+ \cs_if_exist:cT { xparse_grab_m_ \int_use:N \l_xparse_m_args_int :w }
+ {
+ \tl_put_right:Nx \l_xparse_signature_tl
+ { \exp_not:c { xparse_grab_m_ \int_use:N \l_xparse_m_args_int :w } }
+ \int_set:Nn \l_xparse_mandatory_args_int
+ { \l_xparse_mandatory_args_int - \l_xparse_m_args_int }
+ }
+ \int_zero:N \l_xparse_m_args_int
+ \bool_set_false:N \l_xparse_m_only_bool
+ }
+\prg_new_conditional:Npnn \xparse_if_no_value:n #1 { T , F , TF }
+ { \str_if_eq:nnTF {#1} { \NoValue } \prg_return_true: \prg_return_false: }
+\cs_new_protected:Npn \xparse_prepare_signature:n #1
+ {
+ \bool_set_false:N \l_xparse_long_bool
+ \int_zero:N \l_xparse_m_args_int
+ \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
+ \tl_clear:N \l_xparse_signature_tl
+ \int_zero:N \l_xparse_total_args_int
+ \xparse_prepare_signature:N #1 \q_nil
+ }
+\cs_new_protected:Npn \xparse_prepare_signature:N #1
+ {
+ \bool_set_false:N \l_xparse_processor_bool
+ \xparse_prepare_signature_aux:N #1
+ }
+\cs_new_protected:Npn \xparse_prepare_signature_aux:N #1
+ {
+ \quark_if_nil:NTF #1
+ { \bool_if:NF \l_xparse_m_only_bool { \xparse_flush_m_args: } }
+ {
+ \prop_if_in:NnTF \c_xparse_shorthands_prop {#1}
+ {
+ \prop_get:NnN \c_xparse_shorthands_prop {#1} \l_xparse_tmp_tl
+ \exp_after:wN \xparse_prepare_signature:N \l_xparse_tmp_tl
+ }
+ {
+ \int_incr:N \l_xparse_total_args_int
+ \xparse_check_and_add:N #1
+ }
+ }
+ }
+\cs_new_protected:Npn \xparse_process_arg:n #1
+ {
+ \int_incr:N \l_xparse_processor_int
+ \cs_set:cpn { xparse_processor_ \int_use:N \l_xparse_processor_int :n } ##1
+ { #1 {##1} }
+ }
+\cs_new_protected:Npn \xparse_add_arg:n #1
+ {
+ \int_compare:nNnTF \l_xparse_processor_int = \c_zero
+ { \tl_put_right:Nn \l_xparse_args_tl { {#1} } }
+ {
+ \xparse_if_no_value:nTF {#1}
+ {
+ \int_zero:N \l_xparse_processor_int
+ \tl_put_right:Nn \l_xparse_args_tl { {#1} }
+ }
+ { \xparse_add_arg_aux:n {#1} }
+ }
+ }
+\cs_generate_variant:Nn \xparse_add_arg:n { V }
+\cs_new_protected:Npn \xparse_add_arg_aux:n #1
+ {
+ \tl_set_eq:NN \ProcessedArgument \l_xparse_arg_tl
+ \use:c { xparse_processor_ \int_use:N \l_xparse_processor_int :n } {#1}
+ \int_decr:N \l_xparse_processor_int
+ \int_compare:nNnTF \l_xparse_processor_int = \c_zero
+ {
+ \tl_put_right:Nx \l_xparse_args_tl
+ { { \exp_not:V \ProcessedArgument } }
+ }
+ { \xparse_add_arg_aux:V \ProcessedArgument }
+}
+\cs_generate_variant:Nn \xparse_add_arg_aux:n { V }
+\cs_new_protected:Npn \xparse_grab_arg:w { }
+\cs_new_protected:Npn \xparse_grab_arg_aux_i:w { }
+\cs_new_protected:Npn \xparse_grab_arg_aux_ii:w { }
+\cs_new_protected:Npn \xparse_grab_D:w #1#2#3#4 \l_xparse_args_tl
+ {
+ \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_protected_nopar:Npn
+ { _ignore_spaces }
+ }
+\cs_new_protected:Npn \xparse_grab_D_long:w #1#2#3#4 \l_xparse_args_tl
+ {
+ \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_protected:Npn
+ { _ignore_spaces }
+ }
+\cs_new_protected:Npn \xparse_grab_D_trailing:w #1#2#3#4 \l_xparse_args_tl
+ { \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_protected_nopar:Npn { } }
+\cs_new_protected:Npn \xparse_grab_D_long_trailing:w #1#2#3#4 \l_xparse_args_tl
+ { \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_protected:Npn { } }
+\cs_new_protected: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 {##1} {#4} #5 }
+ {
+ \xparse_add_arg:n {##1}
+ #4 \l_xparse_args_tl
+ }
+ }
+ \use:c { peek_charcode #6 :NTF } #1
+ { \xparse_grab_arg:w }
+ {
+ \xparse_add_arg:n {#3}
+ #4 \l_xparse_args_tl
+ }
+ }
+\tl_new:N \l_xparse_nesting_a_tl
+\tl_new:N \l_xparse_nesting_b_tl
+\quark_new:N \q_xparse
+\cs_new_protected:Npn \xparse_grab_D_nested:NNnnN #1#2#3#4#5
+ {
+ \tl_clear:N \l_xparse_nesting_a_tl
+ \tl_clear:N \l_xparse_nesting_b_tl
+ #5 \xparse_grab_arg:w ##1 #1 ##2 \q_xparse ##3 #2
+ {
+ \tl_put_right:Nn \l_xparse_nesting_a_tl { ##1 #1 }
+ \tl_put_right:Nn \l_xparse_nesting_b_tl { #2 ##3 }
+ \tl_if_in:nnTF {##2} {#1}
+ { \xparse_grab_arg:w ##2 \q_xparse }
+ {
+ \tl_put_right:Nn \l_xparse_nesting_a_tl {##2}
+ \tl_if_in:NnTF \l_xparse_nesting_b_tl {#1}
+ {
+ \tl_set_eq:NN \l_xparse_tmp_tl \l_xparse_nesting_b_tl
+ \tl_clear:N \l_xparse_nesting_b_tl
+ \exp_after:wN \xparse_grab_arg:w \l_xparse_tmp_tl \q_xparse
+ }
+ {
+ \tl_put_right:No \l_xparse_nesting_a_tl
+ \l_xparse_nesting_b_tl
+ \xparse_add_arg:V \l_xparse_nesting_a_tl
+ #4 \l_xparse_args_tl
+ }
+ }
+ }
+ \xparse_grab_arg:w #3 \q_xparse
+ }
+\cs_new_protected:Npn \xparse_grab_G:w #1#2 \l_xparse_args_tl
+ {
+ \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_protected_nopar:Npn
+ { _ignore_spaces }
+ }
+\cs_new_protected:Npn \xparse_grab_G_long:w #1#2 \l_xparse_args_tl
+ {
+ \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_protected:Npn { _ignore_spaces }
+ }
+\cs_new_protected:Npn \xparse_grab_G_trailing:w #1#2 \l_xparse_args_tl
+ { \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_protected_nopar:Npn { } }
+\cs_new_protected:Npn \xparse_grab_G_long_trailing:w #1#2 \l_xparse_args_tl
+ { \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_protected:Npn { } }
+\cs_new_protected: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_tl
+ }
+ \use:c { peek_meaning #4 :NTF } \c_group_begin_token
+ { \xparse_grab_arg:w }
+ {
+ \xparse_add_arg:n {#1}
+ #2 \l_xparse_args_tl
+ }
+ }
+\cs_new_protected:Npn \xparse_grab_l:w #1 \l_xparse_args_tl
+ { \xparse_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \xparse_grab_l_long:w #1 \l_xparse_args_tl
+ { \xparse_grab_l_aux:nN {#1} \cs_set_protected:Npn }
+\cs_new_protected:Npn \xparse_grab_l_aux:nN #1#2
+ {
+ #2 \xparse_grab_arg:w ##1##
+ {
+ \xparse_add_arg:n {##1}
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:Npn \xparse_grab_m:w #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1
+ {
+ \xparse_add_arg:n {##1}
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:Npn \xparse_grab_m_long:w #1 \l_xparse_args_tl
+ {
+ \cs_set_protected:Npn \xparse_grab_arg:w ##1
+ {
+ \xparse_add_arg:n {##1}
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_1:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1
+ {
+ \tl_put_right:Nn \l_xparse_args_tl { {##1} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_2:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1##2
+ {
+ \tl_put_right:Nn \l_xparse_args_tl { {##1} {##2} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_3:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1##2##3
+ {
+ \tl_put_right:Nn \l_xparse_args_tl { {##1} {##2} {##3} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_4:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1##2##3##4
+ {
+ \tl_put_right:Nn \l_xparse_args_tl { {##1} {##2} {##3} {##4} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_5:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5
+ {
+ \tl_put_right:Nn \l_xparse_args_tl { {##1} {##2} {##3} {##4} {##5} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_6:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6
+ {
+ \tl_put_right:Nn \l_xparse_args_tl
+ { {##1} {##2} {##3} {##4} {##5} {##6} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_7:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6##7
+ {
+ \tl_put_right:Nn \l_xparse_args_tl
+ { {##1} {##2} {##3} {##4} {##5} {##6} {##7} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:cpn { xparse_grab_m_8:w } #1 \l_xparse_args_tl
+ {
+ \cs_set_protected_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6##7##8
+ {
+ \tl_put_right:Nn \l_xparse_args_tl
+ { {##1} {##2} {##3} {##4} {##5} {##6} {##7} {##8} }
+ #1 \l_xparse_args_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:Npn \xparse_grab_t:w #1#2 \l_xparse_args_tl
+ {
+ \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_protected_nopar:Npn
+ { _ignore_spaces }
+ }
+\cs_new_protected:Npn \xparse_grab_t_long:w #1#2 \l_xparse_args_tl
+ { \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_protected:Npn { _ignore_spaces } }
+\cs_new_protected:Npn \xparse_grab_t_trailing:w #1#2 \l_xparse_args_tl
+ { \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_protected_nopar:Npn { } }
+\cs_new_protected:Npn \xparse_grab_t_long_trailing:w #1#2 \l_xparse_args_tl
+ { \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_protected:Npn { } }
+\cs_new_protected: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 }
+ #2 \l_xparse_args_tl
+ }
+ {
+ \xparse_add_arg:n { \BooleanFalse }
+ #2 \l_xparse_args_tl
+ }
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:Npn \xparse_grab_u:w #1#2 \l_xparse_args_tl
+ { \xparse_grab_u_aux:NnN {#1} {#2} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \xparse_grab_u_long:w #1#2 \l_xparse_args_tl
+ { \xparse_grab_u_aux:NnN {#1} {#2} \cs_set_protected:Npn }
+\cs_new_protected: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_tl
+ }
+ \xparse_grab_arg:w
+ }
+\cs_new_protected:Npn \xparse_process_to_str:n #1
+ { \tl_set:Nx \ProcessedArgument { \tl_to_str:n {#1} } }
+\cs_new_protected:Npn \xparse_bool_reverse:N #1
+ {
+ \bool_if:NTF #1
+ { \tl_set:Nn \ProcessedArgument { \c_false_bool } }
+ { \tl_set:Nn \ProcessedArgument { \c_true_bool } }
+ }
+\tl_new:N \l_xparse_split_argument_tl
+\group_begin:
+ \char_set_catcode_active:N \@
+ \cs_new_protected:Npn \xparse_split_argument:nnn #1#2#3
+ {
+ \tl_set:Nn \l_xparse_split_argument_tl {#3}
+ \group_begin:
+ \char_set_lccode:nn { `\@ } { `#2}
+ \tl_to_lowercase:n
+ {
+ \group_end:
+ \tl_replace_all_in:Nnn \l_xparse_split_argument_tl { @ } {#2}
+ }
+ \cs_set_protected:Npn \xparse_split_argument_aux_i:w
+ ##1 \q_mark ##2 #2 ##3 \q_stop
+ {
+ \tl_put_right:Nn \ProcessedArgument { {##2} }
+ ##1 \q_mark ##3 \q_stop
+ }
+ \cs_set_protected:Npn \xparse_split_argument_aux_iii:w
+ ##1 #2 ##2 \q_stop
+ {
+ \IfNoValueF {##1}
+ {
+ \msg_error:nnxxx { xparse } { split-excess-tokens }
+ { \tl_to_str:n {#2} } { \tl_to_str:n {#1} }
+ { \tl_to_str:n {#3} }
+ }
+ }
+ \tl_set:Nx \l_xparse_tmp_tl
+ {
+ \prg_replicate:nn { #1 + 1 }
+ { \xparse_split_argument_aux_i:w }
+ \xparse_split_argument_aux_ii:w
+ \exp_not:N \q_mark
+ \exp_not:o \l_xparse_split_argument_tl
+ \prg_replicate:nn {#1} { \exp_not:n {#2} \NoValue }
+ \exp_not:n { #2 \q_stop }
+ }
+ \l_xparse_tmp_tl
+ }
+\group_end:
+\cs_new_protected:Npn \xparse_split_argument_aux_i:w { }
+\cs_new_protected:Npn \xparse_split_argument_aux_ii:w
+ #1 \q_mark #2 \q_stop
+ {
+ \tl_if_empty:nF {#2}
+ { \xparse_split_argument_aux_iii:w #2 \q_stop }
+ }
+\cs_new_protected:Npn \xparse_split_argument_aux_iii:w { }
+\tl_new:N \l_xparse_split_list_tl
+\group_begin:
+ \char_set_catcode_active:N \@
+ \cs_new_protected:Npn \xparse_split_list:nn #1#2
+ {
+ \tl_set:Nn \l_xparse_split_list_tl {#2}
+ \group_begin:
+ \char_set_lccode:nn { `\@ } { `#1 }
+ \tl_to_lowercase:n
+ {
+ \group_end:
+ \tl_replace_all_in:Nnn \l_xparse_split_list_tl { @ } {#1}
+ }
+ \cs_set:Npn \xparse_split_list_aux:w ##1 #1
+ {
+ \quark_if_recursion_tail_stop:n {##1}
+ \tl_put_right:Nn \ProcessedArgument { {##1} }
+ \xparse_split_list_aux:w
+ }
+ \tl_if_empty:NTF \l_xparse_split_list_tl
+ { \tl_set:Nn \ProcessedArgument { { } } }
+ {
+ \tl_clear:N \ProcessedArgument
+ \exp_after:wN \xparse_split_list_aux:w
+ \l_xparse_split_list_tl #1
+ \q_recursion_tail #1 \q_recursion_stop
+ }
+ }
+\group_end:
+\cs_new_protected:Npn \xparse_split_list_aux:w { }
+\cs_new_protected:Npn \xparse_exp_add_type_d:w #1#2
+ { \xparse_exp_add_type_D:w #1 #2 { \NoValue } }
+\cs_new_protected:Npn \xparse_exp_add_type_D:w #1#2#3
+ {
+ \tl_set:Nx \l_xparse_tmp_tl
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_use:N \l_xparse_total_args_int
+ }
+ \xparse_exp_set:cpx { \l_xparse_tmp_tl } ##1 \q_xparse ##2
+ {
+ \exp_not:N \tl_if_head_eq_charcode:nNTF {##2} #1
+ {
+ \exp_not:c { \l_xparse_tmp_tl aux }
+ ##1 \exp_not:N \q_xparse
+ }
+ {
+ \exp_not:c { \l_xparse_tmp_tl aux }
+ ##1 \exp_not:N \q_xparse #3 #2 {##2}
+ }
+ }
+ \xparse_exp_set:cpx { \l_xparse_tmp_tl aux} ##1 \q_xparse ##2 #2
+ {
+ \exp_not:c
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ ##1 {##2} \exp_not:N \q_xparse
+ }
+ \xparse_exp_prepare_function:N
+ }
+\cs_new_protected_nopar:Npn \xparse_exp_add_type_l:w
+ {
+ \xparse_exp_set:cpx
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_use:N \l_xparse_total_args_int
+ }
+ ##1 \q_xparse ##2##
+ {
+ \exp_not:c
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ ##1 {##2} \exp_not:N \q_xparse
+ }
+ \xparse_exp_prepare_function:N
+ }
+\cs_new_protected_nopar:Npn \xparse_exp_add_type_m:w
+ {
+ \int_incr:N \l_xparse_m_args_int
+ \xparse_exp_set:cpx
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_use:N \l_xparse_total_args_int
+ }
+ ##1 \q_xparse ##2
+ {
+ \exp_not:c
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ ##1 {##2} \exp_not:N \q_xparse
+ }
+ \xparse_exp_prepare_function:N
+ }
+\cs_new_protected:Npn \xparse_exp_add_type_t:w #1
+ {
+ \tl_set:Nx \l_xparse_tmp_tl
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ \xparse_exp_set:cpx
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_use:N \l_xparse_total_args_int
+ }
+ ##1 \q_xparse ##2
+ {
+ \exp_not:N \tl_if_head_eq_charcode:nNTF {##2} #1
+ {
+ \exp_not:c { \l_xparse_tmp_tl }
+ ##1 \exp_not:n { { \BooleanTrue } \q_xparse }
+ }
+ {
+ \exp_not:c { \l_xparse_tmp_tl }
+ ##1 \exp_not:n { { \BooleanFalse } \q_xparse {##2} }
+ }
+ }
+ \xparse_exp_prepare_function:N
+ }
+\cs_new_protected:Npn \xparse_exp_add_type_u:w #1
+ {
+ \xparse_exp_set:cpx
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_use:N \l_xparse_total_args_int
+ }
+ ##1 \q_xparse ##2 #1
+ {
+ \exp_not:c
+ {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \int_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ ##1 {##2} \exp_not:N \q_xparse
+ }
+ \xparse_exp_prepare_function:N
+ }
+\cs_new_protected_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 }
+ { \tl_to_str:n {#1} }
+ \tl_set:Nn \l_xparse_last_arg_tl { m }
+ \xparse_exp_add_type_m:w
+ }
+ {
+ \tl_set:Nn \l_xparse_last_arg_tl {#1}
+ \use:c { xparse_exp_add_type_ #1 :w }
+ }
+ }
+\cs_new_protected:Npn \xparse_exp_declare_cmd:Nnn #1#2#3
+ {
+ \cs_if_exist:NTF #1
+ {
+ \msg_warning:nnxx { xparse } { redefine-command }
+ { \token_to_str:N #1 } { \tl_to_str:n {#2} }
+ }
+ {
+ \msg_info:nnxx { xparse } { define-command }
+ { \token_to_str:N #1 } { \tl_to_str:n {#2} }
+ }
+ \group_begin:
+ \tex_escapechar:D 92 \scan_stop:
+ \tl_set:Nx \l_xparse_function_tl { \token_to_str:N #1}
+ \exp_args:NNNo \group_end:
+ \tl_set:Nn \l_xparse_function_tl { \l_xparse_function_tl }
+ \xparse_exp_prepare_function:n {#2}
+ \int_compare:nNnTF \l_xparse_total_args_int = \l_xparse_m_args_int
+ { \xparse_exp_declare_cmd_all_m:Nn #1 {#3} }
+ { \xparse_exp_declare_cmd_mixed:Nn #1 {#3} }
+ }
+\cs_new_protected: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}
+ }
+ {
+ \cs_generate_from_arg_count:NNnn
+ #1 \cs_set_nopar:Npn \l_xparse_total_args_int {#2}
+ }
+ }
+\cs_new_protected:Npn \xparse_exp_declare_cmd_mixed:Nn #1#2
+ {
+ \tl_if_in:noTF { l m u } \l_xparse_last_arg_tl
+ { \xparse_exp_declare_cmd_mixed_aux:Nn #1 {#2} }
+ { \msg_error:nn { xparse } { expandable-ending-optional } }
+ }
+\cs_new_protected: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 }
+ \cs_set_nopar:cpx
+ { \token_to_str:N #1 \int_eval:n { \l_xparse_total_args_int + 1 } }
+ x ##1 \q_xparse
+ { \exp_not:c { \token_to_str:N #1 } ##1 }
+ \cs_generate_from_arg_count:cNnn
+ { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int {#2}
+ }
+\cs_new_protected: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 }
+ { \tl_to_str:n {#1} }
+ \bool_set_true:N \l_xparse_error_bool
+ }
+ \tl_if_in:nnT {#1} { g }
+ {
+ \msg_error:nnx { xparse } { grouped-in-expandable }
+ { g } { \tl_to_str:n {#1} }
+ \bool_set_true:N \l_xparse_error_bool
+ }
+ \tl_if_in:nnT {#1} { G }
+ {
+ \msg_error:nnx { xparse } { grouped-in-expandable }
+ { G } { \tl_to_str:n {#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_protected: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
+ \int_zero:N \l_xparse_m_args_int
+ \int_zero:N \l_xparse_total_args_int
+ \tl_if_in:nnT {#1} { + }
+ {
+ \bool_set_true:N \l_xparse_long_bool
+ \cs_set_eq:NN \xparse_exp_set:cpx \cs_set:cpx
+ }
+ \xparse_exp_prepare_function:N #1 \q_nil
+ }
+\cs_new_protected: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_protected:Npn \xparse_exp_prepare_function_long:N #1
+ {
+ \quark_if_nil:NF #1
+ {
+ \str_if_eq:nnTF {#1} { + }
+ { \xparse_exp_prepare_function_short:N }
+ {
+ \msg_error:nn { xparse } { inconsistent-long }
+ \xparse_exp_prepare_function_short:N #1
+ }
+ }
+ }
+\cs_new_protected: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
+ \bool_if:NT \l_xparse_long_bool
+ { \tl_put_left:Nn \l_xparse_tmp_tl { + } }
+ \exp_after:wN \xparse_exp_prepare_function:N \l_xparse_tmp_tl
+ }
+ {
+ \int_incr:N \l_xparse_total_args_int
+ \xparse_exp_check_and_add:N #1
+ }
+ }
+ }
+\cs_new_eq:NN \xparse_exp_set:cpx \cs_set_nopar:cpx
+\cs_new_protected:Npn \xparse_get_arg_spec:N #1
+ {
+ \cs_if_exist:cTF { l_xparse_ \token_to_str:N #1 _arg_spec_tl }
+ {
+ \tl_set_eq:Nc \ArgumentSpecification
+ { l_xparse_ \token_to_str:N #1 _arg_spec_tl }
+ }
+ {
+ \msg_error:nnx { xparse } { unknown-document-command }
+ { \token_to_str:N #1 }
+ }
+ }
+\cs_new_protected:Npn \xparse_get_arg_spec:n #1
+ {
+ \cs_if_exist:cTF { l_xparse_ #1 _arg_spec_tl }
+ { \tl_set_eq:Nc \ArgumentSpecification { l_xparse_ #1 _arg_spec_tl } }
+ {
+ \msg_error:nnx { xparse } { unknown-document-environment }
+ { \tl_to_str:n {#1} }
+ }
+ }
+\tl_new:N \ArgumentSpecification
+\cs_new_protected:Npn \xparse_show_arg_spec:N #1
+ {
+ \cs_if_exist:cTF { l_xparse_ \token_to_str:N #1 _arg_spec_tl }
+ {
+ \tl_set_eq:Nc \ArgumentSpecification
+ { l_xparse_ \token_to_str:N #1 _arg_spec_tl }
+ \tl_show:N \ArgumentSpecification
+ }
+ {
+ \msg_error:nnx { xparse } { unknown-document-command }
+ { \token_to_str:N #1 }
+ }
+ }
+\cs_new_protected:Npn \xparse_show_arg_spec:n #1
+ {
+ \cs_if_exist:cTF { l_xparse_ #1 _arg_spec_tl }
+ {
+ \tl_set_eq:Nc \ArgumentSpecification { l_xparse_ #1 _arg_spec_tl }
+ \tl_show:N \ArgumentSpecification
+ }
+ {
+ \msg_error:nnx { xparse } { unknown-document-environment }
+ { \tl_to_str:n {#1} }
+ }
+ }
+\msg_new:nnnn { xparse } { command-already-defined }
+ { Command~'#1'~already~defined! }
+ {
+ You~have~used~\NewDocumentCommand
+ with~a~command~that~already~has~a~definition. \\
+ The~existing~definition~of~'#1'~will~be~overwritten.
+ }
+\msg_new:nnnn { xparse } { command-not-yet-defined }
+ { Command ~'#1'~not~yet~defined! }
+ {
+ You~have~used~\RenewDocumentCommand
+ with~a~command~that~was~never~defined.\\
+ A~new~command~'#1'~will~be~created.
+ }
+\msg_new:nnnn { xparse } { environment-already-defined }
+ { Environment~'#1'~already~defined! }
+ {
+ You~have~used~\NewDocumentEnvironment
+ with~an~environment~that~already~has~a~definition.\\
+ The~existing~definition~of~'#1'~will~be~overwritten.
+ }
+\msg_new:nnnn { xparse } { environment-mismatch }
+ { Mismatch~between~start~and~end~of~environment. }
+ {
+ The~current~environment~is~called~'#1',~but~you~have~tried~to~
+ end~one~called~'#2'.~Environments~have~to~be~properly~nested.
+ }
+\msg_new:nnnn { xparse } { environment-not-yet-defined }
+ { Environment~'#1'~not~yet~defined! }
+ {
+ You~have~used~\RenewDocumentEnvironment
+ with~an~environment~that~was~never~defined.\\
+ A~new~environment~'#1'~will~be~created.
+ }
+\msg_new:nnnn { xparse } { environment-unknown }
+ { Environment~'#1'~undefined. }
+ {
+ You~have~tried~to~start~an~environment~called~'#1',~
+ but~this~has~never~been~defined.\\
+ The~command~will~be~ignored.
+ }
+\msg_new:nnnn { xparse } { expandable-ending-optional }
+ { Signature~for~expandable~command~ends~with~optional~argument. }
+ {
+ \c_msg_coding_error_text_tl
+ Expandable~commands~must~have~a~final~mandatory~argument~
+ (or~no~arguments~at~all).~You~cannot~have~a~terminal~optional~
+ argument~with~expandable~commands.
+ }
+\msg_new:nnnn { xparse } { grouped-in-expandable }
+ { Argument~specifier~'#1'~forbidden~in~expandable~commands. }
+ {
+ \c_msg_coding_error_text_tl
+ Argument~specification~'#2'~contains~the~optional~grouped~
+ argument~'#1':~
+ this~is only~supported~for~standard~robust~functions.
+ }
+\msg_new:nnnn { xparse } { inconsistent-long }
+ { Inconsistent~long~arguments~for~expandable~command. }
+ {
+ \c_msg_coding_error_text_tl
+ The~arguments~for~an~expandable~command~must~either~all~be~
+ short~or~all~be~long.~You~have~tried~to~mix~the~two~types.
+ }
+\msg_new:nnnn { xparse } { processor-in-expandable }
+ { Argument~processors~cannot~be~used~with~expandable~functions. }
+ {
+ \c_msg_coding_error_text_tl
+ Argument~specification~'#1'~contains~a~processor~function:~
+ this~is~only~supported~for~standard~robust~functions.
+ }
+\msg_new:nnnn { xparse } { split-excess-tokens }
+ { Too~many~'#1'~tokens~when~trying~to~split~argument. }
+ {
+ LaTeX~was~asked~to~split~the~input~'#3'~
+ at~each~occurrence~of~the~token~'#1',~up~to~a~maximum~of~#2~parts.~
+ There~were~too~many~'#1'~tokens.
+ }
+\msg_new:nnnn { xparse } { unknown-argument-type }
+ { Unknown~argument~type~'#1'~replaced~by~'m'. }
+ {
+ \c_msg_coding_error_text_tl
+ The~letter~'#1'~does~not~specify~a~known~argument~type.~
+ LaTeX~will~assume~you~want~a~standard~mandatory~argument~(type~'m').
+ }
+\msg_new:nnnn { xparse } { unknown-document-command }
+ { Unknown~document~command~'#1'. }
+ {
+ You~have~asked~for~the~argument~specification~for~a~command~'#1',~
+ but~this~is~not~a~document~command.
+ }
+\msg_new:nnnn { xparse } { unknown-document-environment }
+ { Unknown~document~environment~'#1'. }
+ {
+ You~have~asked~for~the~argument~specification~for~a~command~'#1',~
+ but~this~is~not~a~document~environment.
+ }
+\msg_new:nnn { xparse } { define-command }
+ {
+ Defining~document~command~#1~
+ with~arg.~spec.~'#2'~\msg_line_context:.
+ }
+\msg_new:nnn { xparse } { define-environment }
+ {
+ Defining~document~environment~'#1'~
+ with~arg.~spec.~'#2'~\msg_line_context:.
+ }
+\msg_new:nnn { xparse } { redefine-command }
+ {
+ Redefining~document~command~#1~
+ with~arg.~spec.~'#2'~\msg_line_context:.
+ }
+\msg_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
+\cs_new_protected:Npn \DeclareDocumentCommand #1#2#3
+ { \xparse_declare_cmd:Nnn #1 {#2} {#3} }
+\cs_new_protected:Npn \NewDocumentCommand #1#2#3
+ {
+ \cs_if_exist:NTF #1
+ {
+ \msg_error:nnx { xparse } { command-already-defined }
+ { \token_to_str:N #1 }
+ }
+ { \xparse_declare_cmd:Nnn #1 {#2} {#3} }
+ }
+\cs_new_protected:Npn \RenewDocumentCommand #1#2#3
+ {
+ \cs_if_exist:NTF #1
+ { \xparse_declare_cmd_aux:Nnn #1 {#2} {#3} }
+ {
+ \msg_error:nnx { xparse } { command-not-yet-defined }
+ { \token_to_str:N #1 }
+ }
+ }
+\cs_new_protected:Npn \ProvideDocumentCommand #1#2#3
+ { \cs_if_exist:NF #1 { \xparse_declare_cmd:Nnn #1 {#2} {#3} } }
+\cs_new_protected:Npn \DeclareDocumentCommandImplementation #1#2#3
+ { \xparse_declare_cmd_implementation:nNn {#1} #2 {#3} }
+\cs_new_protected:Npn \DeclareDocumentCommandInterface #1#2#3
+ { \xparse_declare_cmd_interface:Nnn #1 {#2} {#3} }
+\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4
+ { \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} }
+\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4
+ {
+ \cs_if_exist:cTF {#1}
+ { \msg_error:nnx { xparse } { environment-already-defined } {#1} }
+ { \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} }
+}
+\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} }
+ }
+\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4
+ { \cs_if_exist:cF { #1 } { \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} } }
+\cs_new_protected:Npn \DeclareExpandableDocumentCommand #1#2#3
+ { \xparse_exp_declare_cmd:Nnn #1 {#2} {#3} }
+\cs_new_eq:NN \IfBooleanTF \bool_if:NTF
+\cs_new_eq:NN \IfBooleanT \bool_if:NT
+\cs_new_eq:NN \IfBooleanF \bool_if:NF
+\cs_new_eq:NN \IfNoValueF \xparse_if_no_value:nF
+\cs_new_eq:NN \IfNoValueT \xparse_if_no_value:nT
+\cs_new_eq:NN \IfNoValueTF \xparse_if_no_value:nTF
+\cs_set:Npn \IfValueF { \xparse_if_no_value:nT }
+\cs_set:Npn \IfValueT { \xparse_if_no_value:nF }
+\cs_set:Npn \IfValueTF #1#2#3 { \xparse_if_no_value:nTF {#1} {#3} {#2} }
+\cs_new_protected:Npn \NoValue { -NoValue- }
+\tl_new:N \ProcessedArgument
+\cs_new_eq:NN \ReverseBoolean \xparse_bool_reverse:N
+\cs_new_eq:NN \SplitArgument \xparse_split_argument:nnn
+\cs_new_eq:NN \SplitList \xparse_split_list:nn
+\cs_new_eq:NN \GetDocumentCommandArgSpec \xparse_get_arg_spec:N
+\cs_new_eq:NN \GetDocumentEnvironmmentArgSpec \xparse_get_arg_spec:n
+\cs_new_eq:NN \ShowDocumentCommandArgSpec \xparse_show_arg_spec:N
+\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \xparse_show_arg_spec:n
+\DeclareOption { log-declarations = true } { }
+\DeclareOption { log-declarations = false }
+ {
+ \msg_redirect_module:nnn { xparse } { info } { none }
+ \msg_redirect_module:nnn { xparse } { warning } { none }
+ }
+\DeclareOption { log-declarations } { }
+\ProcessOptions \scan_stop:
+%%
+%%
+%% End of file `xparse.sty'.