%% %% This is file `rkeyval.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% rkeyval.dtx %% %% Copyright 2001, 2010 American Mathematical Society. %% %% American Mathematical Society %% Technical Support %% Publications Technical Group %% 201 Charles Street %% Providence, RI 02904 %% USA %% tel: (401) 455-4080 %% (800) 321-4267 (USA and Canada only) %% fax: (401) 331-3842 %% email: tech-support@ams.org %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3c or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is the American Mathematical %% Society. %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{rkeyval}[2004/05/05 v1.08] \let\@xp\expandafter \let\@nx\noexpand \long\def\@gobblethree#1#2#3{} \long\def\@nilgobble#1\@nil{} \@ifundefined{@emptytoks}{\csname newtoks\endcsname\@emptytoks}{} \@ifundefined{@temptokenb}{\csname newtoks\endcsname\@temptokenb}{} \def\@append#1#2#3{\@xp\def\@xp#2\@xp{#2#1{#3}}} \def\star@#1#2{% \def\star@a##1{#1}% \def\star@b{#1{#2}}% \futurelet\@let@token\star@test } \def\star@test{\ifx*\@let@token \let\star@b\star@a\fi \star@b} \@ifundefined{NormalCatcodes}{\RequirePackage{pcatcode}\relax}{} \PushCatcodes\NormalCatcodes \def\extract@group#1{% \@xp\extract@group@a\string#1\@nil } \def\extract@group@a#1#2'{#2\@nilgobble} \def\set@property#1{% \begingroup \edef\@tempa{\extract@group#1}% \edef\@tempa{% \@nx\@append\@nx#1\@xp\@nx\csname \@tempa,aux\endcsname }% \@xp\endgroup \@tempa } \def\get@property#1#2{% \get@nth@property#1#2\m@ne } \def\get@nth@property#1#2#3{% \begingroup \edef\@tempa{\extract@group#2}% \@tempcnta#3\relax \@tempcntb\z@ \@xp\scan@properties\@xp#2\csname \@tempa,aux\endcsname \edef\@tempa{\def\@nx#1{\@tempa}}% \@xp\endgroup \@tempa } \def\scan@properties#1#2{% \begingroup \def\@tempa{#1}% \let\@tempc\@empty \@xp\find@property #2 \@nil\@nil \edef\@tempa{\def\@nx\@tempa{\@tempc}}% \@xp\endgroup \@tempa } \def\find@property#1#2{% \ifx\@nil#1% \else \def\@tempb{#1}% \ifx\@tempa\@tempb \ifnum\@tempcnta<\z@ \def\@tempc{#2}% \else \advance\@tempcntb\@ne \ifnum\@tempcntb=\@tempcnta \def\@tempc{#2}% \fi \fi \fi \@xp\find@property \fi } \def\reset@property#1#2{% \reset@nth@property#1\m@ne{#2}% } \def\reset@nth@property#1#2#3{% \begingroup \edef\@tempa{\extract@group#1}% \@tempcnta#2\relax \@temptokena{#3}% \toks@\@emptytoks \@tempcntb\z@ \@xp\reset@scan\@xp#1\csname \@tempa,aux\endcsname \edef\@tempa{% \def\@xp\@nx\csname \@tempa,aux\endcsname{\the\toks@}% }% \@xp\endgroup \@tempa } \def\reset@scan#1#2{% \begingroup \def\@tempa{#1}% \@xp\reset@scan@a #2 \@nil\@nil \edef\@tempa{\toks@{\the\toks@}}% \@xp\endgroup \@tempa } \def\reset@scan@a#1#2{% \ifx\@nil#1% \else \def\@tempb{#1}% \ifx\@tempa\@tempb \ifnum\@tempcnta<\z@ \@temptokenb\@temptokena \else \advance\@tempcntb\@ne \ifnum\@tempcntb=\@tempcnta \@temptokenb\@temptokena \fi \fi \else \@temptokenb{#2}% \fi \edef\@tempb{% \toks@{\the\toks@ \@nx#1{\the\@temptokenb}}% }% \@tempb \@xp\reset@scan@a \fi } \def\fsa@l{\futurelet\@let@token\fsa@t} \def\fsa@b{\afterassignment\fsa@l \let\@let@token= } \def\fsa@c#1{\aftergroup#1\fsa@l} \let\fsa@n\@empty \let\fsa@t\@empty \newtoks\rsk@toks \def\rkvIfEmpty#1#2{% \@xp\ifx\csname#1'#2\endcsname\@empty \@xp\@firstoftwo \else \@xp\@secondoftwo \fi } \def\rkvIfAdditive#1{% \@xp\let\@xp\@let@token \csname \rkv@setter#1\endcsname \afterassignment\@nilgobble \@xp\let\@xp\@let@token \@let@token \@empty\@empty\@nil \ifx\@let@token\DSK@append \@xp\@firstoftwo \else \@xp\@secondoftwo \fi } \def\rkv@setter#1{set:\@xp\@gobble\string#1} \def\rkv@DSAK#1#2{% \addto@group@reset#1{\let#1\@empty}% \edef\@tempa{\def\csname \rkv@setter#1\endcsname}% \@tempa{#2#1}% } \def\rkv@DDK#1{% \addto@group@reset#1{\def#1{\@empty}}% \@xp\let\csname \rkv@setter#1\endcsname\@gobble } \def\DSK@def#1{% \ifx#1\@empty\else \PackageWarningNoLine{rkeyval}% {Key \string#1 should not be repeated}% \fi \DSK@redef#1% } \def\DSK@redef#1#2{% \@ifempty{#2}{\@gobble}{% \def#1{#2}% \set@property#1 }% } \def\init@group@reset#1{% \begingroup \edef\@tempb{\@xp\@nx\csname #1@reset\endcsname}% \@xp\ifx\@tempb\relax \@xp\xdef\@tempb{\let \csname #1,aux\endcsname\@nx\@empty} \fi \endgroup } \def\addto@group@reset#1{% \begingroup \edef\@tempa{\extract@group#1}% \init@group@reset\@tempa \edef\@tempa{% \@nx\g@addto@macro\@xp\@nx\csname\@tempa @reset\endcsname }% \@xp\endgroup \@tempa } \newcommand{\DefineSimpleKey}[2]{% \@xp\rkv@DSAK \csname #1'#2\endcsname {\DSK@def}% } \newcommand{\DefineSupersedingKey}[2]{% \@xp\rkv@DSAK \csname #1'#2\endcsname {\DSK@redef}% } \newcommand{\DefineAdditiveKey}[3]{% \@xp\rkv@DSAK \csname #1'#2\endcsname {\DSK@append#3}% } \def\DSK@append#1#2#3{% \@ifempty{#3}{\@gobble}{% \@append#1#2{#3}% \set@property#2 }% } \newcommand{\DefineDummyKey}[2]{% \@xp\rkv@DDK \csname #1'#2\endcsname } \newcommand{\RestrictedSetKeys}[3]{% \global\rsk@toks\@xp{\csname #2@reset\endcsname}% \def\rsk@finish{#3}% \gdef\rsk@set{\@xp\rsk@set@a\csname#2'}% #1\relax \begingroup \rsk@changecase \aftergroup\rsk@set \let\fsa@t\rsk@z \fsa@l } \def\rsk@unknown@key#1{% \PackageWarning{rkeyval}{Unknown key: \string#1}% \@xp\def\csname\rkv@setter#1\endcsname {\DSK@redef#1}% } \def\rsk@z{% \ifx\bgroup\@let@token \let\fsa@t\rsk@b \let\fsa@n\fsa@b \else \ifx\@sptoken\@let@token \let\fsa@n\fsa@b \else \rsk@errf \fi \fi \fsa@n } \def\rsk@a{% \ifx\@let@token\@sptoken \let\fsa@n\fsa@b \else \ifx\@let@token\par \let\fsa@n\fsa@b \else \ifx,\@let@token \endgroup \let\fsa@t\rsk@b \let\fsa@n\fsa@b \else \ifx\egroup\@let@token \endgroup \let\fsa@n\rsk@end \else \endgroup \let\fsa@n\rsk@erraa \fi \fi \fi \fi \fsa@n } \def\rsk@b{% \ifcat\@nx\@let@token A% \let\fsa@t\rsk@c \let\fsa@n\fsa@c \else \ifx\@sptoken\@let@token \let\fsa@n\fsa@b \else \rsk@bb \fi \fi \fsa@n } \def\rsk@bb{% \ifx,\@let@token \let\fsa@n\fsa@b \else \ifx\bgroup\@let@token \let\fsa@n\rsk@errb \else \ifx\egroup\@let@token \let\fsa@n\rsk@end \else \ifx\par\@let@token \let\fsa@n\fsa@b \else \let\fsa@n\rsk@errc \fi \fi \fi \fi } \def\rsk@c{% \ifcat\@nx\@let@token A% \let\fsa@n\fsa@c \else \ifx\@sptoken\@let@token \let\fsa@t\rsk@d \let\fsa@n\fsa@b \else \ifx=\@let@token \let\saw@equal T% \let\fsa@t\rsk@d \let\fsa@n\fsa@b \else \rsk@cb \fi \fi \fi \fsa@n } \def\rsk@cb{% \ifx,\@let@token \let\fsa@n\rsk@errc \else \ifcat\@nx\@let@token .% \let\fsa@n\fsa@c \else \ifx\bgroup\@let@token \let\fsa@n\rsk@noequal \else \ifx\egroup\@let@token \let\fsa@n\rsk@noequal \else \let\fsa@n\rsk@errc \fi \fi \fi \fi } \let\saw@equal=F \def\rsk@d{% \ifx\bgroup\@let@token \ifx\saw@equal T% \aftergroup\endcsname \rsk@endcase \let\fsa@n\endgroup \else \let\saw@equal T% \let\fsa@n\rsk@noequal \fi \else \ifx\@sptoken\@let@token \let\fsa@n\fsa@b \else \ifx=\@let@token \let\saw@equal T% \let\fsa@n\fsa@b \else \let\fsa@n\rsk@erre \fi \fi \fi \fsa@n } \def\rsk@casesensitive{% \let\rsk@changecase\@empty \let\rsk@endcase\@empty } \def\rsk@startlc{\aftergroup\lowercase\aftergroup{\iffalse}\fi} \def\rsk@endlc{\iffalse{\fi\aftergroup}} \def\rsk@lowercase{% \let\rsk@changecase\rsk@startlc \let\rsk@endcase\rsk@endlc } \rsk@lowercase \def\rsk@resume{% \begingroup \rsk@changecase \aftergroup\rsk@set \let\fsa@t\rsk@a \begingroup \catcode\endlinechar=\active \lccode`\~=\endlinechar \lowercase{\let~\par}% \fsa@l } \def\rsk@set@a#1#2{% \star@{\rsk@set@b#1{#2}}{}% } \def\rsk@set@b#1#2#3{% \@xp\ifx \csname\rkv@setter#1\endcsname \relax \rsk@unknown@key#1% \fi \edef\@tempa{\@xp\@nx\csname \rkv@setter#1\endcsname}% \toks@\@xp{\@tempa{#2}{#3}}% \edef\@tempa{% \global\rsk@toks{\the\rsk@toks \the\toks@}% }% \@tempa \rsk@resume } \def\rsk@end{% \global\let\rsk@set\rsk@terminate \rsk@endcase \endgroup \endcsname \afterassignment\rsk@finish \toks@\bgroup } \def\rsk@terminate{\@xp\@gobble\csname} \def\NoCommaWarning{\PackageWarning{rkeyval}{Missing comma}}% %% % \begin{macro}{\NoCommaError} %% % \begin{macrocode} %% \def\NoCommaError{\rsk@err{Missing comma}\@ehc} %% % \end{macrocode} %% % \end{macro} \def\rsk@nocomma{\NoCommaWarning} \def\rsk@err{\PackageError{rkeyval}} \def\rsk@errf{\rsk@err{Missing open brace}\@ehc\rsk@b} \long\def\rsk@erraa{\rsk@nocomma \let\fsa@t\rsk@b \fsa@l} \def\rsk@errb{\rsk@err{Missing key name}\@ehc\rsk@d} \def\rsk@errc{\rsk@err{Invalid key name character}\@ehc\fsa@b} \def\rsk@noequal{\rsk@err{Missing equal sign}\@ehc\rsk@d} \def\rsk@erre#1,{% \rsk@err{Missing open brace for key value}\@ehc \iffalse{\fi \endgroup \endcsname \rsk@endcase }{#1},% } \PopCatcodes \endinput %% %% End of file `rkeyval.sty'.