summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/expkv/expkv.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/expkv/expkv.tex')
-rw-r--r--Master/texmf-dist/tex/generic/expkv/expkv.tex592
1 files changed, 356 insertions, 236 deletions
diff --git a/Master/texmf-dist/tex/generic/expkv/expkv.tex b/Master/texmf-dist/tex/generic/expkv/expkv.tex
index 84898302138..5897ca8c924 100644
--- a/Master/texmf-dist/tex/generic/expkv/expkv.tex
+++ b/Master/texmf-dist/tex/generic/expkv/expkv.tex
@@ -39,11 +39,23 @@
\errmessage{expkv requires e-TeX}
\expandafter\endinput
\fi
-\def\ekvVersion{1.4}
-\def\ekvDate{2020-07-04}
+\def\ekvVersion{1.5}
+\def\ekvDate{2020-10-10}
\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\@firstofone#1{#1}
\long\def\@firstoftwo#1#2{#1}
@@ -74,135 +86,184 @@
\ekv@ifempty@A\ekv@ifempty@B\@secondoftwo
}
\long\def\ekv@ifblank@\ekv@mark#1{\ekv@ifempty@\ekv@ifempty@A}
-\def\ekv@ifdefined#1%
+\ekv@if@lastnamedcs
{%
- \expandafter
- \ifx\csname\ifcsname #1\endcsname #1\else relax\fi\endcsname\relax
- \ekv@fi@secondoftwo
- \fi
- \@firstoftwo
+ \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
+ }
}
-\def\ekv@name#1#2{\ekv@name@set{#1}\ekv@name@key{\detokenize{#2}}}
-\def\ekv@name@set#1{ekv#1(}
-\def\ekv@name@key#1{#1)}
-\def\ekv@undefined@set#1{! expkv Error: Set `#1' undefined.}
-\protected\def\ekv@checkvalid#1#2%
{%
- \ekv@ifempty{#1}%
- {%
- \def\ekv@tmp{}%
- \errmessage{expkv Error: empty set name not allowed}%
- }%
+ \def\ekv@ifdefined#1%
{%
- \ekv@ifempty{#2}%
- {%
- \def\ekv@tmp{}%
- \errmessage{expkv Error: empty key name not allowed}%
- }%
- \@secondoftwo
- }%
- \@gobble
+ \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\ekvifdefined#1#2{\ekv@ifdefined{\ekv@name{#1}{#2}}}
-\def\ekvifdefinedNoVal#1#2{\ekv@ifdefined{\ekv@name{#1}{#2}N}}
-\protected\long\def\ekvdef#1#2#3%
+\def\ekv@strip#1%
{%
- \ekv@checkvalid{#1}{#2}%
+ \long\def\ekv@strip##1%
{%
- \expandafter\def\csname\ekv@name{#1}{#2}\endcsname##1{#3}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ \ekv@strip@a
+ ##1\ekv@nil
+ \ekv@mark#1%
+ #1\ekv@nil
+ \ekv@stop
}%
+ \long\def\ekv@strip@a##1\ekv@mark#1{\ekv@strip@b##1\ekv@mark}%
+ \long\def\ekv@strip@b##1#1\ekv@nil {\ekv@strip@c##1\ekv@nil}%
}
-\protected\long\def\ekvdefNoVal#1#2#3%
+\ekv@strip{ }
+\long\def\ekv@strip@c\ekv@mark#1\ekv@nil\ekv@mark#2\ekv@nil\ekv@stop#3{#3{#1}}
+\long\def\ekv@expB@unbraceA#1#2%
{%
- \ekv@checkvalid{#1}{#2}%
- {%
- \expandafter\def\csname\ekv@name{#1}{#2}N\endcsname{#3}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
- }%
+ \expandafter\ekv@expB@unbraceA@\expandafter{#2}{#1}%
}
-\protected\def\ekvlet#1#2#3%
+\long\def\ekv@expB@unbraceA@#1#2{#2{#1}}%
+\def\ekv@name@set#1{ekv#1(}
+\def\ekv@name@key#1{#1)}
+\edef\ekv@name
{%
- \ekv@checkvalid{#1}{#2}%
- {%
- \expandafter\let\csname\ekv@name{#1}{#2}\endcsname#3%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
- }%
+ \unexpanded\expandafter{\ekv@name@set{#1}}%
+ \unexpanded\expandafter{\ekv@name@key{\detokenize{#2}}}%
}
-\protected\def\ekvletNoVal#1#2#3%
+\ekv@expB@unbraceA{\def\ekv@name#1#2}{\ekv@name}
+\def\ekv@undefined@set#1{! expkv Error: Set `#1' undefined.}
+\edef\ekv@checkvalid
{%
- \ekv@checkvalid{#1}{#2}%
+ \unexpanded\expandafter{\ekv@ifempty{#1}}%
+ \unexpanded
+ {{%
+ \def\ekv@tmp{}%
+ \errmessage{expkv Error: empty set name not allowed}%
+ }}%
{%
- \expandafter\let\csname\ekv@name{#1}{#2}N\endcsname#3%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ \unexpanded\expandafter{\ekv@ifempty{#2}}%
+ \unexpanded
+ {%
+ {%
+ \def\ekv@tmp{}%
+ \errmessage{expkv Error: empty key name not allowed}%
+ }%
+ \@secondoftwo
+ }%
}%
- }
-\protected\def\ekvletkv#1#2#3#4%
- {%
- \ekv@checkvalid{#1}{#2}%
+ \unexpanded{\@gobble}%
+ }
+\ekv@expB@unbraceA{\protected\def\ekv@checkvalid#1#2}{\ekv@checkvalid}%
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\def\ekvifdefined#1#2}}%
+ {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}}}
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\def\ekvifdefinedNoVal#1#2}}%
+ {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}N}}
+\def\ekvdef#1#2#3#4%
+ {%
+ \protected\long\def\ekvdef##1##2##3%
+ {#1{\expandafter\def\csname#2\endcsname####1{##3}#3}}%
+ \protected\long\def\ekvdefNoVal##1##2##3%
+ {#1{\expandafter\def\csname#2N\endcsname{##3}#3}}%
+ \protected\def\ekvlet##1##2##3%
+ {#1{\expandafter\let\csname#2\endcsname##3#3}}%
+ \protected\def\ekvletNoVal##1##2##3%
+ {#1{\expandafter\let\csname#2N\endcsname##3#3}}%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+ \protected\long\def\ekvdefunknown##1##2}}}%
{%
- \expandafter\let\csname\ekv@name{#1}{#2}\expandafter\endcsname
- \csname\ekv@name{#3}{#4}\endcsname
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ \expandafter\ekv@expB@unbraceA@\expandafter
+ {%
+ \expandafter\expandafter\expandafter
+ \def\expandafter\csname\ekv@name{##1}{}u\endcsname####1####2{##2}%
+ #3%
+ }%
+ {\ekv@checkvalid{##1}.}%
}%
- }
-\protected\def\ekvletkvNoVal#1#2#3#4%
- {%
- \ekv@checkvalid{#1}{#2}%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+ \protected\long\def\ekvdefunknownNoVal##1##2}}}%
{%
- \expandafter\let\csname\ekv@name{#1}{#2}N\expandafter\endcsname
- \csname\ekv@name{#3}{#4}N\endcsname
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ \expandafter\ekv@expB@unbraceA@\expandafter
+ {%
+ \expandafter\expandafter\expandafter
+ \def\expandafter\csname\ekv@name{##1}{}uN\endcsname####1{##2}%
+ #3%
+ }%
+ {\ekv@checkvalid{##1}.}%
}%
- }
-\protected\def\ekvdefunknown#1#2%
- {%
- \ekv@checkvalid{#1}{.}%
+ \protected\def\ekvletkv##1##2##3##4%
{%
- \expandafter\def\csname\ekv@name{#1}{}u\endcsname##1##2{#2}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ #1%
+ {%
+ \expandafter\let\csname#2\expandafter\endcsname
+ \csname#4\endcsname
+ #3%
+ }%
}%
- }
-\protected\def\ekvdefunknownNoVal#1#2%
- {%
- \ekv@checkvalid{#1}{.}%
+ \protected\def\ekvletkvNoVal##1##2##3##4%
{%
- \expandafter\def\csname\ekv@name{#1}{}uN\endcsname##1{#2}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ #1%
+ {%
+ \expandafter\let\csname#2N\expandafter\endcsname
+ \csname#4N\endcsname
+ #3%
+ }%
}%
}
-\protected\def\ekv@defsetmacro#1#2%
+\edef\ekvdefNoVal
{%
- \ifx#1\relax
- \edef#1##1{\ekv@name@set{#2}\ekv@name@key{\noexpand\detokenize{##1}}}%
- \fi
+ {\unexpanded\expandafter{\ekv@checkvalid{#1}{#2}}}%
+ {\unexpanded\expandafter{\ekv@name{#1}{#2}}}%
+ {%
+ \unexpanded{\expandafter\ekv@defsetmacro\csname}%
+ \unexpanded\expandafter{\ekv@undefined@set{#1}\endcsname{#1}}%
+ }%
+ {\unexpanded\expandafter{\ekv@name{#3}{#4}}}%
+ }%
+\expandafter\ekvdef\ekvdefNoVal
+\edef\ekv@defsetmacro
+ {%
+ \unexpanded{\ifx#1\relax\edef#1##1}%
+ {%
+ \unexpanded\expandafter{\ekv@name@set{#2}}%
+ \unexpanded\expandafter{\ekv@name@key{##1}}%
+ }%
+ \unexpanded{\fi}%
}
-\def\ekvifdefinedset#1%
+\ekv@expB@unbraceA{\protected\def\ekv@defsetmacro#1#2}{\ekv@defsetmacro}
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\def\ekvifdefinedset#1}}%
{%
- \ekv@ifdefined{\ekv@undefined@set{#1}}%
+ \expandafter\ekv@ifdefined\expandafter{\ekv@undefined@set{#1}}%
}
+\begingroup
\def\ekvset#1#2{%
\endgroup
-\long\def\ekvset##1##2%
+\ekv@expB@unbraceA{\long\def\ekvset##1##2}%
{%
- \expandafter\ekv@set\csname\ekv@undefined@set{##1}\endcsname
+ \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,%
- \ekv@set##1\ekv@mark
}
\long\def\ekv@endset
- \ekv@stop\ekv@set@other##1,\ekv@stop,\ekv@set##2\ekv@mark
- ##3%
- {##3}
-\long\def\ekv@eq@other##1=##2\ekv@mark##3##4\ekv@stop
+ \ekv@stop\ekv@set@other##1\ekv@mark\ekv@stop,\ekv@stop,##2%
+ {##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##4\ekv@stop
+\long\def\ekv@eq@active##1#2##2\ekv@mark##3%
{%
##3##1\ekv@stop\ekv@mark##2%
}
@@ -210,51 +271,70 @@
{%
\ekv@gobble@from@mark@to@stop##2\ekv@endset@other\ekv@stop
\ekv@eq@other##2\ekv@nil\ekv@mark\ekv@set@eq@other@a
- =\ekv@mark\ekv@set@eq@active\ekv@stop
+ =\ekv@mark\ekv@set@eq@active
##1%
- \ekv@set@other##1\ekv@mark
+ \ekv@mark
}
\long\def\ekv@set@eq@other@a##1\ekv@stop
{%
- \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@other@active@a
- #2\ekv@mark\ekv@set@eq@other@b\ekv@stop
+ \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@other@active
+ #2\ekv@mark\ekv@set@eq@other@b
}
-\long\def\ekv@set@eq@other@b
- ##1\ekv@nil\ekv@mark\ekv@set@eq@other@active@a\ekv@stop\ekv@mark
+\ekv@expB@unbraceA
{%
- \ekv@strip{##1}\ekv@set@pair
- }
-\long\def\ekv@set@eq@other@active@a##1\ekv@stop##2\ekv@nil\ekv@mark
+ \long\def\ekv@set@eq@other@b
+ ##1\ekv@nil\ekv@mark\ekv@set@eq@other@active\ekv@stop\ekv@mark
+ ##2\ekv@nil=\ekv@mark\ekv@set@eq@active
+ }%
+ {\ekv@strip{##1}{\expandafter\ekv@set@pair\detokenize}\ekv@mark##2\ekv@nil}
+\ekv@expB@unbraceA
{%
- \ekv@set@eq@other@active@b{##1}##2=%
- }
-\long\def\ekv@set@eq@other@active@b##1%
- {%
- \ekv@strip{##1}\ekv@set@pair
- }
+ \long\def\ekv@set@eq@other@active
+ ##1\ekv@stop##2\ekv@nil#2\ekv@mark
+ \ekv@set@eq@other@b\ekv@mark##3=\ekv@mark\ekv@set@eq@active
+ }%
+ {\ekv@strip{##1}{\expandafter\ekv@set@pair\detokenize}\ekv@mark##2=##3}
\long\def\ekv@set@eq@active
##1\ekv@nil\ekv@mark\ekv@set@eq@other@a\ekv@stop\ekv@mark
{%
\ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@active@
- #2\ekv@mark\ekv@set@noeq\ekv@stop
+ #2\ekv@mark\ekv@set@noeq
}
-\long\def\ekv@set@eq@active@##1\ekv@stop
+\ekv@expB@unbraceA
+ {\long\def\ekv@set@eq@active@##1\ekv@stop##2\ekv@nil#2\ekv@mark\ekv@set@noeq}%
{%
- \ekv@strip{##1}\ekv@set@pair
+ \ekv@strip{##1}{\expandafter\ekv@set@pair\detokenize}\ekv@mark##2\ekv@nil
}
-\long\def\ekv@set@noeq##1\ekv@nil\ekv@mark\ekv@set@eq@active@\ekv@stop\ekv@mark
+\edef\ekv@set@noeq
{%
- \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F@gobble
- \ekv@ifempty@A\ekv@ifempty@B\@firstofone
- {\ekv@strip{##1}\ekv@set@key}%
+ \unexpanded
+ {%
+ \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@set@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ }%
+ \unexpanded\expandafter
+ {\ekv@strip{##1}{\expandafter\ekv@set@key\detokenize}\ekv@mark}%
+ }
+\ekv@expB@unbraceA
+ {%
+ \long\def\ekv@set@noeq
+ ##1\ekv@nil\ekv@mark\ekv@set@eq@active@\ekv@stop\ekv@mark
+ }%
+ {\ekv@set@noeq}
+\def\ekv@set@was@blank##1%
+ {%
+ \def\ekv@set@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ \ekv@strip@a\ekv@mark####1\ekv@nil\ekv@mark##1##1\ekv@nil\ekv@stop
+ ####2\ekv@mark
+ {\ekv@set@other}%
}
+\ekv@set@was@blank{ }
\long\def\ekv@endset@other
\ekv@stop
- \ekv@eq@other##1\ekv@nil\ekv@mark\ekv@set@eq@other@a
- =\ekv@mark\ekv@set@eq@active\ekv@stop
- ##2%
- \ekv@set@other##3\ekv@mark
- {}
+ \ekv@eq@other\ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@set@eq@other@a
+ =\ekv@mark\ekv@set@eq@active
+ {\ekv@set}
\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}
@@ -274,167 +354,229 @@
{%
\ekv@gobble@from@mark@to@stop##3\ekv@endparse\ekv@stop
\ekv@parse@other##1##2##3,\ekv@stop,%
- \ekv@parse##1##2\ekv@mark
}
\long\def\ekv@endparse
- \ekv@stop\ekv@parse@other##1,\ekv@stop,\ekv@parse##2\ekv@mark
+ \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##3\ekv@nil\ekv@mark\ekv@parse@eq@other@a
- =\ekv@mark\ekv@parse@eq@active\ekv@stop
+ =\ekv@mark\ekv@parse@eq@active
##1##2%
- \ekv@parse@other##1##2\ekv@mark
+ \ekv@mark
}
\long\def\ekv@parse@eq@other@a##1\ekv@stop
{%
- \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active@a
- #2\ekv@mark\ekv@parse@eq@other@b\ekv@stop
- }
-\long\def\ekv@parse@eq@other@b
- ##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active@a\ekv@stop\ekv@mark
- {%
- \ekv@strip{##1}\ekv@parse@pair
+ \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active
+ #2\ekv@mark\ekv@parse@eq@other@b
}
-\long\def\ekv@parse@eq@other@active@a##1\ekv@stop##2\ekv@nil\ekv@mark
+\ekv@expB@unbraceA
{%
- \ekv@parse@eq@other@active@b{##1}##2=%
- }
-\long\def\ekv@parse@eq@other@active@b##1%
+ \long\def\ekv@parse@eq@other@b
+ ##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active\ekv@stop\ekv@mark
+ ##2\ekv@nil=\ekv@mark\ekv@parse@eq@active
+ }%
+ {\ekv@strip{##1}\ekv@parse@pair##2\ekv@nil}
+\ekv@expB@unbraceA
{%
- \ekv@strip{##1}\ekv@parse@pair
- }
+ \long\def\ekv@parse@eq@other@active
+ ##1\ekv@stop##2\ekv@nil#2\ekv@mark
+ \ekv@parse@eq@other@b\ekv@mark##3=\ekv@mark\ekv@parse@eq@active
+ }%
+ {\ekv@strip{##1}\ekv@parse@pair##2=##3}
\long\def\ekv@parse@eq@active
##1\ekv@nil\ekv@mark\ekv@parse@eq@other@a\ekv@stop\ekv@mark
{%
\ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@active@
- #2\ekv@mark\ekv@parse@noeq\ekv@stop
+ #2\ekv@mark\ekv@parse@noeq
+ }
+\ekv@expB@unbraceA
+ {\long\def\ekv@parse@eq@active@##1\ekv@stop##2#2\ekv@mark\ekv@parse@noeq}%
+ {%
+ \ekv@strip{##1}\ekv@parse@pair##2%
}
-\long\def\ekv@parse@eq@active@##1\ekv@stop
+\edef\ekv@parse@noeq
{%
- \ekv@strip{##1}\ekv@parse@pair
+ \unexpanded
+ {%
+ \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@parse@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ }%
+ \unexpanded\expandafter{\ekv@strip{##1}\ekv@parse@key}%
}
-\long\def\ekv@parse@noeq
- ##1\ekv@nil\ekv@mark\ekv@parse@eq@active@\ekv@stop\ekv@mark
+\ekv@expB@unbraceA
+ {%
+ \long\def\ekv@parse@noeq
+ ##1\ekv@nil\ekv@mark\ekv@parse@eq@active@\ekv@stop\ekv@mark
+ }%
+ {\ekv@parse@noeq}
+\def\ekv@parse@was@blank##1%
{%
- \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F@gobbletwo
- \ekv@ifempty@A\ekv@ifempty@B\@firstofone
- {\ekv@strip{##1}\ekv@parse@key}%
+ \def\ekv@parse@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ \ekv@strip@a\ekv@mark####1\ekv@nil\ekv@mark##1##1\ekv@nil\ekv@stop
+ \ekv@parse@key
+ {\ekv@parse@other}%
}
+\ekv@parse@was@blank{ }
\long\def\ekv@endparse@other
\ekv@stop
- \ekv@eq@other##1\ekv@nil\ekv@mark\ekv@parse@eq@other@a
- =\ekv@mark\ekv@parse@eq@active\ekv@stop
- ##2%
- \ekv@parse@other##3\ekv@mark
- {}
-\long\def\ekv@parse@pair##1##2\ekv@nil
+ \ekv@eq@other\ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@parse@eq@other@a
+ =\ekv@mark\ekv@parse@eq@active
+ {\ekv@parse}
+\ekv@expB@unbraceA{\long\def\ekv@parse@pair##1##2\ekv@nil}%
{%
\ekv@strip{##2}\ekv@parse@pair@{##1}%
}
\long\def\ekv@parse@pair@##1##2##3##4%
{%
\unexpanded{##4{##2}{##1}}%
+ \ekv@parse@other##3##4%
}
\long\def\ekv@parse@key##1##2##3%
{%
\unexpanded{##2{##1}}%
+ \ekv@parse@other##2##3%
}
}
-\begingroup
\catcode`\,=13
\catcode`\==13
\ekvset,=
-\def\ekvchangeset#1%
+\edef\ekvsetSneaked
{%
- \expandafter\ekv@changeset\csname\ekv@undefined@set{#1}\endcsname\ekv@mark
+ \unexpanded{\ekvsneak{#2}}%
+ \unexpanded\expandafter{\ekvset{#1}{#3}}%
}
-\long\def\ekv@changeset#1#2\ekv@set@other#3#4\ekv@set#5%
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def\ekvsetSneaked#1#2#3}}%
+ {\ekvsetSneaked}
+\ekv@expB@unbraceA{\def\ekvchangeset#1}%
{%
- \ekv@gobble@mark#2\ekv@set@other#1#4\ekv@set#1%
+ \expandafter\expandafter\expandafter
+ \ekv@changeset\expandafter\csname\ekv@undefined@set{#1}\endcsname\ekv@empty
}
-\long\def\ekv@set@pair#1#2\ekv@nil#3%
+\long\def\ekv@changeset#1#2\ekv@set@other#3%
{%
- \expandafter\ekv@set@pair@
- \csname
- \ifcsname #3{#1}\endcsname
- #3{#1}%
- \else
- relax%
- \fi
- \endcsname
- {#2}%
+ #2\ekv@set@other#1%
+ }
+\ekv@if@lastnamedcs
+ {%
+ \long\def\ekv@set@pair#1\ekv@mark#2\ekv@nil#3%
{%
- \expandafter\ekv@set@pair@
- \csname
- \ifcsname #3{}u\endcsname
- #3{}u%
- \else
- relax%
- \fi
- \endcsname
+ \ifcsname #3{#1}\endcsname\ekv@set@pair@a\fi\@secondoftwo
{#2}%
{%
- \ekv@ifdefined{#3{#1}N}%
- \ekv@err@noarg
- \ekv@err@unknown
- #3%
+ \ifcsname #3{}u\endcsname\ekv@set@pair@a\fi\@secondoftwo
+ {#2}%
+ {%
+ \ekv@ifdefined{#3{#1}N}%
+ \ekv@err@noarg
+ \ekv@err@unknown
+ #3%
+ }%
+ {#1}%
}%
- {#1}%
- }%
+ \ekv@set@other#3%
+ }
+ \def\ekv@set@pair@a\fi\@secondoftwo
+ {\fi\expandafter\ekv@set@pair@b\lastnamedcs}
+ }
+ {%
+ \long\def\ekv@set@pair#1\ekv@mark#2\ekv@nil#3%
+ {%
+ \ifcsname #3{#1}\endcsname
+ \ekv@set@pair@a\fi\ekv@set@pair@c#3{#1}\endcsname
+ {#2}%
+ {%
+ \ifcsname #3{}u\endcsname
+ \ekv@set@pair@a\fi\ekv@set@pair@c#3{}u\endcsname
+ {#2}%
+ {%
+ \ekv@ifdefined{#3{#1}N}%
+ \ekv@err@noarg
+ \ekv@err@unknown
+ #3%
+ }%
+ {#1}%
+ }%
+ \ekv@set@other#3%
+ }
+ \def\ekv@set@pair@a\fi\ekv@set@pair@c{\fi\expandafter\ekv@set@pair@b\csname}
+ \long\def\ekv@set@pair@c#1\endcsname#2#3{#3}
}
-\long\def\ekv@set@pair@#1#2%
+\long\def\ekv@set@pair@b#1%
{%
\ifx#1\relax
- \ekv@fi@secondoftwo
+ \ekv@set@pair@e
\fi
- \@firstoftwo
- {\ekv@strip{#2}#1}%
+ \ekv@set@pair@d#1%
}
-\long\def\ekv@set@key#1#2%
+\ekv@expB@unbraceA{\long\def\ekv@set@pair@d#1#2#3}{\ekv@strip{#2}#1}
+\long\def\ekv@set@pair@e\fi\ekv@set@pair@d#1#2#3{\fi#3}
+\ekv@if@lastnamedcs
{%
- \expandafter\ekv@set@key@
- \csname
- \ifcsname #2{#1}N\endcsname
- #2{#1}N%
- \else
- relax%
- \fi
- \endcsname
+ \long\def\ekv@set@key#1\ekv@mark#2%
{%
- \expandafter\ekv@set@key@
- \csname
- \ifcsname #2{}uN\endcsname
- #2{}uN%
- \else
- relax%
- \fi
- \endcsname
+ \ifcsname #2{#1}N\endcsname\ekv@set@key@a\fi\@firstofone
{%
- \ekv@ifdefined{#2{#1}}%
- \ekv@err@reqval
- \ekv@err@unknown
- #2%
+ \ifcsname #2{}uN\endcsname\ekv@set@key@a\fi\@firstofone
+ {%
+ \ekv@ifdefined{#2{#1}}%
+ \ekv@err@reqval
+ \ekv@err@unknown
+ #2%
+ }%
+ {#1}%
}%
- {#1}%
- }%
+ \ekv@set@other#2%
+ }
+ \def\ekv@set@key@a\fi\@firstofone{\fi\expandafter\ekv@set@key@b\lastnamedcs}
+ }
+ {%
+ \long\def\ekv@set@key#1\ekv@mark#2%
+ {%
+ \ifcsname #2{#1}N\endcsname
+ \ekv@set@key@a\fi\ekv@set@key@c#2{#1}N\endcsname
+ {%
+ \ifcsname #2{}uN\endcsname
+ \ekv@set@key@a\fi\ekv@set@key@c#2{}uN\endcsname
+ {%
+ \ekv@ifdefined{#2{#1}}%
+ \ekv@err@reqval
+ \ekv@err@unknown
+ #2%
+ }%
+ {#1}%
+ }%
+ \ekv@set@other#2%
+ }
+ \def\ekv@set@key@a\fi\ekv@set@key@c{\fi\expandafter\ekv@set@key@b\csname}
+ \long\def\ekv@set@key@c#1N\endcsname#2{#2}
}
-\def\ekv@set@key@#1%
+\long\def\ekv@set@key@b#1%
{%
\ifx#1\relax
\ekv@fi@secondoftwo
\fi
\@firstoftwo#1%
}
-\protected\def\ekvsetdef#1#2%
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+\protected\def\ekvsetdef#1#2}}}}%
{%
- \expandafter\expandafter\expandafter
- \ekv@setdef\expandafter\expandafter\expandafter{\ekvset{#2}{##1}}#1%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def#1##1}}%
+ {\ekvset{#2}{##1}}%
+ }
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+\protected\def\ekvsetSneakeddef#1#2}}}}%
+ {%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def#1##1##2}}%
+ {\ekvsetSneaked{#2}{##1}{##2}}%
}
-\protected\def\ekv@setdef#1#2%
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+\protected\def\ekvsetdefSneaked#1#2#3}}}}%
{%
- \long\def#2##1{#1}%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def#1##1}}%
+ {\ekvsetSneaked{#2}{#3}{##1}}%
}
\begingroup
\edef\ekv@err
@@ -451,34 +593,12 @@
\def\ekv@err@{\expandafter\ekv@gobbleto@stop}
\long\def\ekv@err@common #1#2{\expandafter\ekv@err@common@\string#2{#1}}
\long\def\ekv@err@common@#1`#2' #3.#4#5{\ekv@err{#4 (`#5', set `#2')}}
-\long\def\ekv@err@unknown#1#2{\ekv@err@common{unknown key}#1{#2}}
-\long\def\ekv@err@noarg #1#2{\ekv@err@common{value forbidden}#1{#2}}
-\long\def\ekv@err@reqval #1#2{\ekv@err@common{value required}#1{#2}}
-\def\ekv@strip#1%
- {%
- \long\def\ekv@strip##1%
- {%
- \ekv@strip@a
- ##1%
- \ekv@nil
- \ekv@mark#1%
- #1\ekv@nil{}%
- \ekv@stop
- }%
- \long\def\ekv@strip@a##1\ekv@mark#1##2\ekv@nil##3%
- {%
- \ekv@strip@b##3##1##2\ekv@nil
- }%
- \long\def\ekv@strip@b##1#1\ekv@nil
- {%
- \ekv@strip@c##1\ekv@nil
- }%
- \long\def\ekv@strip@c\ekv@mark##1\ekv@nil##2\ekv@stop##3%
- {%
- ##3{##1}%
- }%
- }
-\ekv@strip{ }
+\ekv@expB@unbraceA{\long\def\ekv@err@unknown#1}%
+ {\ekv@err@common{unknown key}{#1}}
+\ekv@expB@unbraceA{\long\def\ekv@err@noarg #1}%
+ {\ekv@err@common{value forbidden}{#1}}
+\ekv@expB@unbraceA{\long\def\ekv@err@reqval #1}%
+ {\ekv@err@common{value required}{#1}}
\catcode`\@=\ekv@tmp
%%
%%