diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex | 1245 |
1 files changed, 1245 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex new file mode 100644 index 00000000000..5e6488039b1 --- /dev/null +++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex @@ -0,0 +1,1245 @@ +%% +%% This is file `expkv.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv.dtx (with options: `tex') +%% +%% ---------------------------------------------------------------- +%% expkv-bundle -- an expandable key=val implementation and friends +%% E-mail: jspratte@yahoo.de +%% Released under the LaTeX Project Public License v1.3c or later +%% See http://www.latex-project.org/lppl.txt +%% ---------------------------------------------------------------- +%% +%% Copyright (C) 2020-2023 Jonathan P. Spratte +%% +%% This work 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 work is "maintained" (as per LPPL maintenance status) by +%% Jonathan P. Spratte. +%% +%% This work consists of the files expkv-bundle.ins +%% expkv.dtx +%% expkv-cs.dtx +%% expkv-def.dtx +%% expkv-opt.dtx +%% expkv-pop.dtx +%% and the derived files expkv.sty +%% expkv.tex +%% t-expkv.tex +%% expkv-cs.sty +%% expkv-cs.tex +%% t-expkv-cs.tex +%% expkv-def.sty +%% expkv-def.tex +%% t-expkv-def.tex +%% expkv-opt.sty +%% expkv-pop.sty +%% expkv-pop.tex +%% t-expkv-pop.tex +%% +%% as well as any documentation files shipped with it. +%% +\expandafter\ifx\csname ekvVersion\endcsname\relax +\else + \expandafter\endinput +\fi +\begingroup + \edef\ekvtmpa{\string\expanded} + \edef\ekvtmpb{\meaning\expanded} + \expandafter +\endgroup +\ifx\ekvtmpa\ekvtmpb + \expandafter\let\csname ekv@expanded\endcsname\expanded + \expandafter\let\csname ekv@unexpanded\endcsname\unexpanded +\else + \begingroup + \edef\ekvtmpa{\string\expanded} + \edef\ekvtmpb{\meaning\normalexpanded} + \expandafter + \endgroup + \ifx\ekvtmpa\ekvtmpb + \expandafter\let\csname ekv@expanded\endcsname\normalexpanded + \expandafter\let\csname ekv@unexpanded\endcsname\normalunexpanded + \else + \errmessage + {expkv Error: e-TeX and the \noexpand\expanded primitive required}% + \expandafter\endinput + \fi +\fi +\def\ekvVersion{2.0} +\def\ekvDate{2023-01-23} +\csname ekv@tmp\endcsname +\expandafter\chardef\csname ekv@tmp\endcsname=\catcode`\@ +\catcode`\@=11 +\begingroup + \edef\ekv@tmpa{\string \lastnamedcs} + \edef\ekv@tmpb{\meaning\lastnamedcs} + \ifx\ekv@tmpa\ekv@tmpb + \def\ekv@if@lastnamedcs{\long\def\ekv@if@lastnamedcs##1##2{##1}} + \else + \def\ekv@if@lastnamedcs{\long\def\ekv@if@lastnamedcs##1##2{##2}} + \fi + \expandafter +\endgroup +\ekv@if@lastnamedcs +\def\ekv@empty{} +\long\def\@gobble#1{} +\long\def\@gobbletwo#1#2{} +\long\def\@gobblethree#1#2#3{} +\long\def\@firstofone#1{#1} +\long\def\@firstoftwo#1#2{#1} +\long\def\@secondoftwo#1#2{#2} +\long\def\ekv@fi@gobble\fi\@firstofone#1{\fi} +\long\def\ekv@fi@firstofone\fi\@gobble#1{\fi#1} +\long\def\ekv@fi@firstoftwo\fi\@secondoftwo#1#2{\fi#1} +\long\def\ekv@fi@secondoftwo\fi\@firstoftwo#1#2{\fi#2} +\def\ekv@gobble@mark\ekv@mark{} +\long\def\ekv@gobbleto@stop#1\ekv@stop{} +\long\def\ekv@gobble@from@mark@to@stop\ekv@mark#1\ekv@stop{} +\long\def\ekv@ifempty#1% + {% + \ekv@ifempty@\ekv@ifempty@A#1\ekv@ifempty@B\ekv@ifempty@true + \ekv@ifempty@A\ekv@ifempty@B\@secondoftwo + } +\long\def\ekv@ifempty@#1\ekv@ifempty@A\ekv@ifempty@B{} +\long\def\ekv@ifempty@true\ekv@ifempty@A\ekv@ifempty@B\@secondoftwo#1#2{#1} +\long\def\ekv@ifempty@false\ekv@ifempty@A\ekv@ifempty@B\@firstoftwo#1#2{#2} +\long\def\ekv@ifempty@true@F\ekv@ifempty@A\ekv@ifempty@B\@firstofone#1{} +\long\def\ekv@ifempty@true@F@gobble\ekv@ifempty@A\ekv@ifempty@B\@firstofone#1#2% + {} +\long\def\ekv@ifempty@true@F@gobbletwo + \ekv@ifempty@A\ekv@ifempty@B\@firstofone#1#2#3% + {} +\long\def\ekv@ifblank#1% + {\ekv@ifblank@#1\ekv@stop\ekv@ifblank@false\ekv@stop\@firstoftwo} +\long\def\ekv@ifblank@\ekv@mark#1#2\ekv@stop{} +\long\def\ekv@ifblank@false\ekv@stop\@firstoftwo#1#2{#2} +\def\ekv@ifblank@gobbletrue\ekv@stop#1{} +\ekv@if@lastnamedcs + {% + \long\def\ekv@ifdefined#1{\ifcsname#1\endcsname\ekv@ifdef@\fi\@secondoftwo} + \def\ekv@ifdef@\fi\@secondoftwo + {% + \fi + \expandafter\ifx\lastnamedcs\relax + \ekv@fi@secondoftwo + \fi + \@firstoftwo + } + } + {% + \long\def\ekv@ifdefined#1% + {% + \ifcsname#1\endcsname\ekv@ifdef@\fi\ekv@ifdef@false#1\endcsname\relax + \ekv@fi@secondoftwo + \fi + \@firstoftwo + } + \def\ekv@ifdef@\fi\ekv@ifdef@false{\fi\expandafter\ifx\csname} + \long\def\ekv@ifdef@false + #1\endcsname\relax\ekv@fi@secondoftwo\fi\@firstoftwo#2#3% + {#3} + } +\def\ekv@strip#1% + {% + \long\def\ekv@strip##1% + {% + \ekv@strip@a + ##1\ekv@nil + \ekv@mark#1% + #1\ekv@nil + }% + \long\def\ekv@strip@a##1\ekv@mark#1{\ekv@strip@b##1\ekv@mark}% + } +\ekv@strip{ } +\long\def\ekv@strip@b#1 \ekv@nil{\ekv@strip@c#1\ekv@nil} +\long\def\ekv@strip@c\ekv@mark#1\ekv@nil\ekv@mark#2\ekv@nil#3{#3{#1}} +\def\ekv@strip@key#1% + {% + \long\def\ekv@strip@key##1{\ekv@strip@key@a##1\ekv@nil\ekv@mark#1#1\ekv@nil} + \long\def\ekv@strip@key@a##1\ekv@mark#1{\ekv@strip@key@b##1\ekv@mark} + } +\ekv@strip@key{ } +\long\def\ekv@strip@key@b#1 \ekv@nil{\ekv@strip@key@c#1\ekv@nil} +\long\def\ekv@strip@key@c\ekv@mark#1\ekv@nil\ekv@mark#2\ekv@nil#3% + {\expandafter#3\detokenize{#1}\ekv@mark{#1}} +\let\ekv@zero\z@ +\long\def\ekv@exparg#1#2% + {\ekv@expanded{\ekv@unexpanded{#1}\expandafter}\expandafter{#2}} +\long\def\ekv@expandafter#1{\ekv@expanded{\ekv@unexpanded{#1}\expandafter}} +\long\def\ekv@exparg@#1#2{#2{#1}}% +\long\def\ekv@expandedarg#1#2{\ekv@expanded{\ekv@unexpanded{#1}{#2}}} +\long\def\ekv@fexparg#1#2% + {% + \ekv@expanded{\ekv@unexpanded{#1}\expandafter}\expandafter + {\romannumeral`\^^@#2}% + } +\long\def\ekv@expargtwice#1#2{\expandafter\ekv@expargtwice@\expandafter{#2}{#1}} +\def\ekv@expargtwice@{\expandafter\ekv@exparg@\expandafter} +\begingroup +\def\ekvcsvloop#1{% +\endgroup +\long\def\ekvcsvloop##1##2% + {\ekv@csv@loop@active{##1}\ekv@mark##2#1\ekv@stop#1} +\long\def\ekv@csv@loop@active##1##2#1% + {% + \ekv@gobble@from@mark@to@stop##2\ekv@csv@loop@active@end\ekv@stop + \ekv@csv@loop{##1}##2,\ekv@stop,% + }% +\long\def\ekv@csv@loop@active@end + \ekv@stop + \ekv@csv@loop##1\ekv@mark\ekv@stop,\ekv@stop,% + {}% +} +\catcode`\,=13 +\ekvcsvloop, +\def\ekv@csv@loop#1% + {% + \long\def\ekv@csv@loop##1##2,% + {% + \ekv@gobble@from@mark@to@stop##2\ekv@csv@loop@end\ekv@stop + \ekv@ifblank@##2\ekv@stop\ekv@ifblank@gobbletrue + \ekv@stop\ekv@csv@loop@blank + #1\ekv@csv@loop@do{##1}% + }% + } +\expandafter\ekv@csv@loop\expandafter{\ekv@strip{#2}} +\long\def\ekv@csv@loop@do#1#2{\ekv@unexpanded{#2{#1}}\ekv@csv@loop{#2}\ekv@mark} +\def\ekv@csv@loop@end#1% + {% + \long\def\ekv@csv@loop@end + \ekv@stop + \ekv@ifblank@\ekv@mark\ekv@stop\ekv@stop\ekv@ifblank@gobbletrue + \ekv@stop\ekv@csv@loop@blank + #1\ekv@csv@loop@do##1% + {\ekv@csv@loop@active{##1}\ekv@mark}% + } +\expandafter\ekv@csv@loop@end\expandafter{\ekv@strip{\ekv@mark\ekv@stop}} +\long\expandafter\def\expandafter\ekv@csv@loop@blank + \ekv@strip{\ekv@mark#1}\ekv@csv@loop@do#2% + {\ekv@csv@loop{#2}\ekv@mark} +\def\ekv@name@set#1{ekv#1(} +\long\def\ekv@name@key#1{#1)} +\edef\ekv@name + {% + \ekv@unexpanded\expandafter{\ekv@name@set{#1}}% + \ekv@unexpanded\expandafter{\ekv@name@key{\detokenize{#2}}}% + } +\long\ekv@exparg{\def\ekv@name#1#2}{\ekv@name} +\def\ekv@undefined@set#1{! expkv Error: Set `#1' undefined.} +\edef\ekv@checkvalid + {% + \ekv@unexpanded\expandafter{\ekv@ifempty{#1}}% + \ekv@unexpanded + {{% + \def\ekv@tmp{}% + \ekv@errm{empty set name not allowed}% + }}% + {% + \ekv@unexpanded\expandafter{\ekv@ifempty{#2}}% + \ekv@unexpanded + {% + {% + \def\ekv@tmp{}% + \ekv@errm{empty key name not allowed}% + }% + \@secondoftwo + }% + }% + \ekv@unexpanded{\@gobble}% + } +\ekv@exparg{\protected\def\ekv@checkvalid#1#2}{\ekv@checkvalid}% +\ekv@expargtwice{\long\def\ekvifdefined#1#2}% + {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}}} +\ekv@expargtwice{\long\def\ekvifdefinedNoVal#1#2}% + {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}N}} +\def\ekvdef#1#2#3#4#5#6% + {% + \protected\long\def\ekvdef##1##2##3% + {#1{\expandafter\def\csname#2\endcsname####1{##3}#4}}% + \protected\long\def\ekvdefNoVal##1##2##3% + {#1{\expandafter\def\csname#2N\endcsname{##3}#4}}% + \protected\long\def\ekvlet##1##2##3% + {#1{\expandafter\let\csname#2\endcsname##3#4}}% + \protected\long\def\ekvletNoVal##1##2##3% + {#1{\expandafter\let\csname#2N\endcsname##3#4}}% + \ekv@expargtwice{\protected\long\def\ekv@defunknown##1##2##3##4}% + {% + \romannumeral + \ekv@exparg + {\ekv@zero\ekv@checkvalid{##3}.}% + {% + \expandafter\expandafter\expandafter + \def\expandafter\csname\ekv@name{##3}{}u##1\endcsname##2{##4}% + #6% + }% + }% + \ekv@expargtwice{\protected\long\def\ekv@letunknown##1##2##3}% + {% + \romannumeral + \ekv@exparg + {\ekv@zero\ekv@checkvalid{##2}.}% + {% + \expandafter\expandafter\expandafter + \let\expandafter\csname\ekv@name{##2}{}u##1\endcsname##3% + #5% + }% + }% + \protected\long\def\ekvletkv##1##2##3##4% + {% + #1% + {% + \expandafter\let\csname#2\expandafter\endcsname + \csname#3\endcsname + #4% + }% + }% + \protected\long\def\ekvletkvNoVal##1##2##3##4% + {% + #1% + {% + \expandafter\let\csname#2N\expandafter\endcsname + \csname#3N\endcsname + #4% + }% + }% + } +\edef\ekvdefNoVal + {% + {\ekv@unexpanded\expandafter{\ekv@checkvalid{#1}{#2}}}% + {\ekv@unexpanded\expandafter{\ekv@name{#1}{#2}}}% + {\ekv@unexpanded\expandafter{\ekv@name{#3}{#4}}}% + {% + \ekv@unexpanded{\expandafter\ekv@defsetmacro\csname}% + \ekv@unexpanded\expandafter{\ekv@undefined@set{#1}\endcsname{#1}}% + }% + {% + \ekv@unexpanded{\expandafter\ekv@defsetmacro\csname}% + \ekv@unexpanded\expandafter{\ekv@undefined@set{#2}\endcsname{#2}}% + }% + {% + \ekv@unexpanded{\expandafter\ekv@defsetmacro\csname}% + \ekv@unexpanded\expandafter{\ekv@undefined@set{#3}\endcsname{#3}}% + }% + } +\expandafter\ekvdef\ekvdefNoVal +\ekv@exparg{\protected\long\def\ekvdefunknown#1#2}% + {\ekv@defunknown{}{##1##2##3}{#1}{#2}} +\ekv@exparg{\protected\long\def\ekvdefunknownNoVal#1#2}% + {\ekv@defunknown{N}{##1##2}{#1}{#2}} +\ekv@exparg{\protected\long\def\ekvletunknown#1#2}% + {\ekv@letunknown{}{#1}{#2}} +\ekv@exparg{\protected\long\def\ekvletunknownNoVal#1#2}% + {\ekv@letunknown{N}{#1}{#2}} +\let\ekv@defunknown\ekv@undefined +\let\ekv@letunknown\ekv@undefined +\protected\def\ekv@defredirectunknown#1#2#3#4#5#6% + {% + \begingroup + \edef\ekv@tmp + {% + \ekvcsvloop#1{#6}% + \ekv@unexpanded{#2}% + {\ekvcsvloop{}{#5,#6}}% + }% + \ekv@expargtwice + {\endgroup\long#3{#5}}% + {\expandafter#4\ekv@tmp\ekv@stop}% + } +\ekv@exparg{\protected\def\ekvredirectunknown#1#2}% + {% + \ekv@defredirectunknown + \ekv@redirect@kv + \ekv@err@redirect@kv@notfound + \ekvdefunknown + \ekv@redirectunknown@aux + {#1}{#2}% + } +\ekv@exparg{\protected\def\ekvredirectunknownNoVal#1#2}% + {% + \ekv@defredirectunknown + \ekv@redirect@k + \ekv@err@redirect@k@notfound + \ekvdefunknownNoVal + \ekv@redirectunknownNoVal@aux + {#1}{#2}% + } +\def\ekv@redirectunknown@aux#1{#1{##1}{##2}} +\def\ekv@redirectunknownNoVal@aux#1{#1{##1}} +\let\ekv@defredirectunknown\ekv@undefined +\def\ekv@redirect@k#1#2#3#4% + {% + \ekv@if@lastnamedcs + {% + \def\ekv@redirect@k##1##2##3% + {% + \ifcsname#1\endcsname\ekv@redirect@k@a\fi + ##3{##1}% + }% + \def\ekv@redirect@k@a\fi{\fi\expandafter\ekv@redirect@k@b\lastnamedcs}% + \long\def\ekv@redirect@kv##1##2##3##4% + {% + \ifcsname#2\endcsname\ekv@redirect@kv@a\fi\@gobble{##1}% + ##4{##1}{##2}% + }% + \def\ekv@redirect@kv@a\fi\@gobble + {\fi\expandafter\ekv@redirect@kv@b\lastnamedcs}% + } + {% + \def\ekv@redirect@k##1##2##3% + {% + \ifcsname#1\endcsname\ekv@redirect@k@a\fi\ekv@redirect@k@a@ + #1\endcsname + ##3{##1}% + }% + \def\ekv@redirect@k@a@#3\endcsname{}% + \def\ekv@redirect@k@a\fi\ekv@redirect@k@a@ + {\fi\expandafter\ekv@redirect@k@b\csname}% + \long\def\ekv@redirect@kv##1##2##3##4% + {% + \ifcsname#2\endcsname\ekv@redirect@kv@a\fi\ekv@redirect@kv@a@ + #2\endcsname{##1}% + ##4{##1}{##2}% + }% + \long\def\ekv@redirect@kv@a@#4\endcsname##3{}% + \def\ekv@redirect@kv@a\fi\ekv@redirect@kv@a@ + {\fi\expandafter\ekv@redirect@kv@b\csname}% + }% + } +\def\ekv@redirect@kv#1\detokenize#2#3\ekv@stop{\ekv@unexpanded{#1#2#3}} +\edef\ekv@redirect@kv + {% + {\expandafter\ekv@redirect@kv\ekv@name{#2}{#1}N\ekv@stop}% + {\expandafter\ekv@redirect@kv\ekv@name{#3}{#2}\ekv@stop}% + {\expandafter\ekv@redirect@kv\ekv@name{#1}{#2}N\ekv@stop}% + {\expandafter\ekv@redirect@kv\ekv@name{#1}{#2}\ekv@stop}% + } +\expandafter\ekv@redirect@k\ekv@redirect@kv +\def\ekv@redirect@k@b#1% + {\ifx\relax#1\ekv@redirect@k@c\fi\ekv@redirect@k@d#1} +\def\ekv@redirect@k@c\fi\ekv@redirect@k@d#1{\fi} +\def\ekv@redirect@k@d#1#2\ekv@stop{#1} +\def\ekv@redirect@kv@b#1% + {\ifx\relax#1\ekv@redirect@kv@c\fi\ekv@redirect@kv@d#1} +\long\def\ekv@redirect@kv@c\fi\ekv@redirect@kv@d#1#2{\fi} +\long\def\ekv@redirect@kv@d#1#2#3\ekv@stop{#1{#2}} +\edef\ekv@defsetmacro + {% + \ekv@unexpanded{\ifx#1\relax\edef#1##1}% + {% + \ekv@unexpanded\expandafter{\ekv@name@set{#2}}% + \ekv@unexpanded\expandafter{\ekv@name@key{##1}}% + }% + \ekv@unexpanded{\fi}% + } +\ekv@exparg{\protected\def\ekv@defsetmacro#1#2}{\ekv@defsetmacro} +\ekv@expargtwice{\def\ekvifdefinedset#1}% + {\expandafter\ekv@ifdefined\expandafter{\ekv@undefined@set{#1}}} +\def\ekv@ifexp#1#2% + {% + \long\def\ekv@ifexp@split@o@or@other + ##1: ##2\ekv@stop##3% + ##4#1##5\ekv@stop##6% + ##7#2##8\ekv@stop##9% + {##9##6##3##1\ekv@stop##2}% + \long\def\ekv@ifexp@split@a@or@l + ##1#1##2\ekv@stop##3% + ##4#2##5\ekv@stop##6% + {##6##3##1\ekv@stop##2}% + \long\def\ekv@ifexp@split@a##1#1##2\ekv@stop##3% + {##3##1\ekv@stop##2}% + \long\def\ekv@ifexp@split@l##1#2##2\ekv@stop##3% + {##3##1\ekv@stop##2}% + \long\def\ekv@ifexp##1% + {% + \ekv@ifexp@split@o@or@other + ##1\ekv@nil\ekv@stop\ekv@ifexp@o + : \ekv@stop\ekv@ifexp@none + ##1\ekv@stop\ekv@ifexp@a#1\ekv@stop{}% + ##1\ekv@stop\ekv@ifexp@l#2\ekv@stop{}% + }% + \long\def\ekv@ifexp@o##1\ekv@stop + {\ekv@ifexp@done{##1}\ekv@mark}% + \long\def\ekv@ifexp@none + ##1\ekv@nil\ekv@stop\ekv@ifexp@o\ekv@stop + ##2##3% + {##3}% + \def\ekv@ifexp@a##1% + {% + \ekv@ifexp@a@i + ##1\ekv@ifexp@a@ii + \ekv@ifexp@none\ekv@ifexp@a@or@o + }% + \def\ekv@ifexp@a@i##1\ekv@ifexp@none{}% + \long\def\ekv@ifexp@a@ii + \ekv@ifexp@none\ekv@ifexp@a@or@o + ##1#1##2\ekv@stop\ekv@ifexp@o\ekv@stop + {\ekv@ifexp@done{##1}\ekv@mark##2}% + \long\def\ekv@ifexp@a@or@o##1\ekv@stop + {% + \ekv@ifexp@split@a + ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@o + #1\ekv@stop\ekv@ifexp@o@not@a + }% + \long\def\ekv@ifexp@a@not@o##1\ekv@stop + {\ekv@ifexp@a@not@o@{##1}\ekv@mark} + \long\def\ekv@ifexp@a@not@o@ + ##1##2\ekv@nil#1\ekv@stop\ekv@ifexp@o@not@a + {\ekv@ifexp@done{##1}##2: }% + \long\def\ekv@ifexp@o@not@a + ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@o\ekv@stop + {\ekv@ifexp@done{##1}\ekv@mark}% + \def\ekv@ifexp@l##1% + {% + \ekv@ifexp@l@i + ##1\ekv@ifexp@l@ii + \ekv@ifexp@none{}% + ##1\ekv@ifexp@l@or@o + \ekv@ifexp@o + \ekv@ifexp@l@or@a + }% + \def\ekv@ifexp@l@i + ##1\ekv@ifexp@none##2% + ##3\ekv@ifexp@o + {##2}% + \long\def\ekv@ifexp@l@ii + \ekv@ifexp@l@or@a##1#2##2\ekv@stop + \ekv@ifexp@o\ekv@stop#2\ekv@stop##3% + {\ekv@ifexp@done{##1}\ekv@mark##2}% + \long\def\ekv@ifexp@l@or@o + \ekv@ifexp@o\ekv@ifexp@l@or@a + ##1\ekv@stop + {% + \ekv@ifexp@split@l + ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@o + #2\ekv@stop\ekv@ifexp@o@not@l + }% + \long\def\ekv@ifexp@l@not@o##1\ekv@stop + {\ekv@ifexp@l@not@o@{##1}\ekv@mark} + \long\def\ekv@ifexp@l@not@o@ + ##1##2\ekv@nil#2\ekv@stop\ekv@ifexp@o@not@l + ##3#2\ekv@stop##4% + {\ekv@ifexp@done{##1}##2: ##3}% + \long\def\ekv@ifexp@o@not@l + ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@o\ekv@stop + ##2#2\ekv@stop##3% + {\ekv@ifexp@done{##1}\ekv@mark##2}% + \def\ekv@ifexp@l@or@a##1% + {% + \ekv@ifexp@a@i + ##1\ekv@ifexp@l@or@a@not@o + \ekv@ifexp@none + \ekv@ifexp@l@or@a@or@o + }% + \long\def\ekv@ifexp@l@or@a@not@o + \ekv@ifexp@none\ekv@ifexp@l@or@a@or@o + ##1#1% + {% + \ekv@ifexp@split@l + ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@a + #2\ekv@stop\ekv@ifexp@a@not@l + }% + \long\def\ekv@ifexp@l@not@a##1\ekv@stop + {\ekv@ifexp@l@not@a@{##1}\ekv@mark}% + \long\def\ekv@ifexp@l@not@a@ + ##1##2\ekv@nil#2\ekv@stop\ekv@ifexp@a@not@l + ##3\ekv@stop\ekv@ifexp@o\ekv@stop#2\ekv@stop##4% + {\ekv@ifexp@done{##1}##2#1##3}% + \long\def\ekv@ifexp@a@not@l + ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@a\ekv@stop + ##2\ekv@stop\ekv@ifexp@o\ekv@stop#2\ekv@stop##3% + {\ekv@ifexp@done{##1}\ekv@mark##2}% + \long\def\ekv@ifexp@l@or@a@or@o##1\ekv@stop + {% + \ekv@ifexp@split@a@or@l + ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@l@or@o + #1\ekv@stop\ekv@ifexp@o@not@l@or@a + ##1\ekv@stop\ekv@ifexp@l@or@a@or@o@i#2\ekv@stop{}% + }% + \long\def\ekv@ifexp@o@not@l@or@a + ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@l@or@o\ekv@stop + ##2#2\ekv@stop##3% + {\ekv@ifexp@done{##1}\ekv@mark##2}% + \long\def\ekv@ifexp@a@not@l@or@o##1\ekv@stop + {\ekv@ifexp@a@not@l@or@o@{##1}\ekv@mark} + \long\def\ekv@ifexp@a@not@l@or@o@ + ##1##2\ekv@nil##3#2\ekv@stop##4% + {\ekv@ifexp@done{##1}##2: ##3}% + \def\ekv@ifexp@l@or@a@or@o@i##1% + {% + \ekv@ifexp@l@or@a@or@o@ii + ##1\ekv@ifexp@l@or@a@or@o@iii + \ekv@ifexp@o@not@l@or@a + \ekv@ifexp@why + }% + \def\ekv@ifexp@l@or@a@or@o@ii + ##1\ekv@ifexp@o@not@l@or@a + {}% + \long\def\ekv@ifexp@l@or@a@or@o@iii + \ekv@ifexp@o@not@l@or@a\ekv@ifexp@why + ##1#2% + {\ekv@ifexp@l@or@a@or@o@iv{##1}\ekv@mark}% + \long\def\ekv@ifexp@l@or@a@or@o@iv + ##1##2\ekv@nil\ekv@stop\ekv@ifexp@a@not@l@or@o\ekv@stop + #2\ekv@stop##3##4#2\ekv@stop##5% + {\ekv@ifexp@done{##1}##2: ##4}% + \long\def\ekv@ifexp@why##1\ekv@stop + {% + \ekv@ifexp@split@l + ##1\ekv@nil\ekv@stop\ekv@ifexp@why@l + #2\ekv@stop\ekv@ifexp@why@a + }% + \long\def\ekv@ifexp@why@l##1\ekv@stop + {\ekv@ifexp@why@l@i{##1}\ekv@mark} + \long\def\ekv@ifexp@why@l@i + ##1##2\ekv@nil#2\ekv@stop\ekv@ifexp@why@a + {\ekv@ifexp@why@l@ii{##1}##2#1} + \long\def\ekv@ifexp@why@l@ii + ##1##2\ekv@nil#2\ekv@stop##3##4#2\ekv@stop##5% + {\ekv@ifexp@done{##1}##2: ##4}% + \long\def\ekv@ifexp@why@a + ##1\ekv@nil\ekv@stop\ekv@ifexp@why@l\ekv@stop + ##2\ekv@nil#2\ekv@stop##3##4#2\ekv@stop##5% + {\ekv@ifexp@done{##1}\ekv@mark##2: ##4}% + \ekv@exparg{\long\def\ekv@ifexp@done##1##2\ekv@nil}% + {% + \@firstofone + {\ekv@ifexp@done@test##1\ekv@nil\ekv@ifexp@panic} \ekv@nil{}% + ##2\ekv@stop\ekv@ifexp@done@{##1}{##2}\ekv@stop\@secondoftwo + } + \long\def\ekv@ifexp@done@test##1 ##2\ekv@nil##3##4##5##6\ekv@stop{##3} + \ekv@exparg{\long\def\ekv@ifexp@done@##1##2\ekv@stop\@secondoftwo##3}% + {\ekv@strip{##2}{##3{##1}}}% + \long\def\ekv@ifexp@panic##1\@secondoftwo##2##3{##3} + } +\begingroup + \catcode`\~=13 + \lccode`\~=`\: + \catcode`\z=11 + \lccode`\z=`\: +\lowercase{\endgroup +\ekv@ifexp{~ }{z }} +\begingroup +\def\ekvset#1#2{% +\endgroup +\ekv@exparg{\long\def\ekvset##1##2}% + {% + \expandafter\expandafter\expandafter + \ekv@set\expandafter\csname\ekv@undefined@set{##1}\endcsname + \ekv@mark##2#1\ekv@stop#1{}% + } +\long\def\ekv@set##1##2#1% + {% + \ekv@gobble@from@mark@to@stop##2\ekv@endset\ekv@stop + \ekv@set@other##1##2,\ekv@stop,% + } +\long\def\ekv@endset\ekv@stop\ekv@set@other##1\ekv@mark\ekv@stop,\ekv@stop,##2% + {##2} +\long\def\ekv@eq@other@or@active + ##1=##2\ekv@mark##3% + ##4#2##5\ekv@mark##6% + {##6##3##1\ekv@stop\ekv@mark##2} +\long\def\ekv@eq@other##1=##2\ekv@mark##3{##3##1\ekv@stop\ekv@mark##2} +\long\def\ekv@eq@active##1#2##2\ekv@mark##3{##3##1\ekv@stop\ekv@mark##2} +\long\def\ekv@set@other##1##2,% + {% + \ekv@gobble@from@mark@to@stop##2\ekv@endset@other\ekv@stop + \ekv@eq@other@or@active + ##2\ekv@nil\ekv@mark\ekv@set@eq@other + =\ekv@mark\ekv@set@noeq + ##2\ekv@mark\ekv@set@eq@active + #2\ekv@mark{}% + ##1% + \ekv@mark + } +\ekv@exparg{\long\def\ekv@set@next@other##1##2\ekv@set@other##3##4,}% + {\ekv@set@other{##3}{##4},} +\ekv@exparg{\long\def\ekv@endset@other + \ekv@stop\ekv@eq@other@or@active + \ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@set@eq@other + =\ekv@mark\ekv@set@noeq + \ekv@mark\ekv@stop\ekv@mark\ekv@set@eq@active#2\ekv@mark##1% + ##2##3#1}% + {\ekv@set{##2}{##3}#1} +\ekv@exparg{\long\def\ekv@set@eq@other##1\ekv@stop}% + {\ekv@strip@key{##1}\ekv@set@pair} +\def\ekv@set@if@noeq##1\ekv@set@noeq{} +\def\ekv@set@eq@active##1% + {\ekv@set@if@noeq##1\ekv@set@eq@active@\ekv@set@noeq\ekv@set@eq@mixed} +\ekv@exparg{\long\def\ekv@set@eq@active@ + \ekv@set@noeq\ekv@set@eq@mixed + ##1#2##2\ekv@mark + \ekv@set@eq@other\ekv@stop\ekv@mark#2\ekv@mark##3}% + {\ekv@strip@key{##1}\ekv@set@pair\ekv@mark##2} +\long\def\ekv@set@eq@mixed##1\ekv@stop + {% + \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@mixed@a + #2\ekv@mark\ekv@set@eq@mixed@o + } +\ekv@exparg{\long\def\ekv@set@eq@mixed@o + ##1\ekv@nil\ekv@mark\ekv@set@eq@mixed@a\ekv@stop\ekv@mark + ##2\ekv@nil#2\ekv@mark##3}% + {\ekv@strip@key{##1}\ekv@set@pair##2\ekv@nil} +\ekv@exparg{\long\def\ekv@set@eq@mixed@a + ##1\ekv@stop + ##2\ekv@nil#2\ekv@mark\ekv@set@eq@mixed@o\ekv@mark + ##3#2\ekv@mark##4}% + {\ekv@strip@key{##1}\ekv@set@pair##2=##3} +\ekv@expandedarg + {% + \long\def\ekv@set@noeq + ##1\ekv@nil\ekv@mark\ekv@set@eq@other\ekv@stop\ekv@mark + }% + {% + \ekv@unexpanded + {% + \ekv@ifblank@##1\ekv@stop\ekv@ifblank@gobbletrue + \ekv@stop\ekv@set@was@blank + }% + \ekv@unexpanded\expandafter{\ekv@strip@key{##1}\ekv@set@key}% + } +\ekv@exparg{\long\expandafter\def\expandafter\ekv@set@was@blank + \ekv@strip@key{\ekv@mark##1}\ekv@set@key + ##2##3,}% + {\ekv@set@other{##2}{##3},} +\long\def\ekvbreak##1##2\ekv@stop#1##3{##1} +\long\def\ekvbreakPreSneak ##1##2\ekv@stop#1##3{##1##3} +\long\def\ekvbreakPostSneak##1##2\ekv@stop#1##3{##3##1} +\long\def\ekvsneak##1##2\ekv@stop#1##3{##2\ekv@stop#1{##3##1}} +\long\def\ekvsneakPre##1##2\ekv@stop#1##3{##2\ekv@stop#1{##1##3}} +\long\def\ekvparse##1##2##3% + {% + \ekv@unexpanded\ekv@expanded + {{\ekv@parse{##1}{##2}\ekv@mark##3#1\ekv@stop#1}}% + } +\long\def\ekv@parse##1##2##3#1% + {% + \ekv@gobble@from@mark@to@stop##3\ekv@endparse\ekv@stop + \ekv@parse@other{##1}{##2}##3,\ekv@stop,% + } +\long\def\ekv@endparse\ekv@stop\ekv@parse@other##1\ekv@mark\ekv@stop,\ekv@stop,% + {} +\long\def\ekv@parse@other##1##2##3,% + {% + \ekv@gobble@from@mark@to@stop##3\ekv@endparse@other\ekv@stop + \ekv@eq@other@or@active + ##3\ekv@nil\ekv@mark\ekv@parse@eq@other + =\ekv@mark\ekv@parse@noeq + ##3\ekv@mark\ekv@parse@eq@active#2\ekv@mark{}% + {##1}{##2}% + \ekv@mark + } +\ekv@exparg{\long\def\ekv@endparse@other + \ekv@stop\ekv@eq@other@or@active + \ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@parse@eq@other + =\ekv@mark\ekv@parse@noeq + \ekv@mark\ekv@stop\ekv@mark\ekv@parse@eq@active#2\ekv@mark##1% + ##2##3##4#1}% + {\ekv@parse{##2}{##3}{##4}#1} +\ekv@exparg{\long\def\ekv@parse@eq@other##1\ekv@stop}% + {\ekv@strip{##1}\ekv@parse@pair}% +\def\ekv@parse@if@noeq##1\ekv@parse@noeq{} +\def\ekv@parse@eq@active##1% + {% + \ekv@parse@if@noeq##1\ekv@parse@eq@active@\ekv@parse@noeq + \ekv@parse@eq@mixed + } +\ekv@exparg{\long\def\ekv@parse@eq@active@ + \ekv@parse@noeq\ekv@parse@eq@mixed + ##1#2##2\ekv@mark + \ekv@parse@eq@other\ekv@stop\ekv@mark#2\ekv@mark##3}% + {\ekv@strip{##1}\ekv@parse@pair\ekv@mark##2} +\long\def\ekv@parse@eq@mixed##1\ekv@stop + {% + \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@mixed@a + #2\ekv@mark\ekv@parse@eq@mixed@o + } +\ekv@exparg{\long\def\ekv@parse@eq@mixed@a + ##1\ekv@stop + ##2\ekv@nil#2\ekv@mark\ekv@parse@eq@mixed@o\ekv@mark + ##3#2\ekv@mark##4}% + {\ekv@strip{##1}\ekv@parse@pair##2=##3} +\ekv@exparg{\long\def\ekv@parse@eq@mixed@o + ##1\ekv@nil\ekv@mark\ekv@parse@eq@mixed@a\ekv@stop\ekv@mark + ##2\ekv@nil#2\ekv@mark##3}% + {\ekv@strip{##1}\ekv@parse@pair##2\ekv@nil} +\ekv@expandedarg + {% + \long\def\ekv@parse@noeq + ##1\ekv@nil\ekv@mark\ekv@parse@eq@other\ekv@stop\ekv@mark + }% + {% + \ekv@unexpanded + {% + \ekv@ifblank@##1\ekv@stop\ekv@ifblank@gobbletrue + \ekv@stop\ekv@parse@was@blank + }% + \ekv@unexpanded\expandafter{\ekv@strip{##1}\ekv@parse@key}% + } +\ekv@exparg{\long\expandafter\def\expandafter\ekv@parse@was@blank + \ekv@strip{\ekv@mark##1}\ekv@parse@key + ##2##3##4,}% + {\ekv@parse@other{##2}{##3}{##4},} +\ekv@exparg{\long\def\ekv@parse@pair##1##2\ekv@nil}% + {\ekv@strip{##2}\ekv@parse@pair@{##1}} +\ekv@exparg{\long\def\ekv@parse@pair@##1##2##3##4}% + {% + \ekv@ifexp{##2}% + {\ekv@expansion@parse@pair{##1}{##4}}% + {\ekv@unexpanded{##4{##2}{##1}}}% + \ekv@parse@other{##3}{##4}% + } +\ekv@exparg{\long\def\ekv@parse@key##1##2}% + {% + \ekv@ifexp{##1}% + {\ekv@expansion@parse@key{##2}}% + {\ekv@unexpanded{##2{##1}}}% + \ekv@parse@other{##2}% + } +} +\catcode`\,=13 +\catcode`\==13 +\ekvset,= +\edef\ekvsetSneaked + {% + \ekv@unexpanded{\ekvsneak{#2}}% + \ekv@unexpanded\expandafter{\ekvset{#1}{#3}}% + } +\ekv@expargtwice{\long\def\ekvsetSneaked#1#2#3}{\ekvsetSneaked} +\ekv@exparg{\def\ekvchangeset#1}% + {% + \expandafter\expandafter\expandafter + \ekv@changeset\expandafter\csname\ekv@undefined@set{#1}\endcsname\ekv@empty + } +\long\def\ekv@changeset#1#2\ekv@set@other#3{#2\ekv@set@other#1} +\def\ekvmorekv#1% + {% + \long\def\ekvmorekv##1% + {% + \expandafter\ekv@morekv\ekv@expanded + {{\ekv@morekv@loop\ekv@empty##1\ekv@stop\ekv@morekv@done#1}}% + \ekv@empty + }% + \long\def\ekv@parse@more##1\@gobble##2% + {% + \expandafter\ekv@parse@more@\ekv@expanded + {{\ekv@morekv@loop\ekv@empty##1\ekv@stop\ekv@morekv@done#1}}% + }% + \long\def\ekv@parse@more@##1\ekv@parse@other##2##3\ekv@mark + {\ekv@parse@other{##2}{##3}\ekv@mark##1,}% + \long\def\ekv@morekv##1##2\ekv@set@other##3\ekv@mark + {##2\ekv@set@other##3\ekv@mark##1,} + \long\def\ekv@morekv@loop##1#1% + {\ekv@morekv@wrap##1\ekv@stop,\ekv@morekv@loop\ekv@empty}% + \long\def\ekv@morekv@wrap##1\ekv@stop{\ekv@unexpanded\expandafter{##1}}% + \def\ekv@morekv@done\ekv@stop,\ekv@morekv@loop\ekv@empty{}% + } +\begingroup\catcode`\,=13 \@firstofone{\endgroup\ekvmorekv,} +\protected\def\ekv@def@expansion@rule#1#2#3#4% + {% + \long\expandafter\def\csname ekv@expansion@rule@#1\endcsname##1#2% + {#3\ekv@expansion@rule@#4}% + } +\protected\def\ekv@def@expansion@rule@ea#1#2% + {\ekv@def@expansion@rule{#1}{#2}\expandafter} +\long\def\ekv@expansion@csname#1\ekv@stop + {% + ekv@expansion@rule@% + \ifcsname ekv@expansion@rule@#1\endcsname + #1% + \else + \ekv@err@undefined@expansion{#1}% + \fi + } +\long\def\ekv@expansion@rule@#1#2% + {\csname\expandafter\ekv@expansion@csname\string#2\ekv@stop\endcsname{#1}} +\ekv@exparg + {% + \long\expandafter + \def\csname ekv@expansion@rule@\string\ekv@mark\endcsname + #1\ekv@stop#2#3#4#5% + }% + {% + \romannumeral\ekv@exparg{\expandafter\ekv@zero\ekv@ifempty{#3}{#5{#2}{#1}}}% + {\ekv@ifempty{#2}{#4{#1}}{\ekv@err@val@no@reinsert{#2}}}% + } +\ekv@def@expansion@rule@ea{o}{}{\expandafter{#1}} +\ekv@def@expansion@rule@ea{e}{}{\ekv@expanded{{#1}}} +\ekv@def@expansion@rule@ea{c}{}{\csname#1\endcsname} +\ekv@def@expansion@rule@ea{f}{}{\expandafter{\romannumeral`\^^@#1}} +\ekv@exparg{\ekv@def@expansion@rule{s}{}}{\ekv@strip{\ekv@mark#1}}{} +\ekv@def@expansion@rule{b}{}{}{{{#1}}} +\ekv@def@expansion@rule{\string\r}{#2\ekv@stop#3#4}{}{{#1}#2\ekv@stop{#3}{#4r}} +\ekv@def@expansion@rule@ea{g}{}{\expandafter{\@gobble#1}} +\ekv@def@expansion@rule{p}{#2}{}{{#2#1}} +\ekv@def@expansion@rule{P}{#2}{}{{#1#2}} +\long\def\ekv@expansion@rule@V#1% + {% + \ifx\relax#1\ekv@err@erroneous@variable{#1}\ekv@expansion@@clean@V\fi + \ekv@expansion@@V{#1}% + } +\ekv@expandedarg{\long\def\ekv@expansion@rule@v#1}% + {% + \ekv@unexpanded{\ekv@ifdefined{#1}% + {\expandafter\ekv@expansion@@V\csname#1\endcsname}}% + {% + \ekv@unexpanded{\expandafter\ekv@err@erroneous@variable\ekv@expanded}% + {{\expandafter\@gobble\string\\#1}}% + \ekv@unexpanded{\ekv@expansion@rule@}{}% + }% + } +\ekv@exparg{\long\def\ekv@expansion@rule@r#1#2\ekv@stop#3#4}% + {\ekv@expansion@rule@v{#1}#2\ekv@stop{#3}{#4r}} +\ekv@exparg{\long\def\ekv@expansion@rule@R#1#2\ekv@stop#3#4}% + {\ekv@expansion@rule@V{#1}#2\ekv@stop{#3}{#4r}} +\long\def\ekv@expansion@@V#1% + {% + \expandafter\ifx\noexpand#1#1% + \ekv@fi@firstoftwo + \fi + \@secondoftwo + {\expandafter\ekv@expansion@rule@\expandafter{\the#1}}% + {\expandafter\ekv@expansion@rule@\expandafter{#1}}% + } +\long\def\ekv@expansion@@clean@V\fi\ekv@expansion@@V#1% + {\fi\ekv@expansion@rule@{}} +\ekv@def@expansion@rule{\string\key}{#2#3\ekv@stop#4}% + {}{{#4}#2\ekv@key@after\ekv@stop{#1}{}{#3}} +\ekv@exparg{\ekv@def@expansion@rule{\string\ekv@key@after}{\ekv@stop#2#3#4}}% + {\ekv@ifempty{#3}{}\ekv@err@key@no@reinsert} + {{#2}#4\ekv@stop{#1}} +\ekv@if@lastnamedcs + {% + \long\def\ekv@set@pair#1\ekv@mark#2#3\ekv@nil#4% + {% + \ifcsname#4{#1}\endcsname\expandafter\ekv@set@pair@\lastnamedcs\fi + \ekv@set@pair@undefined{#3}{#1}{#2}% + \ekv@set@other#4% + } + \ekv@exparg{\long\def\ekv@set@pair@undefined#1#2#3\ekv@set@other#4}% + {% + \romannumeral + \ekv@exparg + {\expandafter\ekv@zero\ekv@ifexp{#3}}% + {\ekv@strip{#1}\ekv@expansion@set@pair}% + {% + \ifcsname#4{}u\endcsname\expandafter\ekv@set@pair@u\lastnamedcs\fi + \ekv@set@pair@no@u{#1}{#2}{#3}% + }% + \ekv@set@other#4% + } + } + {% + \long\def\ekv@set@pair#1\ekv@mark#2#3\ekv@nil#4% + {% + \ifcsname#4{#1}\endcsname + \expandafter\ekv@set@pair@\csname#4{#1}\endcsname + \fi + \ekv@set@pair@undefined{#3}{#1}{#2}% + \ekv@set@other#4% + } + \ekv@exparg{\long\def\ekv@set@pair@undefined#1#2#3\ekv@set@other#4}% + {% + \romannumeral + \ekv@exparg + {\expandafter\ekv@zero\ekv@ifexp{#3}}% + {\ekv@strip{#1}\ekv@expansion@set@pair}% + {% + \ifcsname#4{}u\endcsname + \expandafter\ekv@set@pair@u\csname#4{}u\endcsname + \fi + \ekv@set@pair@no@u{#1}{#2}{#3}% + }% + \ekv@set@other#4% + } + } +\ekv@expandedarg{\long\def\ekv@set@pair@#1\fi\ekv@set@pair@undefined#2}% + {% + \ekv@unexpanded{\fi\ifx#1\relax\ekv@set@pair@relax\fi}% + \ekv@unexpanded\expandafter{\ekv@strip{#2}#1\ekv@set@next@other}% + } +\ekv@expandafter{\long\def\ekv@set@pair@relax\fi}% + \ekv@strip{#1}#2\ekv@set@next@other + {\fi\ekv@set@pair@undefined{#1}} +\ekv@expandedarg{\long\def\ekv@set@pair@u#1\fi\ekv@set@pair@no@u#2}% + {% + \ekv@unexpanded + {% + \fi + \ifx\relax#1% + \ekv@set@pair@u@relax + \fi + }% + \ekv@unexpanded\expandafter{\ekv@strip{#2}#1}% + } +\ekv@expandafter{\long\def\ekv@set@pair@u@relax\fi}\ekv@strip{\ekv@mark#1}#2% + {\fi\ekv@set@pair@no@u.} +\long\def\ekv@set@pair@no@u#1#2#3\ekv@set@other#4% + {% + \ekv@ifdefined{#4{#2}N}% + \ekv@err@noarg + \ekv@err@unknown + #4{#2}{#3}% + \ekv@set@other#4% + } +\ekv@if@lastnamedcs + {% + \long\def\ekv@set@key#1\ekv@mark#2#3% + {% + \ifcsname#3{#1}N\endcsname\expandafter\ekv@set@key@\lastnamedcs\fi + \ekv@set@key@undefined{#1}{#2}% + \ekv@set@other#3% + } + \ekv@exparg{\long\def\ekv@set@key@undefined#1#2\ekv@set@other#3}% + {% + \ekv@ifexp{#2}% + \ekv@expansion@set@key + {% + \ifcsname#3{}uN\endcsname\expandafter\ekv@set@key@u\lastnamedcs\fi + \ekv@set@key@no@u{#1}{#2}% + }% + \ekv@set@other#3% + } + } + {% + \long\def\ekv@set@key#1\ekv@mark#2#3% + {% + \ifcsname#3{#1}N\endcsname + \expandafter\ekv@set@key@\csname#3{#1}N\endcsname + \fi + \ekv@set@key@undefined{#1}{#2}% + \ekv@set@other#3% + } + \ekv@exparg{\long\def\ekv@set@key@undefined#1#2\ekv@set@other#3}% + {% + \ekv@ifexp{#2}% + \ekv@expansion@set@key + {% + \ifcsname#3{}uN\endcsname + \expandafter\ekv@set@key@u\csname#3{}uN\endcsname + \fi + \ekv@set@key@no@u{#1}{#2}% + }% + \ekv@set@other#3% + } + } +\long\def\ekv@set@key@#1\fi\ekv@set@key@undefined + {\fi\ifx#1\relax\ekv@set@key@relax\fi#1\ekv@set@next@other} +\long\def\ekv@set@key@relax\fi#1\ekv@set@next@other{\fi\ekv@set@key@undefined} +\long\def\ekv@set@key@u#1\fi\ekv@set@key@no@u + {\fi\ifx\relax#1\ekv@set@key@u@relax\fi#1} +\def\ekv@set@key@u@relax\fi#1{\fi\ekv@set@key@no@u} +\long\def\ekv@set@key@no@u#1#2\ekv@set@other#3% + {% + \ekv@ifdefined{#3{#1}}% + \ekv@err@reqval + \ekv@err@unknown + #3{#1}{#2}% + \ekv@set@other#3% + } +\long\def\ekv@expansion@set@key#1#2#3% + {% + \ekv@expansion@rule@{#2}#1\ekv@mark\ekv@stop{}{}\ekvmorekv + \ekv@expansion@set@key@ + } +\long\def\ekv@expansion@set@key@#1#2\ekv@set@other#3% + {\expandafter\ekv@set@key\detokenize{#2}\ekv@mark{#2}#3} +\long\def\ekv@expansion@set@pair#1#2#3#4% + {% + \ekv@expansion@rule@{#1}#2\ekv@mark\ekv@stop{#3}{}\ekvmorekv + \ekv@expansion@set@pair@ + } +\long\def\ekv@expansion@set@pair@#1#2\ekv@set@other#3% + {\expandafter\ekv@set@pair\detokenize{#1}\ekv@mark{#1}\ekv@mark{#2}\ekv@nil#3} +\long\def\ekv@expansion@parse@key#1#2#3#4% + {% + \ekv@expansion@rule@{#3}#2\ekv@mark\ekv@stop{}{}\ekv@parse@more + \ekv@expansion@parse@key@\@gobble{#1}% + } +\long\def\ekv@expansion@parse@key@#1#2\@gobble#3{\ekv@unexpanded{#3{#2}}} +\long\def\ekv@expansion@parse@pair#1#2#3#4#5% + {% + \ekv@expansion@rule@{#1}#3\ekv@mark\ekv@stop{#4}{}\ekv@parse@more + \ekv@expansion@parse@pair@\@gobble{#2}% + } +\long\def\ekv@expansion@parse@pair@#1#2\@gobble#3{\ekv@unexpanded{#3{#1}{#2}}} +\ekv@expargtwice{\protected\def\ekvsetdef#1#2}% + {% + \romannumeral + \ekv@exparg{\ekv@zero\ekv@exparg{\def#1##1}}% + {\ekvset{#2}{##1}}% + } +\ekv@expargtwice{\protected\def\ekvsetSneakeddef#1#2}% + {% + \romannumeral + \ekv@exparg{\ekv@zero\ekv@exparg{\long\def#1##1##2}}% + {\ekvsetSneaked{#2}{##1}{##2}}% + } +\ekv@expargtwice{\protected\def\ekvsetdefSneaked#1#2#3}% + {% + \romannumeral + \ekv@exparg{\ekv@zero\ekv@exparg{\long\def#1##1}}% + {\ekvsetSneaked{#2}{#3}{##1}}% + } +\begingroup +\catcode`\^^@=2 +\@firstofone{\endgroup + \def\ekv@alignsafe{\romannumeral\iffalse{\fi`^^@ } +} +\def\ekv@endalignsafe{\ifnum`{=\ekv@zero}\fi} +\begingroup +\def\ekvoptarg#1#2{% +\endgroup +\def\ekvoptarg{#1\ekv@optarg@a} +\long\def\ekv@optarg@a##1##2##3% + {% + \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optarg@b\ekv@mark[\ekv@mark + #2% + \@firstofone{ ##1}{##2}{##3}% + }% +\def\ekvoptargTF{#1\ekv@optargTF@a} +\long\def\ekv@optargTF@a##1##2##3% + {% + \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optargTF@b{##1}\ekv@mark[\ekv@mark + #2% + \@firstofone{ ##2}{##3}% + } +\long\def\ekv@optarg@b\ekv@mark[\ekv@mark\ifnum`##1\fi\@firstofone##2##3##4##5]% + {#2##2{##5}} +\long\def\ekv@optargTF@b + ##1\ekv@mark[\ekv@mark\ifnum`##2\fi\@firstofone##3##4##5]% + {#2 ##1{##5}} +} +\ekv@exparg + {% + \expandafter\ekv@strip\expandafter + {\expandafter\ekv@mark\ekv@alignsafe}% + \ekvoptarg + }% + \ekv@endalignsafe +\long\def\ekv@optarg@if#1\ekv@mark[\ekv@mark{} +\long\def\ekv@ifstar#1#2#3% + {% + \if*\string#3% + \ekv@fi@firstoftwo + \fi + \@secondoftwo + {#1}% + {#2{#3}}% + } +\protected\long\def\ekvcompile + {% + \ekv@alignsafe + \ekv@ifstar{\ekv@compile{}}{\ekv@compile{\expandafter\expandafter}}% + } +\def\ekv@compile#1#2#3#{\ekv@compile@{#1}{#2#3}} +\def\ekv@compile@#1#2#3{#2#3} +\ekv@exparg{\protected\long\def\ekv@compile@#1#2#3#4}% + {% + \expandafter\ekv@expanded\expandafter + {% + \romannumeral\ekv@expargtwice{\ekv@zero\def\ekv@unexpanded{#2}}% + {% + \expandafter\ekv@compile@ + \ekvparse + {\ekv@compile@key{#1}{#3}}% + {\ekv@compile@pair{#1}{#3}}% + {#4}% + }% + }% + \ekv@endalignsafe + } +\ekv@exparg{\long\def\ekv@compile@key#1#2#3}% + {% + \ekvifdefinedNoVal{#2}{#3}% + {\ekv@unexpanded#1\expandafter{\csname\ekv@name{#2}{#3}N\endcsname}}% + {% + \ekv@ifdefined{\ekv@name{#2}{}uN} + {% + \ekv@unexpanded#1\expandafter + {% + \csname\ekv@name{#2}{}uN\expandafter\endcsname + \expandafter{\detokenize{#3}}{#3}% + }% + }% + {% + \ekvifdefined{#2}{#3}% + {\ekv@err{missing value for `#3' in set `#2'}}% + {\ekv@err{unknown key `#3' in set `#2'}}% + }% + }% + } +\ekv@exparg{\long\def\ekv@compile@pair#1#2#3#4}% + {% + \ekvifdefined{#2}{#3}% + {\ekv@unexpanded#1\expandafter{\csname\ekv@name{#2}{#3}\endcsname{#4}}}% + {% + \ekv@ifdefined{\ekv@name{#2}{}u}% + {% + \ekv@unexpanded#1\expandafter + {% + \csname\ekv@name{#2}{}u\ekv@expanded{\endcsname + {\ekv@unexpanded{#4}}{\detokenize{#3}}}{#3}% + }% + }% + {% + \ekvifdefinedNoVal{#2}{#3}% + {\ekv@err{unwanted value for `#3' in set `#2'}}% + {\ekv@err{unknown key `#3' in set `#2'}}% + }% + }% + } +\def\ekv@err@cleanup\par{} +\def\ekv@err@collect#1% + {% + \def\ekv@err@collect##1\par##2% + {% + \expandafter + \ekv@err@cleanup + #1! ##2 Error: ##1\par + }% + \def#1##1\thanks@jfbu{}% + } +\def\ekverr{ } +\expandafter\ekv@err@collect\csname <an-expandable-macro>^^J% + completed due to above exception. \ekverr If the error^^J% + summary is \ekverr not comprehensible \ekverr see the package^^J% + documentation.^^J% + I will try to recover now. \ekverr If you're in inter-^^J% + active mode hit <return> \ekverr at the ? prompt and I^^J% + continue hoping recovery\endcsname +\long\def\ekverr#1#2{\expandafter\ekv@err@collect\detokenize{#2}\par{#1}} +\ekv@exparg{\long\def\ekv@err#1}{\ekverr{expkv}{#1}} +\protected\long\def\ekv@errm#1{\errmessage{expkv Error: #1}} +\long\def\ekv@err@common #1#2{\expandafter\ekv@err@common@\string#2{#1}} +\ekv@exparg{\long\def\ekv@err@common@#1`#2' #3.#4#5}% + {\ekv@err{#4 `#5' in set `#2'}} +\ekv@exparg{\long\def\ekv@err@unknown#1#2}{\ekv@err@common{unknown key}{#1}} +\ekv@exparg{\long\def\ekv@err@noarg#1#2} + {\ekv@err@common{unwanted value for}{#1}} +\ekv@exparg{\long\def\ekv@err@reqval#1#2}% + {\ekv@err@common{missing value for}{#1}} +\ekv@exparg{\long\def\ekv@err@redirect@kv@notfound#1#2#3\ekv@stop}% + {\ekv@err{no key `#2' in sets #3}} +\ekv@exparg{\def\ekv@err@redirect@k@notfound#1#2\ekv@stop}% + {\ekv@err{no NoVal key `#1' in sets #2}} +\ekv@exparg{\def\ekv@err@undefined@expansion#1\fi}% + {\expandafter\fi\ekv@err{Undefined expansion rule `#1'}}% +\ekv@exparg{\def\ekv@err@erroneous@variable#1}% + {\ekv@err{Erroneous variable `#1' used}} +\ekv@exparg{\def\ekv@err@key@no@reinsert}% + {\ekv@err{Reinsertion in \key expansion forbidden}} +\ekv@exparg{\def\ekv@err@val@no@reinsert#1}% + {\ekv@err{Reinsertion with key `#1' forbidden}} +\catcode`\@=\ekv@tmp +%% +%% +%% End of file `expkv.tex'. |