summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-09-06 23:20:42 +0000
committerKarl Berry <karl@freefriends.org>2009-09-06 23:20:42 +0000
commitbfb16a7c8d3c77987590435854c647b54bc6450b (patch)
treecf65fafece2986d781a52ad28aaeb06fe48eed69 /Master/texmf-dist/tex
parent2b8eb47b09b2d853b8243d0fb61b408edb3d04a7 (diff)
xpackages (5sep09)
git-svn-id: svn://tug.org/texlive/trunk@15164 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/xpackages/xbase/ldcsetup.sty (renamed from Master/texmf-dist/tex/latex/xpackages/ldcsetup.sty)0
-rw-r--r--Master/texmf-dist/tex/latex/xpackages/xbase/template.sty (renamed from Master/texmf-dist/tex/latex/xpackages/template.sty)5
-rw-r--r--Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty899
-rw-r--r--Master/texmf-dist/tex/latex/xpackages/xparse.sty563
-rw-r--r--Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty117
5 files changed, 1018 insertions, 566 deletions
diff --git a/Master/texmf-dist/tex/latex/xpackages/ldcsetup.sty b/Master/texmf-dist/tex/latex/xpackages/xbase/ldcsetup.sty
index 7f26ce16cbb..7f26ce16cbb 100644
--- a/Master/texmf-dist/tex/latex/xpackages/ldcsetup.sty
+++ b/Master/texmf-dist/tex/latex/xpackages/xbase/ldcsetup.sty
diff --git a/Master/texmf-dist/tex/latex/xpackages/template.sty b/Master/texmf-dist/tex/latex/xpackages/xbase/template.sty
index a64a9cf4cc9..b91b2d6715e 100644
--- a/Master/texmf-dist/tex/latex/xpackages/template.sty
+++ b/Master/texmf-dist/tex/latex/xpackages/xbase/template.sty
@@ -54,7 +54,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{expl3}
-\GetIdInfo$Id: template.dtx 1295 2009-05-06 08:32:25Z will $
+\GetIdInfo$Id: template.dtx 1461 2009-08-15 08:38:12Z joseph $
{template}
\ProvidesExplPackage
{\filename}{\filedate}{\fileversion}{\filedescription}
@@ -286,8 +286,7 @@
}
\cs_set:Npn \TP_ignore_leading_space_in_arg_ii_aux:nn#1#2{#2{#1}}
-\DeclareArgumentType t[{meaning}{}{\NoValue}{#1[#2]}{#2}
-\DeclareDocumentCommand\TP_parse_optional_key_default:nw{mt}{
+\DeclareDocumentCommand\TP_parse_optional_key_default:nw{mo}{
\IfNoValueTF{#2}
{\TP_templdecl_finish_key_setup:nw{#1}}
{\TP_templdecl_finish_key_setup_with_default:nnw{#1}{#2}}
diff --git a/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty b/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty
new file mode 100644
index 00000000000..9bc5164a748
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty
@@ -0,0 +1,899 @@
+%%
+%% This is file `xparse.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xparse.dtx (with options: `package')
+%%
+%% (C) Copyright The LaTeX3 Project and any individual authors
+%% listed elsewhere in this file.
+%%
+%% This is a generated file.
+%%
+%% This file was generated from file(s) of the xbase bundle.
+%% ---------------------------------------------------------
+%%
+%% This file may only be distributed together with a copy of this bundle.
+%% You may however distribute the bundle without such generated files.
+%%
+%% ======================================================================
+%%
+%% File: xparse.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley,
+%% David Carlisle
+%% (C) Copyright 2004-2008 Frank Mittelbach,
+%% LaTeX3 Project
+%% (C) Copyright 2009 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 ``xbase 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{l3names}
+\GetIdInfo$Id: xparse.dtx 1497 2009-08-31 19:17:53Z joseph $
+ {Generic document command parser}
+\ProvidesExplPackage
+ {\filename}{\filedate}{\fileversion}{\filedescription}
+\RequirePackage{expl3}
+\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* }
+\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_error_bool
+\tl_new:N \l_xparse_function_tl
+\toks_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
+\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 {
+ \toks_put_right:Nx \l_xparse_signature_toks {
+ \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_nopar:Nn \xparse_add_grabber_optional:N {
+ \toks_put_right:Nx \l_xparse_signature_toks {
+ \exp_not:c {
+ xparse_grab_ #1
+ \bool_if:NT \l_xparse_long_bool { _long }
+ \intexpr_compare:nF {
+ \l_xparse_mandatory_args_int > \c_zero
+ } { _trailing }
+ :w
+ }
+ }
+ \bool_set_false:N \l_xparse_long_bool
+}
+\cs_new_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: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
+ \toks_put_right:Nn \l_xparse_signature_toks {
+ \xparse_process_arg:n {#1}
+ }
+ \xparse_prepare_signature_aux:N
+}
+\cs_new:Npn \xparse_add_type_d:w #1#2 {
+ \xparse_add_type_D:w #1 #2 { \NoValue }
+}
+\cs_new:Npn \xparse_add_type_D:w #1#2#3 {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_optional:N D
+ \toks_put_right:Nn \l_xparse_signature_toks { #1 #2 {#3} }
+ \xparse_prepare_signature:N
+}
+\cs_new_nopar:Npn \xparse_add_type_g:w {
+ \xparse_add_type_G:w { \NoValue }
+}
+\cs_new:Npn \xparse_add_type_G:w #1 {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_optional:N G
+ \toks_put_right:Nn \l_xparse_signature_toks { {#1} }
+ \xparse_prepare_signature:N
+}
+\cs_new_nopar:Npn \xparse_add_type_l:w {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_mandatory:N l
+ \xparse_prepare_signature:N
+}
+\cs_new_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:Npn \xparse_add_type_t:w #1 {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_optional:N t
+ \toks_put_right:Nn \l_xparse_signature_toks { #1 }
+ \xparse_prepare_signature:N
+}
+\cs_new:Npn \xparse_add_type_u:w #1 {
+ \xparse_flush_m_args:
+ \xparse_add_grabber_mandatory:N u
+ \toks_put_right:Nn \l_xparse_signature_toks { {#1} }
+ \xparse_prepare_signature:N
+}
+\cs_new_nopar:Nn \xparse_check_and_add:N {
+ \cs_if_free:cTF { xparse_add_type_ #1 :w } {
+ \msg_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 {
+ \int_zero:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N #1 \q_nil
+}
+\cs_new:Nn \xparse_count_mandatory:N {
+ \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:Nn \xparse_count_mandatory_aux:N {
+ \cs_if_free:cTF { xparse_count_type_ #1 :w } {
+ \xparse_count_type_m:w
+ }{
+ \use:c { xparse_count_type_ #1 :w }
+ }
+}
+\cs_new:cpn { xparse_count_type_>:w } #1 {
+ \xparse_count_mandatory:N
+}
+\cs_new_nopar:cpn { xparse_count_type_+:w } {
+ \xparse_count_mandatory:N
+}
+\cs_new:Npn \xparse_count_type_d:w #1#2 {
+ \xparse_count_mandatory:N
+}
+\cs_new:Npn \xparse_count_type_D:w #1#2#3 {
+ \xparse_count_mandatory:N
+}
+\cs_new_nopar:Npn \xparse_count_type_g:w {
+ \xparse_count_mandatory:N
+}
+\cs_new:Npn \xparse_count_type_G:w #1 {
+ \xparse_count_mandatory:N
+}
+\cs_new_nopar:Npn \xparse_count_type_l:w {
+ \int_incr:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N
+}
+\cs_new_nopar:Npn \xparse_count_type_m:w {
+ \int_incr:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N
+}
+\cs_new:Npn \xparse_count_type_t:w #1 {
+ \xparse_count_mandatory:N
+}
+\cs_new:Npn \xparse_count_type_u:w #1 {
+ \int_incr:N \l_xparse_mandatory_args_int
+ \xparse_count_mandatory:N
+}
+\cs_new:Nn \xparse_declare_cmd:Nnn {
+ \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:Nnn { cnn }
+\cs_new:Nn \xparse_declare_cmd_all_m:Nn {
+ \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_set_protected_nopar:Npx #1 {
+ \exp_not:n {
+ \int_zero:N \l_xparse_processor_int
+ \toks_set:Nn \l_xparse_args_toks
+ } { \exp_not:c { \token_to_str:N #1 } }
+ \toks_use:N \l_xparse_signature_toks
+ \exp_not:n{ \toks_use:N \l_xparse_args_toks }
+ }
+ \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_generate_from_arg_count:cNnn { implementation_ #1 :w }
+ \cs_set:Npn {#2} {#3}
+}
+\cs_new:Nn \xparse_declare_cmd_interface:Nnn {
+ \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:Nn \xparse_declare_cmd_interface_all_m:Nn {
+ \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_set_protected_nopar:Npx #1 {
+ \exp_not:n {
+ \int_zero:N \l_xparse_processor_int
+ \toks_set:Nn \l_xparse_args_toks
+ } { \exp_not:c { \token_to_str:N #1 } }
+ \toks_use:N \l_xparse_signature_toks
+ \exp_not:n{ \toks_use:N \l_xparse_args_toks }
+ }
+ \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:Nn \xparse_declare_env:nnnn {
+ \xparse_declare_cmd:cnn { environment_begin_ #1 :w } {#2} {
+ \group_begin:
+ \toks_set_eq:NN \l_xparse_environment_args_toks
+ \l_xparse_args_toks
+ #3
+ }
+ \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 } {
+ \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 :w }
+}
+\cs_new_nopar:Nn \xparse_flush_m_args: {
+ \cs_if_exist:cT {
+ xparse_grab_m_ \int_use:N \l_xparse_m_args_int :w
+ } {
+ \toks_put_right:Nx \l_xparse_signature_toks {
+ \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:Nnn \xparse_if_no_value:n { TF,T,F } {
+ \tl_if_eq:nnTF {#1} { \NoValue } {
+ \prg_return_true:
+ }{
+ \prg_return_false:
+ }
+}
+\cs_new:Nn \xparse_prepare_signature:n {
+ \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_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 {
+ \bool_set_false:N \l_xparse_processor_bool
+ \xparse_prepare_signature_aux:N #1
+}
+\cs_new:Nn \xparse_prepare_signature_aux:N {
+ \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_last_unbraced:NV \xparse_prepare_signature:N \l_xparse_tmp_tl
+ }{
+ \int_incr:N \l_xparse_total_args_int
+ \xparse_check_and_add:N #1
+ }
+ }
+}
+\cs_new:Nn \xparse_process_arg:n {
+ \int_incr:N \l_xparse_processor_int
+ \cs_set:cn {
+ xparse_processor_ \int_use:N \l_xparse_processor_int :n
+ }
+ { #1 {##1} }
+}
+\cs_new:Nn \xparse_add_arg:n {
+ \intexpr_compare:nTF { \l_xparse_processor_int = \c_zero } {
+ \toks_put_right:Nn \l_xparse_args_toks { {#1} }
+ }{
+ \xparse_if_no_value:nTF {#1} {
+ \int_zero:N \l_xparse_processor_int
+ \toks_put_right:Nn \l_xparse_args_toks { {#1} }
+ }{
+ \xparse_add_arg_aux:n {#1}
+ }
+ }
+}
+\cs_new:Nn \xparse_add_arg_aux:n {
+ \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 }
+ }
+ }{
+ \xparse_add_arg_aux:V \l_xparse_arg_toks
+ }
+}
+\cs_generate_variant:Nn \xparse_add_arg_aux:n { V }
+\cs_new:Npn \xparse_grab_aux: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 }
+}
+\cs_new:Npn \xparse_grab_D_long:w #1#2#3#4 \l_xparse_args_toks {
+ \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set:Npn
+ { _ignore_spaces }
+}
+\cs_new:Npn \xparse_grab_D_trailing:w #1#2#3#4 \l_xparse_args_toks {
+ \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_nopar:Npn { }
+}
+\cs_new:Npn \xparse_grab_D_long_trailing:w #1#2#3#4
+ \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
+ }
+ \use:c { peek_charcode #6 :NTF } #1 {
+ \xparse_grab_arg:w
+ }{
+ \xparse_add_arg:n {#3}
+ #4 \l_xparse_args_toks
+ }
+}
+\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 }
+}
+\cs_new:Npn \xparse_grab_G_long:w #1#2 \l_xparse_args_toks {
+ \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set:Npn { _ignore_spaces }
+}
+\cs_new:Npn \xparse_grab_G_trailing:w #1#2 \l_xparse_args_toks {
+ \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_nopar:Npn { }
+}
+\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 {
+ #3 \xparse_grab_arg:w ##1 {
+ \xparse_add_arg:n {##1}
+ #2 \l_xparse_args_toks
+ }
+ \use:c { peek_meaning #4 :NTF } \c_group_begin_token {
+ \xparse_grab_arg:w
+ }{
+ \xparse_add_arg:n {#1}
+ #2 \l_xparse_args_toks
+ }
+}
+\cs_new:Npn \xparse_grab_l:w #1 \l_xparse_args_toks {
+ \xparse_grab_l_aux:nN {#1} \cs_set_nopar:Npn
+}
+\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 {
+ #2 \xparse_grab_arg:w ##1## {
+ \xparse_add_arg:n \l_xparse_args_toks {##1}
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:Npn \xparse_grab_m:w #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1 {
+ \xparse_add_arg:n {##1}
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:Npn \xparse_grab_m_long:w #1 \l_xparse_args_toks {
+ \cs_set:Npn \xparse_grab_arg:w ##1 {
+ \xparse_add_arg:n {##1}
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_1:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1 {
+ \toks_put_right:Nn \l_xparse_args_toks { {##1} }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_2:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2 {
+ \toks_put_right:Nn \l_xparse_args_toks { {##1} {##2} }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_3:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3 {
+ \toks_put_right:Nn \l_xparse_args_toks { {##1} {##2} {##3} }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_4:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4 {
+ \toks_put_right:Nn \l_xparse_args_toks { {##1} {##2} {##3} {##4} }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_5:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5 {
+ \toks_put_right:Nn \l_xparse_args_toks {
+ {##1} {##2} {##3} {##4} {##5}
+ }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_6:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6 {
+ \toks_put_right:Nn \l_xparse_args_toks {
+ {##1} {##2} {##3} {##4} {##5} {##6}
+ }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_7:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6##7 {
+ \toks_put_right:Nn \l_xparse_args_toks {
+ {##1} {##2} {##3} {##4} {##5} {##6} {##7}
+ }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:cpn { xparse_grab_m_8:w } #1 \l_xparse_args_toks {
+ \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6##7##8 {
+ \toks_put_right:Nn \l_xparse_args_toks {
+ {##1} {##2} {##3} {##4} {##5} {##6} {##7} {##8}
+ }
+ #1 \l_xparse_args_toks
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:Npn \xparse_grab_t:w #1#2 \l_xparse_args_toks {
+ \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_nopar:Npn { _ignore_spaces }
+}
+\cs_new:Npn \xparse_grab_t_long:w #1#2 \l_xparse_args_toks {
+ \xparse_grab_t_aux:NnNn #1 {#2} \cs_set:Npn { _ignore_spaces }
+}
+\cs_new:Npn \xparse_grab_t_trailing:w #1#2 \l_xparse_args_toks {
+ \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_nopar:Npn { }
+}
+\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 {
+ #3 \xparse_grab_arg:w {
+ \use:c { peek_charcode_remove #4 :NTF } #1 {
+ \xparse_add_arg:n { \BooleanTrue }
+ #2 \l_xparse_args_toks
+ }{
+ \xparse_add_arg:n { \BooleanFalse }
+ #2 \l_xparse_args_toks
+ }
+ }
+ \xparse_grab_arg:w
+}
+\cs_new:Npn \xparse_grab_u:w #1#2 \l_xparse_args_toks {
+ \xparse_grab_u_aux:NnN {#1} {#2} \cs_set_nopar:Npn
+}
+\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 {
+ #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 {
+ \tl_to_str:n {#1}
+ }
+}
+\cs_new:Nn \xparse_process_comma_split:n {
+ \tl_if_in:nnTF {#1} { , } {
+ \xparse_process_comma_split_aux:w #1 \q_stop
+ }{
+ \toks_set:Nn \l_xparse_arg_toks { {#1} { \NoValue } }
+ }
+}
+\cs_new:Npn \xparse_process_comma_split_aux:w #1 , #2 \q_stop {
+ \toks_set:Nn \l_xparse_arg_toks { {#1} {#2} }
+}
+\cs_new:Npn \xparse_exp_add_type_d:w #1#2 {
+ \xparse_exp_add_type_D:w #1 #2 { \NoValue }
+}
+\cs_new:Npn \xparse_exp_add_type_D:w #1#2#3 {
+ \tl_set:Nx \l_xparse_tmpa_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_tmpa_tl } ##1 \q_xparse_stop ##2 {
+ \exp_not:N \tl_if_head_eq_charcode:nNTF {##2} #1 {
+ \exp_not:c { \l_xparse_tmpa_tl aux }
+ ##1 \exp_not:N \q_xparse_stop
+ }{
+ \exp_not:c { \l_xparse_tmpa_tl aux }
+ ##1 \exp_not:N \q_xparse_stop #3 #2 {##2}
+ }
+ }
+ \xparse_exp_set:cpx { \l_xparse_tmpa_tl aux}
+ ##1 \q_xparse_stop ##2 #2 {
+ \exp_not:c {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ } ##1 {##2} \exp_not:N \q_xparse_stop
+ }
+ \xparse_exp_prepare_function:N
+}
+\cs_new_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_stop ##2## {
+ \exp_not:c {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ ##1 {##2} \exp_not:N \q_xparse_stop
+ }
+ \xparse_exp_prepare_function:N
+}
+\cs_new_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_stop ##2 {
+ \exp_not:c {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ ##1 {##2} \exp_not:N \q_xparse_stop
+ }
+ \xparse_exp_prepare_function:N
+}
+\cs_new:Npn \xparse_exp_add_type_t:w #1 {
+ \tl_set:Nx \l_xparse_tmpa_tl {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \intexpr_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_stop ##2 {
+ \exp_not:N \tl_if_head_eq_charcode:nNTF {##2} #1 {
+ \exp_not:c { \l_xparse_tmpa_tl }
+ ##1 \exp_not:n { { \BooleanTrue } \q_xparse_stop }
+ }{
+ \exp_not:c { \l_xparse_tmpa_tl }
+ ##1 \exp_not:n { { \BooleanFalse } \q_xparse_stop {##2} }
+ }
+ }
+ \xparse_exp_prepare_function:N
+}
+\cs_new: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_stop ##2 #1 {
+ \exp_not:c {
+ \exp_after:wN \token_to_str:N \l_xparse_function_tl
+ \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ }
+ ##1 {##2} \exp_not:N \q_xparse_stop
+ }
+ \xparse_exp_prepare_function:N
+}
+\cs_new_nopar:Nn \xparse_exp_check_and_add:N {
+ \cs_if_free:cTF { xparse_exp_add_type_ #1 :w } {
+ \msg_error:nnx { xparse } { unknown-argument-type } {#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:Nn \xparse_exp_declare_cmd:Nnn {
+ \tl_set:Nn \l_xparse_function_tl {#1}
+ \xparse_exp_prepare_function:n {#2}
+ \intexpr_compare:nTF {
+ \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:Nn \xparse_exp_declare_cmd_all_m:Nn {
+ \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:Nn \xparse_exp_declare_cmd_mixed:Nn {
+ \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 }
+ }
+}
+\cs_new:Nn \xparse_exp_declare_cmd_mixed_aux:Nn {
+ \cs_set_nopar:Npx #1 {
+ \exp_not:c { \token_to_str:N #1 1 } x \exp_not:N \q_xparse_stop
+ }
+ \cs_set_nopar:cpx {
+ \token_to_str:N #1 \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ } x ##1 \q_xparse_stop {
+ \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:Nn \xparse_exp_prepare_function:n {
+ \bool_set_false:N \l_xparse_error_bool
+ \tl_if_in:nnT {#1} { > } {
+ \msg_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}
+ \bool_set_true:N \l_xparse_error_bool
+ }
+ \tl_if_in:nnT {#1} { G } {
+ \msg_error:nnx { xparse } { grouped-in-expandable } {#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_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:Nn \xparse_exp_prepare_function:N {
+ \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 {
+ \quark_if_nil:NF #1 {
+ \tl_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:Nn \xparse_exp_prepare_function_short:N {
+ \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_last_unbraced:NV \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
+\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 ...%
+}
+\cs_new_eq:NN \BooleanFalse \c_false_bool
+\cs_new_eq:NN \BooleanTrue \c_true_bool
+\xparse_declare_cmd:Nnn \DeclareDocumentCommand { +m +m +m } {
+ \xparse_declare_cmd:Nnn #1 {#2} {#3}
+}
+\DeclareDocumentCommand \NewDocumentCommand { +m +m +m } {
+ \cs_if_exist:NTF #1 {
+ \msg_error:nnx { xparse } { command-already-defined } {#1}
+ }{
+ \xparse_declare_cmd:Nnn #1 {#2} {#3}
+ }
+}
+\NewDocumentCommand \RenewDocumentCommand { +m +m +m } {
+ \cs_if_exist:NTF #1 {
+ \xparse_declare_cmd:Nnn #1 {#2} {#3}
+ }{
+ \msg_error:nnx { xparse } { command-not-yet-defined } {#1}
+ }
+}
+\NewDocumentCommand \ProvideDocumentCommand { +m +m +m } {
+ \cs_if_exist:NF #1 {
+ \xparse_declare_cmd:Nnn #1 {#2} {#3}
+ }
+}
+\NewDocumentCommand \DeclareDocumentCommandImplementation { m m +m } {
+ \xparse_declare_cmd_implementation:nNn {#1} #2 {#3}
+}
+\NewDocumentCommand \DeclareDocumentCommandInterface { m m +m } {
+ \xparse_declare_cmd_interface:Nnn #1 {#2} {#3}
+}
+\NewDocumentCommand \DeclareDocumentEnvironment { m +m +m +m } {
+ \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}
+ }{
+ \xparse_declare_env:nnnn {#1} {#2} {#3} {#4}
+ }
+}
+\NewDocumentCommand \RenewDocumentEnvironment { m +m +m +m } {
+ \cs_if_exist:cTF { environment_begin_ #1 :w } {
+ \xparse_declare_env:nnnn {#1} {#2} {#3} {#4}
+ }{
+ \msg_error:nnx { xparse } { environment-not-yet-defined } {#1}
+ }
+}
+\NewDocumentCommand \ProvideDocumentEnvironment { m +m +m +m } {
+ \cs_if_exist:cF { environment_begin_ #1 :w } {
+ \xparse_declare_env:nnnn {#1} {#2} {#3} {#4}
+ }
+}
+\NewDocumentCommand \DeclareExpandableDocumentCommand { +m +m +m } {
+ \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}
+}
+\NewDocumentCommand \NoValue { } { -NoValue- }
+\endinput
+%%
+%% End of file `xparse.sty'.
diff --git a/Master/texmf-dist/tex/latex/xpackages/xparse.sty b/Master/texmf-dist/tex/latex/xpackages/xparse.sty
deleted file mode 100644
index b268d7b0957..00000000000
--- a/Master/texmf-dist/tex/latex/xpackages/xparse.sty
+++ /dev/null
@@ -1,563 +0,0 @@
-%%
-%% This is file `xparse.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% xparse.dtx (with options: `package')
-%%
-%% (C) Copyright The LaTeX3 Project and any individual authors
-%% listed elsewhere in this file.
-%%
-%% This is a generated file.
-%%
-%% This file was generated from file(s) of the xbase bundle.
-%% ---------------------------------------------------------
-%%
-%% This file may only be distributed together with a copy of this bundle.
-%% You may however distribute the bundle without such generated files.
-%%
-%% ======================================================================
-%%
-%% File: xparse.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle
-%% (C) Copyright 2004-2008 Frank Mittelbach, 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 ``xbase 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/cgi-bin/cvsweb.cgi/
-%%
-%% 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 1365 2009-05-31 17:26:17Z mittelba $
- {generic document command parser}
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-\RequirePackage{expl3}
-\cs_new_nopar:Nn \xparse_already_defined_error_msg:N {
- \xparse_error:x {
- Command~name~`\token_to_str:N #1'~ already~defined!
- }
-}
-\cs_new_nopar:Nn \xparse_not_yet_defined_error_msg:N {
- \xparse_error:x {
- Command~`\token_to_str:N #1'~ not~ yet~defined!
- }
-}
-\cs_new_nopar:Nn \xparse_begins_with_end_error_msg:N {
- \xparse_error:x {
- Command~`\token_to_str:N #1'~begins~with~
- `\token_to_str:N \end'!
- }
-}
-\cs_new_nopar:Nn \xparse_unknown_arg_type_error_msg:N {
- \xparse_error:x {
- Unknown~ argument~ type~ `#1'~
- I'll~ substitute~ it~ with~ `m'~ for~ now.~ Fingers~ crossed...
- }
-}
-\cs_new_nopar:Nn \xparse_no_command_implementation_warning:n {
- \xparse_warning:x {No~ implementation~ for~ `#1'~ defined}
-}
-\cs_new_nopar:Nn \xparse_error:x {\tex_errmessage:D {xparse~error:~#1}}
-\cs_new_nopar:Nn \xparse_warning:x {\iow_term:x{xparse~warning:~#1}}
-\cs_new_nopar:Npn \xparse_if_definable:NTF #1 {
- \cs_if_free:NTF #1
- {
- \xparse_begins_with_end:NTF #1
- { \xparse_begins_with_end_error_msg:N #1 \use_ii:nn }
- \use_i:nn
- }
- { \xparse_already_defined_error_msg:N #1 \use_ii:nn }
-}
-\cs_generate_variant:Nn \xparse_if_definable:NTF {c}
-\cs_new_nopar:Npn \xparse_if_redefinable:NTF #1 {
- \cs_if_free:NTF #1
- { \xparse_not_yet_defined_error_msg:N #1 \use_ii:nn }
- {
- \xparse_begins_with_end:NTF #1
- { \xparse_begins_with_end_error_msg:N #1 \use_ii:nn }
- \use_i:nn
- }
-}
-\cs_generate_variant:Nn \xparse_if_redefinable:NTF {c}
-\cs_new_nopar:Npn \xparse_begins_with_end:NTF #1 {
- \group_begin:
- \exp_args:Nc \xparse_begins_with_end_aux:N {
- \tl_head_iii:f { \cs_to_str:N #1 ??}
- }
-}
-\cs_new_nopar:Nn \xparse_begins_with_end_aux:N {
- \if_predicate:w \cs_if_eq_name_p:NN #1 \end
- \group_end:
- \exp_after:wN \use_i:nn
- \else:
- \group_end:
- \exp_after:wN \use_ii:nn
- \fi:
-}
-\toks_new:N \l_xparse_grabbed_args_toks
-\toks_new:N \l_xparse_end_environment_args_toks
-\int_new:N \l_xparse_mandatory_args_int
-\int_new:N \l_xparse_total_args_int
-\cs_set:Nn \xparse_declare_document_command:Nnn {
- \xparse_prepare_signature:n {#2}
- \cs_set_protected_nopar:Npx #1 {
- \exp_not:n { \toks_set:Nn \l_xparse_grabbed_args_toks }
- {\exp_not:c {\token_to_str:N #1}}
- \toks_use:N \l_xparse_grabbed_args_toks
- \exp_not:n{ \toks_use:N \l_xparse_grabbed_args_toks}
- }
- \cs_generate_from_arg_count:cNnn {\token_to_str:N #1}\cs_set:Npn
- \l_xparse_total_args_int{#3}
-}
-\cs_generate_variant:Nn \xparse_declare_document_command:Nnn {cnn}
-\cs_new:Nn \xparse_declare_document_environment:nnnn {
- \xparse_declare_document_command:cnn {#1}{#2}
- { \group_begin:
- \toks_set_eq:NN \l_xparse_end_environment_args_toks
- \l_xparse_grabbed_args_toks
- #3
- }
- \cs_set_eq:cN {end #1} \xparse_parsed_end_environment:
- \cs_generate_from_arg_count:cNnn {end \token_to_str:N \\ #1}\cs_set:Npn
- \l_xparse_total_args_int{#4}
-}
-\cs_new_protected_nopar:Nn \xparse_parsed_end_environment: {
- \exp_after:wN \xparse_parsed_end_environment_aux:N
- \toks_use:N \l_xparse_end_environment_args_toks
- \group_end:
-}
-\cs_new_nopar:Nn \xparse_parsed_end_environment_aux:N {
- \use:c {end \token_to_str:N #1 }
-}
-\cs_new_eq:NN \DeclareDocumentCommand \xparse_declare_document_command:Nnn
-\cs_new_nopar:Npn \NewDocumentCommand #1 {
- \xparse_if_definable:NTF #1
- { \xparse_declare_document_command:Nnn #1 }
- \use_none:nn
-}
-\cs_new_nopar:Npn \RenewDocumentCommand #1 {
- \xparse_if_redefinable:NTF #1
- { \xparse_declare_document_command:Nnn #1 }
- \use_none:nn
-}
-\cs_new_eq:NN \DeclareDocumentEnvironment
- \xparse_declare_document_environment:nnnn
-\cs_new_nopar:Npn \NewDocumentEnvironment #1 {
- \xparse_if_definable:cTF {#1}
- { \xparse_declare_document_environment:nnnn {#1} }
- \use_none:nnn
-}
-\cs_new_nopar:Npn \RenewDocumentEnvironment #1 {
- \xparse_if_redefinable:cTF {#1}
- { \xparse_declare_document_environment:nnnn {#1} }
- \use_none:nnn
-}
-\cs_new_nopar:Npn \ProvideDocumentCommand #1{
- \cs_if_free:NTF #1
- { \DeclareDocumentCommand #1}
- \use_none:nn
-}
-\cs_new_nopar:Npn \ProvideDocumentEnvironment #1{
- \cs_if_free:cTF {#1}
- { \DeclareDocumentEnvironment {#1} }
- \use_none:nnn
-}
-\cs_new:Npn \DeclareDocumentCommandInterface #1#2#3{
- \xparse_prepare_signature:n {#3}
- \cs_set_protected_nopar:Npx #1 {
- \exp_not:n { \toks_set:Nn \l_xparse_grabbed_args_toks }
- {\exp_not:c {impl-#2}}
- \toks_use:N\l_xparse_grabbed_args_toks
- \exp_not:n{ \toks_use:N \l_xparse_grabbed_args_toks}
- }
- \cs_generate_from_arg_count:cNnn {impl-#2} \cs_set:Npn
- \l_xparse_total_args_int
- {\xparse_undefined_command_implementation:n{#2}}
-}
-\cs_new_nopar:Nn \xparse_undefined_command_implementation:n {
- ``#1''
- \xparse_no_command_implementation_warning:n {#1}
-}
-\cs_new:Npn \DeclareDocumentCommandImplementation #1#2#3{
- \cs_generate_from_arg_count:cNnn {impl-#1}\cs_set:Npn {#2}{#3}
-}
-\cs_new_nopar:Nn \xparse_prepare_signature:n {
- \int_zero:N \l_xparse_total_args_int
- \toks_clear:N \l_xparse_grabbed_args_toks
- \int_zero:N \l_xparse_mandatory_args_int
- \bool_gset_false:N \g_xparse_insert_marker_bool
- \bool_gset_false:N \g_xparse_allow_par_bool
- \tl_gset_eq:NN \g_xparse_ignore_marker_tl
- \g_xparse_ignore_spaces_marker_tl
- \xparse_parse_signature:n #1 \q_nil
-}
-\tl_new:Nn \g_xparse_ignore_marker_tl {}
-\seq_new:N \g_xparse_ignore_marker_seq
-\bool_new:N \g_xparse_insert_marker_bool
-\cs_new_nopar:cpn {xparse_add_arg_type_>:} #1
- \xparse_read_arg_type_or_grab_default:n #2{
- \xparse_add_remaining_m_args:
- \bool_gset_true:N \g_xparse_insert_marker_bool
- \int_decr:N \l_xparse_total_args_int
- \tl_map_inline:nn{#2}{
- \xparse_check_and_add_argument_type:N ##1
- }
- \xparse_parse_signature:n
-}
-\cs_new_nopar:Nn \xparse_add_ignore_marker:Nnn {
- \tl_new:cn {g_xparse #2 _marker_tl}{#3}
- \seq_gpush:Nv \g_xparse_ignore_marker_seq {g_xparse #2 _marker_tl}
- \cs_new_nopar:cpn {xparse_add_arg_type_#1:}{
- \tl_gset_eq:Nc \g_xparse_ignore_marker_tl {g_xparse #2 _marker_tl}
- }
-}
-\xparse_add_ignore_marker:Nnn W{_ignore_nothing}{}
-\xparse_add_ignore_marker:Nnn i{_ignore_spaces}{_ignore_spaces}
-\xparse_add_ignore_marker:Nnn I{_ignore_pars}{_ignore_pars}
-\cs_new_nopar:Nn \xparse_add_arg_type_P: {
- \bool_gset_true:N \g_xparse_allow_par_bool
-}
-\bool_new:N \g_xparse_allow_par_bool
-\cs_new_nopar:Nn \xparse_parse_signature:n {
- \quark_if_nil:NTF #1
- {
- \xparse_add_remaining_m_args:
- }
- {
- \int_incr:N \l_xparse_total_args_int
- \xparse_check_and_add_argument_type:N #1
- \bool_if:NT \g_xparse_insert_marker_bool
- {
- \bool_gset_false:N \g_xparse_insert_marker_bool
- \bool_gset_false:N \g_xparse_allow_par_bool
- \tl_gset_eq:NN \g_xparse_ignore_marker_tl
- \g_xparse_ignore_spaces_marker_tl
- }
- \xparse_read_arg_type_or_grab_default:n
- }
-}
-\cs_new_nopar:Nn \xparse_check_and_add_argument_type:N {
- \cs_if_free:cTF {xparse_add_arg_type_#1:}
- { \xparse_unknown_arg_type_error_msg:N #1
- \int_incr:N \l_xparse_mandatory_args_int
- }
- { \use:c {xparse_add_arg_type_#1:} }
-}
-\cs_new_eq:NN \xparse_read_arg_type_or_grab_default:n
- \xparse_parse_signature:n
-\cs_new_nopar:Nn \xparse_grab_default_arg:n {
- \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#1}}
- \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n
- \xparse_parse_signature:n
- \xparse_parse_signature:n
-}
-\cs_new:Nn \xparse_grab_default_arg_allow_par:n {
- \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#1}}
- \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n
- \xparse_parse_signature:n
- \xparse_parse_signature:n
-}
-\cs_new_nopar:Nn \xparse_add_arg_type_m: {
- \bool_if:NTF \g_xparse_allow_par_bool
- {
- \toks_put_right:Nn \l_xparse_grabbed_args_toks {\xparse_allow_par_m:w}
- }
- { \int_incr:N \l_xparse_mandatory_args_int }
-}
-\cs_new_nopar:Nn \xparse_add_remaining_m_args: {
- \intexpr_compare:nNnF \l_xparse_mandatory_args_int = \c_zero
- {
- \toks_put_right:Nx \l_xparse_grabbed_args_toks {
- \exp_not:c{xparse_m
- \int_use:N \l_xparse_mandatory_args_int
- :w }
- }
- \int_zero:N \l_xparse_mandatory_args_int
- }
-}
-\cs_new_nopar:cpn {xparse_m1:w} #1 \l_xparse_grabbed_args_toks#2{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m2:w} #1 \l_xparse_grabbed_args_toks #2#3{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m3:w} #1 \l_xparse_grabbed_args_toks #2#3#4{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}{#4}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m4:w} #1 \l_xparse_grabbed_args_toks #2#3#4#5{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}{#4}{#5}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m5:w} #1 \l_xparse_grabbed_args_toks #2#3#4#5#6{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}{#4}{#5}{#6}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m6:w} #1 \l_xparse_grabbed_args_toks #2#3#4#5#6#7{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks
- {{#2}{#3}{#4}{#5}{#6}{#7}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m7:w} #1 \l_xparse_grabbed_args_toks#2#3#4#5#6#7#8{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks
- {{#2}{#3}{#4}{#5}{#6}{#7}{#8}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m8:w} #1\l_xparse_grabbed_args_toks
- #2#3#4#5#6#7#8#9{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks
- {{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:cpn {xparse_m9:w} \toks_use:N \l_xparse_grabbed_args_toks
- #1#2#3#4#5#6#7#8#9{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks
- {{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}
- \toks_use:N \l_xparse_grabbed_args_toks
-}
-\cs_new:Npn \xparse_allow_par_m:w #1 \l_xparse_grabbed_args_toks#2{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:Nn \xparse_add_arg_type_l: {
- \xparse_add_remaining_m_args:
- \bool_if:NTF \g_xparse_allow_par_bool
- {
- \toks_put_right:Nn \l_xparse_grabbed_args_toks {\xparse_allow_par_l:w}
- }
- { \toks_put_right:Nn \l_xparse_grabbed_args_toks {\xparse_l:w} }
-}
-\cs_new_nopar:Npn \xparse_l:w #1 \l_xparse_grabbed_args_toks#2#{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new:Npn \xparse_allow_par_l:w #1 \l_xparse_grabbed_args_toks#2#{
- \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}}
- #1 \l_xparse_grabbed_args_toks
-}
-\cs_new_nopar:Npn \DeclareSymbolArgument #1#2{
- \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tl {
- \cs_set_nopar:cpx {xparse \l_tmpa_tl _#1:w}##1##2
- \l_xparse_grabbed_args_toks{
- \exp_not:c{peek_ #2 _remove \l_tmpa_tl :NTF} ##1
- {
- \exp_not:N \toks_put_right:Nn \exp_not:N
- \l_xparse_grabbed_args_toks \exp_not:N \c_true_bool
- ##2 \exp_not:N\l_xparse_grabbed_args_toks
- }
- {
- \exp_not:N \toks_put_right:Nn \exp_not:N
- \l_xparse_grabbed_args_toks \exp_not:N \c_false_bool
- ##2 \exp_not:N\l_xparse_grabbed_args_toks
- }
- }
- }
- \cs_set_nopar:cpn {xparse_add_arg_type_#1:} {
- \xparse_add_remaining_m_args:
- \toks_put_right:Nx \l_xparse_grabbed_args_toks
- { \exp_not:c {xparse \g_xparse_ignore_marker_tl _#1:w } }
- \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n
- \xparse_grab_default_arg:n
- }
-}
-\DeclareSymbolArgument S{meaning}
-\cs_new_nopar:Npn \DeclareArgumentType #1#2#3#4#5#6#7{
- \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tl {
- \cs_set_nopar:cpx {xparse \l_tmpa_tl _#1:w}##1\l_xparse_grabbed_args_toks{
- \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2
- { \exp_not:c{xparse_#1_#3_help:nw}{##1} }
- {
- \exp_not:n {
- #4 \toks_put_right:Nn \l_xparse_grabbed_args_toks {#5}
- }
- ##1 \exp_not:N\l_xparse_grabbed_args_toks
- }
- }
- \cs_set:cpx {xparse_allow_par \l_tmpa_tl _#1:w}##1
- \l_xparse_grabbed_args_toks{
- \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2
- { \exp_not:c{xparse_allow_par_#1_#3_help:nw}{##1} }
- {
- \exp_not:n {
- #4 \toks_put_right:Nn \l_xparse_grabbed_args_toks {#5}
- }
- ##1 \exp_not:N\l_xparse_grabbed_args_toks
- }
- }
- }
- \cs_set_nopar:cpn {xparse_add_arg_type_#1:} {
- \xparse_add_remaining_m_args:
- \toks_put_right:Nx \l_xparse_grabbed_args_toks {
- \exp_not:c {xparse
- \bool_if:NT \g_xparse_allow_par_bool {_allow_par}
- \g_xparse_ignore_marker_tl
- _#1:w
- }
- }
- \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n \xparse_parse_signature:n
- }
- \xparse_define_helper:Nnnn #1{#3}{#6}{#7}
-}
-\cs_new_nopar:Npn \DeclareArgumentTypeDefaultValue #1#2#3#4#5{
- \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tl {
- \cs_set_nopar:cpx {xparse \l_tmpa_tl _#1:w}##1##2\l_xparse_grabbed_args_toks{
- \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2
- { \exp_not:c{xparse_#1_#3_help:nw}{##2} }
- {
- \exp_not:N \toks_put_right:Nn
- \exp_not:N \l_xparse_grabbed_args_toks {{##1}}
- ##2 \exp_not:N \l_xparse_grabbed_args_toks
- }
- }
- \cs_set:cpx {xparse_allow_par \l_tmpa_tl _#1:w}##1##2
- \l_xparse_grabbed_args_toks{
- \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2
- { \exp_not:c{xparse_allow_par_#1_#3_help:nw}{##2} }
- {
- \exp_not:N \toks_put_right:Nn
- \exp_not:N \l_xparse_grabbed_args_toks {{##1}}
- ##2 \exp_not:N \l_xparse_grabbed_args_toks
- }
- }
- }
- \cs_set_nopar:cpn {xparse_add_arg_type_#1:} {
- \xparse_add_remaining_m_args:
- \toks_put_right:Nx \l_xparse_grabbed_args_toks {
- \exp_not:c {xparse
- \bool_if:NT \g_xparse_allow_par_bool {_allow_par}
- \g_xparse_ignore_marker_tl
- _#1:w
- }
- }
- \cs_set_eq:Nc \xparse_read_arg_type_or_grab_default:n
- {xparse_grab_default_arg
- \bool_if:NT \g_xparse_allow_par_bool {_allow_par}
- :n
- }
- }
- \xparse_define_helper:Nnnn #1{#3}{#4}{#5}
-}
-\cs_new_nopar:Nn \xparse_define_helper:Nnnn {
- \toks_set:Nn \l_tmpa_toks
- {
- #3
- {
- \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#4}}
- ##1 \l_xparse_grabbed_args_toks
- }
- }
- \toks_set:Nx \l_tmpa_toks {
- \exp_not:n {\cs_set_nopar:cpn{xparse_#1_#2_help:nw}}
- \toks_use:N \l_tmpa_toks
- \exp_not:n {\cs_set_nopar:cpn{xparse_allow_par_#1_#2_help:nw}}
- \toks_use:N\l_tmpa_toks
- }
- \toks_use:N \l_tmpa_toks
-}
-\DeclareArgumentType o[{meaning}{}{\NoValue}{#1[#2]}{#2}
-\DeclareArgumentType c({meaning}{
- \xparse_error:x{
- Missing~ coordinate~ argument.~ A~ value~ of~ (0,0)~ is~ assumed}
- }
- {{00}}
- {#1(#2,#3)}{{#2}{#3}}
-\DeclareArgumentTypeDefaultValue O[{meaning}{#1[#2]}{#2}
-\DeclareArgumentTypeDefaultValue C({meaning}{#1(#2,#3)}{{#2}{#3}}
-\cs_new_nopar:Npn \DeclareArgumentTypeShorthand #1#2{
- \cs_new_nopar:cpn {xparse_add_arg_type_#1:}
- ##1 \xparse_read_arg_type_or_grab_default:n {
- \int_decr:N \l_xparse_total_args_int
- \xparse_read_arg_type_or_grab_default:n #2
- }
-}
-\DeclareArgumentTypeShorthand s {S{*}}
-\cs_new_eq:NN \IfBooleanTF \bool_if:NTF
-\cs_new_eq:NN \IfBooleanT \bool_if:NT
-\cs_new_eq:NN \IfBooleanF \bool_if:NF
-\tl_new:Nn \NoValue {-NoValue-}
-\tl_new:Nn \c_xparse_hidden_no_value_tl {\NoValue}
-\cs_new:Npn \xparse_if_no_value:nTF #1{
- \tl_set:Nx \l_tmpa_tl{\exp_not:n{#1}}
- \tl_if_eq:NNTF \l_tmpa_tl \c_xparse_hidden_no_value_tl
- { \use_i:nn }
- { \tl_if_blank:nTF {#1}
- { \use_ii:nn }
- {\peek_after:NN \xparse_if_no_value_aux: #1 \q_nil {#1} }
- }
-}
-\cs_new:Nn \xparse_if_no_value_aux: {
- \tl_set:Nx \l_tmpa_tl{\token_get_arg_spec:N \l_peek_token }
- \tl_if_empty:NTF \l_tmpa_tl
- {\use_i_delimit_by_q_nil:nw {\exp_args:No\xparse_if_no_value:nTF}}
- {\use_i_delimit_by_q_nil:nw {\use_iii:nnn}}
-}
-\cs_new_eq:NN \IfNoValueTF \xparse_if_no_value:nTF
-\cs_new:Npn \IfNoValueT #1#2 {\xparse_if_no_value:nTF{#1}{#2}{}}
-\cs_new:Npn \IfNoValueF #1 {\xparse_if_no_value:nTF {#1}{}}
-\cs_new:Npn \IfValueTF #1#2#3{\xparse_if_no_value:nTF {#1}{#3}{#2}}
-\cs_new_eq:NN \IfValueT \IfNoValueF
-\cs_new_eq:NN \IfValueF \IfNoValueT
-\tl_new:Nn \l_xparse_pseudo_post_arg_tl {}
-\cs_new:Npn \DeclarePseudoArgument #1#2#3#4{
- \cs_set:cn {xparse_pseudo_pre_arg_#1:\prg_replicate:nn{#2}{n}} {#3}
- \cs_set:cn {xparse_pseudo_post_arg_#1:\prg_replicate:nn{#2}{n}} {#4}
- \cs_set_nopar:cn {xparse_pseudo_nobrace_arg_#1:N} {
- ##1 \l_xparse_pseudo_post_arg_tl
- }
- \cs_generate_from_arg_count:cNnn {xparse_pseudo_arg_#1:w}
- \cs_set:Npx {#2}
- {
- \exp_not:c {
- xparse_pseudo_pre_arg_#1: \prg_replicate:nn{#2}{n}
- }
- \use:c{use_ \intexpr_eval:n{#2} _parameter:}
- \exp_not:n {\tl_set:Nn \l_xparse_pseudo_post_arg_tl}
- {
- \exp_not:c {xparse_pseudo_post_arg_#1:\prg_replicate:nn{#2}{n}}
- \use:c{use_ \intexpr_eval:n{#2}_parameter:}
- }
- \exp_not:n{ \peek_catcode_remove_ignore_spaces:NTF \c_group_begin_token }
- {
- \exp_not:n {
- \c_group_begin_token
- \group_execute_after:N \l_xparse_pseudo_post_arg_tl
- }
- }
- {
- \exp_not:c{xparse_pseudo_nobrace_arg_#1:N}
- }
- }
-}
-\cs_new_nopar:Npn \UsePseudoArgument #1{\use:c{xparse_pseudo_arg_#1:w}}
-\endinput
-%%
-%% End of file `xparse.sty'.
diff --git a/Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty b/Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty
new file mode 100644
index 00000000000..67e67fe285a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty
@@ -0,0 +1,117 @@
+%%
+%% This is file `l3keys2e.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3keys2e.dtx (with options: `package')
+%% ----------------------------------------------------------------
+%% l3keys2e --- Parsing LaTeX3 keyvals as LaTeX2e package options
+%% Copyright 2009 The LaTeX3 Project
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%% File: l3keys2e.dtx (C) Copyright 2009 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 ``l3keys2e'' (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{l3names}
+\GetIdInfo$Id: l3keys2e.dtx 1494 2009-08-24 11:05:44Z joseph $
+ {Parsing LaTeX3 keyvals as LaTeX2e package options}
+\ProvidesExplPackage
+ {\filename}{\filedate}{\fileversion}{\filedescription}
+\RequirePackage{xparse}
+\clist_new:N \keys_latexe_options_clist
+\cs_new:Nn \keys_latexe_options:n {
+ \clist_clear:N \keys_latexe_options_clist
+ \keys_latexe_options_global:n {#1}
+ \keys_latexe_options_local:
+ \keys_if_exist:nnF {#1} { unknown } {
+ \keys_define:nn {#1} {
+ unknown .code:n = {
+ \msg_warning:nnxx { Option~Processing } { unknown-option }
+ { \l_keys_key_tl } { \@currname }
+ }
+ }
+ }
+ \keys_set:nV {#1} \keys_latexe_options_clist
+ \AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: }
+}
+\msg_new:nnn { Option~Processing } { unknown-option } {%
+ Unknown~option~`#1'\\%
+ for~module~#2.%
+}
+\cs_new:Nn \keys_latexe_options_global:n {
+ \cs_if_eq:NNF \@classoptionslist \scan_stop: {
+ \cs_if_eq:NNTF \@currext \@clsextension {
+ \keys_latexe_options_class:n {#1}
+ }{
+ \keys_latexe_options_package:n {#1}
+ }
+ }
+}
+\cs_new:Nn \keys_latexe_options_class:n {
+ \clist_map_inline:Nn \@classoptionslist {
+ \keys_if_exist:nnTF {#1} { \keys_latexe_remove_equals:n {##1} } {
+ \clist_put_right:Nn \keys_latexe_options_clist {##1}
+ }{
+ \clist_put_right:Nn \@unusedoptionlist {##1}
+ }
+ }
+}
+\cs_new:Nn \keys_latexe_options_package:n {
+ \clist_map_inline:Nn \@classoptionslist {
+ \keys_if_exist:nnT {#1} { \keys_latexe_remove_equals:n {##1} } {
+ \clist_put_right:Nn \keys_latexe_options_clist {##1}
+ \clist_remove_element:Nn \@unusedoptionlist {##1}
+ }
+ }
+}
+\cs_new_nopar:Nn \keys_latexe_options_local: {
+ \cs_if_eq:NNF \@currext \@clsextension {
+ \cs_if_exist:cT { opt@ \@currname . \@currext } {
+ \exp_args:NNc \clist_put_right:NV \keys_latexe_options_clist
+ { opt@ \@currname . \@currext }
+ }
+ }
+}
+\cs_new:Nn \keys_latexe_remove_equals:n {
+ \keys_latexe_remove_equals:w #1 = \q_stop
+}
+\cs_new:Npn \keys_latexe_remove_equals:w #1 = #2 \q_stop {#1}
+\NewDocumentCommand \ProcessKeysOptions { m } {
+ \keys_latexe_options:n {#1}
+}
+\@onlypreamble \ProcessKeysOptions
+\endinput
+%%
+%% End of file `l3keys2e.sty'.