summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-10-11 20:48:59 +0000
committerKarl Berry <karl@freefriends.org>2020-10-11 20:48:59 +0000
commit3422d732c6ff0bf2df753c64bee1cb533ca71474 (patch)
treea94169bd4aa6fe8afb1e23f09817de7f513ce269
parent2af878d8a2c86b79762fab0437863f8a25154355 (diff)
expkv-cs (11oct20)
git-svn-id: svn://tug.org/texlive/trunk@56632 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/expkv-cs/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/expkv-cs/expkv-cs.pdfbin316942 -> 321211 bytes
-rw-r--r--Master/texmf-dist/source/latex/expkv-cs/expkv-cs.dtx164
-rw-r--r--Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex135
4 files changed, 249 insertions, 52 deletions
diff --git a/Master/texmf-dist/doc/latex/expkv-cs/README.md b/Master/texmf-dist/doc/latex/expkv-cs/README.md
index 9c6333476f6..d7ca7d3bce5 100644
--- a/Master/texmf-dist/doc/latex/expkv-cs/README.md
+++ b/Master/texmf-dist/doc/latex/expkv-cs/README.md
@@ -1,7 +1,7 @@
-------------------------------------------------------------------------------
# expkv-cs -- define expandable key=val macros using expkv
-Version 2020-08-08 v0.4
+Version 2020-10-11 v0.5
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
diff --git a/Master/texmf-dist/doc/latex/expkv-cs/expkv-cs.pdf b/Master/texmf-dist/doc/latex/expkv-cs/expkv-cs.pdf
index 72b4ca6d4bf..e2188f691a5 100644
--- a/Master/texmf-dist/doc/latex/expkv-cs/expkv-cs.pdf
+++ b/Master/texmf-dist/doc/latex/expkv-cs/expkv-cs.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/expkv-cs/expkv-cs.dtx b/Master/texmf-dist/source/latex/expkv-cs/expkv-cs.dtx
index c450ae626d6..28218c79845 100644
--- a/Master/texmf-dist/source/latex/expkv-cs/expkv-cs.dtx
+++ b/Master/texmf-dist/source/latex/expkv-cs/expkv-cs.dtx
@@ -81,8 +81,8 @@ and the derived files expkv-cs.pdf
,basicstyle=\fontfamily{jkp}\itshape
,morekeywords=^^A
{^^A
- \ekvcSplit,\ekvcSplitAndForward,
- \ekvcHash,\ekvcHashAndForward,
+ \ekvcSplit,\ekvcSplitAndForward,\ekvcSplitAndUse
+ \ekvcHash,\ekvcHashAndForward,\ekvcHashAndUse
\ekvcValue,\ekvcValueFast,
\ekvcSecondaryKeys
}
@@ -800,8 +800,8 @@ and the derived files expkv-cs.pdf
% \begin{macro}{\ekvcVersion,\ekvcDate}
% We're on our first input, so lets store the version and date in a macro.
% \begin{macrocode}
-\def\ekvcVersion{0.4}
-\def\ekvcDate{2020-08-08}
+\def\ekvcVersion{0.5}
+\def\ekvcDate{2020-10-11}
% \end{macrocode}
% \end{macro}
%
@@ -874,6 +874,7 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\protected\long\def\ekvcSplitAndUse#1#2%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcSplitAndUse@#1{}{#2}}%
@@ -892,12 +893,23 @@ and the derived files expkv-cs.pdf
{%
\edef\ekvc@set{\string#1}%
\ekvc@SetupSplitKeys{#3}%
- \ekvc@any@long\edef#1##1%
+ \ekvc@helpers@needed
{%
- \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
- \unexpanded\expandafter
- {\csname ekvc@split@\the\ekvc@keycount\endcsname}%
- \unexpanded\expandafter{\ekvc@initials{}#2}%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded\expandafter
+ {\csname ekvc@split@\the\ekvc@keycount\endcsname}%
+ \unexpanded\expandafter{\ekvc@initials{}#2}%
+ }%
+ }%
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded{#2}%
+ \unexpanded\expandafter{\ekvc@initials}%
+ }%
}%
}
% \end{macrocode}
@@ -910,6 +922,7 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\protected\long\def\ekvcSplitAndForward#1#2#3%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcSplitAndUse@#1{{#2}}{#3}}%
@@ -924,25 +937,47 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\protected\long\def\ekvcSplit#1#2#3%
{%
+ \let\ekvc@helpers@needed\@secondoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{%
\expandafter
\ekvcSplitAndUse@\expandafter#1\csname ekvc@\string#1\endcsname{#2}%
- \ifnum\ekvc@keycount=0
- \def\ekvc@tmp##1##{}%
+ \ifnum\ekvc@keycount<1
+ \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname{#3}%
\else
\ifnum\ekvc@keycount>9
\ekvc@err@toomany{#1}%
- \ekvc@defarggobbler9%
+ \let#1\ekvc@undefined
\else
- \expandafter\ekvc@defarggobbler\the\ekvc@keycount
+ \ekvcSplit@build@argspec
+ \ekvc@any@long\expandafter
+ \def\csname ekvc@\string#1\expandafter\endcsname\ekvc@tmp{#3}%
\fi
\fi
- \ekvc@any@long\expandafter
- \def\csname ekvc@\string#1\expandafter\endcsname
- \ekvc@tmp##1##2##3##4##5##6##7##8##9%
- {#3}%
+ }%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\ekvcSplit@build@argspec,\ekvcSplit@build@argspec@}
+% \begin{macrocode}
+\protected\def\ekvcSplit@build@argspec
+ {%
+ \begingroup
+ \edef\ekvc@tmp
+ {\endgroup\def\unexpanded{\ekvc@tmp}{\ekvcSplit@build@argspec@{1}}}%
+ \ekvc@tmp
+ }
+\def\ekvcSplit@build@argspec@#1%
+ {%
+ \ifnum#1>\ekvc@keycount
+ \ekv@fi@gobble
+ \fi
+ \@firstofone
+ {%
+ \unexpanded\expandafter{\csname ekvc@splitmark@#1\endcsname####}#1%
+ \expandafter\ekvcSplit@build@argspec@\expandafter{\the\numexpr#1+1}%
}%
}
% \end{macrocode}
@@ -1033,7 +1068,9 @@ and the derived files expkv-cs.pdf
}%
\ekvc@tmp
\ekvlet\ekvc@set{#1}\ekvc@tmp
- \expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}%
+ \ekvc@helpers@needed
+ {\expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}}%
+ {}%
}
% \end{macrocode}
% \end{macro}
@@ -1059,12 +1096,18 @@ and the derived files expkv-cs.pdf
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\ekvc@setup@splitmacro, \ekvc@split@1}
-% Since the first split macro is different from the others we manually set
-% that one up now. All the others will be defined as needed (always globally).
-% The split macros just read up until the correct split mark, move that
-% argument into a list and reinsert the rest, calling the next split macro
-% afterwards.
+% \begin{macro}[internal]
+% {
+% \ekvc@setup@splitmacro,
+% \ekvc@split@1, \ekvc@split@2, \ekvc@split@3,
+% \ekvc@split@4, \ekvc@split@5, \ekvc@split@6,
+% \ekvc@split@7
+% }
+% Since the first few split macros are different from the others we manually
+% set those up now. All the others will be defined as needed (always
+% globally). The split macros just read up until the correct split mark, move
+% that argument into a list and reinsert the rest, calling the next split
+% macro afterwards.
% \begin{macrocode}
\begingroup
\edef\ekvc@tmp
@@ -1073,6 +1116,51 @@ and the derived files expkv-cs.pdf
\unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}%
##1##2##3%
{##3{##1}##2}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@2\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ ##3##4%
+ {##4{##1}{##2}##3}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@3\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ ##4##5%
+ {##5{##1}{##2}{##3}##4}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@4\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ ##5##6%
+ {##6{##1}{##2}{##3}{##4}##5}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@5\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ ##6##7%
+ {##7{##1}{##2}{##3}{##4}{##5}##6}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@6\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ \unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6%
+ ##7##8%
+ {##8{##1}{##2}{##3}{##4}{##5}{##6}##7}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@7\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ \unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6%
+ \unexpanded\expandafter{\csname ekvc@splitmark@7\endcsname}##7%
+ ##8##9%
+ {##9{##1}{##2}{##3}{##4}{##5}{##6}{##7}##8}%
}
\ekvc@tmp
\endgroup
@@ -1106,6 +1194,7 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\protected\long\def\ekvcHashAndUse#1#2%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcHashAndUse@#1{}{#2}}%
@@ -1113,7 +1202,7 @@ and the derived files expkv-cs.pdf
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\ekvcHashAndForward@}
+% \begin{macro}[internal]{\ekvcHashAndUse@}
% This is more or less the same as |\ekvcSplitAndUse@|. Instead of an empty
% group we place a marker after the initials, we don't use the sorting macros
% of |split|, but instead pack all the values in one argument.
@@ -1122,11 +1211,22 @@ and the derived files expkv-cs.pdf
{%
\edef\ekvc@set{\string#1}%
\ekvc@SetupHashKeys{#3}%
- \ekvc@any@long\edef#1##1%
+ \ekvc@helpers@needed
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded{\ekvc@hash@pack@argument}%
+ \unexpanded\expandafter{\ekvc@initials\ekvc@stop#2}%
+ }%
+ }%
{%
- \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
- \unexpanded{\ekvc@hash@pack@argument}%
- \unexpanded\expandafter{\ekvc@initials\ekvc@stop#2}%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded{#2}%
+ \unexpanded\expandafter{\ekvc@initials\ekvc@stop}%
+ }%
}%
}
% \end{macrocode}
@@ -1137,6 +1237,7 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\protected\long\def\ekvcHashAndForward#1#2#3%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcHashAndUse@#1{{#2}}{#3}}%
@@ -1151,12 +1252,15 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\protected\long\def\ekvcHash#1#2#3%
{%
+ \let\ekvc@helpers@needed\@secondoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{%
\expandafter
\ekvcHashAndUse@\expandafter#1\csname ekvc@\string#1\endcsname{#2}%
- \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname##1{#3}%
+ \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname
+ ##1\ekvc@stop
+ {#3}%
}%
}
% \end{macrocode}
diff --git a/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex b/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex
index ec97f9845f6..d1f3ccc1df1 100644
--- a/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex
+++ b/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex
@@ -35,8 +35,8 @@
\else
\expandafter\endinput
\fi
-\def\ekvcVersion{0.4}
-\def\ekvcDate{2020-08-08}
+\def\ekvcVersion{0.5}
+\def\ekvcDate{2020-10-11}
\csname ekvc@tmp\endcsname
\expandafter\chardef\csname ekvc@tmp\endcsname=\catcode`\@
\catcode`\@=11
@@ -57,6 +57,7 @@
}
\protected\long\def\ekvcSplitAndUse#1#2%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcSplitAndUse@#1{}{#2}}%
@@ -65,41 +66,70 @@
{%
\edef\ekvc@set{\string#1}%
\ekvc@SetupSplitKeys{#3}%
- \ekvc@any@long\edef#1##1%
+ \ekvc@helpers@needed
{%
- \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
- \unexpanded\expandafter
- {\csname ekvc@split@\the\ekvc@keycount\endcsname}%
- \unexpanded\expandafter{\ekvc@initials{}#2}%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded\expandafter
+ {\csname ekvc@split@\the\ekvc@keycount\endcsname}%
+ \unexpanded\expandafter{\ekvc@initials{}#2}%
+ }%
+ }%
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded{#2}%
+ \unexpanded\expandafter{\ekvc@initials}%
+ }%
}%
}
\protected\long\def\ekvcSplitAndForward#1#2#3%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcSplitAndUse@#1{{#2}}{#3}}%
}
\protected\long\def\ekvcSplit#1#2#3%
{%
+ \let\ekvc@helpers@needed\@secondoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{%
\expandafter
\ekvcSplitAndUse@\expandafter#1\csname ekvc@\string#1\endcsname{#2}%
- \ifnum\ekvc@keycount=0
- \def\ekvc@tmp##1##{}%
+ \ifnum\ekvc@keycount<1
+ \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname{#3}%
\else
\ifnum\ekvc@keycount>9
\ekvc@err@toomany{#1}%
- \ekvc@defarggobbler9%
+ \let#1\ekvc@undefined
\else
- \expandafter\ekvc@defarggobbler\the\ekvc@keycount
+ \ekvcSplit@build@argspec
+ \ekvc@any@long\expandafter
+ \def\csname ekvc@\string#1\expandafter\endcsname\ekvc@tmp{#3}%
\fi
\fi
- \ekvc@any@long\expandafter
- \def\csname ekvc@\string#1\expandafter\endcsname
- \ekvc@tmp##1##2##3##4##5##6##7##8##9%
- {#3}%
+ }%
+ }
+\protected\def\ekvcSplit@build@argspec
+ {%
+ \begingroup
+ \edef\ekvc@tmp
+ {\endgroup\def\unexpanded{\ekvc@tmp}{\ekvcSplit@build@argspec@{1}}}%
+ \ekvc@tmp
+ }
+\def\ekvcSplit@build@argspec@#1%
+ {%
+ \ifnum#1>\ekvc@keycount
+ \ekv@fi@gobble
+ \fi
+ \@firstofone
+ {%
+ \unexpanded\expandafter{\csname ekvc@splitmark@#1\endcsname####}#1%
+ \expandafter\ekvcSplit@build@argspec@\expandafter{\the\numexpr#1+1}%
}%
}
\protected\long\def\ekvc@SetupSplitKeys
@@ -155,7 +185,9 @@
}%
\ekvc@tmp
\ekvlet\ekvc@set{#1}\ekvc@tmp
- \expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}%
+ \ekvc@helpers@needed
+ {\expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}}%
+ {}%
}
\protected\def\ekvc@split@p@long
{%
@@ -171,6 +203,51 @@
\unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}%
##1##2##3%
{##3{##1}##2}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@2\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ ##3##4%
+ {##4{##1}{##2}##3}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@3\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ ##4##5%
+ {##5{##1}{##2}{##3}##4}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@4\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ ##5##6%
+ {##6{##1}{##2}{##3}{##4}##5}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@5\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ ##6##7%
+ {##7{##1}{##2}{##3}{##4}{##5}##6}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@6\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ \unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6%
+ ##7##8%
+ {##8{##1}{##2}{##3}{##4}{##5}{##6}##7}%
+ \long\gdef\unexpanded\expandafter{\csname ekvc@split@7\endcsname}%
+ \unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ \unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6%
+ \unexpanded\expandafter{\csname ekvc@splitmark@7\endcsname}##7%
+ ##8##9%
+ {##9{##1}{##2}{##3}{##4}{##5}{##6}{##7}##8}%
}
\ekvc@tmp
\endgroup
@@ -198,6 +275,7 @@
}
\protected\long\def\ekvcHashAndUse#1#2%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcHashAndUse@#1{}{#2}}%
@@ -206,27 +284,42 @@
{%
\edef\ekvc@set{\string#1}%
\ekvc@SetupHashKeys{#3}%
- \ekvc@any@long\edef#1##1%
+ \ekvc@helpers@needed
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded{\ekvc@hash@pack@argument}%
+ \unexpanded\expandafter{\ekvc@initials\ekvc@stop#2}%
+ }%
+ }%
{%
- \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
- \unexpanded{\ekvc@hash@pack@argument}%
- \unexpanded\expandafter{\ekvc@initials\ekvc@stop#2}%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \unexpanded{#2}%
+ \unexpanded\expandafter{\ekvc@initials\ekvc@stop}%
+ }%
}%
}
\protected\long\def\ekvcHashAndForward#1#2#3%
{%
+ \let\ekvc@helpers@needed\@firstoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{\ekvcHashAndUse@#1{{#2}}{#3}}%
}
\protected\long\def\ekvcHash#1#2#3%
{%
+ \let\ekvc@helpers@needed\@secondoftwo
\ekv@ifdefined{\expandafter\@gobble\string#1}%
{\ekvc@err@already@defined#1}%
{%
\expandafter
\ekvcHashAndUse@\expandafter#1\csname ekvc@\string#1\endcsname{#2}%
- \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname##1{#3}%
+ \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname
+ ##1\ekvc@stop
+ {#3}%
}%
}
\long\def\ekvc@hash@pack@argument#1\ekvc@stop#2{#2{#1}}