From b7e7419f2fbc20f964ebd505f4c9d35c4b37d6e7 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 22 May 2007 17:49:29 +0000 Subject: new package xbase, subsuming some others? git-svn-id: svn://tug.org/texlive/trunk@4337 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/xbase/ldcsetup.sty | 193 +++++++++ Master/texmf-dist/tex/latex/xbase/template.sty | 560 +++++++++++++++++++++++++ Master/texmf-dist/tex/latex/xbase/xparse.sty | 559 ++++++++++++++++++++++++ 3 files changed, 1312 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/xbase/ldcsetup.sty create mode 100644 Master/texmf-dist/tex/latex/xbase/template.sty create mode 100644 Master/texmf-dist/tex/latex/xbase/xparse.sty (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/xbase/ldcsetup.sty b/Master/texmf-dist/tex/latex/xbase/ldcsetup.sty new file mode 100644 index 00000000000..286097bd17c --- /dev/null +++ b/Master/texmf-dist/tex/latex/xbase/ldcsetup.sty @@ -0,0 +1,193 @@ +%% +%% This is file `ldcsetup.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% ldcsetup.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: ldcsetup.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle +%% (C) Copyright 2004-2006 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{l3names} +\GetIdInfo$Id: ldcsetup.dtx 574 2006-08-21 23:30:10Z morten $ + {coding conventions and stuff} +\CodeStop +\RequirePackage{keyval,calc} +\makeatletter +%% Puts an ignored space at the end of the line, so `|\ |' does the right +\def\IgnoreWhiteSpace{% + \edef\@tempa{% + \catcode`\noexpand\~=\the\catcode`\~\relax + \catcode`\noexpand\ =\the\catcode`\ \relax + \catcode`\noexpand\^^I=\the\catcode`\^^I\relax + \catcode`\noexpand\@=\the\catcode`\@\relax + \endlinechar=\the\endlinechar\relax + }% + \ifx\@currname\@empty + \expandafter\AtBeginDocument\expandafter{\@tempa}% + \else + \expandafter\AtEndOfPackage\expandafter{\@tempa}% + \fi + \catcode`\~=10\relax + \catcode`\ =9\relax + \catcode`\^^I=9\relax + \makeatletter + \endlinechar=` % + \relax +} +\def\InternalSyntaxOn{% + \edef\@tempa{% + \catcode`\noexpand\~=\the\catcode`\~\relax + \catcode`\noexpand\ =\the\catcode`\ \relax + \catcode`\noexpand\^^I=\the\catcode`\^^I\relax + \catcode`\noexpand\@=\the\catcode`\@\relax + \catcode`\noexpand\:=\the\catcode`\:\relax + \catcode`\noexpand\_=\the\catcode`\_\relax + \endlinechar=\the\endlinechar\relax + \endlinechar=13\relax + }% +%%% ???? + \ifx\InternalSyntaxOff\relax + \expandafter\def\expandafter\InternalSyntaxOff\expandafter +{\@tempa\let\InternalSyntaxOff\relax}% + \fi + \ifx\@currname\@empty + \expandafter\AtBeginDocument\expandafter{\@tempa}% + \else + \expandafter\AtEndOfPackage\expandafter{\@tempa}% + \fi + \catcode`\~=10\relax + \catcode`\ =9\relax + \catcode`\^^I=9\relax + \makeatletter + \catcode`\_=11\relax + \catcode`\:=11\relax + \endlinechar=` % + \relax +} +\let\InternalSyntaxOff\relax +\IgnoreWhiteSpace +\def\define@key#1#2{% + \@ifnextchar[ + {\KV@def{#1}{\string#2}} + {\@namedef{KV@#1@\string#2}####1}} +\def\setkeys#1#2{% + \def\KV@prefix{KV@#1@\expandafter\string}% + \KV@do#2,\relax,} +\newtoks\KV@toks +\def\KV@@sp@c#1\@nil#2\relax#3{\KV@toks{#1}\edef#3{\the\KV@toks}} +\def\KV@equal{=} +\def\KV@split#1=#2=#3\relax{% + \KV@@sp@def\@tempa{#1}% + \def\@tempd{#3}% + \ifx\@tempa\@empty\else + \expandafter\let\expandafter\@tempc + \csname\KV@prefix\@tempa\endcsname + \ifx\@tempc\relax + \KV@error{\@tempa\space \expandafter\@gobbletwo\string\@undefined}\@eha + \else + \ifx\@tempd\@empty + \KV@default + \else + \KV@@sp@def\@tempb{#2}% + \ifx\@tempd\KV@equal + \expandafter\@tempc\expandafter{\@tempb}\relax + \else + \KV@error{Extra~=~ sign~ after~ `#1'}\KV@erry + \fi + \fi + \fi + \fi} +\def\KV@erry{\expandafter\KV@errx\meaning\@tempd\relax ignored\MessageBreak + missing~comma~in~`\expandafter\strip@prefix\meaning\@tempb'~?} +\def\KV@errx#1>#2==\relax{% + `#2' } +\def\KV@default{% + \expandafter\let\expandafter\@tempb + \csname\KV@prefix\@tempa @default\endcsname + \ifx\@tempb\relax + \KV@error{No value specified for \@tempa}\@eha + \else + \@tempb\relax + \fi} +\def\KV@error#1#2{\PackageError{keyval}{#1}{#2}} +\def\KV@parse#1{ + \begingroup +\def\KV@@sp@c##1\@nil##2\relax##3{\addto@hook##3{{##1}}} +\def\KV@split##1=##2=##3\relax{% + \def\@tempd{##3}% + \expandafter\ifx\expandafter=\@firstofone##1=\else + \ifx\@tempd\@empty + \addto@hook\KV@toks\KV@default@elt + \KV@@sp@def\KV@toks{##1}% + \else + \ifx\@tempd\KV@equal + \addto@hook\KV@toks\KV@elt + \KV@@sp@def\KV@toks{##1}% + \KV@@sp@def\KV@toks{##2}% + \else + \KV@err{Extra `=' after `##1'}\@ehd + \fi + \fi + \fi} + \KV@toks{} + \KV@do#1,\relax, + \expandafter + \endgroup + \the\KV@toks} +\let\SetInternalCounter\calc@assign@count +\def\GsetInternalCounter#1{\SetInternalCounter{\global#1}} +\def\gsetlength#1{\setlength{\global#1}} +\def\UndeclareRobustCommand#1{% + \global\let#1\undefined + \global\expandafter + \let\csname\expandafter\@gobble\string#1~\endcsname\undefined +} +\endinput +%% +%% End of file `ldcsetup.sty'. diff --git a/Master/texmf-dist/tex/latex/xbase/template.sty b/Master/texmf-dist/tex/latex/xbase/template.sty new file mode 100644 index 00000000000..53365373ddb --- /dev/null +++ b/Master/texmf-dist/tex/latex/xbase/template.sty @@ -0,0 +1,560 @@ +%% +%% This is file `template.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% template.dtx (with options: `package,trace') +%% +%% (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: template.dtx (C) Copyright 1999-2001 David Carlisle, Frank Mittelbach +%% (C) Copyright 2004-2006 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{l3names} +\GetIdInfo$Id: template.dtx 584 2006-12-12 17:29:34Z morten $ + {template} + +\RequirePackage{ldcsetup,xparse} +\RequirePackage{l3toks,l3tlp,l3skip,l3int,l3clist,l3token} +\CodeStart +\toks_new:N\l_TP_KV_assignments_toks +\toks_new:N\l_TP_default_assignments_toks +\def_new:NNn \TP_declare_instance:Nnn 3{ + \group_begin: + \TP_instdecl_generate_assignments:nn {#2}{#3} + \gdef:Npx #1 { + \tlp_if_eq:cNTF { TP>/#2 } \c_TP_doparameterassignments_tlp + { \toks_use:N \l_TP_KV_assignments_toks } + { + \exp_not:N \TP_push_assignments:n + {\toks_use:N\l_TP_KV_assignments_toks} + \exp_not:c {TP>/#2} + } + } + \group_end:} +\def_new:Npn \TP_declare_instance:cnn{\exp_args:Nc\TP_declare_instance:Nnn} +\tlp_set:Nn \c_TP_doparameterassignments_tlp {\DoParameterAssignments} +\def_new:NNn \UseTemplate 3{ + \TP_instdecl_generate_assignments:nn {#1/#2}{#3} + \TP_push_assignments: + \cs_use:c { TP>/#1/#2 } +} +\def_new:Npn \DoParameterAssignments{ + \exp_after:NN + \TP_pop_and_execute_assignments:nw + \toks_use:N \g_TP_assignments_stack_toks \q_stop +} +\def_new:Npn \TP_pop_and_execute_assignments:nw#1#2\q_stop{ + \toks_gset:Nn \g_TP_assignments_stack_toks {#2} + #1} +\toks_new:N \g_TP_assignments_stack_toks +\toks_gset:Nn \g_TP_assignments_stack_toks {\scan_stop:}% avoid brace loss +\def_new:Npn \TP_push_assignments:n{ + \tex_afterassignment:D \TP_push_assignments: + \l_TP_KV_assignments_toks} +\def_new:Npn \TP_push_assignments:{ + \toks_gset:No \g_TP_assignments_stack_toks + {\exp_after:NN + {\toks_use:N\exp_after:NN\l_TP_KV_assignments_toks\exp_after:NN} + \toks_use:N\g_TP_assignments_stack_toks}} +\def_new:NNn \DeclareTemplateType 2{ + \tlp_set:cn {TP@<#1>} {{}#2}} +\def_new:Npn \TP_get_csname_prefix:n#1{ + <\exp_after:NN\exp_after:NN\exp_after:NN + \use_arg_i:nn + \cs:w TP@<#1>\cs_end:>#1/ +} +\def_new:Npn \TP_get_arg_count:n#1{ + \exp_after:NN\exp_after:NN\exp_after:NN + \use_arg_ii:nn + \cs:w TP@<#1>\cs_end: +} +\def_long_new:NNn\DeclareTemplate 5{ + \cs_if_free:cTF{TP@<#1>} + {\undefinedtype\DeclareTemplateType{#1}#3} + { + \int_compare:nNnF{#3}={\TP_get_arg_count:n{#1}} + { \BadArgCount } + } + \let:NN \KV_elt:nn \TP_templdecl_process_KV:nn + \def:Npn \KV_default_elt:n##1{ + \PackageError{template}{Missing~ =~ after~ ##1}\@ehd} + \let:NN\KV@elt\KV_elt:nn + \let:NN\KV@default@elt\KV_default_elt:n + \tlp_set:Nn \l_TP_curr_name_tlp {#1/#2} + \toks_clear:N\l_TP_default_assignments_toks + %\int_compare:nNnTF{\char_value_catcode:n{`\ }}=\c_nine + %\KV_parse_picky_no_space_removal_no_sanitize:n + %\KV_parse_picky_space_removal_no_sanitize:n + \KV@parse{#4} + \tlp_set:cx { TPD>/\l_TP_curr_name_tlp } + {\toks_use:N\l_TP_default_assignments_toks} + + \tlp_clear:c {TPR>/\l_TP_curr_name_tlp} + + \tlp_set_eq:cN {TPO>/\l_TP_curr_name_tlp}\l_TP_curr_name_tlp + \def:cNn {TP>/\l_TP_curr_name_tlp}{#3}{#5} +} +\def_new:Npn \TP_templdecl_process_KV:nn#1#2{% + \let:NN \TP_templdecl_add_global_or_nothing: \use_noop: + \bool_set_false:N\l_TP_global_assignment_bool + \tlp_set:Nn\l_TP_currkey_tlp{#1} + \TP_templdecl_parse_KV:N#2\q_stop} +\def_new:Npn \TP_templdecl_parse_KV:N#1{ + \cs_if_free:cTF{TP_use_arg_type_#1:w} + {\PackageError{template}{Unknown~key~type~ (#1)~for~\l_TP_currkey_tlp}\@eha} + {\cs_use:c{TP_use_arg_type_#1:w}} +} +\bool_new:N \l_TP_global_assignment_bool +\def_new:cpn{TP_use_arg_type_+:w} { + \bool_set_true:N\l_TP_global_assignment_bool + \def:Npn \TP_templdecl_add_global_or_nothing: + {\toks_put_right:Nn \l_TP_KV_assignments_toks {\pref_global:D} } + \TP_templdecl_parse_KV:N +} +\def_new:Npn\TP_use_arg_type_l:w { + \TP_parse_optional_key_default:nw + { + \let:NN \TP_templdecl_add_global_or_nothing: \use_noop: + \bool_if:NTF \l_TP_global_assignment_bool + {\TP_templdecl_setup_register_key:Nn\gsetlength} + {\TP_templdecl_setup_register_key:Nn\setlength} + } +} +\def_new:Npn\TP_use_arg_type_L:w { + \TP_parse_optional_key_default:nw + {\TP_templdecl_setup_fakeregister_key:NNn\setlength\l_tmpa_skip} +} +\def_new:Npn\TP_use_arg_type_c:w { + \TP_parse_optional_key_default:nw + { + \let:NN\TP_templdecl_add_global_or_nothing:\use_noop: + \bool_if:NTF \l_TP_global_assignment_bool + {\TP_templdecl_setup_register_key:Nn\GSetInternalCounter} + {\TP_templdecl_setup_register_key:Nn\SetInternalCounter} + } +} +\def_new:Npn\TP_use_arg_type_C:w { + \TP_parse_optional_key_default:nw + {\TP_templdecl_setup_fakeregister_key:NNn + \SetInternalCounter\l_tmpa_int} +} +\def_new:Npn\TP_use_arg_type_n:w { + \TP_parse_optional_key_default:nw + {\TP_templdecl_setup_n_key:N} +} +\def_new:Npn\TP_use_arg_type_f:w #1{ + %\TP_templdecl_parse_f_arg:nw {#1} + \TP_parse_optional_key_default:nw{\TP_templdecl_setup_f_key:Nn{#1}} +} +\def_new:Npn \TP_templdecl_parse_f_arg:nw#1#2{ + \TP_parse_optional_key_default:nw{\TP_templdecl_setup_f_key:Nn{#1}{#2}} +} +\def_new:Npn\TP_use_arg_type_b:w { + \TP_parse_optional_key_default:nw + {\TP_templdecl_setup_b_key:n} +} +\def_new:Npn \TP_templdecl_setup_b_key:n#1{ + \let:cN { if#1 } \if_true: + \TP_templdecl_define_key:n + { \TP_templdecl_eval_b_key_value:nn {#1}{##1} } +} +\def_new:Npn \TP_templdecl_eval_b_key_value:nn#1#2{ + \cs_if_free:cTF {if#2} + { \PackageError{template}{Bad~boolean~setting~#1=#2}\@eha } + { \tlp_set_eq:cc {if_#1:}{if_#2:} + \toks_put_right:Nf \l_TP_KV_assignments_toks + { \tlp_set_eq:cc {if_#1:}{if_#2:} } + } +} +\def_new:Npn\TP_use_arg_type_s:w { + \TP_parse_optional_key_default:nw + {\TP_templdecl_setup_s_key:n} +} +\def_new:Npn \TP_templdecl_setup_s_key:n #1 { + \TP_templdecl_define_key:n + { \TP_templdecl_eval_s_key_value:nnn{##1}#1 } +} +\def_new:Npn\TP_use_arg_type_i:w #1{ + \TP_parse_optional_key_default:nw{\TP_templdecl_setup_i_key:nnn{#1}} +} +\def_new:Npn \TP_templdecl_setup_i_key:nnn#1#2{ + \TP_templdecl_define_key:n + { + \TP_templdecl_eval_i_key_value:Nnn #2 {#1}{##1} + } +} +\def_new:Npn \TP_templdecl_eval_i_key_value:Nnn #1#2#3 { + \tlist_if_head_eq_meaning:nNTF {#3.}\UseTemplate + { + \io_put_term:x{\token_to_string:N\UseTemplate\space seen} + {\TP_templdecl_declare_tmp_instance:nnnn #3 } + \toks_put_right:No \l_TP_KV_assignments_toks + { \exp_after:NN \KV@toks \exp_after:NN {\g_tmpa_tlp} } + %\TP_templdecl_add_global_or_nothing: + %\toks_put_right:Nn \l_TP_KV_assignments_toks + % { \def:Npx #1{ \toks_use:N \KV@toks} } + \bool_if:NTF \l_TP_global_assignment_bool + {\toks_put_right:Nn \l_TP_KV_assignments_toks + {\gdef:Npx #1 { \toks_use:N \KV@toks}} + } + {\toks_put_right:Nn \l_TP_KV_assignments_toks + {\def:Npx #1 { \toks_use:N \KV@toks}} + } + } + { + \TP_let_instance:Nnn#1{#2}{#3} + \toks_put_right:Nf \l_TP_KV_assignments_toks + { \TP_let_instance:Nnn#1{#2}{#3} } + } +} +\def_new:Npn\TP_use_arg_type_x:w { + \TP_parse_optional_key_default:nw + {\TP_templdecl_setup_x_key:n} +} +\def_new:Npn \TP_templdecl_setup_x_key:n#1{ + \TP_templdecl_define_key:n + { \toks_put_right:Nn\l_TP_KV_assignments_toks{#1} } +} +\def_new:Npn\TP_use_arg_type_g:w { + \TP_parse_optional_key_default:nw + {\TP_templdecl_setup_g_key:n} +} +\def_new:Npn \TP_templdecl_setup_g_key:n #1 { + \TP_templdecl_define_key:n{#1}} +\def_new:Npn \TP_templdecl_define_key:n#1{ + \tlp_set:Nx \l_tmpa_tlp { + \exp_not:N \TP_templdecl_remove_from_default_assignments:N + \exp_not:c{KV@\l_TP_curr_name_tlp @\l_TP_currkey_tlp} + \exp_not:o {\TP_templdecl_add_global_or_nothing: } + } + \exp_args:NcNo \def:NNn {KV@\l_TP_curr_name_tlp @\l_TP_currkey_tlp} 1 + { \l_tmpa_tlp #1 } +} +\def_long:Npn \TP_ignore_leading_space_in_arg_ii:nn#1#2{ + \exp_args:Nf\TP_ignore_leading_space_in_arg_ii_aux:nn + {\exp_not:N #2}{#1} +} +\def_long: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}{ + \IfNoValueTF{#2} + {\TP_templdecl_finish_key_setup:nw{#1}} + {\TP_templdecl_finish_key_setup_with_default:nnw{#1}{#2}} +} +\def_new:Npn \TP_templdecl_finish_key_setup:nw#1#2\q_stop{ + \TP_ignore_leading_space_in_arg_ii:nn{#1}{#2} + %%%#1{#2} +} +\def_new:Npn \TP_templdecl_finish_key_setup_with_default:nnw#1#2#3\q_stop{ + \TP_ignore_leading_space_in_arg_ii:nn{#1}{#3} + %%% #1 {#3} + \group_begin: + \toks_clear:N \l_TP_KV_assignments_toks + \let:NN \TP_templdecl_remove_from_default_assignments:N \use_none:n + \cs_use:c{KV@\l_TP_curr_name_tlp @\l_TP_currkey_tlp}{#2} + \exp_after:NN + \group_end: + \exp_after:NN + \toks_set:Nn + \exp_after:NN + \l_TP_default_assignments_toks + \exp_after:NN + { \cs:w KV@\l_TP_curr_name_tlp @\l_TP_currkey_tlp \exp_after:NN \cs_end: + \exp_after:NN + { \toks_use:N \exp_after:NN \l_TP_KV_assignments_toks + \exp_after:NN + } + \toks_use:N\l_TP_default_assignments_toks + } +} +\tlp_new:Nn \c_TP_true_tlp {true} +\def_new:Npn \TP_templdecl_eval_s_key_value:nnn#1#2#3 { + \tlp_set:Nn \l_tmpa_tlp {#1} + \tlp_if_eq:NNTF \l_tmpa_tlp \c_TP_true_tlp + { \toks_put_right:Nn \l_TP_KV_assignments_toks {#2} } + { \toks_put_right:Nn \l_TP_KV_assignments_toks {#3} } +} +\def_new:Npn \TP_templdecl_setup_register_key:Nn #1#2{ + \TP_templdecl_define_key:n{ + \tlist_if_head_eq_meaning:nNTF{##1}\DelayEvaluation + { + \toks_put_right:Nn \l_TP_KV_assignments_toks {#1#2{##1}} + %\toks_set:No\l_tmpa_toks{\use_arg_ii:nn ##1} + %\toks_put_right:Nx \l_TP_KV_assignments_toks + % {\exp_not:n{#1#2}{\toks_use:N \l_tmpa_toks}} + } + { + \tlist_if_head_eq_meaning:nNTF{##1..}\MultiSelection + { + \group_begin: + \TP_multiselection_add:nnnnnn #1#2##1 + \group_end: + \tlist_if_in:onTF{\toks_use:N\g_TP_multiselection_toks}\DelayEvaluation + { + \toks_put_right:No\l_TP_KV_assignments_toks + { + \exp_after:NN#1\exp_after:NN#2\exp_after:NN + {\toks_use:N\g_TP_multiselection_toks} + } + } + { + \toks_put_right:No\l_TP_KV_assignments_toks + { + \exp_after:NN #2 + \exp_after:NN= \toks_use:N\g_TP_multiselection_toks\scan_stop: + } + } + } + { + #1#2{##1} + \toks_put_right:No\l_TP_KV_assignments_toks { + \exp_after:NN #2 \exp_after:NN = \tex_the:D #2\scan_stop: + } + } + } + } +} +\def_new:NNn\DelayEvaluation 1{\use_none:n{\DelayEvaluation}#1} +\def_new:NNn\MultiSelection 1{\use_none:n{\MultiSelection}#1} +\def_new:Npn \TP_templdecl_remove_from_default_assignments:N#1{ + \def:Npn \tmp:w ##1#1##2##3#1##4\q_stop{ + \l_TP_default_assignments_toks{##1##3} + } + \exp_after:NN \tmp:w + \toks_use:N\l_TP_default_assignments_toks #1\scan_stop:#1\q_stop} +\def_new:Npn \TP_templdecl_setup_f_key:Nn#1#2{ + \TP_templdecl_define_key:n + { \TP_templdecl_define_function:NNn#1#2{##1} } +} +\def_new:Npn \TP_templdecl_define_function:NNn#1#2#3{ + \def:NNn #2 #1 {#3} + \toks_put_right:Nf \l_TP_KV_assignments_toks { \def:NNn #2 #1 {#3} } +} +\def_new:Npn \TP_templdecl_setup_n_key:N#1{ + \TP_templdecl_define_key:n{ + \tlist_if_head_eq_meaning:nNTF{##1..}\MultiSelection + { + \group_begin: + \TP_templdecl_multiselection:nnnn ##1 + \group_end: + \toks_put_right:Nx\l_TP_KV_assignments_toks { + \exp_not:n{\tlp_set:No #1} { \toks_use:N \g_TP_multiselection_toks} + } + } + { + \def:Npn #1{##1} % setting it? + \toks_put_right:Nn \l_TP_KV_assignments_toks + { \tlp_set:Nn #1{##1} } + } + } +} +\def_new:Npn \TP_templdecl_multiselection:nnnn #1#2#3#4{ + \toks_gset:Nn \g_TP_multiselection_toks {\if_case:w #2} + \clist_map_inline:nn {#3}{ \TP_multiselection_add_or_case:n {##1} } + \toks_gput_right:Nn\g_TP_multiselection_toks { \else: #4\fi: } +} +\def_new:Npn \DeclareInstance { \DeclareCollectionInstance{} } +\def_long_new:Npn \DeclareCollectionInstance#1#2#3#4{ + \TP_declare_instance:cnn { <#1>#2/#3 }{ #2/#4 } +} +\def_new:Npn \UseCollection#1#2{ + \tlp_set:cx { TP@<#1> } + { {#2} \TP_get_arg_count:n{#1} } +} +\def_new:Npn \TP_let_instance:Nnn#1#2#3{ + \let:Nc #1 + { + \cs_if_free:cTF { \TP_get_csname_prefix:n{#2} #3 } + { <>#2/ } + { \TP_get_csname_prefix:n{#2} } + #3 + } +} +\def_new:Npn \UseInstance#1#2{ + \TP_let_instance:Nnn \l_tmpa_tlp {#1}{#2} + \tlp_if_eq:NNTF \l_tmpa_tlp \scan_stop: + \INSTANCEundefined + \l_tmpa_tlp +} +\def_long_new:Npn \TP_templdecl_declare_tmp_instance:nnnn#1#2#3{% + \TP_declare_instance:Nnn \g_tmpa_tlp {#2/#3} } +\def_new:Npn \ShowTemplate#1#2{ + \io_put_term:x{*******~ Template:~ #1/#2~ *******} + \io_put_term:x{*} + \io_put_term:x{*~ Defaults:} + \io_put_term:x{*} + \io_put_term:x{\token_to_string:N\TPD>/#1/#2= + \cs_meaning:c{TPD>/#1/#2}} + \io_put_term:x{*} + \io_put_term:x{*~ Restrictions:} + \io_put_term:x{*} + \io_put_term:x{\token_to_string:N\TPR>/#1/#2= + \cs_meaning:c{TPR>/#1/#2}} + \io_put_term:x{*} + \io_put_term:x{*~ Body:} + \io_put_term:x{*} + \cs_show:c {TP>/#1/#2}} +\def_new:Npn \ShowCollectionInstance#1#2#3{ + \io_put_term:x{*******~ Instance:~ <#1>#2/#3~ *******} + \io_put_term:x{*} + \cs_show:c {<#1>#2/#3}} +\def_new:Npn \ShowInstance{\ShowCollectionInstance{}} +\def_new:Npn \TP_templdecl_setup_fakeregister_key:NNn#1#2#3{ + \TP_templdecl_define_key:n{ + \tlist_if_head_eq_meaning:nNTF{##1..}\DelayEvaluation + { + \toks_set:No \l_tmpa_toks {\use_arg_ii:nn ##1} + \toks_put_right:Nx \l_TP_KV_assignments_toks { + {\exp_not:n{#1#2}{\toks_use:N \l_tmpa_toks} + \exp_not:n{ \def:Npx #3{\toks_use:N#2} } + } + } + } + { + \tlist_if_head_eq_meaning:nNTF{##1..}\MultiSelection + { + \group_begin: + \TP_multiselection_add:nnnnnn#1#2##1 + \group_end: + \toks_put_right:Nx\l_TP_KV_assignments_toks + {\exp_not:n{\def:Npn #3} {\toks_use:N\g_TP_multiselection_toks}} + } + { + #1#2{##1} + \toks_put_right:Nx\l_TP_KV_assignments_toks + {\exp_not:n{\def:Npn#3} {\toks_use:N#2}} + } + } + } +} +\toks_new:N \g_TP_multiselection_toks +\def_new:Npn \TP_multiselection_add:nnnnnn #1#2#3#4#5#6{ + \toks_gset:Nn \g_TP_multiselection_toks {\if_case:w #4} + \clist_map_inline:nn {#5}{ + \tlist_if_head_eq_meaning:nNTF{##1..}\DelayEvaluation + { + \TP_multiselection_add_or_case:n {##1} + } + { + #1#2{##1} + \TP_multiselection_add_or_case:n { \toks_use:N #2 } + } + } + \toks_gput_right:Nn \g_TP_multiselection_toks { \else: #6\fi: } +} +\def_new:Npn \TP_multiselection_add_or_case:n #1 { + \toks_gput_right:Nn \g_TP_multiselection_toks { \or: #1 } +} +\def_new:Npn \TP_multiselection_add_or_case:o { + \exp_args:NNo \TP_multiselection_add_or_case:n +} +\def_new:Npn \IfExistsInstanceTF#1#2{ + \cs_if_exist:cTF{<>#1/#2} +} +\def:Npn \IfExistsInstanceTF#1#2{ + \TP_let_instance:Nnn \l_tmpa_tlp {#1}{#2} + \if_meaning:NN\l_tmpa_tlp\scan_stop: + \exp_after:NN\use_arg_ii:nn + \else: + \exp_after:NN\use_arg_i:nn + \fi:} +\def_new:Npn \DeclareRestrictedTemplate#1#2#3#4{ + % CCC do we need a group here?? + \tlp_set_eq:cc { TPD>/#1/#2 } { TPD>/#1/#3 } + \tlp_set_eq:cc { TP>/#1/#2 } { TP>/#1/#3 } + + \toks_set:Nd \l_TP_KV_assignments_toks + {\cs:w TPR>/#1/#3\cs_end:} + + \setkeys {\cs:w TPO>/#1/#3\cs_end:}{#4} + + \tlp_set:co { TPR>/#1/#2 } + { \toks_use:N \l_TP_KV_assignments_toks } + \cs_if_free:cTF { TPO>/#1/#3 } + { \tlp_set:cn {TPO>/#1/#2}{#1/#3} } + { \tlp_set_eq:cc {TPO>/#1/#2}{TPO>/#1/#3} } +} +\def_new:Npn \TP_instdecl_generate_assignments:nn#1#2 { + % Returns to \l_TP_KV_assignments_toks + % the restrictions + % stored in the TP-structure (at present + % in YAM) of the template #1 + + \toks_set:Nd \l_TP_default_assignments_toks + {\cs:w TPD>/#1\cs_end:\scan_stop:\scan_stop:} + + \toks_set:Nd \l_TP_KV_assignments_toks + {\cs:w TPR>/#1\cs_end:} + + \setkeys { \cs:w TPO>/#1 \cs_end: } + { #2 } % adds stuff to \l_TP_KV_assignments_toks + + \exp_after:NN\TP_instdecl_add_default_recurse:nn + \toks_use:N\l_TP_default_assignments_toks + +} +\def_new:Npn \TP_instdecl_add_default_recurse:nn#1#2{ + \token_if_eq_meaning:NNF #1\scan_stop: + { + \l_tmpa_toks{#2} + \tlp_set:Nx \l_tmpa_tlp { + {\toks_use:N \l_tmpa_toks \toks_use:N \l_TP_KV_assignments_toks} + } + \l_TP_KV_assignments_toks \l_tmpa_tlp + \TP_instdecl_add_default_recurse:nn + } +} +\def_new:Npn \TP_split_finite_skip_value:nnNN #1#2{ + \skip_split_finite_else_action:nnNN {#1} { + \PackageError{template}{Value~ for~ key~ #2~ contains~ `fil(ll)'} + {Only~ finite~ minus~ or~ plus~ parts~ are~ allowed~ for~ this~ key.} + } +} +\endinput +%% +%% End of file `template.sty'. diff --git a/Master/texmf-dist/tex/latex/xbase/xparse.sty b/Master/texmf-dist/tex/latex/xbase/xparse.sty new file mode 100644 index 00000000000..05e4758cf52 --- /dev/null +++ b/Master/texmf-dist/tex/latex/xbase/xparse.sty @@ -0,0 +1,559 @@ +%% +%% 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-2006 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{l3names} +\GetIdInfo$Id: xparse.dtx 574 2006-08-21 23:30:10Z morten $ + {generic document command parser} +\RequirePackage{l3tlp,l3num,l3toks,l3prg,l3int,l3seq,l3token} +\def_new:NNn \xparse_already_defined_error_msg:N 1 { + \xparse_error:x { + Command~name~`\token_to_string:N #1'~ already~defined! + } +} +\def_new:NNn \xparse_not_yet_defined_error_msg:N 1 { + \xparse_error:x { + Command~`\token_to_string:N #1'~ not~ yet~defined! + } +} +\def_new:NNn \xparse_begins_with_end_error_msg:N 1 { + \xparse_error:x { + Command~`\token_to_string:N #1'~begins~with~ + `\token_to_string:N \end'! + } +} +\def_new:NNn \xparse_unknown_arg_type_error_msg:N 1{ + \xparse_error:x { + Unknown~ argument~ type~ `#1'~ + I'll~ substitute~ it~ with~ `m'~ for~ now.~ Fingers~ crossed... + } +} +\def_new:NNn \xparse_no_command_implementation_warning:n 1 { + \xparse_warning:x {No~ implementation~ for~ `#1'~ defined} +} +\def_new:NNn \xparse_error:x 1{\tex_errmessage:D {xparse~error:~#1}} +\def_new:NNn \xparse_warning:x 1{\io_put_term:x{xparse~warning:~#1}} +\def_new:NNn \xparse_if_definable:NTF 1 { + \cs_free:NTF #1 + { + \xparse_begins_with_end:NTF #1 + { \xparse_begins_with_end_error_msg:N #1 \use_arg_ii:nn } + \use_arg_i:nn + } + { \xparse_already_defined_error_msg:N #1 \use_arg_ii:nn } +} +\def_new:NNn \xparse_if_definable:cTF 0 { + \exp_args:Nc \xparse_if_definable:NTF +} +\def_new:NNn \xparse_if_redefinable:NTF 1 { + \cs_free:NTF #1 + { \xparse_not_yet_defined_error_msg:N #1 \use_arg_ii:nn } + { + \xparse_begins_with_end:NTF #1 + { \xparse_begins_with_end_error_msg:N #1 \use_arg_ii:nn } + \use_arg_i:nn + } +} +\def_new:NNn \xparse_if_redefinable:cTF 0 { + \exp_args:Nc \xparse_if_redefinable:NTF +} +\def_new:NNn \xparse_begins_with_end:NTF 1 { + \group_begin: + \exp_args:Nc \xparse_begins_with_end_aux:N { + \tlist_head_iii:f { \cs_to_str:N #1 ??} + } +} +\def_new:NNn \xparse_begins_with_end_aux:N 1 { + \if:w \cs_if_eq_name_p:NN #1 \end + \group_end: + \exp_after:NN \use_arg_i:nn + \else: + \group_end: + \exp_after:NN \use_arg_ii:nn + \fi: +} +\def_new:NNn \DeclareDocumentCommand 1 { + \xparse_if_definable:NTF #1 + { \xparse_declare_document_command:Nnn #1 } + \use_none:nn +} +\def_new:NNn \ReDeclareDocumentCommand 1 { + \xparse_if_redefinable:NTF #1 + { \xparse_declare_document_command:Nnn #1 } + \use_none:nn +} +\def_new:NNn \DeclareDocumentEnvironment 1 { + \xparse_if_definable:cTF {#1} + { \xparse_declare_document_environment:nnnn {#1} } + \use_none:nnn +} +\def_new:NNn \ReDeclareDocumentEnvironment 1 { + \xparse_if_redefinable:cTF {#1} + { \xparse_declare_document_environment:nnnn {#1} } + \use_none:nnn +} +\def_new:NNn \ProvideDocumentCommand 1{ + \cs_free:NTF #1 + { \DeclareDocumentCommand #1} + \use_none:nn +} +\def_new:NNn \ProvideDocumentEnvironment 1{ + \cs_free:cTF {#1} + { \DeclareDocumentEnvironment {#1} } + \use_none:nnn +} +\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 +\def_long:NNn \xparse_declare_document_command:Nnn 3{ + \xparse_prepare_signature:n {#2} + \def_protected:Npx #1 { + \exp_not:n { \toks_set:Nn \l_xparse_grabbed_args_toks } + {\exp_not:c {\token_to_string:N #1}} + \toks_use:N \l_xparse_grabbed_args_toks + \exp_not:n{ \toks_use:N \l_xparse_grabbed_args_toks} + } + \def_long:cNn {\token_to_string:N #1}\l_xparse_total_args_int{#3} +} +\def_new:Npn \xparse_declare_document_command:cnn { + \exp_args:Nc \xparse_declare_document_command:Nnn +} +\def_long_new:NNn \xparse_declare_document_environment:nnnn 4 { + \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 + } + \let:cN {end #1} \xparse_parsed_end_environment: + \def_long:cNn {end \token_to_string:N \\ #1} + \l_xparse_total_args_int{#4} +} +\def_protected_new:NNn \xparse_parsed_end_environment: 0{ + \exp_after:NN \xparse_parsed_end_environment_aux:N + \toks_use:N \l_xparse_end_environment_args_toks + \group_end: +} +\def_new:NNn \xparse_parsed_end_environment_aux:N 1{ + \cs_use:c {end \token_to_string:N #1 } +} +\def_long_new:NNn \DeclareDocumentCommandInterface 3{ + \xparse_prepare_signature:n {#3} + \def_protected: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} + } + \def_long:cNn {impl-#2} \l_xparse_total_args_int + {\xparse_undefined_command_implementation:n{#2}} +} +\def_new:NNn \xparse_undefined_command_implementation:n 1{ + ``#1'' + \xparse_no_command_implementation_warning:n {#1} +} +\def_long_new:NNn \DeclareDocumentCommandImplementation 3{ + \def_long:cNn {impl-#1}#2{#3} +} +\def_new:NNn \xparse_prepare_signature:n 1 { + \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 + \tlp_gset_eq:NN \g_xparse_ignore_marker_tlp + \g_xparse_ignore_spaces_marker_tlp + \xparse_parse_signature:n #1 \q_nil +} +\tlp_new:Nn \g_xparse_ignore_marker_tlp {} +\seq_new:N \g_xparse_ignore_marker_seq +\bool_new:N \g_xparse_insert_marker_bool +\def_new: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 + \tlist_map_inline:nn{#2}{ + \xparse_check_and_add_argument_type:N ##1 + } + \xparse_parse_signature:n +} +\def_new:NNn \xparse_add_ignore_marker:Nnn 3{ + \tlp_new:cn {g_xparse #2 _marker_tlp}{#3} + \seq_gpush:NC \g_xparse_ignore_marker_seq {g_xparse #2 _marker_tlp} + \def_new:cpn {xparse_add_arg_type_#1:}{ + \tlp_gset_eq:Nc \g_xparse_ignore_marker_tlp {g_xparse #2 _marker_tlp} + } +} +\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} +\def_new:NNn \xparse_add_arg_type_P: 0{ + \bool_gset_true:N \g_xparse_allow_par_bool +} +\bool_new:N \g_xparse_allow_par_bool +\def_new:NNn \xparse_parse_signature:n 1{ + \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 + \tlp_gset_eq:NN \g_xparse_ignore_marker_tlp + \g_xparse_ignore_spaces_marker_tlp + } + \xparse_read_arg_type_or_grab_default:n + } +} +\def_new:NNn \xparse_check_and_add_argument_type:N 1 { + \cs_free:cTF {xparse_add_arg_type_#1:} + { \xparse_unknown_arg_type_error_msg:N #1 + \int_incr:N \l_xparse_mandatory_args_int + } + { \cs_use:c {xparse_add_arg_type_#1:} } +} +\let_new:NN \xparse_read_arg_type_or_grab_default:n + \xparse_parse_signature:n +\def_new:NNn \xparse_grab_default_arg:n 1{ + \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#1}} + \let:NN \xparse_read_arg_type_or_grab_default:n + \xparse_parse_signature:n + \xparse_parse_signature:n +} +\def_long_new:NNn \xparse_grab_default_arg_allow_par:n 1{ + \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#1}} + \let:NN \xparse_read_arg_type_or_grab_default:n + \xparse_parse_signature:n + \xparse_parse_signature:n +} +\def_new:Npn \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 } +} +\def_new:Npn \xparse_add_remaining_m_args: { + \int_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 + } +} +\def_new: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 +} +\def_new: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 +} +\def_new: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 +} +\def_new: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 +} +\def_new: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 +} +\def_new: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 +} +\def_new: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 +} +\def_new: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 +} +\def_new: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 +} +\def_long_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 +} +\def_new:Npn \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} } +} +\def_new: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 +} +\def_long_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 +} +\def_new:NNn \DeclareSymbolArgument 2{ + \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tlp { + \def:cpx {xparse \l_tmpa_tlp _#1:w}##1##2\l_xparse_grabbed_args_toks{ + \exp_not:c{peek_ #2 _remove \l_tmpa_tlp :NTF} ##1 + { + \exp_not:N \toks_put_right:Nn \exp_not:N + \l_xparse_grabbed_args_toks \exp_not:N \c_true + ##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 + ##2 \exp_not:N\l_xparse_grabbed_args_toks + } + } + } + \def: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_tlp _#1:w } } + \let:NN \xparse_read_arg_type_or_grab_default:n \xparse_grab_default_arg:n + } +} +\DeclareSymbolArgument S{meaning} +\def_new:NNn \DeclareArgumentType 7{ + \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tlp { + \def:cpx {xparse \l_tmpa_tlp _#1:w}##1\l_xparse_grabbed_args_toks{ + \exp_not:c{peek_#3 \l_tmpa_tlp :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 + } + } + \def_long:cpx {xparse_allow_par \l_tmpa_tlp _#1:w}##1 + \l_xparse_grabbed_args_toks{ + \exp_not:c{peek_#3 \l_tmpa_tlp :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 + } + } + } + \def: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_tlp + _#1:w + } + } + \let:NN \xparse_read_arg_type_or_grab_default:n \xparse_parse_signature:n + } + \xparse_define_helper:Nnnn #1{#3}{#6}{#7} +} +\def_new:NNn \DeclareArgumentTypeDefaultValue 5{ + \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tlp { + \def:cpx {xparse \l_tmpa_tlp _#1:w}##1##2\l_xparse_grabbed_args_toks{ + \exp_not:c{peek_#3 \l_tmpa_tlp :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 + } + } + \def_long:cpx {xparse_allow_par \l_tmpa_tlp _#1:w}##1##2 + \l_xparse_grabbed_args_toks{ + \exp_not:c{peek_#3 \l_tmpa_tlp :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 + } + } + } + \def: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_tlp + _#1:w + } + } + \let: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} +} +\def_new:NNn \xparse_define_helper:Nnnn 4{ + \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 {\def:cpn{xparse_#1_#2_help:nw}} + \toks_use:N \l_tmpa_toks + \exp_not:n {\def: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}} +\def_new:NNn \DeclareArgumentTypeShorthand 2{ + \def_new: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{*}} +\let_new:NN \IfBooleanTF \prg_if_predicate:nTF +\let_new:NN \IfBooleanT \prg_if_predicate:nT +\let_new:NN \IfBooleanF \prg_if_predicate:nF +\tlp_new:Nn \NoValue {-NoValue-} +\tlp_new:Nn \c_xparse_hidden_no_value_tlp {\NoValue} +\def_long_new:Npn \xparse_if_no_value:nTF #1{ + \tlp_set:Nx \l_tmpa_tlp{\exp_not:n{#1}} + \tlp_if_eq:NNTF \l_tmpa_tlp \c_xparse_hidden_no_value_tlp + { \use_arg_i:nn } + { \tlist_if_blank:nTF {#1} + { \use_arg_ii:nn } + {\peek_after:NN \xparse_if_no_value_aux: #1 \q_nil {#1} } + } +} +\def_long_new:Npn \xparse_if_no_value_aux: { + \tlp_set:Nx \l_tmpa_tlp{\token_get_arg_spec:N \l_peek_token } + \tlp_if_empty:NTF \l_tmpa_tlp + {\use_arg_i_delimit_by_q_nil:nw {\exp_args:No\xparse_if_no_value:nTF}} + {\use_arg_i_delimit_by_q_nil:nw {\use_arg_iii:nnn}} +} +\let_new:NN \IfNoValueTF \xparse_if_no_value:nTF +\def_long_new:NNn \IfNoValueT 2 {\xparse_if_no_value:nTF{#1}{#2}{}} +\def_long_new:NNn \IfNoValueF 1 {\xparse_if_no_value:nTF {#1}{}} +\def_long_new:NNn \IfValueTF 3{\xparse_if_no_value:nTF {#1}{#3}{#2}} +\let_new:NN \IfValueT \IfNoValueF +\let_new:NN \IfValueF \IfNoValueT +\tlp_new:Nn \l_xparse_pseudo_post_arg_tlp {} +\def_long_new:NNn \DeclarePseudoArgument 4{ + \def_long:cNn {xparse_pseudo_pre_arg_#1:\prg_replicate:nn{#2}{n}}#2{#3} + \def_long:cNn {xparse_pseudo_post_arg_#1:\prg_replicate:nn{#2}{n}}#2{#4} + \def:cNn {xparse_pseudo_nobrace_arg_#1:N} 1 { + ##1 \l_xparse_pseudo_post_arg_tlp + } + \def_long:cNx {xparse_pseudo_arg_#1:w} #2 + { + \exp_not:c { + xparse_pseudo_pre_arg_#1: \prg_replicate:nn{#2}{n} + } + \cs_use:c{def_aux_use_\int_use:N \int_eval:n{#2}_parameter:} + \exp_not:n {\tlp_set:Nn \l_xparse_pseudo_post_arg_tlp} + { + \exp_not:c {xparse_pseudo_post_arg_#1:\prg_replicate:nn{#2}{n}} + \cs_use:c{def_aux_use_\int_use:N \int_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_tlp + } + } + { + \exp_not:c{xparse_pseudo_nobrace_arg_#1:N} + } + } +} +\def_new:NNn \UsePseudoArgument 1{\cs_use:c{xparse_pseudo_arg_#1:w}} +\endinput +%% +%% End of file `xparse.sty'. -- cgit v1.2.3