summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex')
-rw-r--r--Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex1245
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'.