summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorManuel Pégourié-Gonnard <mpg@elzevir.fr>2008-08-05 13:29:41 +0000
committerManuel Pégourié-Gonnard <mpg@elzevir.fr>2008-08-05 13:29:41 +0000
commite059ddf997a70018f856a8dad9b7745f0d285005 (patch)
treefb86d6c895b1fa1d28d5b0134ca083d3efbb30b3 /Master/texmf-dist
parent7d2c6c37fed28ab9333321b3b53ad194d19f7847 (diff)
rm xbase
git-svn-id: svn://tug.org/texlive/trunk@10093 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/latex/xbase/00readme.txt65
-rw-r--r--Master/texmf-dist/doc/latex/xbase/ldcsetup.pdfbin100608 -> 0 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xbase/template-test.tex77
-rw-r--r--Master/texmf-dist/doc/latex/xbase/template-test2.tex110
-rw-r--r--Master/texmf-dist/doc/latex/xbase/template.pdfbin225000 -> 0 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xbase/tprestrict-test.tex80
-rw-r--r--Master/texmf-dist/doc/latex/xbase/xparse-test.tex310
-rw-r--r--Master/texmf-dist/doc/latex/xbase/xparse.pdfbin465775 -> 0 bytes
-rw-r--r--Master/texmf-dist/source/latex/xbase/ldcsetup.dtx330
-rw-r--r--Master/texmf-dist/source/latex/xbase/template.dtx2442
-rw-r--r--Master/texmf-dist/source/latex/xbase/xbase.ins73
-rw-r--r--Master/texmf-dist/source/latex/xbase/xparse.dtx2168
-rw-r--r--Master/texmf-dist/tex/latex/xbase/ldcsetup.sty192
-rw-r--r--Master/texmf-dist/tex/latex/xbase/template.sty569
-rw-r--r--Master/texmf-dist/tex/latex/xbase/xparse.sty561
15 files changed, 0 insertions, 6977 deletions
diff --git a/Master/texmf-dist/doc/latex/xbase/00readme.txt b/Master/texmf-dist/doc/latex/xbase/00readme.txt
deleted file mode 100644
index ba835d2ef46..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/00readme.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-
- Experimental Packages Demonstrating
- A Possible LaTeX3 Programming Convention
- ========================================
-
- 2008/06/20
-
-
-WHERE TO GET IT
----------------
-
-The current version of these packages can be obtained by following the
-instructions at <http://www.latex-project.org/code.html>.
-
-OVERVIEW
---------
-
-The xbase bundle provides the packages xparse and template, and the
-support package ldcsetup.
-
-The packages require expl3 to be installed.
-
-The xparse provides a high-level interface for declaring document
-commands, e.g., a uniform way to define commands taking optional
-arguments, optional stars (and others), mandatory arguments and more.
-
-The template package provides an interface for defining generic
-functions using a key=val syntax.
-
-The ldcsetup package used to establish prototype LaTeX3 coding conventions,
-needed by xparse and xbase, but is now slowly being stripped in favor
-of functionality added to expl3.
-
-
-DISCUSSION
-----------
-
-Discussion concerning the approach, suggestions for improvements, changes,
-additions, etc. should be addressed to the list LATEX-L.
-
-You can subscribe to this list by sending mail to
-
- listserv@urz.uni-heidelberg.de
-
-with the body containing
-
- subscribe LATEX-L <Your-First-Name> <Your-Second-Name>
-
-
-BUGS
-----
-
-If you find a real bug that makes a package stop working you can
-report it via the standard LaTeX bug reporting mechanism of the LaTeX
-distribution (see bugs.txt there) using the category "Experimental
-LaTeX kernel". However please do *not* use this method for
-suggestions / comments / improvements / etc. For this the list LATEX-L
-should be used instead.
-
-Also please don't expect these package to work with *any* code that
-floats around in the LaTeX2e world. :-)
-
-
---- Copyright 1998 -- 2008
- The LaTeX3 Project. All rights reserved ---
diff --git a/Master/texmf-dist/doc/latex/xbase/ldcsetup.pdf b/Master/texmf-dist/doc/latex/xbase/ldcsetup.pdf
deleted file mode 100644
index f4dd92920ac..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/ldcsetup.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xbase/template-test.tex b/Master/texmf-dist/doc/latex/xbase/template-test.tex
deleted file mode 100644
index f8c47c82d59..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/template-test.tex
+++ /dev/null
@@ -1,77 +0,0 @@
-% \iffalse
-%% (C) Copyright 2000-2004 LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% $Id: template-test.tex 251 2004-11-11 19:01:16Z mittelba $
-%%
-% \fi
-%
-\RequirePackage{template}
-
-\DeclareTemplateType{xxx}{0}
-
-\DeclareTemplate{xxx}{test}{0}
- {
- xkey=n \xkey,
- key =i {yyy} \value
- }
- {
- \DoParameterAssignments
- \show\xkey
- \show\value
- \value
- }
-
-\DeclareTemplateType{yyy}{0}
-
-\DeclareTemplate{yyy}{foo}{0}
- {
- keya =L \foo
- }
- {
- \DoParameterAssignments
- \show\foo
- }
-
-
-\DeclareInstance{xxx}{bar}{test}
- {
- xkey = \UseTemplate{yyy}{foo}{ keya = 20pt },
- key = \UseTemplate{yyy}{foo}{ keya = 10pt }
- }
-
-\ShowInstance{xxx}{bar}
-
-\UseInstance{xxx}{bar}
-
-\stop
diff --git a/Master/texmf-dist/doc/latex/xbase/template-test2.tex b/Master/texmf-dist/doc/latex/xbase/template-test2.tex
deleted file mode 100644
index 489e9f2304a..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/template-test2.tex
+++ /dev/null
@@ -1,110 +0,0 @@
-% \iffalse
-%% (C) Copyright 2000-2004 LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% $Id: template-test2.tex 585 2006-12-12 17:31:48Z morten $
-%%
-% \fi
-%
-
-
-\RequirePackage{template}
-\RequirePackage{trace}
-
-\DeclareTemplateType{xxx}{0}
-
-\def\MultiSelection{\MultiSelectionError}
-%\def\foo{bar}
-
-%\traceon
-
-\DeclareTemplate{xxx}{test}{0}
- {
- xkey=n [\foo] \xkey,
- ykey=n [\DelayEvaluation\foo] \ykey,
- zkey=n \zkey,
- last=n [last] \lastkey,
- set =i {xxx} \xxx
- }
- {
- \DoParameterAssignments
- \typeout{abc}
- }
-\ShowTemplate{xxx}{test}
-
-
-\DeclareInstance{xxx}{bar}{test}
- {
- zkey = foo,
- xkey = baz,
- }
-
-\DeclareInstance{xxx}{baz}{test}
- {
- last = first,
- set = \UseTemplate{xxx}{test}{zkey=rrr},
- zkey = foo
- }
-
-
-\ShowInstance{xxx}{bar}
-\ShowInstance{xxx}{baz}
-
-\DeclareTemplateType{yyy}{0}
-
-\DeclareTemplate{yyy}{foo}{0}
- {
- keya =L \foo
- }
- {
- \DoParameterAssignments
- \show\foo
- }
-
-
-\DeclareInstance{xxx}{bar}{test}
- {
- xkey = \UseTemplate{yyy}{foo}{ keya = 20pt },
- key = \UseTemplate{yyy}{foo}{ keya = 10pt }
- }
-
-\ShowInstance{xxx}{bar}
-
-\UseInstance{xxx}{bar}
-
-\stop
-
-%%% Local Variables:
-%%% mode: plain-tex
-%%% TeX-master: t
-%%% End:
diff --git a/Master/texmf-dist/doc/latex/xbase/template.pdf b/Master/texmf-dist/doc/latex/xbase/template.pdf
deleted file mode 100644
index 8fcc2270517..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/template.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xbase/tprestrict-test.tex b/Master/texmf-dist/doc/latex/xbase/tprestrict-test.tex
deleted file mode 100644
index a787694abff..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/tprestrict-test.tex
+++ /dev/null
@@ -1,80 +0,0 @@
-% \iffalse
-%% (C) Copyright 2000-2004 LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% $Id: tprestrict-test.tex 251 2004-11-11 19:01:16Z mittelba $
-%%
-% \fi
-%
-
-\makeatletter
-\RequirePackage{template}
-\IgnoreWhiteSpace
-
-\newcount\ca
-\newdimen\da
-
-
-\DeclareTemplateType{type}{0}
-
-\DeclareTemplate{type}{Ta}{0}{
- one =l [2in] \da,
- two =c [5] \ca}
- {\DoParameterAssignments\typeout{\da=\the\da,\@spaces \ca=\the\ca}}
-
-\ShowTemplate{type}{Ta}
-
-\typeout{1^^J==}
-\UseTemplate{type}{Ta}{}
-
-\typeout{2^^J==}
-\UseTemplate{type}{Ta}{one=44pt, two=7}
-
-
-\DeclareRestrictedTemplate{type}{Tb}{Ta}{one=33pt}
-
-\ShowTemplate{type}{Tb}
-
-\typeout{RESTRICT^^J3^^J==}
-
-\DeclareInstance{type}{foo}{Tb}{two=9}
-
-\ShowInstance{type}{foo}
-
-\UseInstance{type}{foo}
-
-\typeout{4^^J==}
-\UseTemplate{type}{Tb}{two=7}
-
-\stop
-
diff --git a/Master/texmf-dist/doc/latex/xbase/xparse-test.tex b/Master/texmf-dist/doc/latex/xbase/xparse-test.tex
deleted file mode 100644
index 1edbc5b1172..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/xparse-test.tex
+++ /dev/null
@@ -1,310 +0,0 @@
-% \iffalse
-%% (C) Copyright 2000-2005 LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% $Id: xparse-test.tex 546 2006-07-06 14:54:38Z morten $
-%%
-% \fi
-%
-
-\documentclass{minimal}
-
-\usepackage{xparse,l3box}
-
-
-\typeout{Testing the complicated makebox setup}
-\typeout{*****************************}
-\typeout{* look at dvi output for this part}
-\typeout{*****************************}
-
-\CodeStart
-% We use \ReDeclareDocumentCommand as these are already defined.
-% Let's just take the error messages for a ride:
-\def:Npn \makebox{}
-% Here should be an error because it is defined
-\DeclareDocumentCommand \makebox {m}{Gobbledygook}
-\cs_gundefine:N \makebox
-% And now one for being undefined
-\ReDeclareDocumentCommand \makebox {m}{More~gobbledygook}
-\let:NN \makebox \scan_stop:
-% Another one for being undefined
-\ReDeclareDocumentCommand \makebox {m}{Even~more~gobbledygook}
-% Now it should work
-\DeclareDocumentCommand \makebox { C{\NoValue} o O{c} m}
- {
- \IfNoValueTF{#1}
- { \ltx@maketextbox{#2}{#3}{#4}\mbox }
- { \ltx@makepicbox #1 {#2}{#4}\@firstofone }
- }
-
-\ReDeclareDocumentCommand \framebox { C{\NoValue} o O{c} m}
- {
- \IfNoValueTF{#1}
- { \ltx@maketextbox{#2}{#3}{#4}\fbox }
- { \ltx@makepicbox #1 {#2}{#4}\frame }
- }
-
-\def\ltx@maketextbox#1#2#3#4{
- \IfNoValueTF{#1}
- {#4{#3}}
- {
- \leavevmode
- \@begin@tempboxa\hbox{#3}
- \setlength\@tempdima{#1}
- \if_meaning:NN #4\fbox
- \setbox\@tempboxa\hb@xt@\@tempdima{
- \kern\fboxsep
- \use:c{bm@#2}
- \kern\fboxsep
- }
- \@frameb@x{\kern-\fboxrule}
- \else:
- \hb@xt@\@tempdima{\use:c{bm@#2}}
- \fi:
- \@end@tempboxa
- }
-}
-
-\def\ltx@makepicbox#1#2#3#4#5{
- #5
- {
- \vbox to#2\unitlength {
- \let:NN \mb@b\vss \let:NN \mb@l\hss
- \let:NN \mb@r\hss \let:NN \mb@t\vss
- \IfNoValueF{#3}{
- \tlist_map_variable:nNn {#3}\l_tmpa_tlp {
- \if:w s\l_tmpa_tlp
- \let:NN \mb@l \scan_stop:
- \let:NN \mb@r \scan_stop:
- \else:
- \let:cN {mb@\l_tmpa_tlp}\scan_stop:
- \fi:
- }
- }
- \mb@t
- \hb@xt@ #1\unitlength{\mb@l #4\mb@r}
- \mb@b
- \kern\z@
- }
- }
-}
-
-\DeclarePseudoArgument{boxtest}{1}
-{Before:~`#1',\hbox_set_inline_begin:N \l_tmpa_box }
-{\hbox_set_inline_end: \space the~ box:~
- \hbox_unpack_clear:N\l_tmpa_box ,~
- After:~`#1'}
-\DeclareDocumentCommand\sillyboxtest{m}{
- Testing~#1:~\UsePseudoArgument{boxtest}{#1}
-}
-
-
-\def:Npn \showgrabbedargs{\showthe\l_xparse_grabbed_args_toks}
-\CodeStop
-
-\begin{document}
-
-
-\thicklines
-
-\makebox{A}
-\makebox(1,2){B}
-\makebox(0,0)[lt]{C}
-\makebox[20pt]{D}
-\makebox[30pt][r]{E}
-
-\vspace{1cm}
-
-
-\framebox{A}
-\framebox(1,2){B}
-\framebox(0,0)[lt]{C}
-\framebox[20pt]{D}
-\framebox[30pt][r]{E}
-
-
-\typeout{Testing optional coordinates}
-
-\DeclareDocumentCommand \foo { mmo }
-{ \typeout{1:#1}
- \typeout{2:#2}
-}
-
-\show\foo
-
-\ReDeclareDocumentCommand \foo { m C{{0}{0}} m }
-{ \typeout{1:#1}
- \typeout{2:#2}
- \typeout{3:#3}
-}
-
-\show\foo
-
-\foo A (1,2) B
-
-\foo A B
-
-\typeout{Testing mandatory coordinates (gives error on second examples)}
-
-\ReDeclareDocumentCommand \foo { m c m }
-{ \typeout{1:#1}
- \typeout{2:#2}
- \typeout{3:#3}
-}
-
-\show\foo
-
-\foo A (1,2) B
-
-\foo A B
-
-\typeout{Testing normal optional arguments}
-
-
-\ReDeclareDocumentCommand \foo { mmmm o mm o }
-{ \typeout{1:#1}
- \typeout{2:#2}
- \typeout{3:#3}
- \typeout{4:#4}
- \typeout{5:#5}
- \typeout{6:#6}
- \typeout{7:#7}
- \typeout{8:#8}
-}
-
-\foo 1234[5]67[8]
-\foo 123467
-
-\show\foo
-\expandafter\show\csname\string\foo\endcsname
-
-
-\typeout{Testing optional arguments with default}
-
-\DeclareDocumentCommand \baz { O{?}mmm o mm m }
-{ \typeout{1:#1}
- \typeout{2:#2}
- \typeout{3:#3}
- \typeout{4:#4}
- \typeout{5:#5}
- \typeout{6:#6}
- \typeout{7:#7}
- \typeout{8:#8}
-}
-
-\show\baz
-\expandafter\show\csname\string\baz\endcsname
-
-\baz [1]234[5]678
-\showgrabbedargs
-\baz 234678
-\showgrabbedargs
-
-%\tracingall\tracingassigns=1
-\ReDeclareDocumentCommand \bar { mmmm mmmm m}
-{ \typeout{1:#1}
- \typeout{2:#2}
- \typeout{3:#3}
- \typeout{4:#4}
- \typeout{5:#5}
- \typeout{6:#6}
- \typeout{7:#7}
- \typeout{8:#8}
- \typeout{9:#9}
-}
-
-\show\bar
-\expandafter\show\csname\string\bar\endcsname
-
-\bar 123456789
-\showgrabbedargs
-
-\DeclareDocumentCommand\chapter{soom}
-{\typeout{a{#1}^^Jb{#2}^^Jc{#3}^^Jd{#4}^^Je}}
-
-\show\chapter
-\expandafter\show\csname\string\chapter\endcsname
-
-\typeout{1:}
-\chapter*[xxx][yyy]{zzz}
-
-\typeout{2:}
-\chapter[xxx][yyy]{zzz}
-
-\typeout{3:}
-\chapter*[xxx]{zzz}
-
-\typeout{4:}
-\typeout{\chapter*[xxx][yyy]{zzz}}
-
-
-
-\typeout{Using pseudo arguments:}
-
-\sillyboxtest{AB}{a\verb*+% $%&\+b}
-
-\typeout{Testing environments with args passed to end env}
-\typeout{****************}
-\typeout{* This works only if xparse is compiled with `perhaps'
- docstrip guard}
-\typeout{* This part of the code is not activated by default!}
-\typeout{****************}
-
-
-
-\ReDeclareDocumentCommand\chapter{soom}
-{\typeout{a{#1}^^Jb{#2}^^Jc{#3}^^Jd{#4}^^Je}}
-
-\DeclareDocumentEnvironment{hello}{ooo}
- {\typeout{B1(#1)^^JB2(#2)^^JB3(#3)^^J}}
- {\typeout{E1(#1)^^JE2(#2)^^JE3(#3)^^J}}
-
-
-\show\hello
-\expandafter\show\csname\string\hello\endcsname
-
-\show\endhello
-\expandafter\show\csname end\string\\hello\endcsname
-
-\begin{hello}[abc][aabbcc]
-\typeout{body}
-\typeout{5:}
-\chapter[xxx][yyy]{zzz}
-\end{hello}
-
-\begin{hello}[1]
-\typeout{outer body}
-\hello [2] \typeout{inner body} \endhello
-\end{hello}
-
-\stop
diff --git a/Master/texmf-dist/doc/latex/xbase/xparse.pdf b/Master/texmf-dist/doc/latex/xbase/xparse.pdf
deleted file mode 100644
index 91ef9561a57..00000000000
--- a/Master/texmf-dist/doc/latex/xbase/xparse.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/source/latex/xbase/ldcsetup.dtx b/Master/texmf-dist/source/latex/xbase/ldcsetup.dtx
deleted file mode 100644
index 7d2d729d622..00000000000
--- a/Master/texmf-dist/source/latex/xbase/ldcsetup.dtx
+++ /dev/null
@@ -1,330 +0,0 @@
-% \iffalse
-%% File: ldcsetup.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle
-%% (C) Copyright 2004-2007 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%<*driver|package>
-\RequirePackage{l3names}
-%</driver|package>
-%\fi
-\GetIdInfo$Id: ldcsetup.dtx 636 2007-09-12 20:03:06Z mittelba $
- {coding conventions and stuff}
-%\iffalse
-%<*driver>
-%\fi
-\ProvidesFile{\filename.\filenameext}
- [\filedate\space v\fileversion\space\filedescription]
-%\iffalse
-\documentclass{ltxdoc}
-\begin{document}
-\DocInput{ldcsetup.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \CheckSum{0}
-%
-% \title{The \textsf{ldcsetup} package\thanks{This file
-% has version number \fileversion, last
-% revised \filedate.}}
-% \author{DPC, FMi}
-% \date{\filedate}
-% \maketitle
-%
-% \begin{abstract}
-% Basic code shared by several other packages currently under development.
-% \end{abstract}
-%
-% \StopEventually{}
-%
-% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-% \end{macrocode}
-% \begin{macrocode}
-\RequirePackage{keyval,l3calc}
-\ExplSyntaxOff
-% \end{macrocode}
-%
-% \section{Ignoring White Space}
-% Within a package, or in a document preamble, you can use
-% |\IgnoreWhiteSpace| this makes white space ignored, and |@|
-% a letter, and |~| a space character. It lasts until the end of the
-% current package or preamble.
-%
-%% Puts an ignored space at the end of the line, so `|\ |' does the right
-% thing. (Perhaps should instead just change catcode of |^^M|)
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% The new syntax requires |:| and |_| to be letters; instead of
-% putting that into |\IgnoreWhiteSpace| we make a new command which
-% helps to gradually change packages from old to new syntax.
-% \begin{macrocode}
-\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
-%FMi fix is not properly reset
- \endlinechar=13\relax
- }%
-%%% ????
-% this needs further work, don't think it is working
- \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
-% \end{macrocode}
-%
-% Do it for this package.
-% \begin{macrocode}
-%\InternalSyntaxOn
-\ExplSyntaxOn
-% \end{macrocode}
-%
-% \section{KV fixes}
-% Allow\footnote{Not needed now?} key names to start with |\|.
-% \begin{macrocode}
-\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,}
-% \end{macrocode}
-%
-% Make KV |#| safe.
-% \begin{macrocode}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\newtoks\KV@toks
-% \end{macrocode}
-%
-% \begin{macrocode}
-\def\KV@@sp@c#1\@nil#2\relax#3{\KV@toks{#1}\edef#3{\the\KV@toks}}
-% \end{macrocode}
-%
-% Generate error messages on missing `,'.
-%
-% More exactly if two `=' appear after a key generate an error.
-% The current KV just silently ignores everything after the second `='.
-% \begin{macrocode}
-\def\KV@equal{=}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\def\KV@erry{\expandafter\KV@errx\meaning\@tempd\relax ignored\MessageBreak
- missing~comma~in~`\expandafter\strip@prefix\meaning\@tempb'~?}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\def\KV@errx#1>#2==\relax{%
- `#2' }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-%
-% \LaTeX\ style error message.
-% \begin{macrocode}
-\def\KV@error#1#2{\PackageError{keyval}{#1}{#2}}
-% \end{macrocode}
-%
-% Instead of doing a full KV parse, and evaluating all the keys,
-% you might want to parse a parameter list, even for undefined keys,
-% removing spaces, splitting up the `,` and `=' and resolving cases
-% where no value is supplied. This is used in |\DeclareGenericFunction|
-% which \emph{defines} a set of keys via such a KV parse.
-%
-% A setting of |, key = value ,| will result in |\KV@elt{key}{value}|
-% being added to the list, a seting of |, key ,| will result in
-% |\KV@default@elt{key}| being added. At the end of the parse the list
-% is executed. No keys are checked at this stage (so no csnames are used
-% up) the two |\KV|\ldots|@elt| commands must be defined as appropriate.
-%
-% \begin{macrocode}
-\def\KV@parse#1{
- \begingroup
-% \end{macrocode}
-%
-% Locally fudge |\KV@@def| to just add to a token register
-% rather than make a definition.
-% \begin{macrocode}
-\def\KV@@sp@c##1\@nil##2\relax##3{\addto@hook##3{{##1}}}
-% \end{macrocode}
-%
-% Locally fudge |\KV@split| to just add to a token register
-% rather than execute the code for the found keys.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-%
-% Initialise
-% \begin{macrocode}
- \KV@toks{}
-% \end{macrocode}
-% Do the parse
-% \begin{macrocode}
- \KV@do#1,\relax,
-% \end{macrocode}
-% Evaluate the token register outside the group.
-% \begin{macrocode}
- \expandafter
- \endgroup
- \the\KV@toks}
-% \end{macrocode}
-%
-% \section{Calc fixes}
-%
-% Count Register assignments via calc. Here we also provide some
-% global versions since a normal global prefix won't have any effect.
-% \begin{macrocode}
-\let:NN \SetInternalCounter \calc_int_set:Nn
-\let:NN \GSetInternalCounter\calc_int_gset:Nn
-% \end{macrocode}
-%
-%
-% \section{Misc code that is best collected in one place}
-%
-% This section will receive odd code that would be of potential use to
-% other packages and should eventually made it to the kernel
-% (perhaps).
-%
-% \begin{macro}{\UndeclareRobustCommand}
-% Remove a robust command from memory if it isn't used any
-% longer. Of course this doesn't free the hash table but at least
-% the space gets reclaimed.
-% \begin{macrocode}
-\def\UndeclareRobustCommand#1{%
- \cs_gundefine:N #1
- \exp_args:Nc \cs_gundefine:N {\cs_to_str:N #1~}
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \Finale
-%
diff --git a/Master/texmf-dist/source/latex/xbase/template.dtx b/Master/texmf-dist/source/latex/xbase/template.dtx
deleted file mode 100644
index 68e27966fa4..00000000000
--- a/Master/texmf-dist/source/latex/xbase/template.dtx
+++ /dev/null
@@ -1,2442 +0,0 @@
-% \iffalse
-%% File: template.dtx (C) Copyright 1999-2001 David Carlisle, Frank Mittelbach
-%% (C) Copyright 2004-2007 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%<*driver|package>
-\RequirePackage{l3names}
-%</driver|package>
-%\fi
-\GetIdInfo$Id: template.dtx 652 2007-09-21 20:35:36Z morten $
- {template}
-%\iffalse
-%<*driver>
-%\fi
-\ProvidesFile{\filename.\filenameext}
- [\filedate\space v\fileversion\space\filedescription]
-%\iffalse
-\documentclass{ltxdoc}
-\makeatletter
- \newenvironment{decl}[1][]%
- {\par\small\addvspace{4.5ex plus 1ex}%
- \vskip -\parskip
- \ifx\relax#1\relax
- \def\@decl@date{}%
- \else
- \def\@decl@date{\NEWfeature{#1}}%
- \fi
- \noindent\hspace{-\leftmargini}%
- \begin{tabular}{|l|}\hline\ignorespaces}%
- {\\\hline\end{tabular}\nobreak\@decl@date\par\nobreak
- \vspace{2.3ex}\vskip -\parskip\@afterheading}
-\makeatother
-
- \begin{document}
- \catcode`\_=11
- \catcode`\:=11
- \DocInput{template.dtx}
- \end{document}
-%</driver>
-%
-%
-% \fi
-%
-%
-% \CheckSum{0}
-%
-% \title{The \textsf{template} package\thanks{This file
-% has version number \fileversion, last
-% revised \filedate.}}
-% \author{DPC, FMi}
-% \date{\filedate}
-% \maketitle
-%
-% \changes{0.06}{1998/12/17}{generic functions reborn as templates}
-%
-% \tableofcontents
-%
-% \section{Introduction}
-% A \emph{Template} is a named `function' that has a fixed number
-% of \emph{mandatory arguments} and an additional set of \emph{keys}
-% or `named attributes' that are set in a `key value list'. That is,
-% a comma separated set of assignments of the form:\\
-% \meta{key$_1$} |=| \meta{value$_1$} |,|
-% \meta{key$_2$} |=| \meta{value$_2$} \ldots
-%
-% More specific instances of the template may be declared by
-% specifying settings of the parameters. The key value list is parsed
-% at the time the instance is declared, and an `internal' set of
-% parameter assignments is passed to the template code. It is normally
-% not parsed at run-time, though it is possible to enforce this
-% behaviour.
-%
-% Templates have a \emph{type} and a \emph{name}. Templates
-% of the same type have the same argument and parameter
-% structure. That is, templates of the same type are expected to be
-% exchangeable semantically. (However, except for checking that
-% templates of the same type always have the same number of arguments
-% this is not enforced by the code.)
-%
-% A template type is declared via the |\DeclareTemplateType|
-% declaration which takes two arguments: the name for the type and the
-% number of arguments a template of this type requires.
-%
-% Templates are declared via the |\DeclareTemplate|
-% command which takes five arguments
-% \begin{itemize}
-% \item The \emph{type} of the template (no |\|).
-% \item The \emph{name} of the template (no |\|).
-% \item The number of arguments for the template (same as on type
-% declaration).
-% \item A list declaring the keys accepted by the template,
-% with information about the action to take when the key is specified
-% with a value.
-% \item The code for the template. This may be arbitrary \TeX\
-% code. At some point it should execute |\DoParameterAssignments|
-% to run the parameter assigments.
-%
-% The mandatory arguments are accessed via |#1|, |#2|, \ldots
-% \end{itemize}
-%
-%
-% Each element of the key specification list is of the form:
-% \begin{flushleft}
-% \meta{key name} |=|
-% \meta{key type} \meta{optional default} \meta{internal code}
-% \end{flushleft}
-%
-% The \meta{key types} are essentially specified by giving a symbolic
-% representation of the assignment function to be used by \TeX.
-%
-% Currently the possibilities are
-%
-% \begin{center}\catcode`|=12
-% \begin{tabular}{l|ll|l}
-% key type& letter& internal code& argument form\\\hline
-% Command & f\emph{n}&command name & command definition\\
-% name & n & command name & command definition\\
-% length & l & length register& calc length syntax\\
-% fake length & L & command name & calc length syntax\\
-% count & c & count register& calc count syntax\\
-% fake count & C & command name & calc count syntax\\
-% boolean & b & name of \verb|\newif| switch& true or false\\
-% switch & s & \marg{true code}\marg{false code}& true or false\\
-% instance& i\marg{type}& command name& instance of this \emph{type}\\
-% direct & x & Internal code& any\\
-% general & g & general code & any
-% \end{tabular}
-% \end{center}
-%
-% In addition, any of these types may be prefixed by |+| to
-% denote a global assignment (described below).
-% |f| takes a digit from 0--9 to denote the number of arguments.
-% |n| is in fact the same as |f0|. When an instance is declared
-% The value assigned to the key should be the definition of
-% the command, using |#1|\ldots|#9| to denote the specified arguments.
-%
-% |c| takes an internal form a count register,
-% not a \LaTeX\ counter name.
-%
-% For |f|, |n|, |l|, and |c|, the assignment is done twice, once
-% at the time an instance is \emph{declared}. (This may involve
-% using \textsf{calc} expresions. Then the `primitive assignment'
-% of the value (not using calc) is copied to the internal parameter
-% list, to be executed when an instance is run. Sometimes you need the
-% expression to be evaluated at the time an instance is run rather
-% than the time it is declared. For example it may be an expression
-% involving some values that are not fixed throughout a document.
-% In this case the instance declaration may give a value in the
-% form |\DelayedEvaluation|\marg{calc expression}. In this case
-% the value is not evaluated when the instance is declared, and
-% instead the entire expression is copied to the `internal parameter
-% list' and is evaluated whenever the instance is used.
-%
-% |L| and |C| take the same value types as |l| and |c| but the internal
-% assignments are to macros not registers.
-%
-% Keys declared with |b| and |s| each take values either \emph{true} or
-% \emph{false}. if the key zzz is declared with |b| then specifying
-% |zzz=true| will essentially pass |\zzztrue| to the internal parameter
-% list (although in fact |\zzztrue| need not be defined) . If instead
-% zzz had been declared via |s|, then |zzz=true| would pass the tokens
-% of the \marg{true code} to the internal parameter list.
-%
-% If a key is specified as |x|, then when used the \emph{internal code}
-% will be copied to the internal parameter lists. This code may use |#1|
-% to denote the value supplied to the key in the instance declaration.
-% Note that this code is \emph{only} copied at the time the instance is
-% declared. It is not executed at this time. It is executed when the
-% instance is executed.\footnote{Despite the question of whether or
-% not x and g are still necessary these days, they have the wrong
-% `names' since x is the one that is not executed during delcaration
-% while g is.}
-%
-% If a key is declared with |g| then the code is run at the time the
-% instance is declared. By default \emph{nothing} is passed to the
-% internal parameter list. This code may use |#1| to denote the
-% value that will be supplied when an instance is declared.
-% Any code that should be run when an instance is executed should
-% be explicitly passed to the internal parameter list using
-% |\toks_add_right:Nn\l_TP_KV_assignments_toks{|\ldots|}|
-%
-% A key declared with |i|\marg{type} takes as value the name of a
-% declared instance of that type. The command token associated with
-% the key will store a command essentially equivalent to a call
-% to |\UseInstance|\marg{type}\marg{name}, but in a slightly optimised
-% internal form.
-% As an exception to this rule the replacement code may be of the form
-% |\UseTemplate| followed by the key settings for the template
-% but without the mandatory arguments. In this case the `inner'
-% instance declaration is `pre compiled' and the token assigned to
-% the store the value assigned to this key will execute an instance
-% of the template directly, it will not re-parse the keyword settings
-% each time the instance is used.
-%
-% \section{Commands}
-%
-%
-% \subsection{Template declaration commands}
-%
-% \begin{decl}
-% |\DeclareTemplateType| \marg{type}\marg{num}
-% \end{decl}
-% Declare a template type.
-%
-% \begin{decl}
-% |\DeclareTemplate|
-% \marg{type}\marg{tname}\marg{num}\marg{keyspec}\marg{code}
-% \end{decl}
-% Declare a template \meta{tname} of type \meta{type} with the set of
-% keys as defined by \meta{keyspec}. From this template instances can
-% be declared using |\DeclareInstance| At runtime such instances will run
-% \meta{code} and expect \meta{num} mandatory arguments (same number
-% for all templates of one type).\footnote{The \meta{num} argument is
-% redundent as it can be deduced from the type. However, for practical
-% reasons it seems better to keep that information with each
-% individual template declaration.}
-%
-% \begin{decl}
-% |\DeclareRestrictedTemplate|
-% \marg{type}\marg{new-tname}\marg{old-tname}\marg{keyvals}
-% \end{decl}
-% Declare as new template \meta{new-tname} for type \meta{type} by
-% taking template \meta{old-tname} as the basis and setting one or
-% more of its keys to specific values.
-%
-% \begin{decl}
-% |\DoParameterAssignments|
-% \end{decl}
-% The list of key value assignments made (and saved) during template
-% declaration is evaluated at this point in the template code.
-%
-%
-% \subsection{Instance declaration commands}
-%
-% \begin{decl}
-% |\DeclareInstance| \marg{type}\marg{iname}\marg{tname}\marg{keyvals}
-% \end{decl}
-% Declare an instance of type \meta{type} named \meta{iname} build
-% from using template \meta{tname} with key settings as given by
-% \meta{keyvals}.
-%
-% \begin{decl}
-% |\DeclareCollectionInstance|
-% \marg{collection}\marg{type}\marg{iname}\marg{tname}\marg{keyvals}
-% \end{decl}
-% Same as |\DeclareInstance| except that this instance is only active
-% when for the type \meta{type} the collection \meta{collection} was
-% selected via |\UseCollection|. E.g., within the frontmatter one
-% could make all headings behave differently by defining collection
-% instances for template type `head'.
-%
-% \subsection{Key value commands}
-%
-% \begin{decl}
-% |\DelayEvaluation|\marg{code}
-% \end{decl}
-% Used in the value spec for an instance to declare that the value
-% \meta{code} should not be evaluated at declaration time but at
-% run-time. Can also be used in the defaults for keys (given in square
-% brackets) in the declaration of templates.
-%
-% \begin{decl}
-% |\MultiSelection| \meta{counter} \marg{cases} \marg{else}
-% \end{decl}
-% Used in the value spec for an instance key to declare that the value of
-% this key depends on the current setting of \meta{counter} at run-time.
-% The \meta{cases} argument is a comma-separated list of ``values'',
-% the \meta{else} argument a single ``value''. If at run-time
-% \meta{counter} has the value $i$ then the $i$-th element of the
-% \meta{cases} list is selected. If that does not exist the
-% \meta{else} case is returned.
-%
-%
-% \subsection{Processing commands}
-%
-% \begin{decl}
-% |\UseTemplate| \marg{type}\marg{tname}\marg{keyval}
-% \end{decl}
-% Execute a template \meta{tname} of type \meta{type} at run-time
-% using \meta{keyvals} as the value assignments for its keys. In this
-% case the keys are evaluated at run-time thus this method is far
-% slower than using a predeclared instance of this template (see
-% below). This command can also appear as the value for a key of type
-% `i' in which case the evaluation happens at declaration time of the
-% template that contains this key!
-%
-%
-% \begin{decl}
-% |\UseInstance| \marg{type}\marg{iname}
-% \end{decl}
-% Run the instance \meta{iname} of template type \meta{type}. If a
-% collection is in force see if there is a collection instance of name
-% \meta{iname} and if so run that instead.
-%
-% \begin{decl}
-% |\UseCollection| \marg{type}\marg{collection}
-% \end{decl}
-% Declare that from now on (normal scoping rules) the collection
-% \meta{collection} for template type \meta{type} is in force. This
-% means that a call to |\UseInstance| will first check if there is a
-% collection instance defined, and if so use that instance, otherwise
-% use the normal instance.
-%
-%
-% \subsection{Test commands}
-%
-% \begin{decl}
-% |\IfExistsInstanceTF| \marg{type}\marg{iname}\marg{true}\marg{false}
-% \end{decl}
-% Test if for template type \meta{type} an instance with name
-% \meta{iname} exists. Select \meta{true} or \meta{false} code
-% accordingly.
-%
-%
-%
-% \section{Examples of template key types}
-%
-% The general syntax for key specification in templates (fourth argument
-% of the command |\DeclareTemplate|) is:
-%\begin{flushleft}
-%| {| \\
-%| | \meta{key-name$_1$} |=|\meta{key-type$_1$}
-% \meta{optional-default$_1$} \meta{storage-bin$_1$}|,|\\
-%| | \meta{key-name$_2$} |=|\meta{key-type$_2$}
-% \meta{optional-default$_2$} \meta{storage-bin$_2$}|,|\\
-%| ...|\\
-%| }|
-%\end{flushleft}
-% In this section we look at all possible key types and give examples
-% for them.
-%
-%
-% \subsection{Attributes that receive names as values}
-%
-% The type |n| expects to receive a \LaTeX{} name as a value. Used,
-% for example, to specify the name of a \LaTeX{} counter to use.
-%\begin{verbatim}
-% heading-id =n \heading@id,
-% counter-id =n [\DelayEvaluation{\heading@id}] \heading@counter,
-%\end{verbatim}
-% Notice the use of |\DelayEvaluation| in the default of
-% |counter-id|. It is necessary to make the default the token
-% |\heading@id| if we want to inherit the value from the |heading-id|
-% key. Otherwise it gets value of |\heading@id| at the time the
-% instance is declared.
-%
-%
-% \subsection{Attributes that receive functions as values}
-%
-%
-% The type |f|\meta{num} expects a function with \meta{num} arguments
-% as a value. The arguments are denoted by |#1|, |#2|, etc. In most
-% cases either |f0| (for declarations) or |f1| (to format one argument) are
-% needed.
-%\begin{verbatim}
-% initial-font =f0 \initial@font,
-% initial-format =f1 [#1] \initial@boxhandling,
-%\end{verbatim}
-%
-% \subsection{Attributes that receive dimensions as values}
-%
-% As far as specifying instances the |l| and |L| type behave
-% identically. They differ only in the type of internal storage-bin
-% they need: |l| expects a length register while |L| expects an
-% ordinary macro name and assigns its value via |\def:Npn |.
-%\begin{verbatim}
-% pre-sep =l \topsep,
-% post-sep =L \botsep,
-%\end{verbatim}
-%
-%
-%
-% \subsection{Attributes that receive integers as values}
-%
-% The |c| and |C| type receive integers as values. Again either of
-% them can be transparently used. In case of |c| the
-% \meta{storage-bin} has to be a \TeX{} count register not a \LaTeX{}
-% counter name, i.e., set up via |\newcount|. (\LaTeX{} counters can
-% be used as well if they are accessed via their internal name, i.e.,
-% via |\c@|\meta{\LaTeX-counter})
-%\begin{verbatim}
-% pre-penalty =c \@beginparpenalty,
-% penalty =C \hmaterial@penalty,
-%\end{verbatim}
-%
-%
-%
-% \subsection{Attributes that receive template instances as values}
-%
-% The type |i|\marg{type} takes as value the name of a declared
-% instance of that type. The \meta{storage-bin} associated with the
-% key will store a command essentially equivalent to a call to
-% |\UseInstance|\marg{type}\marg{name}, but in a slightly optimised
-% internal form.
-%
-% As an exception to this rule the replacement code may be of the form
-% |\UseTemplate| followed by the key settings for the template but
-% without the mandatory arguments. In this case the `inner' instance
-% declaration is `pre compiled' and the token assigned to the store
-% the value assigned to this key will execute an instance of the
-% template directly, it will not re-parse the keyword settings each
-% time the instance is used.
-%\begin{verbatim}
-% justification-setup =i{justification} \list@justification,
-%\end{verbatim}
-%
-% Usage within an instance declaration is either
-%\begin{verbatim}
-% justification-setup = raggedright,
-%\end{verbatim}
-% i.e., name of a declared instance or a call to |\UseTemplate|
-%\begin{verbatim}
-% justification-setup = \UseTemplate{justification}{TeX}
-% { startskip = 0pt, ... },
-%\end{verbatim}
-%
-%
-%
-% \subsection{Attributes that receive true or false values}
-%
-% The type |s| expects the strings |true| or |false| as values. In
-% this case the declaration has no \meta{storage-bin}. Instead the
-% declaration consists of two brace groups containing code. Depending
-% on the value one of the groups gets copied verbatim into the
-% internal parameter list of the instance and gets executed at
-% run-time at the point where |\DoParameterAssignments| is seen.
-%\begin{verbatim}
-% item-implicit-boolean =s
-% { \def:Npn \item@implicit@code{\item\relax} }{},
-% numbered-boolean =b [true] @heading@nums,
-%\end{verbatim}
-%
-%
-% \subsection{Attributes that accept any value}
-%
-% The type |g| is a low-level specification which contains arbitrary
-% code in place of the \meta{storage-bin}. This code is evaluated at
-% declaration time of the instance and by default \emph{nothing} is
-% passed to the internal parameter list (this has to happen explicitly
-% from within the code). |#1| may be used to access the value
-% specified.
-%
-% The main purpose for this type is of historical nature (originally
-% most of the other types have been implemented internally using |g|).
-%
-% The type |x| also requires code in place of the \meta{storage-bin}.
-% However with this type all of the code is copied unevaluated to the
-% internal parameter list. There are some applications for this type
-% when implementing customisable defaults. However, it is likely that
-% it will not survive a final release.
-%\begin{verbatim}
-% generic-key =g \typeout{#1},
-% extra-assigns =x \typeout{#1},
-%\end{verbatim}
-%
-%
-%
-%
-%
-%
-% \section{A complete example}
-%
-% The following example shows a sketch of a template for typesetting
-% captions to be used as part of a larger mechanism setting whole
-% floats.\footnote{I made it up while I went along so if you spot the
-% ``missing brace'' or some other blunder tell me, FMi.}
-%
-% We declare a template type \texttt{caption} then define an example
-% template for that type and finally produce some instances from that.
-%
-% \subsection{Declaring the template type}
-%
-% To define the template type we first have to ask ourselves what
-% information would be varying each time such a template is used? A
-% potential answer could be the following:
-% \begin{itemize}
-% \item
-% The float name, e.g., `Table' or `Fig.' etc.
-% \item
-% The float
-% number e.g., `10' or `3--c' etc.
-% \item
-% The actual caption text as specified in the document.
-% \end{itemize}
-% Since the above items would be differed in each instantiation of
-% such a template we would pass them as mandatory argument to the
-% template.
-%
-% Are there others? Possibly. Here are two more that seem to be
-% useful, at least in a number of cases:
-% \begin{itemize}
-% \item
-% The text of the legend in document classes that distinguish
-% between caption text (heading to the figure/table) and legend
-% (explanatory material)
-% \item
-% Measure to which the caption should be typeset.
-% \end{itemize}
-% The last one of these might need some extra explanation. Suppose a
-% design requires that the caption width is decided depending on the
-% width of the table of figure, e.g., the caption is supposed to
-% typeset below some illustration and should not be wider than that
-% illustration, or the caption is typeset aside to the illustration
-% using the remaining space. In that case the process that formats the
-% whole float needs to communicate with the current template to pass
-% that (varying) information along. Of course, that could happen by
-% using global variables, e.g., the outer process sets the measure as
-% desired before calling the caption formatting template. What makes
-% more sense is likely to be a matter of taste but it also has to do
-% with the precise semantics of the template type. Staying with our
-% example: if the the semantics of the template type \texttt{caption}
-% is supposed to produce a formatted box (in \TeX{} terms) then we
-% should pass the measure as an argument if we ever intend to allow
-% for variations. If on the other hand the semantics are to format a
-% certain set of text into the current galley (which has measure of
-% its own) then a measure argument would not belong to this template
-% type.
-%
-% Are there other variations sensible? Yes, for example, instead of
-% passing a fixed string like ``Fig.'' as the first argument one could
-% pass an abstract float type identifier and let the template worry to
-% deduce from that information what fixed string to produce.
-%
-% Another question: why should we pass the fixed text (or an abstract
-% identifier from which it can be deduced) and the number as separate
-% arguments to the template instead of passing a combined string (like
-% it is done in the |\@makecaption| command of \LaTeXe{})? Answer:
-% because this allows to build templates that can individually
-% manipulate both bits of information, e.g., to format the number in a
-% different font, etc.
-%
-% So what are the conclusions of this discussion? Defining the
-% semantics of a template type is difficult and often needs several
-% trials to come up with something that is covering the anticipated
-% use. There is clearly not a cardinal way for defining template
-% types; how the overall separation into smaller units is done is
-% partly a matter of taste and partly a matter of the major layout
-% characteristics that one tries to support.
-%
-% Returning to our example: let's assume we settle for the first four
-% arguments, i.e., the calling template is responsible for setting the
-% measure for the caption text if necessary.
-%
-% What we also have to do is to define (at least for ourselves) what
-% data the arguments accept and what their semantics are. An informal
-% summary of that could be the following:
-% \begin{center}
-% \begin{tabular}{rrl}
-% \textit{Arg} & \textit{Data Type} & \textit{Description} \\[3pt]
-% 1 & text & fixed float description
-% \\
-% 2 & text/|\NoValue| & float number
-% \\
-% 3 & text & caption text
-% \\
-% 4 & text/|\NoValue| & legend text
-% \\
-% \end{tabular}
-% \end{center}
-% The second and the fourth argument are allowed to be missing (i.e.,
-% can get |\NoValue| passed as a value). Note that the empty string in
-% case of a text argument is different from |\NoValue|.
-%
-% We further declare that it is permissible for a template of this
-% type to ignore the information provided by all arguments except 3,
-% i.e., the caption text.
-%
-% Finally the result of the template formatting should is to typeset
-% text into a current galley (paragraph mode in \LaTeX{} lingua).
-%
-% All the above is semantic information that (at least right now) is
-% not being enforced by declaring a template type (except for the
-% number of arguments) but each template of a certain type is supposed
-% to conform to this specification nonetheless.\footnote{To make this
-% even clearer we are thinking of extending the template type
-% declaration with another argument in which one has to formally or
-% informally (?) specifies information like the one in the table
-% above.}
-%
-% This finally leads to the following declaration:
-%\begin{verbatim}
-%\DeclareTemplateType{caption}{4}
-%\end{verbatim}
-%
-% \subsection{Defining a first template}
-%
-% We start by defining a simple template of type \texttt{caption}
-% which roughly formats a caption like those being presented in
-% \LaTeXe{}'s article class, i.e., the caption is typeset as a
-% paragraph if it is longer than a single line, otherwise it is
-% centered. The legend even if present is ignored. Above and below we
-% give the designer the possibility to add some space.
-%
-% In fact the examples is more or less identical in code to
-% |\@makecaption| except that if the second argument (i.e., the
-% number) is |\NoValue| it and its preceding space\footnote{For those
-% who wonder: spaces are by default ignored within definitions when
-% the new packages are used due to a command \texttt{\textbackslash
-% InternalSyntaxOn}, do get a normal space one has to use
-% \texttt{\textasciitilde} and to obtain an unbreakable space
-% \texttt{\textbackslash nobreakspace}.} gets ignored.
-%
-% We start by declaring the template \texttt{toosimple} of type
-% \texttt{caption} having four mandatory arguments (as described in
-% the discussion of the template type).
-%\begin{verbatim}
-%\DeclareTemplate{caption}{toosimple}{4}
-%\end{verbatim}
-% The next argument of |\DeclareTemplate| lists all keys for the
-% template. In this case we have keys for the vertical spaces above
-% and below. We make them type |L| to save on registers but with a bit
-% of care we could also have used scratch registers like |\@tempskipa|
-% etc. Their default values are both zero.
-%\begin{verbatim}
-% {
-% above-skip =L [0pt] \caption@above@skip ,
-% below-skip =L [0pt] \caption@below@skip ,
-% }
-%\end{verbatim}
-% The final argument of |\DeclareTemplate| contains the actual
-% processing code. We start with looking at the second mandatory
-% argument (caption number) to find out if it is |\NoValue| and
-% depending on the result define a helper command |\caption@start|.
-%\begin{verbatim}
-% {
-% \IfNoValueTF{#2}
-% { \def:Npn \caption@start{#1:~} }
-% { \def:Npn \caption@start{#1~#2:~} }
-%\end{verbatim}
-% Having dealt with the prelims we now run |\DoParameterAssigments| at
-% which point the keys of the template are made available, e.g., at
-% this point all those right hand containers such as
-% |\caption@above@skip| get assigned the value specified in an
-% instantiation of the template. (That scheme allows to do preliminary
-% processing up front, e.g., defaults for the keys could be assigned
-% prior to that point in which case they are overwritten if the
-% template instance specifies a different value. the use of specifying
-% defaults via the |[..]| syntax as done above is slightly faster at
-% run-time but needs more memory.)
-%\begin{verbatim}
-% \DoParameterAssigments
-%\end{verbatim}
-% The rest of the code should look familiar to anybody who ever looked
-% at \texttt{article.cls}. The only point worth mentioning are the
-% |\relax| commands after |\caption@above@skip| and
-% |\caption@below@skip|. Since we have decided to use |L| as key type
-% these commands are macros and not registers containing the
-% dimensions as strings. This means that we have to be careful to
-% ensure that \TeX{} knows where the dimension ends. In certain cases
-% text following such a command might be mistaken as being part of the
-% dimension (e.g., if followed by the word \texttt{plus}, etc.). In
-% the code below this could only happen for the second |\vskip| but it
-% is good practice to always add a terminating |\relax| to avoid such
-% hidden traps.
-%\begin{verbatim}
-% \vskip \caption@above@skip \relax
-% \sbox \@tempboxa {\caption@start #3}
-% \ifdim \wd\@tempboxa >\hsize
-% \caption@start #3\par
-% \else
-% \global \@minipagefalse
-% \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}
-% \fi
-% \vskip \caption@below@skip \relax
-% }
-%\end{verbatim}
-%
-% Why is the above template of not much use? Simply because it doesn't
-% offer any flexibility to declare different designs. The only
-% alteration offered to the designer is to modify the space above and
-% below the caption, e.g., the following declaration would mimic the
-% definition within the \texttt{article.cls} class of \LaTeXe :
-%\begin{verbatim}
-%\DeclareInstance{caption}{article}{toosimple}
-% {
-% above-skip = 0pt,
-% below-skip = 10pt,
-% }
-%\end{verbatim}
-% And that's all that can be manipulated. All items that people asking
-% to change, e.g., not having a colon after the number, using
-% different fonts and font sizes, etc.\ are still hard-wired and thus
-% inaccessible. So we have to do better if we want to make use of the
-% power the template mechanism offers.
-%
-%
-%
-% \subsection{Defining a better template}
-%
-% First step in defining better templates is to ask ourselves a couple
-% of questions:
-% \begin{itemize}
-% \item What are the main characteristics of the layout the template
-% is supposed to support?
-% \item What are the elements that we want to allow (or can allow) the
-% designer to modify?
-% \end{itemize}
-%
-% Take the first question first: the layout supported by the template
-% of the previous section had as its main characteristics that it
-% would center the caption if it would fit in a single line in the
-% current measure. We could consider this being an unchangable
-% characteristic of the layout this template produces (and a designer
-% would need to use a different template of type \texttt{caption} if a
-% design compatible with this restriction is desired) or we could try
-% to make our template smarter by adding bells and wistles that allow
-% the designer to say stuff like:
-%\begin{verbatim}
-% one-line-format = \hfil #1 \hfil,
-%\end{verbatim}
-% or
-%\begin{verbatim}
-% one-line-action = center,
-%\end{verbatim}
-% depending on how we intend to offer changing the behavior of the
-% template. Like when trying to define sensible template types we have
-% no single road to heaven (and probably as many to hell) --- it has a
-% lot to do with how we think about design.
-%
-% My advice, after having tried to work with these concepts for a
-% while, is to keep templates simple in so far as that most of not all
-% attribute for a template should be relevant for the design. In other
-% words, if you have attributes that, depending on their setting, make
-% half of the other attributes not applicable then it may be
-% appropriate to think about providing several templates instead. To
-% give an example from \LaTeXe : instead of having |\@startsection|
-% deal with both vertical heads and run-in heads provide individual
-% templates. (|\@startsection| is this famous command where design
-% switches are build in by making dimensions negative to signal
-% something and afterwards use the absolute value.)
-% Another way to look at this is to say that a template should
-% normally not contain large amounts of code which is only selected in
-% a subset of attribute settings.
-%
-% As said before there are no golden rules, it is perfectly possible
-% to make hugely complicated templates that solve every possible
-% aspect of layout one could think of in one go --- it is just that
-% with keeping it more simple one can get the same functionality with
-% less headaches for the template writer as well as the template user
-% later on.
-%
-% Returning to our example: allowing to handle the case of a single
-% line caption specially could well be considered part of the
-% template. In contrast: layouts that would put the caption number
-% sideways, i.e., which would need totally different internal coding
-% should probably be coded as a separate template of type
-% \texttt{caption}.
-%
-% So for our next example template we settle for the fixed caption
-% text plus number (if any) being at the beginning of the variable
-% caption text (coming from the document) and being together formatted
-% as some sort of a pargraph. In case of the whole caption being a
-% single line we allow the designer to specify how to lay it out
-% (e.g., centered, flush left, etc.). If there is a legend it will get
-% formatted by a vertical space followed by the legend formatted as
-% another paragraph.
-%
-% More precisely we allow for the following bells and wistles:
-%\begin{verbatim}
-%\DeclareTemplate{caption}{lesssimple}{4}
-% {
-%\end{verbatim}
-% The designer can specify the space above and below the caption like
-% we did in our first example.
-%\begin{verbatim}
-% above-skip =L [0pt] \caption@above@skip ,
-% below-skip =L [0pt] \caption@below@skip ,
-%\end{verbatim}
-% Regarding the caption number we support the case where no number is
-% present (the value being |\NoValue|) as well as the number being
-% present. For both cases the designer has to specify what formatting
-% should be attached. By default all is being typeset in the font the
-% whole caption is presented but if there is a need for it the
-% designer can use the following keys to attach special formatting
-% devices to each particular item beside specifying special spacing
-% information or replacing the default colon after the number with
-% something else.
-%\begin{verbatim}
-% number-format =f2 [#1~#2:~] \caption@number@format,
-% nonumber-format =f1 [#1:~] \caption@nonumber@format,
-%\end{verbatim}
-% If the caption is fitting onto a single line we make it possible
-% for the designer to specify how this single line should be
-% positioned (the default is to center the line).
-%\begin{verbatim}
-% single-line-format =f1 [\hfil#1\hfil] \caption@single@line@format,
-%\end{verbatim}
-% The font for the caption (including the fixed text and the number
-% unless specified differently above) is going to be the one decided
-% by the next key.
-%\begin{verbatim}
-% caption-font =f0 [\normalfont] \caption@font,
-%\end{verbatim}
-% The next attribute deserves some extra explanation: here we make use
-% of an interface which is explained in more detail when we reveil the
-% support for galley formatting.\footnote{Guess I have to apologize
-% for the fact that i partly make use of that interface in this
-% example while on other occasions (like the use of vertical spacing)
-% within the example I do not---consistency around midnight is not my
-% strength I fear (FMi).} In a nutshell the template type \texttt{hj}
-% (hyphenation \& justification) allows one to define a) the
-% justification concepts applied to the upcoming paragraphs, e.g.,
-% whether they should be set flush left, adjusted, first line
-% centered, etc.\ b) the linebreaking strategy used and c) the
-% hyphenation rules which should apply. All this is done by selecting
-% an appropriate (predefined) instance of this type as will hopefully
-% become somewhat clearer in the example instances shown below.
-%\begin{verbatim}
-% caption-hj-setup =i {hj} [default] \caption@hj@instance,
-%\end{verbatim}
-% In case there is a legend to format we give the designer the
-% possibility to specify by how much vertical space it should be
-% separated from the preceding paragraph (i.e., the caption text). The
-% attributes for font and hj setup are comparable to those for the
-% caption text itself (except that they will only apply to the
-% legend). The only addition is the key \texttt{legend-text} which is
-% allowed to take a fixed text (plus any formating and spacing for it)
-% which will be added to the front of the legend in case it is
-% provided at all (by default it is empty).
-%\begin{verbatim}
-% legend-sep =L [0pt] \caption@legend@sep ,
-% legend-text =f0 [] \caption@legend@text,
-% legend-font =f0 [\normalfont] \caption@legend@font,
-% legend-hj-setup =i {hj} [default] \caption@legend@hj@instance,
-% }
-%\end{verbatim}
-% The actual code for the template should hold few if any
-% surprises. In fact it is more or less identical to the one of the
-% first template example, except that now we have now taken out some
-% of the hardwired decisions and placed them into attributes.
-%\begin{verbatim}
-% {
-% \IfNoValueTF{#2}
-% { \def:Npn \caption@start{\caption@number@format{#1}{#2}} }
-% { \def:Npn \caption@start{\caption@nonumber@format{#1}} }
-% \DoParameterAssigments
-% \vskip \caption@above@skip \relax
-%\end{verbatim}
-% To properly measure the caption to determine if it fits a single
-% line we have to set it in the right font, so here as well as below
-% we have to apply |\caption@font|.
-%\begin{verbatim}
-% \sbox \@tempboxa {\caption@font \caption@start #3}
-% \ifdim \wd\@tempboxa >\hsize
-% \begingroup
-% \caption@font \caption@hj@instance
-% \caption@start #3\par
-% \endgroup
-% \else
-% \global \@minipagefalse
-% \hb@xt@\hsize{\caption@single@line@format{\box\@tempboxa}}
-% \fi
-%\end{verbatim}
-% To decide whether or not we have to set any legend we have to test
-% |#4| for being |\NoValue|. This part of the code was not present in
-% the previous example but otherwise should be straight forward.
-%\begin{verbatim}
-% \IfNoValueF{#4}
-% {
-% \vskip \caption@legend@sep \relax
-% \begingroup
-% \caption@legend@font \caption@legend@hj@instance
-% \caption@legend@text
-% #4\par
-% \endgroup
-% }
-% \vskip \caption@below@skip \relax
-% }
-%\end{verbatim}
-%
-% I wouldn't claim the the above template is good or contains
-% everything that would be desired and I'm sure that in the end we
-% will have several such template for typesetting the caption part and
-% perhaps decide on a different template type in the first place. So
-% this is only to give a glimpse of how the template interface could
-% be applied and I hope that reading it can see a) how they can apply
-% it to other areas as well as see what is wrong with the example
-% itself.
-%
-% To just note one point that i thought of being wrong after writing
-% the above paragraphs: the key \texttt{single-line-format} was
-% declared to be a function with one argument with the idea that
-% besides specifying the single line should be centered (|\hfil|) on
-% both sides, or flush left, or flush right (|\hfil| on one side) one
-% could also specify something like
-%\begin{verbatim}
-% single-line-format = \hspace{10pt}#1\hfil,
-%\end{verbatim}
-% that is a fixed indentation on the left in case where the caption is
-% a single line. However, of course one can't. Or at least it is not
-% safe to do so since our test in the code tests the width of the line
-% without taking into account such a finite fixed space and guess what
-% might happen? So in summary, flexibility needs some thought and
-% often some afterthoughts as well --- happy thinking :-)
-%
-%
-%
-% \subsection{Defining a few instances}
-%
-% So let us conclude this example with a few sample instances. We
-% start with one that repeats what current \LaTeXe{} provides in the
-% article class. It shows all keys with values. However in fact only
-% the first key is actually needed since all others are the same as
-% the default values in the template (and of course a legend is not
-% specifiable in standard \LaTeX{} coding so those settings simply do
-% not apply anyway).
-%\begin{verbatim}
-%\DeclareInstance{caption}{article}{lesssimple}
-% {
-% above-skip = 10pt,
-% below-skip = 0pt,
-% number-format = #1~#2:~,
-% nonumber-format = #1:~,
-% single-line-format = \hfil#1\hfil,
-% caption-font = \normalfont,
-% caption-hj-setup = default,
-% legend-sep = 0pt,
-% legend-text = ,
-% legend-font = \normalfont,
-% legend-hj-setup = default,
-% }
-%\end{verbatim}
-%
-% The next examples are taken from books on the shelf essentially a
-% random selection I fear. This one is from \emph{Introduction to
-% Database Design} by C.~J.~Date and it uses Helvetica for the caption
-% text with the caption flush left, with the figure and the fixed
-% string (e.g., `Fig.' in bold face) separated by a quad of space. No
-% legend either so this is not set up. The \texttt{hj} instance
-% \texttt{noindentflushleft} is supposed to produce a ragged right paragraph
-% without any indentation. It would have to be set up elsewhere
-% (instance to the template of type \texttt{hj}).
-%\begin{verbatim}
-%\DeclareInstance{caption}{DATE}{lesssimple}
-% {
-% above-skip = 10pt,
-% below-skip = 0pt,
-% number-format = \textbf{#1~#2}\quad,
-% nonumber-format = \textbf{#1}\quad,
-% single-line-format = #1\hfil,
-% caption-font = \fontfamily{phv} \normalfont,
-% caption-hj-setup = noindentflushleft,
-% }
-%\end{verbatim}
-%
-% The final example is from the book ``Methods of Book Design'' by
-% H.~Williamson which sets the caption centered if it fits a single
-% line but adjusted as a paragraph without any indentation if longer
-% than a single line. It uses old style numerals followed by a period
-% for the number (though the example isn't quite right as i guess the
-% text font used already has oldstyle numerals as default, so
-% |\oldstylenums| is in fact not necessary).
-%\begin{verbatim}
-%\DeclareInstance{caption}{WILLIAMSON}{lesssimple}
-% {
-% above-skip = 10pt,
-% below-skip = 0pt,
-% number-format = #1~\oldstylenums{#2}.~,
-% nonumber-format = #1~,
-% single-line-format = \hfil#1\hfil,
-% caption-font = \normalfont,
-% caption-hj-setup = noindentadjusted,
-% }
-%\end{verbatim}
-%
-%
-%
-% \section{Notes}
-%
-% \subsection{Note on multi-valued parameters}
-%
-%
-% The following code\footnote{docu taken from trial implementation in
-% xlists.dtx, FMi} implements for registers (ie L,l,C,c keys) and
-% for names (ie n key) a multi-selection mechanism of the following
-% form:
-% \begin{verbatim}
-% key = \MultiSelection \ListDepth {
-% \DelayEvaluation {2.5em},
-% 20pt + 34pt }
-% { \DelayEvaluation {1em} },
-% \end{verbatim}
-% where the first argument to |\MultiSelection| is a counter, the
-% second argument is a comma separated list of values denoting the
-% values for the cases 1, 2,\ldots, and the third argument contains
-% the value for all other cases.
-%
-% The values are evaluated at declaration time in case of registers
-% and therefore can contain calc expressions as well as
-% |\DelayEvaluation|.
-%
-% Due to the implementation the case list is not allowed to have a
-% trailing comma! And of course no checks are made whatsoever :-(
-%
-% A probably much nicer syntax would be something like this:
-% \begin{verbatim}
-% key = \MultiSelection {
-% selector = \ListDepth,
-% 1 = \DelayEvaluation {2.5em},
-% 2 = 20pt + 34pt,
-% else = \DelayEvaluation {1em}
-% },
-% \end{verbatim}
-% but i found that too difficult to implement right now.
-%
-% I think it should also be considered if this kind of thing should be
-% a generally available feature on all key types especially on the
-% f\meta{number} ones.
-%
-% Anyway it is what i need for lists right now and as such it is
-% sufficient.
-%
-%
-% \subsection{Notes on template restriction}
-%
-% Possible semantics:
-%
-% a: just:-) changes the defaults ie the new template has as
-% defaults those of its source as modified by the supplied
-% keyvals;
-%
-% b: similar to a: but also removes some keywords ie the new template
-% will not accept the keywods whose values are set by the suppied
-% keyvals;
-%
-% c: plan C.
-%
-%
-% Towards an implementation of b: but without a restriction on what
-% keys appear where.
-%
-%
-%
-%
-% \subsection{Open issues}
-%
-% In this section unresolved issues or ideas to think about and
-% perhaps implement are collected. There is no particular order to
-% them.
-%
-% \begin{itemize}
-% \item The order of arguments in |\UseCollection| is illogical in my
-% eyes! A collection typically modifies the behavior of several
-% types and thus should perhaps be first (as it is in the
-% |\DeclareCollectionInstance| case). Or not, or what?
-%
-% \item How should |\IfExistsInstanceTF| behave for Collection
-% instances? Do we need a special check for those or a default
-% action? Or do we need an additional test for the existence of
-% collection instances?
-%
-% \item It was suggested that the template type declaration should get
-% another argument in which (in?)formally the semantics for the
-% template types are described, e.g., data type of arguments,
-% resulting output, \ldots{} (somewhat like the description arguments
-% for functions and variables in Emacs-Lisp). The advantage being
-% that this helps employing the templates better as well as perhaps
-% guiding context sensitive editors to support the work with such
-% templates (e.g., providing help texts).
-%
-% \item The same might be of interest for the keys of individual
-% templates though here syntax support is already available to some
-% extend by the declaration of key types.
-%
-% \item There might be a need to distinguish between \TeX's dimen and
-% skip registers. Right now this is not done and both |l| and |L|
-% accepts what \LaTeX{} calls ``rubber length'' specifications.
-%
-% \item The type |b| can probably vanish. It is equivalent to
-% specifying the mutators of a |\newif| command in the brace groups,
-% e.g.
-%\begin{verbatim}
-% numbered-boolean =b [true] @heading@nums,
-% numbered-boolean =s [true] {\@heading@numstrue}
-% {\@heading@numsfalse},
-%\end{verbatim}
-%
-% \item See issue raised about syntax (and semantics) for
-% |\Multiselection|.
-%
-% \item |f0| keys should perhaps support |\UseTemplate| by replacing
-% it with its internal form. or perhaps this is a rubbish idea?
-%
-% \item Marcin Wolinski suggested to use |\EvalOnUse| instead or in
-% addition to |\DelayEvalutation|.
-%
-% \end{itemize}
-%
-% \StopEventually{}
-%
-% \section{Implementation}
-% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\RequirePackage{ldcsetup,xparse}
-\RequirePackage{l3toks,l3tlp,l3skip,l3int,l3clist,l3token,l3calc}
-% \end{macrocode}
-%
-%
-% Declare a private token register for building parameter lists.
-% Having the number saves a few expandafters
-% (probably not needed in the end).
-% \begin{macrocode}
-\toks_new:N\l_TP_KV_assignments_toks
-\toks_new:N\l_TP_default_assignments_toks
-% \end{macrocode}
-%
-%
-%
-% \begin{macro}{\TP_declare_instance:Nnn}
-% \begin{macro}{\TP_declare_instance:cnn}
-% Declare a command name to be an instance of a template
-% ie with a particular setting of the parameters.\\
-% |#1| internal command name for instance to be (globally) declared\\
-% |#2| template type/template name\\
-% |#3| key value assignments for parameters of |#2|
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% If the body of the template consists only of the token
-% |\DoParameterAssignments|, then we insert the list of parameter
-% assignments directly. Otherwise we have push them onto the stack
-% and prepare to execute the body code (which in turn will pop them
-% again when it reaches |\DoParameterAssignments| inside).
-% \begin{macrocode}
- { \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}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\c_TP_doparameterassignments_tlp}
-% \begin{macrocode}
-\tlp_set:Nn \c_TP_doparameterassignments_tlp {\DoParameterAssignments}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\UseTemplate}
-% |{type}{templatename}{keyval}|
-% Directly use a template with a particular parameter setting.
-% This is also picked up if used in a nested fashion inside a parameter
-% list.\\
-% |#1| type of a template.\\
-% |#2| name of a template.\\
-% |#3| key value assignments for parameters of |#1|.
-% \begin{macrocode}
-\def_new:NNn \UseTemplate 3{
- \TP_instdecl_generate_assignments:nn {#1/#2}{#3}
- \TP_push_assignments:
- \cs_use:c { TP>/#1/#2 }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DoParameterAssignments}
-% Access the parameter assignment list that was once stored in
-% |\l_TP_KV_assignments_toks| and then moved onto the
-% |\g_TP_assignments_stack_toks|.
-% \begin{macrocode}
-\def_new:Npn \DoParameterAssignments{
- \exp_after:NN
- \TP_pop_and_execute_assignments:nw
- \toks_use:N \g_TP_assignments_stack_toks \q_stop
-}
-% \end{macrocode}
-%
-% \end{macro}
-%
-% \begin{macro}{\TP_pop_and_execute_assignments:nw}
-% \begin{macrocode}
-\def_new:Npn \TP_pop_and_execute_assignments:nw#1#2\q_stop{
- \toks_gset:Nn \g_TP_assignments_stack_toks {#2}
- #1}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\g_TP_assignments_stack_toks}
-% \begin{macrocode}
-\toks_new:N \g_TP_assignments_stack_toks
-\toks_gset:Nn \g_TP_assignments_stack_toks {\scan_stop:}% avoid brace loss
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_push_assignments:n}
-% \begin{macro}{\TP_push_assignments:}
-% Push a list of parameter assignments onto the
-% |\g_TP_assignments_stack_toks|. As it all happens in token
-% registers |#|s need no doubling. |\TP_push_assignments:| expects
-% it to be |\l_TP_KV_assignments_toks| (needs fixing).
-% \begin{macrocode}
-\def_long_new:Npn \TP_push_assignments:n#1{
- \toks_gput_left:Nn\g_TP_assignments_stack_toks{{#1}}
-}
-\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}
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\DeclareTemplateType}
-% |{type}{nofarg}|
-% \begin{macrocode}
-\def_new:NNn \DeclareTemplateType 2{
- \tlp_set:cn {TP@<#1>} {{}#2}}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\TP_get_csname_prefix:n}
-% |{type}| returns prefix for csnames for template type,
-% based on current collection.
-% \begin{macrocode}
-\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/
-}
-% \end{macrocode}
-%
-% \end{macro}
-%
-% \begin{macro}{\TP_get_arg_count:n}
-% |{type}| returns arg count for the template type.
-% \begin{macrocode}
-\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:
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\DeclareTemplate}
-% |{type}{templatename}{nofarg}{keywordspec}{code}|
-% \begin{macrocode}
-\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 }
- }
-% \end{macrocode}
-% Parse the key declaration, and execute the list with a suitable
-% definition of |\KV@elt|.
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% At this point there should be a test for which catcode regime we are
-% in. We just test if spaces are ignored.
-% \begin{macrocode}
- %\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}
-% \end{macrocode}
-%
-% Define the defaults: the setting for |TPD>/\l_TP_curr_name_tlp| is a
-% tricky since |\l_TP_default_assignments_toks| may contain |#|. We
-% have to use an |x| expansion rather than
-% |o| since that will hide those during the assignment.
-% \begin{macrocode}
- \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
-% \end{macrocode}
-%
-% Define the template (using |\def_new:Npn| means that one can't
-% redefine a template easily).
-% \begin{macrocode}
- \def:cNn {TP>/\l_TP_curr_name_tlp}{#3}{#5}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_process_KV:nn}
-% The list of undefined keys and values is put in the list of the form\\
-% |\KV_elt:nn|\marg{key1}\marg{val1}%^^A
-% |\KV_elt:nn|\marg{key2}\marg{val2}\ldots\\
-% So just need to give this macro a suitable definition. We just need
-% to look at the first token of the value, to see what sort of key
-% it is, so call a helper function to split that off.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_parse_KV:N}
-% Case switch on the possible key types.
-% \begin{macrocode}
-\def_new:Npn \TP_templdecl_parse_KV:N#1{
-% \end{macrocode}
-% In |#1| we have key, in |#2| the first character after the equal
-% sign and in |#3| the remainder of the line. We now have to parse
-% that remainder to find out if it contains a default value (in
-% brackets) and then set up the key declaration needed to parse
-% instance declarations. The method is similar in most cases: we call
-% |\TP_parse_optional_key_default:nw| which parses for the default
-% and pass it already found key name as first argument, what to do in
-% the end as second argument, and the remainder delimited by |\q_stop|
-% so that it becomes parseable.
-%
-% Note that the code in the second argument to
-% |\TP_parse_optional_key_default:nw| normally calls on a macro with
-% one more argument than actually provided: the reason being that the
-% missing argument will be the remainder of the line (added by
-% |\TP_parse_optional_key_default:nw| after the default has be
-% removed (if present)).
-% \begin{macrocode}
- \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}}
-% \end{macrocode}
-% The |f| and |i| keys are somewhat different since there we first
-% have to parse for an additional argument (a digit in case of |f|
-% or an template type name in case of |i|):
-% \begin{macrocode}
-% \end{macrocode}
-% One more alternative: a |+| after the equal sign signals global
-% so we change |\TP_templdecl_add_global_or_nothing:| to append a
-% |\pref_global:D| to the assignment toks and then reparse the rest.
-% \begin{macrocode}
-% \def:Npn \TP_templdecl_add_global_or_nothing:
-% {\toks_put_right:Nn \l_TP_KV_assignments_toks {\pref_global:D} }
-% \TP_templdecl_parse_KV:nw{#1}#3\TP_templdecl_parse_KV:nnw
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\l_TP_global_assignment_bool}
-% For keeping track of the assignments.
-% \begin{macrocode}
-\bool_new:N \l_TP_global_assignment_bool
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_+:w}
-% The |+| does two things: Sets a boolean true to be used by the
-% types that can't simply be prefixed with |\pref_global:D| and
-% defines |\TP_templdecl_add_global_or_nothing:| to put the prefix
-% onto the list. After that we simply call the big switch
-% again.\footnote{It should probably all be changed to not rely on
-% the prefix working}.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_l:w}
-% The |l| sets a length register. We disable the prefix and insert
-% either |\gsetlength| or |\setlength| depending on whether a |+|
-% was seen or not.
-% \begin{macrocode}
-\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}
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_L:w}
-% The |L| sets a fake length register.
-% \begin{macrocode}
-\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}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_c:w}
-% The |c| sets a count register.
-% \begin{macrocode}
-\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}
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_C:w}
-% The |C| sets a fake count register.
-% \begin{macrocode}
-\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}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_n:w}
-% The |n| sets a token list pointer.
-% \begin{macrocode}
-\def_new:Npn\TP_use_arg_type_n:w {
- \TP_parse_optional_key_default:nw
- {\TP_templdecl_setup_n_key:N}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_f:w}
-% \begin{macro}{\TP_templdecl_parse_f_arg:nw}
-% The |f| defines a command with between 0 and 9 arguments.
-% \begin{macrocode}
-\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}}
-}
-% \end{macrocode}
-% Helper for |\TP_templdecl_parse_KV:nnw|.
-% \begin{macrocode}
-\def_new:Npn \TP_templdecl_parse_f_arg:nw#1#2{
-% \end{macrocode}
-% The third argument of |\TP_templdecl_setup_f_key:Nn|, i.e., the
-% macro name, is the remaining data up to |\q_stop| which is picked up
-% by |\TP_parse_optional_key_default:nw|.
-% \begin{macrocode}
- \TP_parse_optional_key_default:nw{\TP_templdecl_setup_f_key:Nn{#1}{#2}}
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\TP_use_arg_type_b:w}
-% \begin{macro}{\TP_templdecl_setup_b_key:nn}
-% The |b| uses access to the |\if_true:| and |\if_false:|
-% primitives. Needed?
-% \begin{macrocode}
-\def_new:Npn\TP_use_arg_type_b:w {
- \TP_parse_optional_key_default:nw
- {\TP_templdecl_setup_b_key:n}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\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} }
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_eval_b_key_value:nn}
-% Modify so the boolean does not need to have been
-% declared with |\newif|
-% \begin{macrocode}
-\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:} }
- }
-}
-% \end{macrocode}
-%
-% \end{macro}
-%
-% \begin{macro}{\TP_use_arg_type_s:w}
-% \begin{macro}{\TP_templdecl_setup_s_key:n}
-% The |s| chooses between true and false.
-% \begin{macrocode}
-\def_new:Npn\TP_use_arg_type_s:w {
- \TP_parse_optional_key_default:nw
- {\TP_templdecl_setup_s_key:n}
-}
-% \end{macrocode}
-% \begin{macrocode}
-\def_new:Npn \TP_templdecl_setup_s_key:n #1 {
- \TP_templdecl_define_key:n
- { \TP_templdecl_eval_s_key_value:nnn{##1}#1 }
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\TP_use_arg_type_i:w}
-% The |i| expects an instance.
-% \begin{macrocode}
-\def_new:Npn\TP_use_arg_type_i:w #1{
- \TP_parse_optional_key_default:nw{\TP_templdecl_setup_i_key:nnn{#1}}
-}
-% \end{macrocode}
-%
-% declaration |hd =i{head} \fooo| \\
-% use |hd = mine|\\
-% makes |\fooo| shorthand for |\UseInstance{head}{mine}|
-%
-% also allowed: |hd = \UseTemplate{head}{...}{...}|\\
-% in case you want to use an unnamed instance of type |head|
-% in this place.
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_setup_i_key:nnn}
-% MH change: do either local or global.
-% \begin{macrocode}
-\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}
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_eval_i_key_value:Nnn}
-% MH change: Add extra argument for local or global.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-%
-% Code below from |\TP_templdecl_setup_f_key:Nn| (should be
-% combined and cleaned up)
-% at this point one should also check if first arg of |\UseTemplate|
-% corresponds to |#2| and if not complain (not done)
-%
-% \begin{macrocode}
- {\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}
-% \end{macrocode}
-% We want the |\let:Nc| hiding in |\TP_let_instance:Nnn| to expand
-% fully to two csnames so we put a |\tex_romannumeral:D 0| (which in
-% itself expands to nothing) in front. This expands the |\let:Nc| fully
-% before finding out that |\let:NwN| is not expandable.
-% \begin{macrocode}
- \toks_put_right:Nf \l_TP_KV_assignments_toks
- { \TP_let_instance:Nnn#1{#2}{#3} }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\TP_use_arg_type_x:w}
-% \begin{macro}{\TP_templdecl_setup_x_key:nn}
-% The |x| runs internal code.
-% \begin{macrocode}
-\def_new:Npn\TP_use_arg_type_x:w {
- \TP_parse_optional_key_default:nw
- {\TP_templdecl_setup_x_key:n}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\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} }
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-%
-% \begin{macro}{\TP_use_arg_type_g:w}
-% \begin{macro}{\TP_templdecl_setup_g_key:nn}
-% The |g| runs any code.
-% \begin{macrocode}
-\def_new:Npn\TP_use_arg_type_g:w {
- \TP_parse_optional_key_default:nw
- {\TP_templdecl_setup_g_key:n}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\def_new:Npn \TP_templdecl_setup_g_key:n #1 {
- \TP_templdecl_define_key:n{#1}}
-% \end{macrocode}
-%
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\TP_templdecl_define_key:n}
-% Here we define the key in the current template.
-% \begin{macrocode}
-\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 }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\TP_parse_optional_key_default:nw}
-% Look for default value. The |t| argument type here is one we
-% define for template so we can change it easily. Currently I just
-% set it to be a regular optional argument in brackets. |#1| is what
-% we are carrying over, |#2| the optional argument.
-% \begin{macrocode}
-\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}}
-}
-%\show\TP_parse_optional_key_default:nw
-%\exp_args:Nc\show{\string\TP_parse_optional_key_default:nw}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_finish_key_setup:nw}
-% After having parsed the line and not found any default value it
-% remains to actually define the key for the instance parsing by
-% executing the setup code (in |#1|) giving it |#2| (i.e., the
-% remainder of the line) as an argument.
-% \begin{macrocode}
-\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}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_finish_key_setup_with_default:nnw}
-% If there is a default the situation is more complicated since we
-% not only have to set up the key for the instance but also have to
-% add the default value to |\l_TP_default_assignments_toks| in an
-% appropriate way.
-%
-% First set up the the key itself:
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% Now we run the new key code (which is stored in |\KV@...| hopefully)
-% and give it the default found. By doing this in a group and by
-% locally emptying |\l_TP_KV_assignments_toks| we will get the
-% resulting assignment code into that register.
-%
-% (We set |\TP_templdecl_remove_from_default_assignments:N| to
-% |\use_none:n| since this is a temporary operation and we don't want
-% to change the default really.)
-% \begin{macrocode}
- \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}
-% \end{macrocode}
-% And now for a final trick: before closing the group again and losing
-% our local changes we run |\exp_after:NN| several times to get the
-% value of |\l_TP_KV_assignments_toks| into
-% |\l_TP_default_assignments_toks| outside that group!
-% \begin{macrocode}
- \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
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\c_TP_true_tlp}
-% \begin{macrocode}
-\tlp_new:Nn \c_TP_true_tlp {true}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_eval_s_key_value:nnn}
-% \begin{macrocode}
-\def_new:Npn \TP_templdecl_eval_s_key_value:nnn#1#2#3 {
-% no error check on this yet.
- \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} }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_setup_register_key:Nnn}
-% This is normally called automatically by |\DeclareTemplate|.
-%
-% Command for setting a template attribute whose name
-% corresponds directly to a \TeX{} count or length register\\
-% |#1| the function to set the value eg \setlength.\\
-% |#2| key name.\\
-% |#3| the register to set.
-%
-% This command \emph{fully evaluates} the argument at declare time,
-% and assigns the value to the register. It also passes an assignment
-% of the register to the final value into the parameter list for the
-% template.
-%
-% If the value is a call to |\DelayEvaluation|, don't evaluate it now,
-% just pass the whole assignment to the template. Remember to remove
-% the |\DelayEvaluation|.
-% \begin{macrocode}
-\def_new:Npn \TP_templdecl_setup_register_key:Nn #1#2{
- \TP_templdecl_define_key:n{
- \tlist_if_head_eq_meaning:nNTF{##1}\DelayEvaluation
- {
-% \end{macrocode}
-% Old line commented out. Remove |\DelayEvaluation| and also remove
-% the braces surrounding its argument.
-% \begin{macrocode}
- \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}}
- }
-% \end{macrocode}
-%
-%
-% check for |\MultiSelection| creeping up and if so add something like
-%
-% \begin{verbatim}
-% \setlength\register{\ifcase\selector \or value1 \or value2
-% ... \else valueotherwise \fi}
-% \end{verbatim}
-% to |\l_TP_KV_assignments_toks|.
-%
-% \begin{macrocode}
- {
- \tlist_if_head_eq_meaning:nNTF{##1..}\MultiSelection
- {
- \group_begin:
- \TP_multiselection_add:nnnnnn #1#2##1
- \group_end:
-% \end{macrocode}
-%
-%
-% there are probably better ways to do this (:-)
-%
-% \begin{macrocode}
- \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:
- }
- }
-% \end{macrocode}
-%
-%
-% otherwise do as before
-%
-% \begin{macrocode}
- }
- {
- #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:
- }
- }
- }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\DelayEvaluation}
-% \begin{macro}{\MultiSelection}
-% Since we are testing explicitly for |\DelayEvaluation| and
-% |\MultiSelection| a few places we better give them unique
-% meanings!
-% \begin{macrocode}
-\def_new:NNn\DelayEvaluation 1{\use_none:n{\DelayEvaluation}#1}
-\def_new:NNn\MultiSelection 1{\use_none:n{\MultiSelection}#1}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_remove_from_default_assignments:N}
-% Note: the toks register is more or less a plists and should
-% perhaps be implemented as such as this would make far more
-% readable code.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_setup_f_key:Nn}
-% Same for macro names. Again usually called automatically when
-% declaring a new template.\\
-% |#1| Determines how many arguments the function should have.\\
-% |#2| The macro to be defined.
-%
-% If the `|##1|`, the value passed as the argument of the key
-% to the macro |#2| is invoked starts with |\FunctionInstance|, then a
-% special procedure is taken. Instead of defining a macro with the
-% specified number of arguments, the paramater list of the nested
-% function instance is parsed, and |#2| is defined to be a macro
-% expanding to that instance. In this case the specified template
-% is responsible for picking up the requested number of
-% arguments. (This is \emph{not} checked.)
-% \begin{macrocode}
-\def_new:Npn \TP_templdecl_setup_f_key:Nn#1#2{
-% \end{macrocode}
-%
-% |##1| can either be arbitrary inline code, in which case it will be
-% defined with something similar to |\newcommand[val]| so it needs to
-% use |#1| -- |#val|.
-%
-% define it locally here (why this, David???)
-% \begin{macrocode}
- \TP_templdecl_define_key:n
- { \TP_templdecl_define_function:NNn#1#2{##1} }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\TP_templdecl_define_function:NNn}
-% |\def:Npn | setup with a latex style `number of arguments' argument.
-% \begin{macrocode}
-\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} }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\TP_templdecl_setup_n_key:N}
-% Here is the extended version that tries to deal with
-% |\MultiSelection|.
-%
-% In case of `n' keys there is no evaluation at declaration time so it
-% is not sensible to look for |\DelayEvaluation|. For this reason as
-% well as for the fact that |\TP_multiselection_add:nnnnnn| above
-% assumes that it deals
-% with registers that can be accessed via |\toks_use:N| we have to use a
-% different command to handle the |\MultiSelection| args but
-% it is essentially doing the same.
-%
-% \begin{macrocode}
-\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:
-% \end{macrocode}
-% Extracting the correct item from the |\if_case:w| we are building
-% requires a bit of care. Firstly we want to expand the appropirate
-% number of times to get to the item but we also want to ensure we do
-% not have any unwanted leftover |\fi:|s or other junk which is bound
-% to cause errors later on. Therefore we start an |f| expansion (so we
-% don't have to count |\exp_after:NN|s and then stop it again when we
-% want to.
-% \begin{macrocode}
- \toks_put_right:Nx\l_TP_KV_assignments_toks {
- \exp_not:n{\tlp_set:Nf #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} }
- }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_multiselection:nnnn}
-% Start the |\if_case:w|. When the item is retrieved using an |f|
-% type expansion we better stop it at the right place once we have
-% emerged on the other side of the conditional.
-% \begin{macrocode}
-\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 {\exp_stop_f:##1}
- }
- \toks_gput_right:Nn\g_TP_multiselection_toks {
- \else: \use_arg_i_after_fi:nw { \exp_stop_f: #4} \fi:
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\DeclareInstance}
-% |{type}{instname}{templatename}{keyval}|
-% \begin{macrocode}
-\def_new:Npn \DeclareInstance { \DeclareCollectionInstance{} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DeclareCollectionInstance}
-% |{collection}{type}{instname}{templatename}{keyval}|
-% The fifth argument is picked up implicitly.
-% \begin{macrocode}
-\def_long_new:Npn \DeclareCollectionInstance#1#2#3#4{
- \TP_declare_instance:cnn { <#1>#2/#3 }{ #2/#4 }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\UseCollection}
-% |{type}{collection}|
-% \begin{macrocode}
-\def_new:Npn \UseCollection#1#2{
- \tlp_set:cx { TP@<#1> }
- { {#2} \TP_get_arg_count:n{#1} }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_let_instance:Nnn}
-% |\internalcommand{type}{instname}|
-%
-% The way this macro is used, it must result in |\let:NwN| |<csname1>|
-% |<csname2>| after exactly two expansions as it is used this way
-% in |\TP_templdecl_eval_i_key_value:nnn|!
-% \begin{macrocode}
-\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
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\UseInstance}
-% |{type}{instname}|
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_declare_tmp_instance:nnnn}
-% This macro is called when we have seen a |\UseTemplate|
-% declaration as part of an |i| key value. Therefore the
-% first argument will be dropped (it contains the token
-% |\UseTemplate|) the second and third will be combined to refer to
-% the template and the fourth argument will be implictly picked up
-% by |\TP_declare_instance:Nnn|.
-% \begin{macrocode}
-\def_long_new:Npn \TP_templdecl_declare_tmp_instance:nnnn#1#2#3{%
- \TP_declare_instance:Nnn \g_tmpa_tlp {#2/#3} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ShowTemplate}
-% Some extension to |\ShowTemplate| so that we also get to see the
-% restrictions if any
-% \begin{macrocode}
-\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}}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\ShowCollectionInstance}
-% \begin{macrocode}
-\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{}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_templdecl_setup_fakeregister_key:NNn}
-% |{setcomand}{privateregister}{key}{internalcode}|
-% \begin{macrocode}
-\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
- {
-% \end{macrocode}
-% In the v0.08 version of \texttt{template.dtx} a
-% |\DelayEvaluation| for a faked register would simply be equiv to
-% a |\def:Npn | (code is below commented out). The negative side effect
-% of this is that something like |=L| used with |\DelayEvaluation|
-% would not allow for calc syntax since it would end up as
-% |\def:Npn |\allowbreak|\foo|\allowbreak|{a+b}|. The code below changes
-% this to first assign to a scratch register (at runtime) and then
-% do an |\edef|. Could be coded differently to save space (at cost
-% of time)
-% \begin{macrocode}
-% \toks_put_right:Nn \l_TP_KV_assignments_toks {\def:Npn #3{##1}}
-% \toks_put_right:Nn \l_TP_KV_assignments_toks
-% {#1#2{##1}\def:Npx #3{\toks_use:N#2}}
- \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} }
-
- }
- }
-% \end{macrocode}
-%
-%
-% Otherwise same game for fake registers except that instead of
-% passing the register to |\TP_multiselection_add:nnnnnn| we pass a
-% temp fake one and
-% doing a def instead of using |\setlength| or |\setcounter|
-%
-% and i haven't done the |\DelayEvaluation| bit for that case! as
-% i'm not sure what the best approach is for those
-% things\footnote{we might disallow it for that case in general ---
-% not a nice rule but an explainable one}
-%
-% \begin{macrocode}
- {
- \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}}
- }
- }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\g_TP_multiselection_toks}
-% \begin{macrocode}
-\toks_new:N \g_TP_multiselection_toks
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TP_multiselection_add:nnnnnn}
-% \marg{operation} \marg{register} |\MultiSelection|
-% \marg{selector} \marg{case-list} \marg{else-case}
-%
-% This command builds up the |\if_case:w| code from the three
-% arguments of |\MultiSelection| and stores it in
-% |\g_TP_multiselection_toks|. This code is supposed to be run in a
-% group so a) we don't have to initialise |\g_TP_multiselection_toks|
-% and b) all changes to the used registers not affecting the
-% outside.
-%
-% \begin{macrocode}
-\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:o { \toks_use:N #2 }
- }
- }
- \toks_gput_right:Nn \g_TP_multiselection_toks {
- \else: \use_arg_i_after_fi:nw{#6}\fi:
- }
-}
-% \end{macrocode}
-%
-% \end{macro}
-%
-% \begin{macro}{\TP_multiselection_add_or_case:o}
-% No need to worry about where |\or:| is allowed to be added since
-% all loops in \LaTeX3 process the item outside conditionals.
-% \begin{macrocode}
-\def_new:Npn \TP_multiselection_add_or_case:n #1 {
- \toks_gput_right:Nn \g_TP_multiselection_toks {
- \or: \use_arg_i_after_orelse:nw{#1}
- }
-}
-\def_new:Npn \TP_multiselection_add_or_case:o {
- \exp_args:No \TP_multiselection_add_or_case:n
-}
-% \end{macrocode}
-% \end{macro}
-%
-% Since i like to set things like |item-label-text| using this
-% mechanism i need to handle the `n' key specially.
-%
-% Actually i could have probably extended
-% |\TP_templdecl_setup_f_key:nnN| thus making
-% this generally available to all f\meta{number} keys but was too lazy
-% (or too stupid) to get it right first time so settled for the simple
-% solution.
-%
-% So |\TP_templdecl_parse_KV:nnw| now calls
-% |\TP_templdecl_setup_n_key:nN| for the `n' key. looks like
-% this thus be fixed some time soon
-%
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\IfExistsInstanceTF}
-% tests that there is a \emph{default} definition
-% taken from xinitials.dtx:
-% \begin{macrocode}
-\def_new:Npn \IfExistsInstanceTF#1#2{
- \cs_if_exist:cTF{<>#1/#2}
-}
-% \end{macrocode}
-%
-% FMi: what happens if we are in collection FOO and there exists an
-% instance I for type T within this collection but there doesn't exist
-% an instance in the empty collection?
-%
-% What would happen if \ldots\ --- not clear to me what the sematics
-% really should be. The code below is not better only different( and
-% slower).\footnote{fix semantics}
-% \begin{macrocode}
-\def:Npn \IfExistsInstanceTF#1#2{
- \TP_let_instance:Nnn \l_tmpa_tlp {#1}{#2}
-% next is not \tlp_if_eq:NNTF but ...FT so done manually
- \if_meaning:NN\l_tmpa_tlp\scan_stop:
- \exp_after:NN\use_arg_ii:nn
- \else:
- \exp_after:NN\use_arg_i:nn
- \fi:}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DeclareRestrictedTemplate}
-% Setting it up:
-%
-%| \DeclareRestrictedTemplate|\\
-% |{T-type} {new-T-name} {source-T-name} {keyvals}|
-%
-% This uses the same code as {T-type} {source-T-name} but adds
-% settings from {keyvals}
-% \begin{macrocode}
-\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:}
-
-% adds stuff to \l_TP_KV_assignments_toks
- \setkeys {\cs:w TPO>/#1/#3\cs_end:}{#4}
-
- \tlp_set:cx { 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} }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% Internals:
-%
-% \begin{macro}{\TP_instdecl_generate_assignments:nn}
-% These could probably be inlined, even when they do something!
-%
-% Assumption: setkeys fully expands its first argument.
-%
-% \begin{macrocode}
-\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
-
-% prepends stuff to \l_TP_KV_assignments_toks :
- \exp_after:NN\TP_instdecl_add_default_recurse:nn
- \toks_use:N\l_TP_default_assignments_toks
-
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\TP_instdecl_add_default_recurse:nn}
-% [ 2001/06/10 Think about doing this properly with explicit plists! --- but
-% this means that one has to think about whether or not plists should be
-% implemented as token registers and not as tlps as they are now. ]
-% \begin{macrocode}
-\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
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% |TPD>/type/name| stores the default parameter assignments.
-%
-% |TPR>/type/name| stores the parameter assignments that have been
-% made for a restricted template otherwise it is undefined (or |\scan_stop:|).
-%
-%
-% |TPO>/type/name| stores the full name (i.e. as |type/name|)
-% of the template a restricted
-% template is coming from originally.
-%
-%
-%
-%
-% \begin{macro}{\TP_split_finite_skip_value:nnNN}
-% This macro is for use in error checking template values like
-% "text-float-sep" that can't contain infinite glue and needs the
-% shrink and/or stretch components. First argument is the skip
-% register (which is likely to be user input), second is a template
-% key name, and the last two are the \meta{dimen} registers that
-% stores the stretch and shrink components. Assignments are global.
-% \begin{macrocode}
-\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.}
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \Finale
-%
diff --git a/Master/texmf-dist/source/latex/xbase/xbase.ins b/Master/texmf-dist/source/latex/xbase/xbase.ins
deleted file mode 100644
index 742a1aa8dc3..00000000000
--- a/Master/texmf-dist/source/latex/xbase/xbase.ins
+++ /dev/null
@@ -1,73 +0,0 @@
-% \iffalse
-%%
-%% This file will generate fast loadable files and documentation
-%% driver files from the dtx files in this package when run through
-%% LaTeX or TeX.
-%%
-%% (C) Copyright 2000-2005 LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% $Id: xbase.ins 302 2005-03-01 22:49:14Z morten $
-%%
-% \fi
-%
-
-\input docstrip
-\keepsilent
-\askforoverwritefalse
-
-\preamble
-
-(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.
-
-======================================================================
-
-\endpreamble
-
-
-\generate{%
- \file{ldcsetup.sty}{\from{ldcsetup.dtx}{package}}
- \file{template.sty}{\from{template.dtx}{package,trace}}
- \file{xparse.sty}{\from{xparse.dtx}{package}}
-}
-
-\endbatchfile
diff --git a/Master/texmf-dist/source/latex/xbase/xparse.dtx b/Master/texmf-dist/source/latex/xbase/xparse.dtx
deleted file mode 100644
index 0ecd05af7bc..00000000000
--- a/Master/texmf-dist/source/latex/xbase/xparse.dtx
+++ /dev/null
@@ -1,2168 +0,0 @@
-% \iffalse
-%% File: xparse.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle
-%% (C) Copyright 2004-2007 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%<*driver|package>
-\RequirePackage{l3names}
-%</driver|package>
-%\fi
-\GetIdInfo$Id: xparse.dtx 700 2007-11-27 14:18:29Z morten $
- {generic document command parser}
-%\iffalse
-%<*driver>
-%\fi
-\ProvidesFile{\filename.\filenameext}
- [\filedate\space v\fileversion\space\filedescription]
-%\iffalse
- \documentclass{ltxdoc}
- \usepackage[T1]{fontenc}
- \usepackage{textcomp}
- \makeatletter
- \providecommand*\eTeX{%
- \if b\expandafter\@car\f@series\@nil\boldmath\fi
- $\m@th\varepsilon$-\TeX}
- \makeatother
-% \usepackage{ldcdoc}
- \begin{document}
- \catcode`\_=11
- \catcode`\:=11
- \DocInput{xparse.dtx}
- \end{document}
-%</driver>
-% \fi
-%
-% \CheckSum{626}
-%
-%
-% \title{The \textsf{xparse} package\thanks{This file
-% has version number \fileversion, last
-% revised \filedate.}}
-% \author{FMi, CAR, DPC, MH}
-% \date{\copyright~\filedate}
-% \maketitle
-%
-% \begin{abstract}
-% The interfaces described in this document are not meant to be final
-% but only as a basis for discussion. Building productive applications
-% using the current code is discouraged.
-% \end{abstract}
-%
-% \section{Interface}
-%
-% This package implements high-level interface commands for class file
-% writers which allows the separation of formatting commands
-% (typically instances of so-called `templates') and their arguments
-% from the signature of document-level commands.
-%
-% This works by declaration commands that provide a general
-% specification method for the typical \LaTeX{} syntax, e.g.,
-% star-form, optional arguments, and mandatory arguments. A command
-% (or environment) declared in this way parses the input according to
-% its spec and presents its findings in a normalized way for further
-% processing.
-%
-% \subsection{Argument spec}
-%
-%
-% An argument specification is a list of letters each representing a
-% type of argument, i.e., |m| is a mandatory argument (surrounded by
-% braces), |o| an optional argument (surrounded by brackets if
-% present), and |s| represents a star (which might be present or not).
-% Thus the argument spec for headings as implemented by
-% |\@startsection| in standard \LaTeX{} would be represented by the
-% three letters |som|. Other argument types are available and can be
-% added at will. For a complete list of built-in argument types see
-% the next section.
-%
-% There is one important argument specifier worth taking note of. The
-% |P| does not behave as a normal argument specifier but allows the
-% next argument to take an argument containing the |\par| token which
-% is not allowed by default.
-%
-%
-% \subsection{Parsing results}
-%
-% To normalise the result of parsing the input according to an
-% argument specification it is important to uniquely identify all
-% arguments found. For this reason each parsing operation initiated by
-% one of the argument spec letters will result in an identifiable
-% output as follows:
-% \begin{description}
-% \item[m] will return the parsed argument surrounded by a brace
-% pair, i.e., will normally be the identity;
-% \item[o] will return the parsed argument surrounded by a brace pair
-% if present. Otherwise it will return the token |\NoValue|;
-% \item[O\{default\}] will return the parsed argument surrounded by a
-% brace pair if present. Otherwise it will return the |{default}|
-% as specified above.
-% \item[S\{\meta{symbol}\}] will return either the token |\c_true| or
-% |\c_false| depending on whether or not the next token is
-% \meta{symbol}.
-% \item[s] will return either the token |\c_true| or |\c_false|
-% depending on whether or not a star was parsed. This is just a
-% shorthand for |S{*}|.
-% \item[c] will parse the syntax |(|\meta{x}|,|\meta{y}|)|, i.e., a
-% coordinate pair and will return |{{|\meta{x}|}{|\meta{y}|}}| as
-% the result. If no open parentheses is scanned an error is
-% signalled.
-% \item[C\{\{x-default\}\{y-default\}\}] behaves like |c|, i.e.,
-% parses a coordinate pair if present. If the coordinate pair is
-% missing it returns the default values instead.
-% \item[l] Reads everything up to the first left brace as the
-% argument.
-% \end{description}
-% For example, given the spec |soomO{default}| the input
-% |*[Foo]{Bar}| would be parsed as
-% |\c_true{Foo}\NoValue{Bar}{default}|. In other words there will be
-% always exactly the same number of brace groups or tokens as the
-% number of letters in the argument spec.
-%
-% There are a few exceptions to this rule as the r\^ole of following
-% letters is to affect how the next argument is read.
-% \begin{description}
-% \item[>] takes a mandatory argument like |{P}| or |{PW}| and
-% inserts these extra argument specifiers so that they act on the
-% next regular argument type. See below.
-% \item[P] will cause the next argument to allow |\par| in it's
-% argument. Thus the specification |m>{P}mm| will cause the command to
-% read three mandatory arguments but only the second can contain the
-% |\par| token.
-% \item[W] will cause the next argument to \emph{not} ignore a space
-% when trying to scan ahead for a special symbol such as a |*| or an
-% optional argument. This is mostly useful when the last argument(s)
-% of a document command are optional (see example later on).
-% \end{description}
-%
-%
-% \subsection{Applying the parsing results}
-%
-% Since the result of the parsing is a well defined number of tokens or
-% brace groups it is easy to pass them on in any order to any
-% processing function. To this end the tokens or brace groups are
-% associated with the standard argument specifiers in \TeX{} macros,
-% i.e., |#1|, |#2|, and so forth. This limits the argument
-% specification to a maximum number of 9 letters, but for practical
-% applications this should be sufficient.
-%
-% \subsection{The class designer interface}
-%
-% This package provides commands for declaring commands
-% and environments to be used within the document body.
-%
-% \DescribeMacro\DeclareDocumentCommand
-% The |\DeclareDocumentCommand| declaration takes three arguments. The
-% first argument is the name of the command to be declared, the second
-% is the argument specification in the syntax described above, and the
-% third is the action to be carried out once the arguments are
-% parsed. Within the third argument |#1|, |#2|, etc.\ denote the
-% result of the parsing, e.g.,
-% \begin{verbatim}
-% \DeclareDocumentCommand{\chapter}{som}
-% { \IfBooleanTF {#1}
-% { \typesetnormalchapter {#2}{#3} }
-% { \typesetstarchapter {#3} }
-% }
-% \end{verbatim}
-% would be a way to define a |\chapter| command which would
-% essentially behave like the current \LaTeX{} command (except that it
-% would accept an optional argument even when a |*| was parsed). The
-% |\typesetnormalchapter| could test its first argument for being
-% |\NoValue| to see if an optional argument was present.
-%
-% Of course something like the |\IfNoValueTF| test could also be
-% placed inside a function that would process all three arguments, thus
-% using the templates and their instances as provided by the
-% \texttt{template} package such a declaration would probably look
-% more like the following example:
-% \begin{verbatim}
-% \DeclareDocumentCommand{\chapter}{som}
-% { \UseInstance {head} {A-head-main} {#1} {#2} {#3} }
-% \end{verbatim}
-%
-% Using the |\DeclareDocumentCommand| interface it is easy to modify
-% the document-level syntax while still applying the same
-% layout-generating functions, e.g., a class that would not support
-% optional arguments or star forms for the heading commands could
-% define |\chapter| like this:
-% \begin{verbatim}
-% \DeclareDocumentCommand{\chapter}{m}
-% { \UseInstance {head} {A-head-main} \BooleanFalse \NoValue {#1} }
-% \end{verbatim}
-% while a class that would allow for an additional optional argument
-% (for whatever reason) could define it like that:
-% \begin{verbatim}
-% \DeclareDocumentCommand{\chapter}{somo}
-% { \doSomethingWithTheExtraOptionalArg {#4}
-% \UseInstance {head} {A-head-main} {#1} {#2} {#3} }
-% \end{verbatim}
-% \DescribeMacro\ReDeclareDocumentCommand
-% \DescribeMacro\ProvideDocumentCommand
-% The commands |\ReDeclareDocumentCommand| and
-% |\ProvideDocumentCommand| work just like |\DeclareDocumentCommand|
-% with the exception that |\Re..| can only redefine an existing
-% command and |\Provide...| will only define the command if it is
-% already free.
-%
-%
-% \DescribeMacro\DeclareDocumentEnvironment
-% \DescribeMacro\ReDeclareDocumentEnvironment
-% \DescribeMacro\ProvideDocumentEnvironment The
-% |\DeclareDocumentEnvironment| declaration is similar to
-% |\DeclareDocumentCommand| except that it takes four arguments: the
-% first being the environment name (without a backslash), the second
-% again the argument-spec, and the third and forth are the actions
-% taken at start aqnd end of the environment. The parsed arguments are
-% available to both the start and the finish as |#1|, |#2|, etc.
-%
-% All commands and environments defined with the above commands are
-% automatically robust.
-%
-%
-%
-% \subsection{A different interface (for class design?)}
-%
-% Combining signature and top-level definition of a command |\foo| as
-% in
-% \begin{verbatim}
-% \DeclareDocumentCommand \foo { m c m }
-% { \typeout{1:#1}
-% \typeout{2:#2}
-% \typeout{3:#3}
-% }
-% \end{verbatim}
-% is fine in certain cases, e.g., if the user wants to declare a few
-% commands this way in the preamble of a document. However in a class
-% file it probably better to completely separate signature (i.e.,
-% argument \#1 and \#2) from top-level implementation (i.e., argument
-% \#3).
-%
-%
-% \begin{verbatim}
-% \DeclareDocumentCommandInterface \foo {bar} { m c m }
-% \end{verbatim}
-% The above now declare only the signature of the command |\foo| and
-% states that the implementation is to be found under the label |bar|.
-%
-% A bunch of such statements would then for the first time clearly
-% define a document class (i.e., what a document class instance needs
-% to define to be compliant).
-%
-% An instance would then consist of a lot of declarations of the type
-% \begin{verbatim}
-% \DeclareDocumentCommandImplementation {bar} {3}
-% { \typeout{1:#1}
-% \typeout{2:#2}
-% \typeout{3:#3}
-% }
-% \end{verbatim}
-% i.e., defining how to format things being referenced as part of the
-% signature.
-%
-% The functions |\DeclareDocumentCommandInterface| and
-% |\DeclareDocumentCommandImplementation| are implemented for now but
-% it is not sure if they will stay. If a document command is defined
-% with |\DeclareDocumentCommandInterface| but there is no matching
-% interface it prints the label in quotes as |``bar''|.
-%
-%
-%
-%
-% \subsection{Checking for a value or boolean}
-%
-% It would make perfect sense to make |\NoValue| a \LaTeX3 quark but
-% as there is a real danger of it getting executed by accident it is
-% best not to as it would result in an infinite loop.
-%
-% \DescribeMacro\NoValue
-% For this reason |\NoValue| is defined to expand to the string
-% |-NoValue-| which would get typeset if ever executed thus clearly
-% indicating the type of error the writer made.
-%
-% However this makes testing for this token slightly complicated as in
-% that case the test
-% \begin{verbatim}
-% \tlp_set:Nn \l_seen_tlp {#1}
-% \tlp_set:Nn \l_hidden_novalue_tlp {\NoValue}
-% \tlp_if_eq:NNTF \l_seen_tlp \l_hidden_novalue_tlp
-% \end{verbatim}
-% will be true if |#1| was |\NoValue| but false if |#1| itself
-% contains a macro which contains |\NoValue|; a case that happens
-% unfortunately very often in practice. Using an unguarded |x| type
-% expansion to define |\l_seen_tlp| is out of the question as |#1| is
-% typically either |\NoValue| or arbitrary user input for which we
-% can't properly guard it unless we are sure people only use robust
-% commands. When running a pure \LaTeX3 format where all document
-% commands are robust this is perhaps something to be looked at again
-% but when running on top of \LaTeXe{} we have to be careful.
-%
-% Therefore we use a somewhat different procedure here, which goes
-% like this:
-% \begin{enumerate}
-% \item Store |#1| in a temporary variable and check if it equals a
-% variable containing |\NoValue|. If true, execute the \meta{true}
-% code, otherwise go to~2.
-% \item Peek at the first token in |#1|. If this is a macro taking no
-% arguments expand |#1| once and go to~1. Otherwise execute the
-% \meta{false} code.
-% \end{enumerate}
-% The reason for the careful peeking ahead is that |#1| may very well
-% be a macro taking arguments and it is not certain that these
-% arguments are present! Hence this could lead to the well-known
-% \begin{verbatim}
-% Argument of \XXX has an extra }
-% \end{verbatim}
-% and we wouldn't want that\dots{} Goes without saying that this
-% procedure is quite tedious but usually it will exit after the first
-% time |#1| has been inspected. One additional test could be added,
-% namely that |#1| should also contain exactly one token but I don't
-% think that is going to matter much.
-%
-% \DescribeMacro\IfNoValueTF
-% \DescribeMacro\IfNoValueT
-% \DescribeMacro\IfNoValueF
-% \DescribeMacro\IfValueTF
-% \DescribeMacro\IfValueT
-% \DescribeMacro\IfValueF
-% These macros are used for checking if an optional argument was
-% present as in the example below.
-% \begin{verbatim}
-% \DeclareDocumentCommand\testcmd{om}{
-% \IfNoValueTF{#1}{``#2''}{#1,#2}
-% }
-% \end{verbatim}
-%
-%
-%
-% \DescribeMacro\IfBooleanTF
-% \DescribeMacro\IfBooleanT
-% \DescribeMacro\IfBooleanF
-% As mentioned earlier, the parsing result for a symbol argument like
-% |s| or |S{+}| is represented as the one of the tokens |\c_true| or
-% |\c_false| respectively. To test for these values the macro
-% |\IfBooleanTF| can be used. It expects as its first argument either
-% |\c_true| or |\c_false| and executes its second or third argument
-% depending on this value. |\IfBooleanT| and |\IfBooleanF| are
-% obvious shortcuts.
-%
-% At one point in time I thought that one can represent everything
-% using |\NoValue|, e.g., for the star case either return |*| or
-% |\NoValue|. However, this slows down processing of commands like
-% |\\*| considerably since they would then have to use a slower
-% internal test instead of a fast two-way switch.
-%
-%
-% \subsection{New argument types and shorthands}
-%
-% New argument types can be added at in a fairly straight forward
-% manner with the command
-% |\DeclareArgumentType|\DescribeMacro\DeclareArgumentType. This
-% command takes seven arguments: |#1| is a symbol denoting the
-% argument type, |#2| is the token the scanner should look for, |#3|
-% is one of the words |meaning|, |charcode| or |catcode| which is
-% handed down to the underlying |\peek_meaning:NTF| or
-% |\peek_charcode:NTF| etc. functions. For instance you can use the
-% |charcode| version if you want to pick up a literal |*| and not
-% just something that has the same \emph{meaning} as a regular
-% |*|. |#4| is for executing a special action (like an error message)
-% if no argument is found, |#5| is the default value in case of a
-% missing argument, |#6| is what the scanner will encounter, and
-% finally |#7| is what the scanner grabs from the argument type. This
-% is perhaps clearer with an example\dots{} This is how the |o| type
-% is implemented:
-% \begin{verbatim}
-% \DeclareArgumentType o [ {meaning} {} {\NoValue} {#1[#2]} {#2}
-% \end{verbatim}
-% In a similar fashion a |b| type expecting its argument inside |<|
-% and |>| would be defined as
-% \begin{verbatim}
-% \DeclareArgumentType b < {meaning} {} {\NoValue} {#1<#2>} {#2}
-% \end{verbatim}
-%
-% \DescribeMacro\DeclareArgumentTypeWithDefault
-% |\DeclareArgumentTypeWithDefault| is even simpler as this type
-% expects the default value to be input at the time of argument
-% specification. Thus arguments |#3| and |#4| from above are
-% unnecessary and are simply absent. Thus the |O| type is
-% implemented\footnote{I would say it is at best wishful thinking
-% that the interface could be something like
-% \texttt{\cs{DeclareArgumentTypeWithDefault}
-% C\{2\}\{meaning\}\{(\#1,\#2)\}\{\{\#1\}\{\#2\}\}} as it would
-% be quite troublesome implementation-wise and the current syntax
-% isn't that difficult to use.} as
-% \begin{verbatim}
-% \DeclareArgumentTypeWithDefault O [ {meaning}{#1[#2]} {#2}
-% \end{verbatim}
-% and again a similar |B| type could be implemented as
-% \begin{verbatim}
-% \DeclareArgumentTypeWithDefault B < {meaning}{#1<#2>} {#2}
-% \end{verbatim}
-%
-%
-% There is also a possibility to define a shorthand for a specific
-% sequence of arguments with the command
-% \DescribeMacro\DeclareArgumentTypeShorthand
-% |\DeclareArgumentTypeShorthand|. As an example the |s| argument
-% type is just a different way of saying |S{*}| so it's simply
-% implemented as
-% \begin{verbatim}
-% \DeclareArgumentTypeShorthand s {S{*}}
-% \end{verbatim}
-% Similarly one could add a shorthand |M| for inserting five
-% mandatory arguments where the latter is allowed to take |\par| in
-% its argument:
-% \begin{verbatim}
-% \DeclareArgumentTypeShorthand M {mmmm>{P}m}
-% \end{verbatim}
-%
-% Finally there is also the command
-% \DescribeMacro\DeclareSymbolArgument|\DeclareSymbolArgument| which
-% defines the low level interface to looking ahead for specific
-% symbols and removing them. For instance the |S| type argument is
-% declared as
-% \begin{verbatim}
-% \DeclareSymbolArgument S{meaning}
-% \end{verbatim}
-% So symbols picked up by this type will compare the meaning of the
-% tokens. One could do a
-% \begin{verbatim}
-% \DeclareSymbolArgument A{charcode}
-% \end{verbatim}
-% and then the |A| type would compare character codes instead. For
-% instance a command which expects a |+| symbol would return
-% \meta{true} if a |+| of any catcode is detected, not just catcode
-% 12 as is usual.
-%
-% \subsection{Some comments on the need for the \texttt{O} specifier}
-%
-% With |\newcommand| there is the possibility of specifying a default
-% for an optional argument which is stored away in a more or less
-% efficient manner. For example below is the old definition of
-% |\linebreak| as can be found in the \LaTeX2e kernel:
-%\begin{verbatim}
-%\def\linebreak{\@testopt{\@no@lnbk-}4}
-%\def\@no@lnbk #1[#2]{%
-% \ifvmode
-% \@nolnerr
-% \else
-% \@tempskipa\lastskip
-% \unskip
-% \penalty #1\@getpen{#2}%
-% \ifdim\@tempskipa>\z@
-% \hskip\@tempskipa
-% \ignorespaces
-% \fi
-% \fi}
-%\end{verbatim}
-% Ignoring for the moment that the above is slightly optimised an
-% expansion of this code under |\tracingall| will result in about 90
-% lines of tracing output. If we reimplement this using
-% |\DeclarDocumentCommand\linebreak{o}| we have to use |\IfNoValueTF|
-% to find out if an argument was present which (because of the careful
-% expansion we do internally) results in about twice as much of
-% tracing lines. In contrast using |O{4}| as below we end up with 110
-% lines, which seems roughly the price we have to pay for the extra
-% generality available (though this could perhaps even be reduced by a
-% better implementation of the parsing machine as originally done by
-% David, before i talked him into adding support for arguments in the
-% end code of an environment).\footnote{These comments were made
-% before the extensive changes in expl3 and xparse in 2005.}
-%
-%\begin{verbatim}
-%\DeclareDocumentCommand\linebreak { O{4} }
-% {
-% \ifvmode
-% \@nolnerr
-% \else
-% \@tempskipa\lastskip
-% \unskip
-% % \IfNoValueTF{#1}
-% % {\break}
-% % {\penalty -\@getpen{#1}}
-% \penalty -\@getpen{#1}
-% \ifdim\@tempskipa>\z@
-% \hskip\@tempskipa
-% \ignorespaces
-% \fi
-% \fi
-% }
-%\end{verbatim}
-%
-%
-% \subsection{A somewhat complicated example}
-%
-% This example reimplements the |\makebox| and |\framebox| interface
-% of \LaTeX{} both of which are unfortunately quite overloaded
-% syntactically. For this reason the example isn't meant to show good
-% coding practice but to show the power of the interface even though
-% applied in a somewhat bad way.
-%
-% |\makebox| and |\framebox| support the following different document
-% syntax forms:
-% \begin{itemize}
-% \item
-% |\makebox{A}|: only a single mandatory argument.
-%
-% \item
-% |\makebox[20pt]{B}|: one optional argument specify the box width.
-%
-%
-% \item
-% |\makebox[30pt][r]{C}|: two optional arguments the second specifying
-% the text position within the box being made (l,c,r being allowed
-% with c being the default).
-%
-% \item
-% |\makebox(20,30){D}|: within picture mode the width is specified not
-% as an optional argument in brackets but as a coordinate pair.
-%
-% \item
-% |\makebox(0,0)[lt]{E}|: in that case an optional argument following
-% coordinate pair denotes the placement within the box which can have
-% different values compared to case C above.
-% \end{itemize}
-%
-% To cater for this overloaded structure we can define |\makebox| to
-% be something like the following:
-%\begin{verbatim}
-%\DeclareDocumentCommand \makebox { C{\NoValue} o O{c} m}
-% { \IfNoValueTF{#1}
-% { \ltx@maketextbox{#2}{#3}{#4} }
-% { \ltx@makepicbox #1 {#2}{#4} } }
-%\end{verbatim}
-% In other words: if we do not see a coordinate pair first (i.e.,
-% first argument is |\NoValue| then we expect up to two optional
-% arguments (the width of the box or |\NoValue| if not given and the
-% placement specifier with a default of |c| if not given) and one
-% mandatory one which is the text. In that case we pass argument 2 to
-% 4 to an internal function |\ltx@maketextbox| which builds the text
-% box.
-%
-% Otherwise, if the first argument is a coordinate pair we parse an
-% optional argument denoting the placement specifier. Since
-% \texttt{xparse} doesn't support variant syntax we actually parse for
-% another optional argument (which has no meaning in that case and is
-% in fact ignored if present) followed by a mandatory one containing
-% the box text. In that case we pass the coordinate pair (|#1|), the
-% specifier (|#2|), and the text (|#4|) to the function
-% |\ltx@makepicbox| which builds the picture box. Note the special
-% handling of the coordinatesD: which are passed without surrounding
-% braces to |\ltx@makepicbox|: since the coordinate argument looks
-% like |{x-val}{y-val}| the receiving function |\ltx@makepicbox| gets
-% the |x-val| as argument one and the |y-val| as argument two.
-%
-% A definition for |\framebox| would look more or less identical
-% except that we would need to pass the arguments to slightly
-% different internal functions. The alternative is to give the
-% internal functions an extra argument that controls whether or not a
-% frame is bying built.
-%
-% \begin{macro}{\ltx@makepicbox}
-% So here is a possible implementation of |\ltx@makepicbox| that
-% builds a picture box with or without frame. It takes the following
-% mandatory arguments:
-% \begin{enumerate}
-% \item x-part of coordinate
-% \item y-part of coordinate
-% \item placement specifier, e.g., |lt| or |\NoValue|
-% \item text of box
-% \item the token |\frame| (if a frame should surround the box) or the
-% token |\@firstofone| --- not pretty i agree
-% \end{enumerate}
-%\begin{verbatim}
-%\def\ltx@makepicbox#1#2#3#4#5
-% {
-% #5{
-% \vbox to#2\unitlength
-% {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss
-% \let\mb@t\vss
-% \IfNoValueF{#3}
-% {
-% \@tfor\reserved@a :=#3\do{
-% \if s\reserved@a
-% \let\mb@l\relax\let\mb@r\relax
-% \else
-% \expandafter\let\csname mb@\reserved@a\endcsname\relax
-% \fi}%
-% }
-% \mb@t
-% \hb@xt@ #1\unitlength{\mb@l #4\mb@r}
-% \mb@b
-% \kern\z@}
-% }
-% }
-%\end{verbatim}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\ltx@maketextbox}
-% For the text case the internal function could take the following
-% mandatory arguments:
-% \begin{enumerate}
-% \item width of the box or |\NoValue| (denoting to build the box at
-% natural width)
-% \item placement specifier, e.g., |l|. (No test for |\NoValue| being undertaken)
-% \item text of box
-% \item the token |\fbox| (if a frame should surround the box) or the
-% token |\mbox|
-% \end{enumerate}
-% The actual code is taken straight from the current \LaTeX{} kernel
-% and looks kind of scary.
-%\begin{verbatim}
-%\def\ltx@maketextbox#1#2#3#4
-% {
-% \IfNoValueTF{#1}
-% {#4{#3}}
-% {
-% \leavevmode
-% \@begin@tempboxa\hbox{#3}
-% \setlength\@tempdima{#1}
-% \ifx#4\fbox
-% \setbox\@tempboxa\hb@xt@\@tempdima
-% {\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}
-% \@frameb@x{\kern-\fboxrule}
-% \else
-% \hb@xt@\@tempdima{\csname bm@#2\endcsname}
-% \fi
-% \@end@tempboxa
-% }
-% }
-%\end{verbatim}
-% \end{macro}
-%
-% \begin{macro}{\makebox}
-% \begin{macro}{\framebox}
-% Given the above internal functions the declarations of |\makebox|
-% and |\framebox| would then look like this:
-%\begin{verbatim}
-%\DeclareDocumentCommand \makebox { C{\NoValue} o O{c} m}
-% { \IfNoValueTF{#1}
-% { \ltx@maketextbox{#2}{#3}{#4}\mbox }
-% { \ltx@makepicbox #1 {#2}{#4}\@firstofone } }
-%
-%\DeclareDocumentCommand \framebox { C{\NoValue} o O{c} m}
-% { \IfNoValueTF{#1}
-% { \ltx@maketextbox{#2}{#3}{#4}\fbox }
-% { \ltx@makepicbox #1 {#2}{#4}\frame } }
-%\end{verbatim}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% Here's another example which shows how one can use the |W| specifier.
-% The \textsf{amsmath} environments use their own definition of |\\|
-% which goes under the name |\math@cr|. As there is a good chance the
-% next line of math begins with either an asterisk or something in
-% square brackets this often leads to errors. The following example
-% definition works (I \emph{did} try it).
-% \begin{verbatim}
-% \ExplSyntaxOn
-% \makeatletter
-% \cs_gundefine:N \math@cr
-% \DeclareDocumentCommand\math@cr{>{W}s >{W}O{\z@}}{
-% \IfBooleanTF{#1}
-% { \global\@eqpen\@M }{
-% \global\@eqpen
-% \ifnum\dspbrk@lvl <\z@
-% \interdisplaylinepenalty
-% \else
-% -\@getpen\dspbrk@lvl
-% \fi
-% }
-% \math@cr@@@
-% \noalign{\vskip#2\relax}
-% }
-% \makeatother
-% \ExplSyntaxOn
-% \end{verbatim}
-% Note that this definition automatically avoids problems within the
-% alignments even if it is called as |\\&|.
-%
-%
-%
-%
-% \subsection{Open issues}
-%
-% In this section unresolved issues or ideas to think about and
-% perhaps implement are collected. There is no particular order to
-% them.
-%
-% \begin{itemize}
-% \item
-% Support for parsing verbatim type of arguments was considered (and
-% actually implemented at one stage. E.g.,
-% |g{|\meta{prepare-parsing}|}| where |g| first run
-% \meta{prepare-parsing} (which might involve |catcode|
-% changes)\footnote{urg horror!}, then look at the next token: if
-% that would be a |{| it would scan a brace delimited argument
-% (reverting catcodes of |{| and |}| if needed) otherwise would scan
-% for an argument delimited by that token so that something like
-% |\verb+%\+| would scan |%\| as its argument assuming that the
-% \meta{prepare-parsing} turned |%| and |\| into non-letters.
-%
-% All kind of nasty problems lurking especially no proper error
-% checks possible and of course as we all know such commands would
-% then not work inside arguments of other commands. At least they
-% would have some restrictions.
-%
-% Also no way to make the parsing smart by not accepting newlines as
-% part of the code (|\verb| does this right now and this is really
-% helpful as it catches runaways nicely).
-%
-%
-% \item
-% \textsf{xparse} should probably go into the \LaTeX3 kernel in which
-% case it should also provide the definitions of |\begin| and |\end|
-% and this raises a few questions: Will environments be defined as
-% control sequences |\foo| and |\endfoo|? If they are do we then want
-% to include support for a separate command |\foo| and if so what
-% about using the environment forms in special scanner mechanisms
-% where we \emph{can't} use |\begin{foo}|? In those cases one could
-% use a special command like what the \textsf{fancyvrb} package
-% provides with the command |\VerbatimEnvironment| and all packages
-% that define such special arguments should then also make sure that
-% the |\foo| command issued on its own should cause an error.
-% Another solution would be to simply define environments as
-% |\beginfoo| and |\endfoo| and then let |\begin| check if it was
-% used to call an environment or a command. If the latter is the
-% case then insert grouping as that could be handled by |\beginfoo|
-% itself. When |\end| is reached check if |\endfoo| exists. If it
-% does then use that, otherwise we were probably using a normal
-% command which should just close the group.
-% \end{itemize}
-%
-%
-% \subsection{Rejected ideas---and why}
-%
-% Let's say the document command |\testmo| has signature |mo|. If we
-% call it as |\testmo{arg} [opt]| a following space will be obeyed.
-% However calling it with the mandatory argument only as in
-% |\testmo{arg}| will gobble a following space because the peek ahead
-% in the |o| type ignores spaces. We can record that a space has been
-% gobbled when peeking ahead and we can also put it back in if needed
-% but I have only ever seen one request for this and in that case the
-% better solution was to use a signature |mWo| so that no spaces are
-% allowed between the mandatory and the optional argument. One could
-% even argue that this is the most appropriate thing to do if the user
-% is really that sensitive to spaces! In any case it is not
-% implemented here as it creates an unnecessary overhead for something
-% that is never used and a simple solution exists.
-%
-% \subsection{Experimental features}
-%
-% Experimental features in an experimental packages\dots{} Needless to
-% say that you can't rely on them staying!
-%
-%
-% One new feature is what I decided to call ``pseudo
-% arguments''. Strictly speaking these aren't real arguments but
-% instead read by removing a begin group token and then using
-% |\tex_aftergroup:D| to regain control. The definition of |\footnote|
-% in plain \TeX\ uses this so that people can use
-% |\verb| and the like inside the footnotes. The command
-% |\DeclarePseudoArgument|\DescribeMacro{\DeclarePseudoArgument} takes
-% four arguments: |#1| is a name for the pseudo argument, |#2| is the
-% number of arguments it takes, |#3| is the action to be taken right
-% before the left brace is removed and |#4| is what to be done when
-% the right brace has been read and we regain control. Note that both
-% |#3| and |#4| may use arguments! Here is a silly example:
-% \begin{verbatim}
-% \DeclarePseudoArgument{boxtest}{1}
-% {Before:~`#1',\hbox_set_inline_begin:N \l_tmpa_box }
-% {\hbox_set_inline_end: \text_put_sp: the~ box:~
-% \hbox_unpack_and_clear:N\l_tmpa_box ,~
-% After:~`#1'}
-% \end{verbatim}
-% Now when you want to use it, you simply call it with the macro
-% |\UsePseudoArgument|\DescribeMacro{\UsePseudoArgument}, which as its
-% first argument takes a name and the remaining depend on how many
-% arguments the pseudo argument was defined to have. Hence we could
-% use our |boxtest| definition like this:
-% \begin{verbatim}
-% \DeclareDocumentCommand\sillyboxtest{m}{
-% Testing~#1:~\UsePseudoArgument{boxtest}{#1}
-% }
-% \end{verbatim}
-% Then calling |\sillyboxtest{AB}{a\verb*+% $%&\+b}| produces
-% \begin{quote}
-% Testing AB: Before: `AB', the box:
-% a\verb*+% $%&\+b, After: `AB'
-% \end{quote}
-% |\UsePseudoArgument| should always come last in the document
-% command definition.
-%
-% \StopEventually{}
-%
-% \section{Implementation}
-%
-% Versions prior to and including 1.19 contained several different
-% implementations. These are gone now but can be looked at by
-% getting an older version of the package from the CVS repository.
-%
-% First the required packages.
-% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-\RequirePackage{l3tlp,l3num,l3toks,l3prg,l3int,l3seq,l3token}
-% \end{macrocode}
-%
-%
-%
-% \subsection{Error and warning messages}
-%
-% Here we define the error message we're going to use in this package.
-%
-% \begin{macro}{\xparse_already_defined_error_msg:N}
-% \begin{macro}{\xparse_not_yet_defined_error_msg:N}
-% \begin{macro}{\xparse_begins_with_end_error_msg:N}
-% \begin{macro}{\xparse_unknown_arg_type_error_msg:N}
-% \begin{macro}{\xparse_number_of_arguments_error_msg:Nn}
-% \begin{macro}{\xparse_no_command_implementation_warning:n}
-% The names should give the function's purpose away.
-% \begin{macrocode}
-\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'!
- }
-}
-% \end{macrocode}
-% This one is for when we've encountered an unknown argument type in
-% the argument specification. We can try to recover by putting in an
-% |m| type instead and hope for the best.
-% \begin{macrocode}
-\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...
- }
-}
-% \end{macrocode}
-% A message for people using the wrong number of arguments.
-% \begin{macrocode}
-\def_new:NNn \xparse_no_command_implementation_warning:n 1 {
- \xparse_warning:x {No~ implementation~ for~ `#1'~ defined}
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\xparse_error:x}
-% \begin{macro}{\xparse_warning:x}
-% Here's how we produce the error messages and warnings currently.
-% This awaits a proper error message module!
-% \begin{macrocode}
-\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}}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \subsection{Checking for valid command names}
-%
-%
-% \begin{macro}{\xparse_if_definable:NT}
-% \begin{macro}{\xparse_if_definable:cT}
-% A definable command is either |\c_undefined| or |\scan_stop:| and
-% furthermore we won't allow it to start with |\end|.
-% If the command is definable we do what was asked for otherwise
-% we give an appropriate error message.
-% \begin{macrocode}
-\def_new:NNn \xparse_if_definable:NTF 1 {
-% \end{macrocode}
-% First check if the control sequence is free.
-% \begin{macrocode}
- \cs_free:NTF #1
-% \end{macrocode}
-% If free check if it begins with |\end|.
-% \begin{macrocode}
- {
- \xparse_begins_with_end:NTF #1
- { \xparse_begins_with_end_error_msg:N #1 \use_arg_ii:nn }
- \use_arg_i:nn
- }
-% \end{macrocode}
-% If not free give an error message.
-% \begin{macrocode}
- { \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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\xparse_if_redefinable:NTF}
-% \begin{macro}{\xparse_if_redefinable:cTF}
-% A re-definable command is almost the same as above but here we
-% demand that it already exists.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\xparse_begins_with_end:NTF}
-% \begin{macro}{\xparse_begins_with_end_aux:N}
-% Finally we need the magic function for checking if the control
-% sequence begins with |\end|.
-% We wish to determine if the control sequence in question begins with
-% |\end| which is forbidden. The end goal is to get a control sequence
-% consisting of the first three letters to test against |\end| with
-% |\cs_if_eq_name_p:NN|. The function |\cs_to_str:N| will remove the |\|
-% from a command name and return the rest of the characters with
-% category code 12. Thus using an |f| type expansion to get the first
-% three characters is perfectly safe as it'll stop right there. Then
-% we turn these three letters into a control sequence with a simple
-% expansion which is then tested with |\xparse_begins_with_end_aux:N|.
-% \begin{macrocode}
-\def_new:NNn \xparse_begins_with_end:NTF 1 {
-% \end{macrocode}
-% We do it all in a group as there is no need to fill up the hash
-% table with weird three letter control sequences.
-% \begin{macrocode}
- \group_begin:
- \exp_args:Nc \xparse_begins_with_end_aux:N {
- \tlist_head_iii:f { \cs_to_str:N #1 ??}
- }
-}
-% \end{macrocode}
-% After the above expansion tricks we now have a real control sequence
-% to test against |\end|. We end the group again.
-% \begin{macrocode}
-\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:
-}
-% \end{macrocode}
-% Note that these definitions make no use of temporary variables.
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \subsection{The high level commands}
-%
-%
-% Here we set up the functions for defining and redefining document
-% commands and environments. It's all rather straight forward here so
-% I've saved on the comments.
-%
-% \begin{macro}{\DeclareDocumentCommand}
-% \begin{macro}{\ReDeclareDocumentCommand}
-% In case we can't do what the user wanted we gobble the next
-% arguments from the input stream. For commands there are two
-% arguments waiting.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\DeclareDocumentEnvironment}
-% \begin{macro}{\ReDeclareDocumentEnvironment}
-% Three arguments for environments.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ProvideDocumentCommand}
-% \begin{macro}{\ProvideDocumentEnvironment}
-% When providing a command we just check if the control sequence is
-% free. If it is let |\DeclareDocument...| do the rest, otherwise
-% gobble the next arguments.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \subsection{The low level definitions}
-%
-%
-% First some helper functions
-% \begin{macro}{\l_xparse_grabbed_args_toks}
-% \begin{macro}{\l_xparse_end_environment_args_toks}
-% \begin{macro}{\l_xparse_mandatory_args_int}
-% \begin{macro}{\l_xparse_total_args_int}
-% We need some \meta{token} registers to keep track of things. We also
-% allocate an \meta{int} register to keep track of the number of
-% arguments.
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\xparse_declare_document_command:Nnn}
-% \begin{macro}{\xparse_declare_document_command:cnn}
-% |\xparse_declare_document_command:Nnn| is a two step procedure. The
-% user level command |\|\meta{cmd} contains the argument grabbers
-% while the internal command |\\|\meta{cmd} holds the actual
-% definition of what to do with the arguments. Naturally this calls
-% for every such user level command to be robust which is done using
-% the \eTeX{} protection feature.
-% \begin{macrocode}
-\def_long:NNn \xparse_declare_document_command:Nnn 3{
-% \end{macrocode}
-% First we prepare the signature.
-% \begin{macrocode}
- \xparse_prepare_signature:n {#2}
-% \end{macrocode}
-% Now for the document command. Make it robust and make sure it starts
-% with |\toks_set:Nn \l_xparse_grabbed_args_toks {\\|\meta{cmd}|}|.
-% \begin{macrocode}
- \def_protected:Npx #1 {
- \exp_not:n { \toks_set:Nn \l_xparse_grabbed_args_toks }
- {\exp_not:c {\token_to_string:N #1}}
-% \end{macrocode}
-% Then add the argument grabbers which contain code gathered when
-% preparing the signature.
-% \begin{macrocode}
- \toks_use:N \l_xparse_grabbed_args_toks
-% \end{macrocode}
-% Finally execute |\toks_use:N \l_xparse_grabbed_args_toks| which now
-% holds the grabbed arguments enclosed in braces and starts with the
-% internal command |\\|\meta{cmd}.
-% \begin{macrocode}
- \exp_not:n{ \toks_use:N \l_xparse_grabbed_args_toks}
- }
-% \end{macrocode}
-% Define the internal command by making it a |\long| macro with number
-% of arguments equal to |\l_xparse_total_args_int| and definition as
-% given by |#3|. Even though this internal macro allows |\par| in its
-% argument the decision is left to the individual argument grabbers.
-% \begin{macrocode}
- \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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\xparse_declare_document_environment:nnnn}
-% |\xparse_declare_document_environment:nnnn| is almost the same. In
-% order to use the grabbed arguments we take them from
-% |\l_xparse_grabbed_args_toks| just before they are executed. We
-% also insert a |\group_begin:| as it will otherwise fail miserably
-% in case a user tries to use it without |\begin ... \end|.
-% \begin{macrocode}
-\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
- }
-% \end{macrocode}
-% We let |\end|\meta{envir} equal to a standard version which will do
-% all the work.
-% \begin{macrocode}
- \let:cN {end #1} \xparse_parsed_end_environment:
-% \end{macrocode}
-% Now define |\end\\|\meta{envir}.
-% \begin{macrocode}
- \def_long:cNn {end \token_to_string:N \\ #1}
- \l_xparse_total_args_int{#4}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xparse_parsed_end_environment:}
-% \begin{macro}{\xparse_parsed_end_environment_aux:N}
-% |\end|\meta{envir} is set equal to |\xparse_parsed_end_environment:|
-% which then executes |\end\\|\meta{envir}. The |\\|\meta{envir} comes
-% from the argument grabbing. The remainder of the token list is the
-% grabbed arguments. We better make this robust as well.
-% \begin{macrocode}
-\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 }
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \subsubsection{A class designer interface}
-%
-% Below is the implementation of |\DeclareDocumentCommandInterface|
-% and the close cousin |\DeclareDocumentCommandImplementation|.
-% It is an open issue whether this concept should be supported.
-%
-% \begin{macro}{\DeclareDocumentCommandInterface}
-% With this macro we define the document command |#1| to have
-% signature |#3| which does the argument grabbing. The arguments are
-% passed on to the internal command |\impl-#2|.
-% \begin{macrocode}
-\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}
- }
-% \end{macrocode}
-% Define the internal command by making it a |\long| macro as we did
-% for |\DeclareDocumentCommand| but give it just a default definition
-% instead (usually an error message).
-% \begin{macrocode}
- \def_long:cNn {impl-#2} \l_xparse_total_args_int
- {\xparse_undefined_command_implementation:n{#2}}
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\xparse_undefined_command_implementation:n}
-% What to do if no implementation is made and the command is
-% called. Let's just typeset the name in quotes indicating that
-% something is wrong.
-% \begin{macrocode}
-\def_new:NNn \xparse_undefined_command_implementation:n 1{
- ``#1''
-% \ensuremath{\langle\textit{#1}\rangle}
- \xparse_no_command_implementation_warning:n {#1}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DeclareDocumentCommandImplementation}
-% Defines the internal command |\impl-#1| with |#2| arguments
-% and definition |#3|.
-% \begin{macrocode}
-\def_long_new:NNn \DeclareDocumentCommandImplementation 3{
- \def_long:cNn {impl-#1}#2{#3}
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Creating the signature}
-%
-%
-% \begin{macro}{\xparse_prepare_signature:n}
-% The actual preparation of the signature is always the same but we
-% have different ways of handling it afterwards, so we make it a
-% separate function.
-% \begin{macrocode}
-\def_new:NNn \xparse_prepare_signature:n 1 {
-% \end{macrocode}
-% Initialize the counter taking care of the number of arguments. In
-% case we reach more than nine we will give an error message later on.
-% \begin{macrocode}
- \int_zero:N \l_xparse_total_args_int
-% \end{macrocode}
-% Clear the token register we use when building the signature and the
-% number of ``normal'' mandatory arguments. Also clear out the special
-% markers and initialize the two booleans to \meta{false}.
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% Then call |\xparse_parse_signature:n|.
-% \begin{macrocode}
- \xparse_parse_signature:n #1 \q_nil
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{The argument types}
-%
-%
-%
-% All argument types must be denoted by single letters.\footnote{You
-% can use a multi-letter sequence to denote a shorthand but it
-% requires you to put two brace groups around it in the signature and
-% it's not officially supported.} We have three categories of letters:
-% Special markers, basic argument types, and shorthands.
-%
-% For certain argument types where we peek ahead in the token stream
-% we have a multitude of choices for how the macro should work:
-% Should it ignore spaces or other tokens? Which test should it use
-% for comparing tokens: meaning, catcode or charcode? Because of
-% these difficulties every argument that require peeking ahead must
-% be declared as one of the three test types.
-%
-% \subsubsection{Special markers}
-%
-% Since there are different markers that may be used at the same
-% time, we use the a special ``insert'' marker |>| to do this.
-%
-% \begin{macro}{\g_xparse_ignore_marker_tlp}
-% The current ignore marker is contained in this string.
-% \begin{macrocode}
-\tlp_new:Nn \g_xparse_ignore_marker_tlp {}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\g_xparse_ignore_marker_seq}
-% We start out by declaring a new sequence to contain all the
-% different types of ignore functions. Each element should be the
-% missing part of a |\peek_meaning|\meta{text}|:NTF| function.
-% \begin{macrocode}
-\seq_new:N \g_xparse_ignore_marker_seq
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\g_xparse_insert_marker_bool}
-% A boolean to check if we just saw an insert marker.
-% \begin{macrocode}
-\bool_new:N \g_xparse_insert_marker_bool
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xparse_add_arg_type_>:}
-% The insert marker is called when this is seen. Is has a funny
-% definition but it works. |#1| is some test in the loop function
-% and |#2| is the list of markers.
-% \begin{macrocode}
-\def_new:cpn {xparse_add_arg_type_>:} #1
- \xparse_read_arg_type_or_grab_default:n #2{
-% \end{macrocode}
-% Insert pending |m| args first.
-% \begin{macrocode}
- \xparse_add_remaining_m_args:
-% \end{macrocode}
-% Then we set the boolean true and subtract one from the argument
-% count.
-% \begin{macrocode}
- \bool_gset_true:N \g_xparse_insert_marker_bool
- \int_decr:N \l_xparse_total_args_int
-% \end{macrocode}
-% Then go through the list and call each subtype if it exists.
-% \begin{macrocode}
- \tlist_map_inline:nn{#2}{
- \xparse_check_and_add_argument_type:N ##1
- }
-% \end{macrocode}
-% Finally call the loop again.
-% \begin{macrocode}
- \xparse_parse_signature:n
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xparse_add_ignore_marker:Nnn}
-% A small function for adding a new ignore type marker.
-% \begin{macrocode}
-\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}
- }
-}
-% \end{macrocode}
-% \end{macro}
-% Here we add some ignore markers.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-%
-% \begin{macro}{\xparse_add_arg_type_P:}
-% This is simple, just set a boolean.
-% \begin{macrocode}
-\def_new:NNn \xparse_add_arg_type_P: 0{
- \bool_gset_true:N \g_xparse_allow_par_bool
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\g_xparse_allow_par_bool}
-% The boolean for allowing the |\par| token.
-% \begin{macrocode}
-\bool_new:N \g_xparse_allow_par_bool
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\xparse_parse_signature:n}
-% |\xparse_parse_signature:n| reads the signature one token/brace
-% group at a time and builds a list of argument grabbers which is
-% stored in |\l_xparse_grabbed_args_toks|. The function is recursive
-% which is why we use a quark to delimit it.
-% \begin{macrocode}
-\def_new:NNn \xparse_parse_signature:n 1{
-% \end{macrocode}
-% Check if we reached the end of the signature.
-% \begin{macrocode}
- \quark_if_nil:NTF #1
-% \end{macrocode}
-% If we did we may have pending |m| type arguments so we clear them
-% out here. Also check if the insert marker is true because if it is,
-% something is wrong. Otherwise we just continue.
-% \begin{macrocode}
- {
- \xparse_add_remaining_m_args:
- }
-% \end{macrocode}
-% Then proceed with adding arguments.
-% \begin{macrocode}
- {
- \int_incr:N \l_xparse_total_args_int
- \xparse_check_and_add_argument_type:N #1
-% \end{macrocode}
-% If the insert marker is true at this point we reset it again and
-% also disallow |\par| in arguments and make all |\peek| functions use
-% the |_ignore_spaces| versions.
-% \begin{macrocode}
- \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
- }
-% \end{macrocode}
-% After adding arguments we better set the boolean false in case we
-% don't have an insert marker.
-% \begin{macrocode}
-% \end{macrocode}
-% First we add the remaining |m| arguments.
-% \begin{macrocode}
-% \end{macrocode}
-% Then we run the loop again.
-% \begin{macrocode}
- \xparse_read_arg_type_or_grab_default:n
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\xparse_check_and_add_argument_type:N}
-% This function checks if the argument type actually exists and gives
-% an error if it doesn't.
-% \begin{macrocode}
-\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
- }
-% \end{macrocode}
-% Otherwise we just add it with its dedicated function.
-% \begin{macrocode}
- { \cs_use:c {xparse_add_arg_type_#1:} }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\xparse_read_arg_type_or_grab_default:n}
-% \begin{macro}{\xparse_grab_default_arg:n}
-% \begin{macro}{\xparse_grab_default_arg_allow_par:n}
-% The function for grabbing a default value. The default setting is
-% just to tun the loop again. However, some argument types need to
-% add a default argument so we add these as well.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \subsubsection{The default argument types}
-%
-%
-%
-% When scanning the signature we need to add the argument type which
-% is done by a function |\xparse_add_arg_type_|\meta{X}|:|, where
-% \meta{X} is the letter denoting the argument type. If not found an
-% error message is issued ny |\xparse_unknown_arg_type_error_msg:N|.
-%
-% By default the package implements the argument types |m|, |S|, |c|,
-% |C|, |o|, and |O| argument types as low level ones. The |s| type is
-% a shorthand as we shall see later.
-%
-% As we don't make every single |m| argument a separate grabber all
-% other types must clear out any pending |m|s.
-%
-% \paragraph{Mandatory arguments}
-%
-% Below follows the implementation of mandatory arguments.
-%
-% \begin{macro}{\xparse_add_arg_type_m:}
-% Check if the user asked for an |m| argument allowing |\par|
-% tokens and insert it. Otherwise increment the number of
-% non-|\long| argument grabbers.
-% \begin{macrocode}
-\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 }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xparse_add_remaining_m_args:}
-% And here is the function for clearing out normal pending |m|
-% arguments. There is little point in adding any arguments if none
-% are required.
-% \begin{macrocode}
-\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
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\xparse_m1:w}
-% \begin{macro}{\xparse_m2:w}
-% \begin{macro}{\xparse_m3:w}
-% \begin{macro}{\xparse_m4:w}
-% \begin{macro}{\xparse_m5:w}
-% \begin{macro}{\xparse_m6:w}
-% \begin{macro}{\xparse_m7:w}
-% \begin{macro}{\xparse_m8:w}
-% \begin{macro}{\xparse_m9:w}
-% Grabbing 1--9 mandatory arguments. The one grabbing nine arguments
-% will automatically end with
-% |\toks_use:N \l_xparse_grabbed_args_toks| anyway so we avoid
-% problems with that one.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\xparse_allow_par_m:w}
-% The |m| type allowing |\par| tokens. We only define one of them as
-% two in a row would be quite rare.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \paragraph{Arguments delimited by a left brace}
-%
-% \begin{macro}{\xparse_add_arg_type_l:}
-% \begin{macro}{\xparse_l:w}
-% \begin{macro}{\xparse_allow_par_l:w}
-% This is almost exactly the same as the |m| type except we read
-% everything up to the first left brace.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \paragraph{Adding a symbol argument type}
-%
-%
-% \begin{macro}{\DeclareSymbolArgument}
-% The actual grabber functions just issue a |\peek_meaning_remove:NTF|
-% or similar on the symbol chosen. If found, we put a |\c_true| on the
-% argument stack and |\c_false| otherwise.
-% \begin{macrocode}
-\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
- }
- }
- }
-% \end{macrocode}
-% Implementing a symbol type is fairly straight forward. It needs to
-% grab a default argument. First we must clear out any pending |m|
-% arguments.
-% \begin{macrocode}
- \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 } }
-% \end{macrocode}
-% Nothing special when building the signature: We always grab a single
-% default argument.
-% \begin{macrocode}
- \let:NN \xparse_read_arg_type_or_grab_default:n \xparse_grab_default_arg:n
- }
-}
-% \end{macrocode}
-% It is this easy now:
-% \begin{macrocode}
-\DeclareSymbolArgument S{meaning}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{Adding delimited arguments}
-%
-%
-% \begin{macro}{\DeclareArgumentType}
-% Argument types that read their argument delimited as the |o| type
-% can be defined with this function. |#1| is the letter associated
-% with the type, |#3| is the test type we should use, i.e.,
-% meaning, charcode or catcode. |#2| is the left delimiter \LaTeX{}
-% will look for, |#4| can be used for an error message or such in
-% case of a missing value, and |#5| the value inserted in case the
-% optional argument is missing. The last two arguments control how
-% the arguments are picked up and parsed on to the inner parsing.
-% \begin{macrocode}
-\def_new:NNn \DeclareArgumentType 7{
-% \end{macrocode}
-% For instance, we want |\DeclareArgumentType a{charcode}[...| to
-% define the function |\xparse_ignore_spaces_a:w| with meaning
-% |\peek_charcode_ignore_spaces:NTF [{...}{...}|. We want to define a
-% series of functions for each of these delimited argument types. One
-% for each of the |ignore| types plus an identical version of each of
-% these allowing the |\par| token in the argument. All the different
-% ignore types are stored in the sequence
-% |\g_xparse_ignore_marker_seq| so we go through that when doing the
-% definitions.
-% \begin{macrocode}
- \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
- }
- }
-% \end{macrocode}
-% And now an almost identical version which allows the |\par| token.
-% \begin{macrocode}
- \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
- }
- }
- }
-% \end{macrocode}
-% Here is the function for building the argument grabbing. We clear
-% out the remaining |m| arguments first.
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% Insert |_allow_par| in the csname if needed. This also applies to
-% the argument grabber (although this should probably just be the
-% default).
-% \begin{macrocode}
- \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
- }
-% \end{macrocode}
-% Now all we need to do is to define the helper functions.
-% \begin{macrocode}
- \xparse_define_helper:Nnnn #1{#3}{#6}{#7}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DeclareArgumentTypeDefaultValue}
-% The same as above but expects a default value in the signature.
-% Therefore it doesn't have the arguments of the default value and
-% what to do if it is missing like the above.
-% \begin{macrocode}
-\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
- }
- }
-% \end{macrocode}
-% And now an almost identical version which allows the |\par| token.
-% \begin{macrocode}
- \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
- }
- }
- }
-% \end{macrocode}
-% Here is the function for building the argument grabbing. We clear
-% out the remaining |m| arguments first.
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% Insert |_allow_par| in the csname if needed. This also applies to
-% the argument grabber (although this should probably just be the
-% default).
-% \begin{macrocode}
- \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
- }
- }
-% \end{macrocode}
-% Now all we need to do is to define the helper functions.
-% \begin{macrocode}
- \xparse_define_helper:Nnnn #1{#3}{#4}{#5}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xparse_define_helper:Nnnn}
-% All we need now is the helper functions. We define a generic
-% interface that should be fairly easy to use.
-% \begin{macrocode}
-\def_new:NNn \xparse_define_helper:Nnnn 4{
- \toks_set:Nn \l_tmpa_toks
- {
- #3
- {
-% \end{macrocode}
-% Remember to add an extra set of braces here.
-% \begin{macrocode}
- \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#4}}
- ##1 \l_xparse_grabbed_args_toks
- }
- }
-% \end{macrocode}
-% The next bit looks a little ugly but that's life.
-% \begin{macrocode}
- \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
-}
-% \end{macrocode}
-% \end{macro}
-%
-% All the above may seem like an awful lot of trouble but it is
-% general and it allows the following simple definitions:
-% \begin{macrocode}
-\DeclareArgumentType o[{meaning}{}{\NoValue}{#1[#2]}{#2}
-% \end{macrocode}
-% For the |c| type we add give an error message.
-% \begin{macrocode}
-\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}}
-% \end{macrocode}
-% One could also do
-% \begin{verbatim}
-% \DeclareArgumentTypeDefaultValue O[{charcode}{#1#2#3]}{#3}
-% \end{verbatim}
-% where argument |#2| is the bracket but not requiring it to have
-% catcode~12. However we can't use the same trick for reading the end
-% of the argument.
-%
-% Another interesting one could be
-% \begin{verbatim}
-% \DeclareArgumentType a\c_group_begin_token{catcode}{}{\NoValue}{#1#2}{#2}
-% \end{verbatim}
-% which would basically be an optional argument in braces.
-%
-%
-%
-% \subsubsection{Argument shorthands}
-%
-%
-% \begin{macro}{\DeclareArgumentTypeShorthand}
-% Letting a letter or symbol be a shorthand for a more complicated
-% structure is rather easy actually. All we need to do is to gobble
-% the remainder of the main loop in the signature creation until
-% |\xparse_parse_signature:n|, decrement the argument counter, put
-% in the replacement argument specifiers and start the loop
-% again. The disadvantage of this scheme is that we have to cheat
-% and give it the wrong name as it should have a |w| argument
-% specification but I hope you can forgive this little white lie.
-% \begin{macrocode}
-\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
- }
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\xparse_add_arg_type_s:}
-% Defining the |s| type is easy now since it really means |S{*}|.
-% \begin{macrocode}
-\DeclareArgumentTypeShorthand s {S{*}}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Checking for optional values}
-%
-%
-% \begin{macro}{\IfBooleanTF}
-% \begin{macro}{\IfBooleanT}
-% \begin{macro}{\IfBooleanF}
-% The logical \meta{true} and \meta{false} statements are just our
-% normal |\c_true| and |\c_false| so testing for them is done with
-% our usual |\bool_if:NTF| functions from \textsf{l3prg}.
-% \begin{macrocode}
-\let_new:NN \IfBooleanTF \bool_if:NTF
-\let_new:NN \IfBooleanT \bool_if:NT
-\let_new:NN \IfBooleanF \bool_if:NF
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\NoValue}
-% \begin{macro}{\c_xparse_hidden_no_value_tlp}
-% |\NoValue| is just a text string and we define it as a token list
-% pointer. However we will actually test for token list pointers
-% with \emph{meaning} |\NoValue|. Hence if an argument is really
-% |-NoValue-| it will not be detected but that shouldn't happen.
-% \begin{macrocode}
-\tlp_new:Nn \NoValue {-NoValue-}
-\tlp_new:Nn \c_xparse_hidden_no_value_tlp {\NoValue}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\xparse_if_no_value:nTF}
-% The test start by making a token list pointer out of the first
-% argument and then check if it is equal to
-% |\c_xparse_hidden_no_value_tlp| which contains |\NoValue|.
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% If they are equal we just exit and execute the \meta{true} code.
-% \begin{macrocode}
- { \use_arg_i:nn }
-% \end{macrocode}
-% If not, take a closer look at |#1|. Peek ahead at the first token in
-% |#1| and then call the function |\xparse_if_no_value_aux:| but only
-% if |#1| is not empty or a blank space: in that case we can execute
-% the \meta{false} code immediately. We must use this test at some
-% point otherwise the macros for checking tokens will break since the
-% argument may be empty.
-% \begin{macrocode}
- { \tlist_if_blank:nTF {#1}
- { \use_arg_ii:nn }
- {\peek_after:NN \xparse_if_no_value_aux: #1 \q_nil {#1} }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xparse_if_no_value_aux:}
-% Now we simply check the argument specification of the token. If
-% it is not a macro the function |\token_get_arg_spec:N| returns
-% |\scan_stop:|.
-% \begin{macrocode}
-\def_long_new:Npn \xparse_if_no_value_aux: {
- \tlp_set:Nx \l_tmpa_tlp{\token_get_arg_spec:N \l_peek_token }
-% \end{macrocode}
-% Then check if |\l_tmpa_tlp| is empty, because this means we have a
-% macro taking zero arguments and we can expand it once
-% safely. Otherwise we just exit and execute the false code. Remember
-% that we have the sequence |{#1}| waiting after the |\q_nil| in
-% |\xparse_if_no_value:nTF| above.
-% \begin{macrocode}
- \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}}
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\IfNoValueTF}
-% \begin{macro}{\IfNoValueT}
-% \begin{macro}{\IfNoValueF}
-% \begin{macro}{\IfValueTF}
-% \begin{macro}{\IfValueT}
-% \begin{macro}{\IfValueF}
-% |\IfNoValueTF| and its varieties are implemented as subcases of
-% |\xparse_if_no_value:nTF|.
-% \begin{macrocode}
-\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}{}}
-% \end{macrocode}
-% For |\IfValueTF| we just reverse the arguments.
-% \begin{macrocode}
-\def_long_new:NNn \IfValueTF 3{\xparse_if_no_value:nTF {#1}{#3}{#2}}
-\let_new:NN \IfValueT \IfNoValueF
-\let_new:NN \IfValueF \IfNoValueT
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \subsection{Pseudo arguments}
-%
-% \begin{macro}{\l_xparse_pseudo_post_arg_tlp}
-% A temporary token list pointer to store the post-arguments.
-% \begin{macrocode}
-\tlp_new:Nn \l_xparse_pseudo_post_arg_tlp {}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\DeclarePseudoArgument}
-% Must be called at the end of the replacement text. Can use the
-% parameters picked up so far. |#1| is a name for it, |#2| is the
-% number of arguments, |#3| is the pre-argument definition, |#4| is
-% the post-argument definition. The idea here is to define two
-% functions: One to execute before the special pseudo argument is
-% found and one to to it afterwards. Hence we define such two
-% functions with |#2| arguments and definitions |#3| and |#4|
-% respectively.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% In case the user doesn't put the argument in braces, it must be a
-% single token which we just grab and then execute the
-% post-argument. Surely it won't be a |\par| token!
-% \begin{macrocode}
- \def:cNn {xparse_pseudo_nobrace_arg_#1:N} 1 {
- ##1 \l_xparse_pseudo_post_arg_tlp
- }
-% \end{macrocode}
-% The regular version of the command is then this:
-% \begin{enumerate}
-% \item Execute the pre-code at level $n$.
-% \item Store the post-code in a token list pointer at level $n$.
-% \item Look for a begin-group token.
-% \item[4a] If found, remove it, start a group (level $n+1$) and make
-% sure the token list pointer from 2) is executed after the group
-% has ended (at level $n$).
-% \item[4b] If not found, call the |nobrace_arg| version which also
-% executes the token list pointer from 2) at level $n$.
-% \end{enumerate}
-% This scheme enables these commands to be nested since they all
-% appear at different grouping levels.
-%
-% Next we define the function. Also make sure that it gets all the
-% arguments carried over to the post-argument.
-% \begin{macrocode}
- \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 }
- {
-% \end{macrocode}
-% Here we insert the left brace token which was removed removed.
-% In case you're wondering then yes, I know that |\c_group_begin_token|
-% and |\group_execute_after:N| are unexpandable but I prefer this method
-% because I don't want to remember which commands are expandable and
-% which are not.
-% \begin{macrocode}
- \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}
- }
- }
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\UsePseudoArgument}
-% Just a nice wrapper for calling such an argument.
-% \begin{macrocode}
-\def_new:NNn \UsePseudoArgument 1{\cs_use:c{xparse_pseudo_arg_#1:w}}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \Finale
-%
-\endinput
-%
-% $Log$
-% Revision 1.25 2006/07/17 22:25:53 morten
-% Minor change to reflect change in l3basics.dtx
-%
-% Revision 1.24 2006/07/08 22:44:29 morten
-% Fixed two lurking problems in \xparse_if_no_value:nTF.
-%
-% Revision 1.23 2006/07/06 14:56:04 morten
-% Change to use new \def:NNn syntax
-%
-% Revision 1.22 2006/01/17 23:04:08 morten
-% Added `l' type argument for reading up to a left brace.
-%
-% Revision 1.21 2006/01/04 02:42:35 morten
-% Changed RCS information retrieval. Rewrote \DeclareArgumentType and
-% its relatives in order for them to work properly with the new \peek_
-% functions. Changed how special markers are inserted into the
-% signature. Added `pseudo arguments'. Updated documentation to reflect
-% all these changes. And more which I can't remember right now :-)
-%
-% Revision 1.20 2005/04/06 21:24:47 morten
-% Total rewrite - there is only one implementation in the package
-% now. Documentation updated to match the changes.
-%
-%
-%
diff --git a/Master/texmf-dist/tex/latex/xbase/ldcsetup.sty b/Master/texmf-dist/tex/latex/xbase/ldcsetup.sty
deleted file mode 100644
index 57d5e448d17..00000000000
--- a/Master/texmf-dist/tex/latex/xbase/ldcsetup.sty
+++ /dev/null
@@ -1,192 +0,0 @@
-%%
-%% 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-2007 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 636 2007-09-12 20:03:06Z mittelba $
- {coding conventions and stuff}
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-\RequirePackage{keyval,l3calc}
-\ExplSyntaxOff
-%% 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
-\ExplSyntaxOn
-\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:NN \SetInternalCounter \calc_int_set:Nn
-\let:NN \GSetInternalCounter\calc_int_gset:Nn
-\def\UndeclareRobustCommand#1{%
- \cs_gundefine:N #1
- \exp_args:Nc \cs_gundefine:N {\cs_to_str:N #1~}
-}
-\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
deleted file mode 100644
index 1a00efd1107..00000000000
--- a/Master/texmf-dist/tex/latex/xbase/template.sty
+++ /dev/null
@@ -1,569 +0,0 @@
-%%
-%% 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-2007 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 652 2007-09-21 20:35:36Z morten $
- {template}
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-\RequirePackage{ldcsetup,xparse}
-\RequirePackage{l3toks,l3tlp,l3skip,l3int,l3clist,l3token,l3calc}
-\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_long_new:Npn \TP_push_assignments:n#1{
- \toks_gput_left:Nn\g_TP_assignments_stack_toks{{#1}}
-}
-\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:Nf #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 {\exp_stop_f:##1}
- }
- \toks_gput_right:Nn\g_TP_multiselection_toks {
- \else: \use_arg_i_after_fi:nw { \exp_stop_f: #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:o { \toks_use:N #2 }
- }
- }
- \toks_gput_right:Nn \g_TP_multiselection_toks {
- \else: \use_arg_i_after_fi:nw{#6}\fi:
- }
-}
-\def_new:Npn \TP_multiselection_add_or_case:n #1 {
- \toks_gput_right:Nn \g_TP_multiselection_toks {
- \or: \use_arg_i_after_orelse:nw{#1}
- }
-}
-\def_new:Npn \TP_multiselection_add_or_case:o {
- \exp_args:No \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:cx { 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
deleted file mode 100644
index 193844abbdf..00000000000
--- a/Master/texmf-dist/tex/latex/xbase/xparse.sty
+++ /dev/null
@@ -1,561 +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-2007 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 700 2007-11-27 14:18:29Z morten $
- {generic document command parser}
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-\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 \bool_if:NTF
-\let_new:NN \IfBooleanT \bool_if:NT
-\let_new:NN \IfBooleanF \bool_if: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'.