From 2112c5c376a5f15eb41858a07b27752e1006ec03 Mon Sep 17 00:00:00 2001 From: Manuel Pégourié-Gonnard Date: Tue, 5 Aug 2008 13:31:43 +0000 Subject: rm xparse git-svn-id: svn://tug.org/texlive/trunk@10096 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/doc/latex3/xparse/xparse-test.tex | 230 ---- .../texmf-dist/source/latex3/xparse/ldcsetup.dtx | 264 ---- Master/texmf-dist/source/latex3/xparse/xparse.dtx | 1339 -------------------- Master/texmf-dist/source/latex3/xparse/xparse.ins | 13 - Master/texmf-dist/tex/latex3/xparse/ldcsetup.sty | 118 -- Master/texmf-dist/tex/latex3/xparse/xparse.sty | 218 ---- 6 files changed, 2182 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex3/xparse/xparse-test.tex delete mode 100644 Master/texmf-dist/source/latex3/xparse/ldcsetup.dtx delete mode 100644 Master/texmf-dist/source/latex3/xparse/xparse.dtx delete mode 100644 Master/texmf-dist/source/latex3/xparse/xparse.ins delete mode 100644 Master/texmf-dist/tex/latex3/xparse/ldcsetup.sty delete mode 100644 Master/texmf-dist/tex/latex3/xparse/xparse.sty (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex3/xparse/xparse-test.tex b/Master/texmf-dist/doc/latex3/xparse/xparse-test.tex deleted file mode 100644 index 96fd7f4c48a..00000000000 --- a/Master/texmf-dist/doc/latex3/xparse/xparse-test.tex +++ /dev/null @@ -1,230 +0,0 @@ -% xparse-test.tex - -\RequirePackage{xparse} - -\typeout{Testing the complicated makebox setup} -\typeout{*****************************} -\typeout{* look at dvi output for this part} -\typeout{*****************************} - -\IgnoreWhiteSpace - -\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 } - } - -\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 - } - } - -\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@} - } - } - -\documentclass{minimal} - -\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 { 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)} - -\DeclareDocumentCommand \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} - - -\DeclareDocumentCommand \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 -\makeatletter\showthe\toks@ -\baz 234678 -\makeatletter\showthe\toks@ - -%\tracingall\tracingassigns=1 -\DeclareDocumentCommand \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 -\makeatletter\showthe\toks@ - -\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{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{****************} - - - -\DeclareDocumentCommand\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/source/latex3/xparse/ldcsetup.dtx b/Master/texmf-dist/source/latex3/xparse/ldcsetup.dtx deleted file mode 100644 index c280221b7e5..00000000000 --- a/Master/texmf-dist/source/latex3/xparse/ldcsetup.dtx +++ /dev/null @@ -1,264 +0,0 @@ -% \iffalse -%% -%% (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle -%% All rights reserved. -%% -%% Not for general distribution. In its present form it is not allowed -%% to put this package onto CD or an archive without consulting the -%% the authors. -%% -%<*dtx> - \ProvidesFile{ldcsetup.dtx} -% -%\NeedsTeXFormat{LaTeX2e} -%\ProvidesPackage{ldcsetup} -%\ProvidesFile{ldcsetup.drv} -% \fi -% \ProvidesFile{ldcsetup.dtx} - [1999/09/10 v0.04 coding conventions and stuff] -% -% \iffalse -%<*driver> -\documentclass{ltxdoc} -\begin{document} -\DocInput{ldcsetup.dtx} -\end{document} -% -% \fi -% -% \CheckSum{249} -% -% \GetFileInfo{ldcsetup.dtx} -% -% \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> -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{keyval,calc} -% \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=\m@ne - \endlinechar=` % -} -% \end{macrocode} -% -% Do it for this package. -% \begin{macrocode} -\IgnoreWhiteSpace -% \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. -% \begin{macrocode} -\let\SetInternalCounter\calc@assign@count -% \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{% - \global\let#1\undefined - \global\expandafter - \let\csname\expandafter\@gobble\string#1~\endcsname\undefined -} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \Finale -% diff --git a/Master/texmf-dist/source/latex3/xparse/xparse.dtx b/Master/texmf-dist/source/latex3/xparse/xparse.dtx deleted file mode 100644 index 1bee47bb059..00000000000 --- a/Master/texmf-dist/source/latex3/xparse/xparse.dtx +++ /dev/null @@ -1,1339 +0,0 @@ -% \iffalse -%% -%% (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle -%% All rights reserved. -%% -%% Not for general distribution. In its present form it is not allowed -%% to put this package onto CD or an archive without consulting the -%% the authors. -%% -%<*dtx> - \ProvidesFile{xparse.dtx} -% -%\NeedsTeXFormat{LaTeX2e} -%\ProvidesPackage{xparse} -%\ProvidesFile{xparse.drv} -% \fi -% \ProvidesFile{xparse.dtx} - [1999/09/10 v0.17 generic document command parser] -% -% \iffalse -%<*driver> - \documentclass{ltxdoc} - \usepackage{textcomp} -% \usepackage{ldcdoc} - \begin{document} - \DocInput{xparse.dtx} - \end{document} -% -% \fi -% -% \CheckSum{667} -% -% \GetFileInfo{xparse.dtx} -% -% \title{The \textsf{xparse} package\thanks{This file -% has version number \fileversion, last -% revised \filedate.}} -% \author{FMi, CAR, DPC} -% \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).\footnote{Other argument types such as \texttt{c} for picture -% coordinates could be integrated in principle --- the last prototype -% now contains support for\texttt{c}.} Thus the argument -% spec for headings as implemented by |\@startsection| in standard -% \LaTeX{} would be represented by the three letters |som|. -% -% With the new proof of concept implementation there is also -% |O{default}| which acts like |o| which also scans for an optional -% argument but allows to specify a default value if the optional -% argument is not present. I.e., it can be used to turn mandatory -% arguments of a template (that is those that do not check for -% |\NoValue|) into optional ones by supplying a default on the -% document command level. -% -% We also have |C{{x-default}{y-default}}| to allow for optional -% coordinate pairs which is, for example, needed to provide something -% like the picture environment in current \LaTeX. -% -% \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\textbraceleft default\textbraceright] will return the parsed -% argument surrounded by a brace pair -% if present. Otherwise it will return the |{default}| as specified above. -% \item[s] will return either the token |\BooleanTrue| or -% |\BooleanFalse| depending on whether or not a star was parsed. -% \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\textbraceleft\textbraceleft x-default\textbraceright\textbraceleft -% y-default\textbraceright\textbraceright] behaves like |c|, i.e., parses a -% coordinate pair if present. If the coordinate pair is missing it -% returns the default values instead. -% \end{description} -% For example, given the spec |soomO{default}| the input |*[Foo]{Bar}| would be -% parsed as |\BooleanTrue{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. -% -% \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 two 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} -% -% Commands declared in this way are automatically robust (in David's -% implementation). -% -% \DescribeMacro\DeclareDocumentEnvironment -% 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 end end of the environment. The parsed arguments are -% available to both the start and the finish as |#1|, |#2|, -% etc.\footnote{It is wishful thinking that the args can be made available -% to the end of the environment. In the current implementation this -% was buggy and has been taken out again below.} -% -% -% \subsubsection{Comparing tokens in a quarky way} -% -% Something like |\NoValue| would perhaps be best implemented as a -% ltx3 quark, i.e. a token which expands to itself as this is -% can be easily tested even if hidden inside a macro. The unfortunate -% side effect however is that it will result in a tight loop if it ever -% gets executed by mistake. -% -% \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} -% \def\seen{#1} -% \def\containsNoValue{\NoValue} -% \ifx\seen\containsNoValue -%\end{verbatim} -% will be true if |#1| was |\NoValue| but false if if |#1| itself -% contains a macro which contains |\NoValue|; a case that happens -% unfortunately very often in practice. Using unguarded |\edef| to -% define |\seen| is out of question as |#1| typically is either -% |\NoValue| or arbitrary user input (which is likely to die horribly -% even in a |\protected@edef|. -% -% \DescribeMacro\IfSomethingTF -% \DescribeMacro\IfSomethingT -% \DescribeMacro\IfSomethingF -% Therefore the |\IfSomethingTF| test uses a slower recursive -% procedure: it tests if |#1| and |#2| are equal. If they are testing -% stops and the true-case (argument |#3|) will be executed. If not, it -% expands the first token of |#2| and checks if the resulting -% token-list is identical to |#2| (this would happen if this first -% token is unexpandable or |#2| is empty). In the latter case testing -% terminates and the false-case (argument |#4|) will be -% executed. However if the token-list created this way differs from -% |#2| the macro recurses using this token-list in place of |#2|. -% -% \DescribeMacro\IfNoValueTF -% \DescribeMacro\IfNoValueT -% \DescribeMacro\IfNoValueF -% \DescribeMacro\IfValueTF -% \DescribeMacro\IfValueT -% \DescribeMacro\IfValueF -% The test |\IfNoValueTF| is implemented as an application of -% |\IfSomethingTF|, i.e., -%\begin{verbatim} -% \def\IfNoValueTF{\IfSomethingTF\NoValue} -%\end{verbatim} -% where the three arguments (test token, true and false case) are -% picked up by |\IfSomethingTF|. Similar tests for other quark-like -% tokens could be defined similarly. |\IfValueTF| is the same test -% with the true/false case exchanged. -% -% -% \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 somewhat slow expansion of |\IfSomethingTF|) -% 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). -% -%\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} -% -% \subsubsection{A boolean data type} -% -% \DescribeMacro\BooleanTrue -% \DescribeMacro\BooleanFalse -% The parsing result for a star etc is presented as the token -% |\BooleanTrue| or |\BooleanFalse| respectively! -% -% \DescribeMacro\IfBooleanTF -% \DescribeMacro\IfBooleanT -% \DescribeMacro\IfBooleanF -% To test for these values the macro |\IfBooleanTF| can be used. It -% expects as its first argument either |\BooleanTrue| or -% |\BooleanFalse| 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 the slow -% |\IfSomethingTF| internally instead of a fast two-way switch. So now -% this data type is back in. -% -% \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} -% -% -% \StopEventually{} -% -% \section{Implementation} -% -% The implementation section currently contains several trial -% implementations and updates. This final version will probably look -% quite differently again. -% -% Set up certain defaults including to ignore white space -% within the body of this package. -% \begin{macrocode} -%<*package> -\RequirePackage{ldcsetup} -\IgnoreWhiteSpace -% \end{macrocode} -% -% - -% \subsection{The Mittelbach/Rowley prove-of-concept -% implementation for the parsing} -% -% \begin{macro}{\DeclareDocumentCommand} -% \begin{macrocode} -%<*obsolete> -\def\DeclareDocumentCommand #1 #2 { -% \parse@countargs {#2} % sets \@tempc % Not implemented yet - \def\parse@csname{#1} - \def\parse@spec{#2} - \afterassignment \declare@dt@ - \toks@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\declare@dt@} -% \begin{macrocode} -\def \declare@dt@ { - \expandafter \edef \parse@csname - { \noexpand \parse@something - { \parse@spec } - { \the\toks@ } - % { \@tempc } - } -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DeclareDocumentEnvironment} -% \begin{macrocode} -\long\def\DeclareDocumentEnvironment #1 #2 { -% \parse@countargs {#2} % sets \@tempc % Not implemented yet - \def\parse@csname{#1} - \def\parse@spec{#2} - \afterassignment \declare@de@ - \toks@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\declare@de@} -% \begin{macrocode} -\def \declare@de@ { - \expandafter \edef \csname \parse@csname \endcsname - { \begingroup - \noexpand \parse@something - { \parse@spec } - { \the\toks@ } - % { \@tempc } - } - \afterassignment \declare@dee@ - \toks@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\declare@dee@} -% \begin{macrocode} -\def \declare@dee@ { - \expandafter \edef \csname end\parse@csname \endcsname - { \noexpand \parse@apply - { \the\toks@ } - \noexpand \parse@results - \endgroup - } -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\parse@apply} -% \begin{macrocode} -\def\parse@apply #1 { - \renewcommand \parse@tempa [\the\parse@cnt] {#1} - \expandafter \parse@tempa % #2 implicit -} -\let\parse@tempa\@empty % or \renew... might bulk the first time -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\parse@something} -% \begin{macrocode} -%% CCC here and elsewhere there are some suggestions for -% not counting args at run-time -\def \parse@something #1 #2 { % #3 - \parse@body {#2} - % \parse@cnt #3 - \parse@cnt \m@ne % REMOVE - \parse@args #1x \parse@args {} -} -% \end{macrocode} -% -% \begin{macrocode} -\newcount\parse@cnt -\newtoks\parse@body -% \end{macrocode} -% -% \begin{macrocode} -\def\parse@args #1 #2\parse@args #3 { - \advance \parse@cnt \@ne % REMOVE - \csname parse@#1 \endcsname {#2}{#3} -} -% \end{macrocode} -% -% \begin{macrocode} -\def \parse@s #1 #2 { - \@ifstar - { \parse@args #1 \parse@args { #2 \BooleanTrue } } - { \parse@args #1 \parse@args { #2 \BooleanFalse } } -} -% \end{macrocode} -% -% \begin{macrocode} -\def \parse@m #1 #2 #3 { - \parse@args #1 \parse@args { #2 {#3} } -} -% \end{macrocode} -% -% \begin{macrocode} -\def \parse@x #1 #2 { - \def \parse@results {#2} % for environment -% \def \parse@tempa { -% \renewcommand \parse@tempb [\the\parse@cnt] -% } -% \expandafter \parse@tempa \expandafter { \the \parse@body } -% \parse@tempb #2 - \expandafter \parse@apply \expandafter { \the \parse@body } - \parse@results % \parse@apply expands this! -} -% \end{macrocode} -% -% \begin{macrocode} -\def \parse@o #1 #2 { - \@ifnextchar [ - { \parse@o@ {#1}{#2} } - { \parse@args #1 \parse@args { #2 \NoValue } } -} -% \end{macrocode} -% -% \begin{macrocode} -\def \parse@o@ #1 #2 [#3] { - \parse@args #1 \parse@args { #2 {#3} } -} -% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{The Carlisle implementation for the parsing} -% -% Not implemented in this version is |\DeclareDocumentEnvironment| -% (exercise for the reader).\footnote{Exercise now completed by DPC :-) -% (required re-implementing argument grabbers to grab to a toks -% register rather that into a brace group in the input stream.) } -% -% Seemed to need two toks registers. -% \begin{macrocode} -\newtoks\@temptokenb -% \end{macrocode} -% -% \begin{macrocode} -\newtoks\xparsed@args -% \end{macrocode} -% -% -% \begin{macro}{\DeclareDocumentCommand} -% Args: |#1| csname, -% |#2| soom argument spec, -% |#3| code -% -% In |#2| currently supported types are: -% s star, -% o \oarg{optional}, -% m \marg{mandatory}.\footnote{More added in reimplementation below.} -% -% |#3| is just grabbed so as to not get a space in the argument spec -% for definition. -% -% \begin{macrocode} -\long\def\DeclareDocumentCommand #1 #2 #3{ -% \end{macrocode} -% -% Needed to count no of arguments -% \begin{macrocode} - \@tempcnta\z@ -% \end{macrocode} -% -% Builds up list of argument parsers |\@ddc@s\@ddc@m| etc -% \begin{macrocode} - \toks@{} -% \end{macrocode} -% -% Builds up |#1#2#3#4| argument spec -% \begin{macrocode} - \@temptokena\toks@ -% \end{macrocode} -% -% Builds up list of m-argument parsers |\@ddc@m\@ddc@m| -% occurred since start or since argument of another type. -% \begin{macrocode} - \@temptokenb\toks@ -% \end{macrocode} -% -% Start parsing argument spec -% \begin{macrocode} - \@ddc#2X -% \end{macrocode} -% -% Define top level command, this just has the wrapper command -% |\@ddc@| then the argument grabbers from |\toks@| then the original -% command name (in case we need to |\protect|) then the internal -% command with the code. -% The |\long| below could be |\relax| if wanted to have a star-non-long -% form of this, cf |\newcommand*|. The argument preamble for -% |\def| comes from |\@temptokena|. -% \begin{macrocode} - \edef#1{ - \noexpand\@ddc@ - {\the\toks@} - \expandafter\noexpand\csname\string#1\endcsname - \noexpand#1 - } - \long\expandafter\def\csname\string#1\expandafter\endcsname - \the\@temptokena{#3}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DeclareDocumentEnvironment} -% The implementation here could save a csname or two per environment -% if |\begin| and especially |\end| were modified but that not done here -% so each end code responsible for getting its own arguments. -% -% Arguments: |#1| env name, -% |#2| soom spec, -% |#3| begin code, -% |#4| end code. -% -% \begin{macrocode} -\long\def\DeclareDocumentEnvironment#1#2#3#4{ - \expandafter\DeclareDocumentCommand\csname #1\endcsname{#2}{ - \xparsed@args\toks@ - #3} - \expandafter\let\csname end #1\endcsname\@parsed@endenv - \long\expandafter\def\csname end \string\\#1\expandafter\endcsname - \the\@temptokena {#4}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@parsed@endenv} -% All end codes are let to this. (Could be merged into |\end|.) -% \begin{macrocode} -\def\@parsed@endenv{ - \expandafter\@parsed@endenv@\the\xparsed@args} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@parsed@endenv@} -% Helper that just replaces the internal name of the begin code -% with that of the end code. -% \begin{macrocode} -\def\@parsed@endenv@#1{ - \csname end\string#1\endcsname} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@ddc@} -% -% Arguments: |#1| set of argument grabbers, -% |#2| internal command, -% |#3| top level command for |\protect|ing. -% -% \begin{macrocode} -\def\@ddc@#1#2#3{ - \ifx\protect\@typeset@protect - \expandafter\@firstofone - \else - \protect#3\expandafter\@gobble - \fi -% \end{macrocode} -% -% The command+arguments so far are kept in a token register until -% the last moment for ease of processing. So need to initialise -% that and use it at the end. -% \begin{macrocode} - {\toks@{#2} #1\the\toks@}} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@ddc} -% Argument: |#1| one of s o m (or X denoting end of parsing). -% \begin{macrocode} -\def\@ddc#1{ - \ifx #1X -% \end{macrocode} -% fini -% \begin{macrocode} - \else - \ifx #1m -% \end{macrocode} -% If doing an m, just stick another |\@ddc@m| in a temporary list. -% \begin{macrocode} -% \@temptokenb\expandafter{% -% \the\@temptokenb -% \@ddc@m} - \addto@hook\@temptokenb m - \else -% \end{macrocode} -% -% Otherwise for o and s -% in |\toks@| first add any `m' argument parsers saved up -% then add |\@ddc@o| or |\@ddc@s|. -% \begin{macrocode} - \toks@\expandafter{% - \the\expandafter\toks@ - \csname @ddc@\the\@temptokenb\expandafter\endcsname - \csname @ddc@#1\endcsname} -% \end{macrocode} -% -% Clear list of m's: -% \begin{macrocode} - \@temptokenb{} - \fi -% \end{macrocode} -% -% Add one to argument count. -% \begin{macrocode} - \advance\@tempcnta\@ne -% \end{macrocode} -% -% Internally all arguments are non delimited args, so add -% |#|\meta{n} to the list in |\@temptokena| -% \begin{macrocode} - \@temptokena\expandafter{ - \the\expandafter\@temptokena\expandafter##\the\@tempcnta} -% \end{macrocode} -% -% Loop: -% \begin{macrocode} - \expandafter - \@ddc -% \end{macrocode} -% -% \begin{macrocode} - \fi} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@ddc@s} -% Argument: |#1| any remaining argument grabbers (+ |\the|) -% \begin{macrocode} -\long\def\@ddc@s#1\toks@{ -% \end{macrocode} -% -% put back the rest of the argument grabbers, but add new -% (boolean) argument to list of arguments inside the register. -% \begin{macrocode} - \@ifstar - {\addto@hook\toks@\BooleanTrue #1\toks@} - {\addto@hook\toks@\BooleanFalse #1\toks@}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ddc@m} -% Arguments: |#1| any remaining argument grabbers (+ |\the|), -% |#2| argument to be grabbed. -% \begin{macrocode} -\long\def\@ddc@m#1\toks@#2{ -% \end{macrocode} -% put back the rest of the argument grabbers, but copy -% argument to list of arguments inside the toks register. -% Any `m' at the end will be discarded and the internal -% command will pick up its own arguments. -% \begin{macrocode} - \addto@hook\toks@{{#2}} #1\toks@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ddc@o} -% Argument: |#1| any remaining argument grabbers (+ |\the|). -% \begin{macrocode} -\long\def\@ddc@o#1\toks@{ -% \end{macrocode} -% -% Put back the rest of the argument grabbers, but copy -% argument (now with |{}| or |\NoValue| to list of arguments -% inside toks register. -% \begin{macrocode} - \@ifnextchar[ - {\@ddc@o@{#1}} - {\addto@hook\toks@\NoValue #1\toks@}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ddc@o@} -% Helper to remove []. -% \begin{macrocode} -\long\def\@ddc@o@#1[#2]{ - \addto@hook\toks@{{#2}} #1\toks@} -% \end{macrocode} -% \end{macro} -% -% -% -% \subsection{A Mittelbach update to the Carlisle implementation -% supporting O with default for optional arg and c for coordinates -% --- prove of concept only} -% -% Only changed and new commands are listed. -% -% -% \begin{macro}{\@ddc} -% The big switch that builds up the parser for the document command. -% -% The complexity of the |\@ddc| rewrite suggests that there might -% be better ways to do it, but for a proto-type solution this is -% fine enough. -% -% \begin{macrocode} -\def\@ddc#1{ - \ifx #1X -% \end{macrocode} -% Normally we do nothing at this point and don't pick up the -% trailing mandatory args into |\toks@| but if we want to reuse the -% argument list in an end environment we have to so |\perhaps@grab@ms| -% is normally |\relax| but might be |\grab@ms| instead. -% \begin{macrocode} - \perhaps@grab@ms - \else - \ifx #1m -% \end{macrocode} -% Just record how many m's seen so far -% \begin{macrocode} - \addto@hook\@temptokenb m - \else -% \end{macrocode} -% If anything other than an m is scanned we add to |\toks@| and -% argument grabber that gets all m's in one go rather than argument -% grabbers that pick up each m at a time. Right now this -% unnecessarily adds |\@ddc@x| if no m's have been -% seen.\footnote{fix, see also below} -% \begin{macrocode} - \toks@\expandafter{% - \the\expandafter\toks@ - \csname @ddc@x\the\@temptokenb\expandafter\endcsname - \csname @ddc@#1\endcsname} - \@temptokenb{} -% \end{macrocode} -% In case of |O| and |C| we have to grab the default next. -% \begin{macrocode} - \ifx #1O - \let\next@ddc\grab@default - \else - \ifx #1C - \let\next@ddc\grab@default - \fi - \fi - \fi - \advance\@tempcnta\@ne - \@temptokena\expandafter{ - \the\expandafter\@temptokena\expandafter##\the\@tempcnta} - \expandafter - \next@ddc - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\next@ddc} -% By default the loop in the |\@ddc| code above calls itself -% recursively until the whole spec is processed. -% \begin{macrocode} -\let\next@ddc\@ddc -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\grab@default} -% However if we've seen an |O| we need to grab the default value first. -% \begin{macrocode} -\def\grab@default #1{ - \toks@\expandafter{% - \the\toks@ - {#1}} - \let\next@ddc\@ddc - \@ddc -} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@ddc@O} -% This command expects the default value (to use if no |[| is -% parsed) after it. -% \begin{macrocode} -\long\def\@ddc@O#1#2\toks@{ - \@ifnextchar[ - {\@ddc@o@{#2}} - {\addto@hook\toks@{{#1}} #2\toks@}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ddc@} -% We look for the `(' and signal an error -% if not found. By using |\@ifnextchar| this also takes care of any -% space tokens in front ot the the parentheses. -% \begin{macrocode} -\long\def\@ddc@c#1\toks@{ - \@ifnextchar ( - {\@ddc@c@ #1} - {\PackageError{xparse}{Missing~ coordinate~ argument} - {A~ value~ of~ (0,0)~ is~ assumed} - \addto@hook\toks@{{00}} #1\toks@} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ddc@c@} -% Helper for |\@ddc@c| and |\@ddc@C| below to parse a |(x,y)| if we -% know it is there. -% \begin{macrocode} -\long\def\@ddc@c@#1(#2,#3){ - \addto@hook\toks@{{{#2}{#3}}} #1\toks@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ddc@C} -% This way we can also directly implement the optional argument case in -% a natural way. -% \begin{macrocode} -\long\def\@ddc@C#1#2\toks@{ - \@ifnextchar ( - {\@ddc@c@ #2} - {\addto@hook\toks@{{#1}} #2\toks@}} -% \end{macrocode} -% \end{macro} -% -% -% -% Normally we don't pick up trailing m-args but if we do we grab them -% all at once. -% \begin{macrocode} -\let\perhaps@grab@ms\relax -\def\grab@ms { - \toks@\expandafter{ - \the\expandafter\toks@ - \csname @ddc@x\the\@temptokenb\endcsname -}} -% \end{macrocode} -% -% \begin{macro}{\@ddc@xm} -% Instead of |\@ddc@m| we use |\@ddc@xm| as with the implementation -% below we might have a need for |\@ddc@x| (that is no m's pending) -% and this would result in a name clash. A potentially better -% implementation (cause faster) would be not to use |\@temptokenb| -% above to record the number of m's seen but a counter register and -% generate grabber function names containing the number in their -% name. This way one could better single out the empty case which -% currently will always result and a |\@ddc@x| grabber doing -% nothing. -% \begin{macrocode} -\let\@ddc@m\undefined -\long\def\@ddc@xm#1\toks@#2{ - \addto@hook\toks@{{#2}} #1\toks@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ddc@xmm} -% \begin{macro}{\@ddc@xmmm} -% \begin{macro}{\@ddc@xmmm...} -% Arguments: |#1| any remaining argument grabbers (+ |\the|), -% |#2#3| argument to be grabbed; and so on. There can be at most 8 -% such mandatory arguments in the variations defined below. -% \begin{macrocode} -\long\def\@ddc@xmm#1\toks@#2#3{ -% \end{macrocode} -% Put back the rest of the argument grabbers, but copy -% argument to list of arguments inside the toks register. -% Any `m' at the end will be discarded and the internal -% command will pick up its own arguments. -% \begin{macrocode} - \addto@hook\toks@{{#2}{#3}} #1\toks@} -% \end{macrocode} -% -% And here are the cases for 3 to eight upcoming mandatory args: -% \begin{macrocode} -\long\def\@ddc@xmmm#1\toks@#2#3#4{ - \addto@hook\toks@{{#2}{#3}{#4}} #1\toks@} -\long\def\@ddc@xmmmm#1\toks@#2#3#4#5{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}} #1\toks@} -\long\def\@ddc@xmmmmm#1\toks@#2#3#4#5#6{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}} #1\toks@} -\long\def\@ddc@xmmmmmm#1\toks@#2#3#4#5#6#7{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}} #1\toks@} -\long\def\@ddc@xmmmmmmm#1\toks@#2#3#4#5#6#7#8{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}{#8}} #1\toks@} -\long\def\@ddc@xmmmmmmmm#1\toks@#2#3#4#5#6#7#8#9{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}} #1\toks@} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \begin{macro}{\@ddc@xmmmmmmmmm} -% If we grab arguments even if they are all mandatory we might have -% even 9 such arguments, thus we also need: -% \begin{macrocode} -\long\def\@ddc@xmmmmmmmmm\the\toks@#1#2#3#4#5#6#7#8#9{ - \addto@hook\toks@{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}\the\toks@} -% \end{macrocode} -% And in that case we also need to provide |\@ddc@x| as that name will -% be executed if there are no trailing mandatory arguments. -% \begin{macrocode} -\let\@ddc@x\relax -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DeclareDocumentEnvironment} -% Fixing |\DeclareDocumentEnvironment| to not choke on the spec -% |m|. Interestingly enough |mm| does work with the old -% implementation: it simply grabs |\@checkend{name}| whereas the -% first only grabs |\@checkend| leaving |{name}| around for -% typesetting :-) -% -% If we don't make the arguments available in the end code we -% should most likely revert to David's original code which worked -% without assigning everything to toks registers (or at least check -% what is faster!) -% \begin{macrocode} -\long\def\DeclareDocumentEnvironment#1#2#3#4{ - \expandafter\DeclareDocumentCommand\csname #1\endcsname{#2}{ -% \end{macrocode} -% After |\DeclareDocumentCommand| has parsed the arguments the -% parsing result is available in |\@toks| except that trailing -% |m|'s are picked up directly and their values are therefore not -% part of this token register. So either we have to slow down -% everything by individually parsing those as well or this bright -% idea is not working. For the moment i disabled it again! -% \begin{macrocode} -% \xparsed@args\toks@ - #3} -% \end{macrocode} -% In that case the following can be simplified as well: -% \begin{macrocode} - \@namedef{end #1}{#4} -% \expandafter\let\csname end #1\endcsname\@parsed@endenv -% \long\expandafter\def\csname end \string\\#1\expandafter\endcsname -% \the\@temptokena{#4} -} -% \end{macrocode} -% And those are no longer necessary: -% \begin{macrocode} -\let\@parsed@endenv\undefined -\let\@parsed@endenv@\undefined -% \end{macrocode} -% -% The above does the fixing by not providing the arguments to the -% end command. The alternative is to do full parsing and could -% perhaps look more or less like this: -% \begin{macrocode} -%<*perhaps> -\long\def\DeclareDocumentEnvironment#1#2#3#4{ - \let\perhaps@grab@ms\grab@ms - \expandafter\DeclareDocumentCommand\csname #1\endcsname{#2}{ -% \end{macrocode} -% I think we need as a safety measure add a group here or else the -% code will fail over if people use it without |\begin|\ldots -% |\end|. -% Or not? I don't really like it but then i don't want to maintain -% a private stack here. -% \begin{macrocode} - \begingroup - \xparsed@args\toks@ - #3} - \let\perhaps@grab@ms\relax - \expandafter\let\csname end #1\endcsname\@parsed@endenv - \long\expandafter\def\csname end \string\\#1\expandafter\endcsname - \the\@temptokena {#4} -} -% \end{macrocode} -% Same as in David's again except that we have the added group now. -% \begin{macrocode} -\def\@parsed@endenv{ - \expandafter\@parsed@endenv@\the\xparsed@args\endgroup} -\def\@parsed@endenv@#1{ - \csname end\string#1\endcsname} -% -% \end{macrocode} -% However the above will fail with |\begin{macro}| code of the -% \texttt{doc} package as this code cancels the outer group so it is -% dangerous and for the moment i have not activated it. -% -% \end{macro} -% -% \subsection{A Quark-like datatype} -% -% If it turns out that the only quark thingie is going to be -% |\NoValue| then this can be streamlined for speed (and it looks -% like this is the case)! -% -% \begin{macro}{\IfSomethingTF} -% \begin{macro}{\IfSomethingT} -% \begin{macro}{\IfSomethingF} -% Setting up the stage \ldots -% \begin{macrocode} -\def\IfSomethingTF#1{\def\something@in{#1} \If@SomethingTF} -\def\IfSomethingT#1#2#3{\def\something@in{#1} - \If@SomethingTF{#2}{#3}\@empty} -\def\IfSomethingF#1#2#3{\def\something@in{#1} - \If@SomethingTF{#2}\@empty{#3}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\If@SomethingTF} -% \ldots and then for the recursive part: -% \begin{macrocode} -\def\If@SomethingTF#1{ - \def\something@tmp{#1} - \ifx\something@tmp\something@in -%fini true - \expandafter\@secondofthree - \else - \expandafter\def\expandafter\something@tmpb\expandafter{#1} - \ifx\something@tmp\something@tmpb -%fini false - \expandafter\expandafter\expandafter\@thirdofthree - \else -%try again expanded - \expandafter\expandafter\expandafter\@firstofone - \fi - \fi - {\expandafter\If@SomethingTF\expandafter{#1}} -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@secondofthree} -% \begin{macro}{\@thirdofthree} -% Some helpers missing in \LaTeX{}; the others are |\long| so we make -% those long as well: -% \begin{macrocode} -\long\def\@secondofthree#1#2#3{#2} -\long\def\@thirdofthree #1#2#3{#3} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsection{Testing for \texttt{\textbackslash NoValue}} -% -% -% \begin{macro}{\NoValue} -% \begin{macrocode} -\def\NoValue{-NoValue-} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\NoValueInIt} -% might be handy sometimes\ldots -% \begin{macrocode} -\def\NoValueInIt{\NoValue} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\IfNoValueTF} -% \begin{macro}{\IfNoValueT} -% \begin{macro}{\IfNoValueF} -% \begin{macrocode} -\def\IfNoValueTF{\IfSomethingTF\NoValue} -\def\IfNoValueT {\IfSomethingT \NoValue} -\def\IfNoValueF {\IfSomethingF \NoValue} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\IfValueTF} -% \begin{macro}{\IfValueT} -% \begin{macro}{\IfValueF} -% \begin{macrocode} -\def\IfValueTF #1 #2 #3 { \IfNoValueTF {#1} {#3} {#2} } -\let \IfValueT \IfNoValueF -\let \IfValueF \IfNoValueT -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{A Boolean datatype} -% -% \begin{macro}{\BooleanFalse} -% \begin{macro}{\BooleanTrue} -% \begin{macrocode} -\def\BooleanFalse{TF} -\def\BooleanTrue{TT} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\IfBooleanTF} -% \begin{macro}{\IfBooleanT} -% \begin{macro}{\IfBooleanF} -% \begin{macrocode} -\def\IfBooleanTF #1 { - \if#1 - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi -} -\def\IfBooleanT #1 #2 { - \IfBooleanTF {#1} {#2} \@empty -} -\def\IfBooleanF #1 { - \IfBooleanTF {#1} \@empty -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \begin{macrocode} -% -% \end{macrocode} -% -% -% \Finale -% -\endinput diff --git a/Master/texmf-dist/source/latex3/xparse/xparse.ins b/Master/texmf-dist/source/latex3/xparse/xparse.ins deleted file mode 100644 index 0a785f6f587..00000000000 --- a/Master/texmf-dist/source/latex3/xparse/xparse.ins +++ /dev/null @@ -1,13 +0,0 @@ -\input docstrip -\keepsilent -\askforoverwritefalse - -\preamble -\endpreamble - -\generate{% - \file{ldcsetup.sty}{\from{ldcsetup.dtx}{package}} - \file{xparse.sty}{\from{xparse.dtx}{package}} - } - -\endbatchfile diff --git a/Master/texmf-dist/tex/latex3/xparse/ldcsetup.sty b/Master/texmf-dist/tex/latex3/xparse/ldcsetup.sty deleted file mode 100644 index efe853a822c..00000000000 --- a/Master/texmf-dist/tex/latex3/xparse/ldcsetup.sty +++ /dev/null @@ -1,118 +0,0 @@ -%% -%% This is file `ldcsetup.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% ldcsetup.dtx (with options: `package') -%% -%% -%% (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle -%% All rights reserved. -%% -%% Not for general distribution. In its present form it is not allowed -%% to put this package onto CD or an archive without consulting the -%% the authors. -%% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ldcsetup} - [1999/09/10 v0.04 coding conventions and stuff] -\RequirePackage{keyval,calc} -%% 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=` % -} -\IgnoreWhiteSpace -\def\define@key#1#2{% - \@ifnextchar[ - {\KV@def{#1}{\string#2}} - {\@namedef{KV@#1@\string#2}####1}} -\def\setkeys#1#2{% - \def\KV@prefix{KV@#1@\expandafter\string}% - \KV@do#2,\relax,} -\newtoks\KV@toks -\def\KV@@sp@c#1\@nil#2\relax#3{\KV@toks{#1}\edef#3{\the\KV@toks}} -\def\KV@equal{=} -\def\KV@split#1=#2=#3\relax{% - \KV@@sp@def\@tempa{#1}% - \def\@tempd{#3}% - \ifx\@tempa\@empty\else - \expandafter\let\expandafter\@tempc - \csname\KV@prefix\@tempa\endcsname - \ifx\@tempc\relax - \KV@error{\@tempa\space \expandafter\@gobbletwo\string\@undefined}\@eha - \else - \ifx\@tempd\@empty - \KV@default - \else - \KV@@sp@def\@tempb{#2}% - \ifx\@tempd\KV@equal - \expandafter\@tempc\expandafter{\@tempb}\relax - \else - \KV@error{Extra~=~ sign~ after~ `#1'}\KV@erry - \fi - \fi - \fi - \fi} -\def\KV@erry{\expandafter\KV@errx\meaning\@tempd\relax ignored\MessageBreak - missing~comma~in~`\expandafter\strip@prefix\meaning\@tempb'~?} -\def\KV@errx#1>#2==\relax{% - `#2' } -\def\KV@default{% - \expandafter\let\expandafter\@tempb - \csname\KV@prefix\@tempa @default\endcsname - \ifx\@tempb\relax - \KV@error{No value specified for \@tempa}\@eha - \else - \@tempb\relax - \fi} -\def\KV@error#1#2{\PackageError{keyval}{#1}{#2}} -\def\KV@parse#1{ - \begingroup -\def\KV@@sp@c##1\@nil##2\relax##3{\addto@hook##3{{##1}}} -\def\KV@split##1=##2=##3\relax{% - \def\@tempd{##3}% - \expandafter\ifx\expandafter=\@firstofone##1=\else - \ifx\@tempd\@empty - \addto@hook\KV@toks\KV@default@elt - \KV@@sp@def\KV@toks{##1}% - \else - \ifx\@tempd\KV@equal - \addto@hook\KV@toks\KV@elt - \KV@@sp@def\KV@toks{##1}% - \KV@@sp@def\KV@toks{##2}% - \else - \KV@err{Extra `=' after `##1'}\@ehd - \fi - \fi - \fi} - \KV@toks{} - \KV@do#1,\relax, - \expandafter - \endgroup - \the\KV@toks} -\let\SetInternalCounter\calc@assign@count -\def\UndeclareRobustCommand#1{% - \global\let#1\undefined - \global\expandafter - \let\csname\expandafter\@gobble\string#1~\endcsname\undefined -} -\endinput -%% -%% End of file `ldcsetup.sty'. diff --git a/Master/texmf-dist/tex/latex3/xparse/xparse.sty b/Master/texmf-dist/tex/latex3/xparse/xparse.sty deleted file mode 100644 index 2ab688ae6ec..00000000000 --- a/Master/texmf-dist/tex/latex3/xparse/xparse.sty +++ /dev/null @@ -1,218 +0,0 @@ -%% -%% This is file `xparse.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% xparse.dtx (with options: `package') -%% -%% -%% (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle -%% All rights reserved. -%% -%% Not for general distribution. In its present form it is not allowed -%% to put this package onto CD or an archive without consulting the -%% the authors. -%% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{xparse} - [1999/09/10 v0.17 generic document command parser] -\RequirePackage{ldcsetup} -\IgnoreWhiteSpace - -\newtoks\@temptokenb -\newtoks\xparsed@args -\long\def\DeclareDocumentCommand #1 #2 #3{ - \@tempcnta\z@ - \toks@{} - \@temptokena\toks@ - \@temptokenb\toks@ - \@ddc#2X - \edef#1{ - \noexpand\@ddc@ - {\the\toks@} - \expandafter\noexpand\csname\string#1\endcsname - \noexpand#1 - } - \long\expandafter\def\csname\string#1\expandafter\endcsname - \the\@temptokena{#3}} -\long\def\DeclareDocumentEnvironment#1#2#3#4{ - \expandafter\DeclareDocumentCommand\csname #1\endcsname{#2}{ - \xparsed@args\toks@ - #3} - \expandafter\let\csname end #1\endcsname\@parsed@endenv - \long\expandafter\def\csname end \string\\#1\expandafter\endcsname - \the\@temptokena {#4}} -\def\@parsed@endenv{ - \expandafter\@parsed@endenv@\the\xparsed@args} -\def\@parsed@endenv@#1{ - \csname end\string#1\endcsname} -\def\@ddc@#1#2#3{ - \ifx\protect\@typeset@protect - \expandafter\@firstofone - \else - \protect#3\expandafter\@gobble - \fi - {\toks@{#2} #1\the\toks@}} -\def\@ddc#1{ - \ifx #1X - \else - \ifx #1m - \addto@hook\@temptokenb m - \else - \toks@\expandafter{% - \the\expandafter\toks@ - \csname @ddc@\the\@temptokenb\expandafter\endcsname - \csname @ddc@#1\endcsname} - \@temptokenb{} - \fi - \advance\@tempcnta\@ne - \@temptokena\expandafter{ - \the\expandafter\@temptokena\expandafter##\the\@tempcnta} - \expandafter - \@ddc - \fi} -\long\def\@ddc@s#1\toks@{ - \@ifstar - {\addto@hook\toks@\BooleanTrue #1\toks@} - {\addto@hook\toks@\BooleanFalse #1\toks@}} -\long\def\@ddc@m#1\toks@#2{ - \addto@hook\toks@{{#2}} #1\toks@} -\long\def\@ddc@o#1\toks@{ - \@ifnextchar[ - {\@ddc@o@{#1}} - {\addto@hook\toks@\NoValue #1\toks@}} -\long\def\@ddc@o@#1[#2]{ - \addto@hook\toks@{{#2}} #1\toks@} -\def\@ddc#1{ - \ifx #1X - \perhaps@grab@ms - \else - \ifx #1m - \addto@hook\@temptokenb m - \else - \toks@\expandafter{% - \the\expandafter\toks@ - \csname @ddc@x\the\@temptokenb\expandafter\endcsname - \csname @ddc@#1\endcsname} - \@temptokenb{} - \ifx #1O - \let\next@ddc\grab@default - \else - \ifx #1C - \let\next@ddc\grab@default - \fi - \fi - \fi - \advance\@tempcnta\@ne - \@temptokena\expandafter{ - \the\expandafter\@temptokena\expandafter##\the\@tempcnta} - \expandafter - \next@ddc - \fi -} -\let\next@ddc\@ddc -\def\grab@default #1{ - \toks@\expandafter{% - \the\toks@ - {#1}} - \let\next@ddc\@ddc - \@ddc -} -\long\def\@ddc@O#1#2\toks@{ - \@ifnextchar[ - {\@ddc@o@{#2}} - {\addto@hook\toks@{{#1}} #2\toks@}} -\long\def\@ddc@c#1\toks@{ - \@ifnextchar ( - {\@ddc@c@ #1} - {\PackageError{xparse}{Missing~ coordinate~ argument} - {A~ value~ of~ (0,0)~ is~ assumed} - \addto@hook\toks@{{00}} #1\toks@} - } -\long\def\@ddc@c@#1(#2,#3){ - \addto@hook\toks@{{{#2}{#3}}} #1\toks@} -\long\def\@ddc@C#1#2\toks@{ - \@ifnextchar ( - {\@ddc@c@ #2} - {\addto@hook\toks@{{#1}} #2\toks@}} -\let\perhaps@grab@ms\relax -\def\grab@ms { - \toks@\expandafter{ - \the\expandafter\toks@ - \csname @ddc@x\the\@temptokenb\endcsname -}} -\let\@ddc@m\undefined -\long\def\@ddc@xm#1\toks@#2{ - \addto@hook\toks@{{#2}} #1\toks@} -\long\def\@ddc@xmm#1\toks@#2#3{ - \addto@hook\toks@{{#2}{#3}} #1\toks@} -\long\def\@ddc@xmmm#1\toks@#2#3#4{ - \addto@hook\toks@{{#2}{#3}{#4}} #1\toks@} -\long\def\@ddc@xmmmm#1\toks@#2#3#4#5{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}} #1\toks@} -\long\def\@ddc@xmmmmm#1\toks@#2#3#4#5#6{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}} #1\toks@} -\long\def\@ddc@xmmmmmm#1\toks@#2#3#4#5#6#7{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}} #1\toks@} -\long\def\@ddc@xmmmmmmm#1\toks@#2#3#4#5#6#7#8{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}{#8}} #1\toks@} -\long\def\@ddc@xmmmmmmmm#1\toks@#2#3#4#5#6#7#8#9{ - \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}} #1\toks@} -\long\def\@ddc@xmmmmmmmmm\the\toks@#1#2#3#4#5#6#7#8#9{ - \addto@hook\toks@{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}\the\toks@} -\let\@ddc@x\relax -\long\def\DeclareDocumentEnvironment#1#2#3#4{ - \expandafter\DeclareDocumentCommand\csname #1\endcsname{#2}{ - #3} - \@namedef{end #1}{#4} -} -\let\@parsed@endenv\undefined -\let\@parsed@endenv@\undefined -\def\IfSomethingTF#1{\def\something@in{#1} \If@SomethingTF} -\def\IfSomethingT#1#2#3{\def\something@in{#1} - \If@SomethingTF{#2}{#3}\@empty} -\def\IfSomethingF#1#2#3{\def\something@in{#1} - \If@SomethingTF{#2}\@empty{#3}} -\def\If@SomethingTF#1{ - \def\something@tmp{#1} - \ifx\something@tmp\something@in - \expandafter\@secondofthree - \else - \expandafter\def\expandafter\something@tmpb\expandafter{#1} - \ifx\something@tmp\something@tmpb - \expandafter\expandafter\expandafter\@thirdofthree - \else - \expandafter\expandafter\expandafter\@firstofone - \fi - \fi - {\expandafter\If@SomethingTF\expandafter{#1}} -} -\long\def\@secondofthree#1#2#3{#2} -\long\def\@thirdofthree #1#2#3{#3} -\def\NoValue{-NoValue-} -\def\NoValueInIt{\NoValue} -\def\IfNoValueTF{\IfSomethingTF\NoValue} -\def\IfNoValueT {\IfSomethingT \NoValue} -\def\IfNoValueF {\IfSomethingF \NoValue} -\def\IfValueTF #1 #2 #3 { \IfNoValueTF {#1} {#3} {#2} } -\let \IfValueT \IfNoValueF -\let \IfValueF \IfNoValueT -\def\BooleanFalse{TF} -\def\BooleanTrue{TT} -\def\IfBooleanTF #1 { - \if#1 - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi -} -\def\IfBooleanT #1 #2 { - \IfBooleanTF {#1} {#2} \@empty -} -\def\IfBooleanF #1 { - \IfBooleanTF {#1} \@empty -} -\endinput -%% -%% End of file `xparse.sty'. -- cgit v1.2.3