diff options
author | Karl Berry <karl@freefriends.org> | 2023-01-24 20:57:30 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-01-24 20:57:30 +0000 |
commit | ee97f6dbd2e6acf46b912ba49ad1e59892892707 (patch) | |
tree | d57f5081c212d6c288b80fa545be94c459075c4d /Master/texmf-dist/tex | |
parent | 81de637794cea58fe8f1a7128ac5f305de1ae155 (diff) |
expkv-bundle (24jan23)
git-svn-id: svn://tug.org/texlive/trunk@65623 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
14 files changed, 4750 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-cs.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-cs.tex new file mode 100644 index 00000000000..f4fcf8fdc0f --- /dev/null +++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-cs.tex @@ -0,0 +1,59 @@ +%% +%% This is file `t-expkv-cs.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-cs.dtx (with options: `ctx') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\writestatus{loading}{ConTeXt User Module / expkv-cs} +\usemodule[expkv-pop] +\unprotect +\input expkv-cs.tex +\writestatus{loading} + {ConTeXt User Module / expkv-cs / Version \ekvcVersion\space loaded} +\protect\endinput +%% +%% +%% End of file `t-expkv-cs.tex'. diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-def.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-def.tex new file mode 100644 index 00000000000..5752a499295 --- /dev/null +++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-def.tex @@ -0,0 +1,59 @@ +%% +%% This is file `t-expkv-def.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-def.dtx (with options: `ctx') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\writestatus{loading}{ConTeXt User Module / expkv-def} +\usemodule[expkv-pop] +\unprotect +\input expkv-def.tex +\writestatus{loading} + {ConTeXt User Module / expkv-def / Version \ekvdVersion\space loaded} +\protect\endinput +%% +%% +%% End of file `t-expkv-def.tex'. diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-pop.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-pop.tex new file mode 100644 index 00000000000..4e66a908a9c --- /dev/null +++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-pop.tex @@ -0,0 +1,59 @@ +%% +%% This is file `t-expkv-pop.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-pop.dtx (with options: `ctx') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\writestatus{loading}{ConTeXt User Module / expkv-pop} +\usemodule[expkv] +\unprotect +\input expkv-pop.tex +\writestatus{loading} + {ConTeXt User Module / expkv-pop / Version \ekvpVersion\space loaded} +\protect\endinput +%% +%% +%% End of file `t-expkv-pop.tex'. diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv.tex new file mode 100644 index 00000000000..489f2df0159 --- /dev/null +++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv.tex @@ -0,0 +1,60 @@ +%% +%% This is file `t-expkv.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv.dtx (with options: `ctx') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\writestatus{loading}{ConTeXt User Module / expkv} +\unprotect +\input expkv.tex +\long\def\ekv@err@collect#1\par#2% + {\directlua{tex.error[[\detokenize{#2} Error: #1]]}} +\writestatus{loading} + {ConTeXt User Module / expkv / Version \ekvVersion\space loaded} +\protect\endinput +%% +%% +%% End of file `t-expkv.tex'. diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv-cs.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-cs.tex new file mode 100644 index 00000000000..ef836dd7b57 --- /dev/null +++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-cs.tex @@ -0,0 +1,1013 @@ +%% +%% This is file `expkv-cs.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-cs.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. +%% +\input expkv-pop +\expandafter\ifx\csname ekvcVersion\endcsname\relax +\else + \expandafter\endinput +\fi +\def\ekvcVersion{1.3} +\def\ekvcDate{2023-01-23} +\csname ekvc@tmp\endcsname +\expandafter\chardef\csname ekvc@tmp\endcsname=\catcode`\@ +\catcode`\@=11 +\edef\ekvc@tripledots{\detokenize{...}} +\newcount\ekvc@keycount +\let\ekvc@long\ekv@empty +\let\ekvc@any@long\ekv@empty +\long\def\ekvc@ifdefined#1% + {% + \ifdefined#1% + \ifx\relax#1% + \ekv@fi@gobble + \fi + \@firstofone + \ekv@fi@firstoftwo + \fi + \@secondoftwo + } +\def\ekvc@ekvset@pre@expander#1% + {% + \expandafter\ekvc@ekvset@pre@expander@a\ekvset{#1}\ekvc@stop\ekvc@stop + } +\def\ekvc@ekvset@pre@expander@a + {% + \expandafter\ekvc@ekvset@pre@expander@b + } +\def\ekvc@ekvset@pre@expander@b#1\ekvc@stop#2\ekvc@stop + {% + \ekv@unexpanded\expandafter{\ekv@alignsafe}% + \ekv@unexpanded{#1}##1\ekv@unexpanded{#2}% + \ekv@unexpanded\expandafter{\ekv@endalignsafe}% + } +\protected\long\def\ekvcSplitAndUse#1#2% + {% + \let\ekvc@helpers@needed\@firstoftwo + \ekvc@ifdefined#1% + {\ekvc@err@already@defined#1}% + {\ekvcSplitAndUse@#1{}{#2}}% + } +\protected\long\def\ekvcSplitAndUse@#1#2#3% + {% + \edef\ekvc@set{\string#1}% + \ekvc@SetupSplitKeys{#3}% + \ekvc@helpers@needed + {% + \ekvc@any@long\edef#1##1% + {% + \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}% + \ekv@unexpanded\expandafter + {\csname ekvc@split@\the\ekvc@keycount\endcsname}% + \ekv@unexpanded\expandafter{\ekvc@initials{}#2}% + }% + }% + {% + \ekvc@any@long\edef#1##1% + {% + \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}% + \ekv@unexpanded{#2}% + \ekv@unexpanded\expandafter{\ekvc@initials}% + }% + }% + } +\protected\long\def\ekvcSplitAndForward#1#2#3% + {% + \let\ekvc@helpers@needed\@firstoftwo + \ekvc@ifdefined#1% + {\ekvc@err@already@defined#1}% + {\ekvcSplitAndUse@#1{{#2}}{#3}}% + } +\protected\long\def\ekvcSplit#1#2#3% + {% + \let\ekvc@helpers@needed\@secondoftwo + \ekvc@ifdefined#1% + {\ekvc@err@already@defined#1}% + {% + \expandafter + \ekvcSplitAndUse@\expandafter#1\csname ekvc@\string#1\endcsname{#2}% + \ifnum\ekvc@keycount<1 + \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname{#3}% + \else + \ifnum\ekvc@keycount>9 + \ekvc@err@toomany{#1}% + \let#1\ekvc@undefined + \else + \ekvcSplit@build@argspec + \ekvc@any@long\expandafter + \def\csname ekvc@\string#1\expandafter\endcsname\ekvc@tmp{#3}% + \fi + \fi + }% + } +\protected\def\ekvcSplit@build@argspec + {% + \begingroup + \edef\ekvc@tmp + {\endgroup\def\ekv@unexpanded{\ekvc@tmp}{\ekvcSplit@build@argspec@{1}}}% + \ekvc@tmp + } +\def\ekvcSplit@build@argspec@#1% + {% + \ifnum#1>\ekvc@keycount + \ekv@fi@gobble + \fi + \@firstofone + {% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@#1\endcsname####}#1% + \expandafter\ekvcSplit@build@argspec@\expandafter{\the\numexpr#1+1}% + }% + } +\protected\long\def\ekvc@SetupSplitKeys + {% + \ekvc@keycount=\ekv@zero + \let\ekvc@any@long\ekv@empty + \let\ekvc@initials\ekv@empty + \ekvpParse@unsafe\ekvp@@p@ekvc@setup@splitkeys + } +\ekvpNewParser{ekvc@setup@splitkeys} +\ekvpDefType{ekvc@setup@splitkeys}{short} + {% + \let\ekvc@long\ekv@empty + \expandafter\ekvc@SetupSplitKeys@a\detokenize{#1}\ekv@stop{#3}% + } +\ekvpDefType{ekvc@setup@splitkeys}{long} + {% + \let\ekvc@long\long + \let\ekvc@any@long\long + \expandafter\ekvc@SetupSplitKeys@a\detokenize{#1}\ekv@stop{#3}% + } +\ekvpDefNoType{ekvc@setup@splitkeys} + {% + \let\ekvc@long\ekv@empty + \expandafter\ekvc@SetupSplitKeys@a\detokenize{#1}\ekv@stop{#3}% + } +\ekvpDefNoValue{ekvc@setup@splitkeys} + {% + \begingroup + \edef\ekvc@tmp{\detokenize{#1}}% + \expandafter + \endgroup + \ifx\ekvc@tripledots\ekvc@tmp + \advance\ekvc@keycount1 + \begingroup\expandafter\endgroup + \expandafter\ekvc@SetupSplitKeys@unknown + \csname ekvc@splitmark@\the\ekvc@keycount\endcsname + \let\ekvc@any@long\long + \else + \ekvc@err@value@required{#1}% + \fi + } +\protected\long\def\ekvc@SetupSplitKeys@a + {% + \advance\ekvc@keycount1 + \begingroup\expandafter\endgroup + \expandafter\ekvc@SetupSplitKeys@b + \csname ekvc@splitmark@\the\ekvc@keycount\endcsname + } +\protected\long\def\ekvc@SetupSplitKeys@b#1#2\ekv@stop#3% + {% + \long\def\ekvc@tmp##1##2#1##3{##2#1{##1}}% + \ifx\ekvc@long\long + \else + \expandafter\let\csname ekvc@\ekvc@set(#2)\endcsname\ekvc@tmp + \edef\ekvc@tmp##1% + {% + \ekv@unexpanded\expandafter{\csname ekvc@\ekvc@set(#2)\endcsname}% + {##1}% + }% + \fi + \ekvlet\ekvc@set{#2}\ekvc@tmp + \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{#3}}}% + \ekvc@helpers@needed + {\expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}}% + {}% + } +\protected\long\def\ekvc@SetupSplitKeys@unknown#1% + {% + \long\def\ekvc@tmp##1##2##3##4#1##5{##4#1{##5, {##3} = {##1} }}% + \ekvletunknown\ekvc@set\ekvc@tmp + \long\def\ekvc@tmp##1##2##3#1##4{##3#1{##4, {##2} }}% + \ekvletunknownNoVal\ekvc@set\ekvc@tmp + \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{}}}% + \ekvc@helpers@needed + {\expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}}% + {}% + } +\protected\def\ekvc@defarggobbler#1{\def\ekvc@tmp##1#1##2##{##1#1}} +\begingroup +\edef\ekvc@tmp + {% + \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@1\endcsname}% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1% + ##2##3% + {##3{##1}##2}% + \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@2\endcsname}% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2% + ##3##4% + {##4{##1}{##2}##3}% + \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@3\endcsname}% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3% + ##4##5% + {##5{##1}{##2}{##3}##4}% + \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@4\endcsname}% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4% + ##5##6% + {##6{##1}{##2}{##3}{##4}##5}% + \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@5\endcsname}% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5% + ##6##7% + {##7{##1}{##2}{##3}{##4}{##5}##6}% + \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@6\endcsname}% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6% + ##7##8% + {##8{##1}{##2}{##3}{##4}{##5}{##6}##7}% + \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@7\endcsname}% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6% + \ekv@unexpanded\expandafter{\csname ekvc@splitmark@7\endcsname}##7% + ##8##9% + {##9{##1}{##2}{##3}{##4}{##5}{##6}{##7}##8}% + } +\ekvc@tmp +\endgroup +\protected\def\ekvc@setup@splitmacro#1% + {% + \ekv@ifdefined{ekvc@split@#1}{}% + {% + \begingroup + \def\ekvc@tmp##1% + {% + \ekv@unexpanded\expandafter + {\csname ekvc@splitmark@\the\numexpr#1-##1\relax\endcsname}% + }% + \edef\ekvc@tmp + {% + \long\gdef + \ekv@unexpanded\expandafter{\csname ekvc@split@#1\endcsname}% + ####1% + \ekvc@tmp{6}####2% + \ekvc@tmp{5}####3% + \ekvc@tmp{4}####4% + \ekvc@tmp{3}####5% + \ekvc@tmp{2}####6% + \ekvc@tmp{1}####7% + \ekvc@tmp{0}####8% + ####9% + {% + \ekv@unexpanded\expandafter + {\csname ekvc@split@\the\numexpr#1-7\relax\endcsname}% + ####1{{####2}{####3}{####4}{####5}{####6}{####7}{####8}####9}% + }% + }% + \ekvc@tmp + \endgroup + }% + } +\protected\long\def\ekvcHashAndUse#1#2% + {% + \let\ekvc@helpers@needed\@firstoftwo + \ekvc@ifdefined#1% + {\ekvc@err@already@defined#1}% + {\ekvcHashAndUse@#1{}{#2}}% + } +\protected\long\def\ekvcHashAndUse@#1#2#3% + {% + \edef\ekvc@set{\string#1}% + \ekvc@SetupHashKeys{#3}% + \ekvc@helpers@needed + {% + \ekvc@any@long\edef#1##1% + {% + \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}% + \ekv@unexpanded{\ekvc@hash@pack@argument}% + \ekv@unexpanded\expandafter{\ekvc@initials\ekvc@stop#2}% + }% + }% + {% + \ekvc@any@long\edef#1##1% + {% + \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}% + \ekv@unexpanded{#2}% + \ekv@unexpanded\expandafter{\ekvc@initials\ekvc@stop}% + }% + }% + } +\protected\long\def\ekvcHashAndForward#1#2#3% + {% + \let\ekvc@helpers@needed\@firstoftwo + \ekvc@ifdefined#1% + {\ekvc@err@already@defined#1}% + {\ekvcHashAndUse@#1{{#2}}{#3}}% + } +\protected\long\def\ekvcHash#1#2#3% + {% + \let\ekvc@helpers@needed\@secondoftwo + \ekvc@ifdefined#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\ekvc@stop + {#3}% + }% + } +\long\def\ekvc@hash@pack@argument#1\ekvc@stop#2{#2{#1}} +\protected\long\def\ekvc@SetupHashKeys + {% + \let\ekvc@any@long\ekv@empty + \let\ekvc@initials\ekv@empty + \ekvpParse@unsafe\ekvp@@p@ekvc@setup@hashkeys + } +\ekvpNewParser{ekvc@setup@hashkeys} +\ekvpDefType{ekvc@setup@hashkeys}{short} + {% + \let\ekvc@long\ekv@empty + \expandafter\ekvc@SetupHashKeys@a\detokenize{#1}\ekv@stop{#3}% + } +\ekvpDefType{ekvc@setup@hashkeys}{long} + {% + \let\ekvc@long\long + \let\ekvc@any@long\long + \expandafter\ekvc@SetupHashKeys@a\detokenize{#1}\ekv@stop{#3}% + } +\ekvpDefNoType{ekvc@setup@hashkeys} + {% + \let\ekvc@long\ekv@empty + \expandafter\ekvc@SetupHashKeys@a\detokenize{#1}\ekv@stop{#3}% + } +\ekvpDefNoValue{ekvc@setup@hashkeys} + {% + \begingroup + \edef\ekvc@tmp{\detokenize{#1}}% + \expandafter + \endgroup + \ifx\ekvc@tripledots\ekvc@tmp + \ekvc@SetupHashKeys@unknown + \let\ekvc@any@long\long + \else + \ekvc@err@value@required{#1}% + \fi + } +\protected\long\def\ekvc@SetupHashKeys@a#1\ekv@stop + {% + \begingroup\expandafter\endgroup + \expandafter\ekvc@SetupHashKeys@b\csname ekvc@hashmark@#1\endcsname{#1}% + } +\protected\long\def\ekvc@SetupHashKeys@b#1#2#3% + {% + \long\def\ekvc@tmp##1##2#1##3{##2#1{##1}}% + \ifx\ekvc@long\long + \else + \expandafter\let\csname ekvc@\ekvc@set(#2)\endcsname\ekvc@tmp + \edef\ekvc@tmp##1% + {% + \ekv@unexpanded\expandafter{\csname ekvc@\ekvc@set(#2)\endcsname}% + {##1}% + }% + \fi + \ekvlet\ekvc@set{#2}\ekvc@tmp + \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{#3}}}% + \ekvc@setup@hashmacro{#2}% + } +\def\ekvc@SetupHashKeys@unknown#1% + {% + \protected\def\ekvc@SetupHashKeys@unknown + {% + \ekvletunknown\ekvc@set\ekvc@hash@unknown@kv + \ekvletunknownNoVal\ekvc@set\ekvc@hash@unknown@k + \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{}}}% + \ekvc@setup@hashmacro{...}% + }% + \long\def\ekvc@hash@unknown@kv##1##2##3##4#1##5{##4#1{##5, {##3} = {##1} }}% + \long\def\ekvc@hash@unknown@k##1##2##3#1##4{##3#1{##4, {##2} }}% + } +\begingroup\expandafter\endgroup +\expandafter\ekvc@SetupHashKeys@unknown + \csname ekvc@hashmark@\ekvc@tripledots\endcsname +\protected\def\ekvc@setup@hashmacro#1% + {% + \ekv@ifdefined{ekvc@fasthash@#1}{}% + {% + \begingroup + \edef\ekvc@tmp + {% + \long\gdef + \ekv@unexpanded\expandafter{\csname ekvc@fasthash@#1\endcsname}% + ####1% + \ekv@unexpanded\expandafter + {\csname ekvc@hashmark@#1\endcsname}% + ####2####3\ekv@unexpanded{\ekvc@stop}% + {####2}% + \long\gdef + \ekv@unexpanded\expandafter{\csname ekvc@safehash@#1\endcsname}% + ####1% + {% + \ekv@unexpanded\expandafter + {\csname ekvc@@safehash@#1\endcsname}% + ####1\ekv@unexpanded{\ekvc@mark}{}% + \ekv@unexpanded\expandafter + {% + \csname ekvc@hashmark@#1\endcsname{}% + \ekvc@mark{\ekvc@err@missing@hash{#1}}\ekvc@stop + }% + }% + \long\gdef + \ekv@unexpanded\expandafter + {\csname ekvc@@safehash@#1\endcsname}% + ####1% + \ekv@unexpanded\expandafter + {\csname ekvc@hashmark@#1\endcsname}% + ####2####3\ekv@unexpanded{\ekvc@mark}####4####5% + \ekv@unexpanded{\ekvc@stop}% + {% + ####4{####2}% + }% + \long\gdef\ekv@unexpanded\expandafter + {\csname ekvc@fastsplithash@#1\endcsname}% + ####1% + \ekv@unexpanded\expandafter + {\csname ekvc@hashmark@#1\endcsname}% + ####2####3\ekv@unexpanded{\ekvc@stop}####4% + {% + ####4{####2}% + }% + \long\gdef\ekv@unexpanded\expandafter + {\csname ekvc@safesplithash@#1\endcsname}####1% + {% + \ekv@unexpanded\expandafter + {\csname ekvc@@safesplithash@#1\endcsname}% + ####1\ekv@unexpanded{\ekvc@mark\ekvc@safe@after@hash}% + \ekv@unexpanded\expandafter + {% + \csname ekvc@hashmark@#1\endcsname{}% + \ekvc@mark + {\ekvc@err@missing@hash{#1}\ekvc@safe@after@hash}% + \ekvc@stop + }% + }% + \long\gdef\ekv@unexpanded\expandafter + {\csname ekvc@@safesplithash@#1\endcsname}% + ####1% + \ekv@unexpanded\expandafter + {\csname ekvc@hashmark@#1\endcsname}% + ####2####3\ekv@unexpanded{\ekvc@mark}####4####5% + \ekv@unexpanded{\ekvc@stop}% + {% + ####4{####2}% + }% + }% + \ekvc@tmp + \endgroup + }% + } +\long\def\ekvcValue#1% + {% + \ekv@unexpanded + \expandafter\ekvcValue@\detokenize{#1}\ekvc@stop + } +\def\ekvcValue@#1\ekvc@stop + {% + \ekv@ifdefined{ekvc@safehash@#1}% + {\csname ekvc@safehash@#1\endcsname}% + {\ekvc@err@unknown@hash{#1}\@firstoftwo{{}}}% + } +\long\def\ekvcValueFast#1#2% + {\csname ekvc@fasthash@\detokenize{#1}\endcsname#2\ekvc@stop} +\long\def\ekvcValueSplit#1% + {\expandafter\ekvcValueSplit@\detokenize{#1}\ekvc@stop} +\def\ekvcValueSplit@#1\ekvc@stop + {% + \ekv@ifdefined{ekvc@safesplithash@#1}% + {\csname ekvc@safesplithash@#1\endcsname}% + {\ekvc@err@unknown@hash{#1}\ekvcValueSplit@recover}% + } +\long\def\ekvcValueSplit@recover#1#2{#2{}} +\long\def\ekvc@safe@after@hash#1#2% + {% + #2{#1}% + } +\long\def\ekvcValueSplitFast#1#2% + {\csname ekvc@fastsplithash@\detokenize{#1}\endcsname#2\ekvc@stop} +\long\def\ekvc@safehash@#1{\ekvc@err@empty@hash{}} +\long\def\ekvc@fasthash@#1\ekvc@stop{\ekvc@err@empty@hash} +\long\def\ekvc@safesplithash@#1#2{\ekvc@err@empty@hash#2{}} +\long\def\ekvc@fastsplithash@#1\ekvc@stop#2{\ekvc@err@empty@hash#2{}} +\ekvpNewParser{ekvc@setup@secondary} +\ekvpValueAlwaysRequired{ekvc@setup@secondary} +\protected\long\def\ekvcSecondaryKeys#1% + {% + \edef\ekvc@set{\string#1}% + \let\ekvc@long\ekv@empty + \ekvpParse@unsafe\ekvp@@p@ekvc@setup@secondary + } +\protected\long\def\ekvcChange#1% + {% + \ekvifdefinedset{\string#1}% + {% + \ekvc@ifdefined#1% + {\ekvc@change#1}% + {\ekvc@err@no@key@macro#1\@gobble}% + }% + {\ekvc@err@no@key@macro#1\@gobble}% + } +\protected\def\ekvc@change#1% + {\expandafter\ekvc@change@a\meaning#1\ekv@stop#1} +\def\ekvc@change@a#1% + {% + \protected\def\ekvc@change@a##1#1##2->##3\ekv@stop + {% + \ekvc@change@iflong{##1}% + {\ekvc@change@b{}}% + {\ekvc@change@b{\long}}% + }% + } +\expandafter\ekvc@change@a\expandafter{\detokenize{macro:}} +\protected\def\ekvc@change@b#1#2% + {\expandafter\ekvc@change@c\expandafter{#2\ekvc@stop}{#1}#2} +\ekv@exparg{\protected\long\def\ekvc@change@c#1#2#3#4}% + {% + \expandafter\iffalse\expandafter{\expandafter{\expandafter\fi + \ekvset{\string#3}{#4}% + \ekvc@change@d{#2}{#3}% + #1% + }}% + } +\protected\def\ekvc@change@d#1#2% + {#1\edef#2##1{\expandafter\ekvc@change@e\iffalse}\fi} +\long\def\ekvc@change@e#1\ekvc@stop + {\ekv@unexpanded{#1}##1\ekv@unexpanded\expandafter{\iffalse}\fi} +\def\ekvc@change@iflong#1% + {% + \protected\def\ekvc@change@iflong##1% + {\expandafter\ekv@ifempty\expandafter{\ekvc@change@iflong@##1#1}}% + \def\ekvc@change@iflong@##1#1{} + } +\expandafter\ekvc@change@iflong\expandafter{\string\long} +\long\def\ekvcPass#1#2% + {% + \ekvifdefined{\string#1}{#2}% + {\csname\ekv@name{\string#1}{#2}\endcsname}% + {\ekvc@err@unknown@key@or@macro{#1}{#2}\@gobble}% + } +\ekvpDefPrefixLet{ekvc@setup@secondary}{long}\ekvc@long\long\ekv@empty +\ekvpDefType{ekvc@setup@secondary}{meta} + {\ekvc@type@meta\ekv@exparg\ekvc@long{##1}\ekvlet{#1}{#3}} +\ekvpDefType{ekvc@setup@secondary}{nmeta} + {\ekvc@assert@not@long\ekvc@type@meta\ekv@expargtwice{}{}\ekvletNoVal{#1}{#3}} +\protected\long\def\ekvc@type@meta#1#2#3#4#5#6% + {% + #1\ekvc@type@meta@{\ekvmorekv{#6}}{#2}{#3}% + #4\ekvc@set{#5}\ekvc@tmp + } +\protected\long\def\ekvc@type@meta@#1#2#3{#2\def\ekvc@tmp#3{#1}} +\ekvpDefType{ekvc@setup@secondary}{alias} + {% + \ekvc@assert@not@long + \ekvc@assert@k@or@p@defined{#3}% + \ekvifdefined\ekvc@set{#3}{\ekvletkv\ekvc@set{#1}\ekvc@set{#3}}{}% + \ekvifdefinedNoVal\ekvc@set{#3}{\ekvletkvNoVal\ekvc@set{#1}\ekvc@set{#3}}{}% + } +\ekvpDefType{ekvc@setup@secondary}{default} + {% + \ekvc@assert@defined{#1}% + \ekvc@assert@not@long + \edef\ekvc@tmp + {% + \ekv@unexpanded\expandafter + {\csname\ekv@name\ekvc@set{#1}\endcsname{#3}}% + }% + \ekvletNoVal\ekvc@set{#1}\ekvc@tmp + } +\def\ekvc@enum@name#1#2#3{ekvc#1(#2)#3} +\ekvpDefType{ekvc@setup@secondary}{enum} + {\ekvpAssertTwoValues{#3}\ekvc@type@enum\ekvc@type@enum@{#1}#3} +\ekvpDefType{ekvc@setup@secondary}{choice} + {\ekvpAssertTwoValues{#3}\ekvc@type@enum\ekvc@type@choice@{#1}#3} +\protected\long\def\ekvc@type@enum#1#2#3% + {% + \ekvc@assert@defined{#3}% + \ekvc@long\edef\ekvc@tmp##1% + {% + \ekv@unexpanded{\expandafter\ekvc@h@enum\detokenize}{##1}% + \ekv@unexpanded{\ekvc@stop}% + {\ekvc@set}{#2}% + }% + \ekvlet\ekvc@set{#2}\ekvc@tmp + \def\ekvc@tmp{0}% + \expandafter\ekvcsvloop\expandafter + {\expandafter#1\csname\ekv@name\ekvc@set{#3}\endcsname{#2}}% + } +\ekv@exparg{\protected\long\def\ekvc@type@enum@#1#2#3}% + {% + \expandafter\expandafter\expandafter\edef\expandafter + \csname\ekvc@enum@name\ekvc@set{#2}{\detokenize{#3}}\endcsname + {\ekv@unexpanded{#1}{\ekvc@tmp}}% + \edef\ekvc@tmp{\the\numexpr\ekvc@tmp+1\relax}% + } +\ekv@exparg{\protected\long\def\ekvc@type@choice@#1#2#3}% + {% + \expandafter\expandafter\expandafter\edef\expandafter + \csname\ekvc@enum@name\ekvc@set{#2}{\detokenize{#3}}\endcsname + {\ekv@unexpanded{#1{#3}}}% + } +\ekv@if@lastnamedcs + {% + \ekv@exparg{\def\ekvc@h@enum#1\ekvc@stop#2#3}% + {% + \expandafter\ifcsname\ekvc@enum@name{#2}{#3}{#1}\endcsname + \expandafter\ekvc@h@enum@\lastnamedcs + \fi + \ekvc@err@unknown@enum{#2}{#3}{#1}% + } + \def\ekvc@h@enum@#1\fi\ekvc@err@unknown@enum#2#3#4% + {% + \fi + \ifx#1\relax + \ekvc@err@unknown@enum{#2}{#3}{#4}% + \expandafter\@gobble + \fi + #1% + } + } + {% + \def\ekvc@h@enum#1% + {% + \def\ekvc@h@enum##1\ekvc@stop##2##3% + {% + \expandafter\ekvc@h@enum@ + \csname\ifcsname#1\endcsname#1\else relax\fi\endcsname + {##2}{##3}{##1}% + }% + } + \expandafter\ekvc@h@enum\expandafter{\ekvc@enum@name{#2}{#3}{#1}} + \def\ekvc@h@enum@#1#2#3#4% + {% + \ifx#1\relax + \ekvc@err@unknown@enum{#2}{#3}{#4}% + \expandafter\@gobble + \fi + #1% + } + } +\let\ekvc@enum@name\ekvc@undefined +\ekvpDefType{ekvc@setup@secondary}{aggregate} + {% + \let\ekvc@type@aggregate@ifexpanded\@secondoftwo + \ekvc@type@aggregate{#1}{#3}% + } +\ekvpDefType{ekvc@setup@secondary}{e-aggregate} + {% + \let\ekvc@type@aggregate@ifexpanded\@firstoftwo + \ekvc@type@aggregate{#1}{#3}% + } +\protected\long\def\ekvc@type@aggregate#1#2% + {% + \ekvc@assert@not@long + \ekvpAssertTwoValues{#2}% + \ekvc@type@aggregate@a + \ekvc@type@aggregate@long\ekvc@type@aggregate@short + {#1}#2% + } +\protected\long\def\ekvc@type@aggregate@a#1#2#3#4#5% + {% + \ekvc@assert@defined{#4}% + \def\ekvc@type@aggregate@tmp##1##2{#5}% + \begingroup\expandafter\endgroup + \expandafter\ekvc@type@aggregate@b + \csname\ekv@name\ekvc@set{#4}\expandafter\endcsname + \csname ekvc@\ekvc@set(#4)\endcsname + #1#2% + {#3}% + } +\protected\long\def\ekvc@type@aggregate@b#1#2#3#4% + {% + \ekvc@type@aggregate@check@long#1#2% + {#3#1}% + {#4#2}% + } +\protected\long\def\ekvc@type@aggregate@check@long#1#2% + {\expandafter\ekvc@type@aggregate@check@long@a\detokenize{#2}\ekv@stop#1} +\protected\long\def\ekvc@type@aggregate@check@long@a#1\ekv@stop#2% + {% + \def\ekvc@type@aggregate@check@long@@##1#1{}% + \expandafter\ekvc@type@aggregate@check@long@b\meaning#2\ekv@stop{#1}% + } +\protected\def\ekvc@type@aggregate@check@long@b#1\ekv@stop#2% + {\expandafter\ekv@ifempty\expandafter{\ekvc@type@aggregate@check@long@@#1#2}} +\protected\long\def\ekvc@type@aggregate@long#1% + {% + \begingroup\expandafter\endgroup\expandafter + \ekvc@type@aggregate@long@ + \csname\ekvc@extract@mark#1\expandafter\endcsname + \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}% + } +\protected\long\def\ekvc@type@aggregate@long@#1#2#3% + {% + \ekvc@type@aggregate@ifexpanded + {% + \long\def\ekvc@type@aggregate@tmp##1##2#1##3% + {\ekv@expanded{\ekv@unexpanded{##2#1}{#2}}}% + }% + {\long\def\ekvc@type@aggregate@tmp##1##2#1##3{##2#1{#2}}}% + \ekvlet\ekvc@set{#3}\ekvc@type@aggregate@tmp + } +\protected\long\def\ekvc@type@aggregate@short#1#2% + {% + \begingroup\expandafter\endgroup\expandafter + \ekvc@type@aggregate@short@ + \csname\ekvc@extract@mark#1\expandafter\endcsname + \csname ekvc@\ekvc@set(#2)\expandafter\endcsname + \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}% + {#2}% + } +\protected\long\def\ekvc@type@aggregate@short@#1#2#3#4% + {% + \ekvdef\ekvc@set{#4}{#2{##1}}% + \ekvc@type@aggregate@ifexpanded + {\long\def#2##1##2#1##3{\ekv@expanded{\ekv@unexpanded{##2#1}{#3}}}}% + {\long\def#2##1##2#1##3{##2#1{#3}}}% + } +\ekvpDefType{ekvc@setup@secondary}{process} + {% + \ekvpAssertTwoValues{#3}% + \ifx\ekvc@long\long + \ekv@fi@firstoftwo + \fi + \@secondoftwo + {% + \ekvc@type@aggregate@a + \ekvc@type@process@long\ekvc@type@process@long + }% + {% + \ekvc@type@aggregate@a + \ekvc@type@process@short\ekvc@type@process@short + }% + {#1}#3% + } +\protected\long\def\ekvc@type@process@long#1% + {% + \begingroup\expandafter\endgroup\expandafter + \ekvc@type@process@long@ + \csname\ekvc@extract@mark#1\expandafter\endcsname + \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}% + } +\protected\long\def\ekvc@type@process@long@#1#2#3% + {% + \long\def\ekvc@type@aggregate@tmp##1##2#1##3{#2##2#1{##3}}% + \ekvlet\ekvc@set{#3}\ekvc@type@aggregate@tmp + } +\protected\long\def\ekvc@type@process@short#1#2% + {% + \begingroup\expandafter\endgroup\expandafter + \ekvc@type@process@short@ + \csname\ekvc@extract@mark#1\expandafter\endcsname + \csname ekvc@\ekvc@set(#2)\expandafter\endcsname + \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}% + {#2}% + } +\protected\long\def\ekvc@type@process@short@#1#2#3#4% + {% + \ekvdef\ekvc@set{#4}{#2{##1}}% + \long\def#2##1##2#1##3{#3##2#1{##3}}% + } +\ekvpDefType{ekvc@setup@secondary}{flag-bool} + {% + \ekvc@assert@not@long + \ekvpAssertOneValue{#3}% + \ifdefined#3\else\ekvcFlagNew#3\fi + \ekvdef\ekvc@set{#1}% + {% + \ekv@ifdefined{ekvc@flag@set@##1}% + {% + \csname ekvc@flag@set@##1\expandafter\endcsname + \ekvcFlagHeight#3\ekv@stop#3% + }% + {\ekvc@err@invalid@bool{##1}}% + }% + } +\protected\def\ekvc@type@flag#1#2#3% + {% + \ekvc@assert@not@long + \ekvpAssertOneValue{#3}% + \ifdefined#3\else\ekvcFlagNew#3\fi + \ekv@exparg{\ekvdefNoVal\ekvc@set{#2}}{#1#3}% + } +\ekvpDefType{ekvc@setup@secondary}{flag-true} + {\ekvc@type@flag\ekvcFlagSetTrue{#1}{#3}} +\ekvpDefType{ekvc@setup@secondary}{flag-false} + {\ekvc@type@flag\ekvcFlagSetFalse{#1}{#3}} +\ekvpDefType{ekvc@setup@secondary}{flag-raise} + {\ekvc@type@flag\ekvcFlagRaise{#1}{#3}} +\def\ekvc@flag@name{ekvcf\string} +\def\ekvc@flag@namescheme#1#2{ekvch#2#1} +\let\ekvcFlagHeight\number +\protected\def\ekvcFlagNew#1% + {% + \edef#1% + {% + \ekv@unexpanded{\ekvc@flag@height}% + \ekv@unexpanded\expandafter{\csname\ekvc@flag@name#1\endcsname}% + }% + \ekv@expargtwice + {\expandafter\def\csname\ekvc@flag@name#1\endcsname##1}% + {\expandafter\ekvc@flag@namescheme\expandafter{\string#1}{##1}}% + } +\def\ekvc@flag@height#1% + {% + \ifcsname#10\endcsname + \ekvc@flag@height@1\ekv@stop#1% + \fi + \@firstofone{0} % leave this space + } +\def\ekvc@flag@height@#1\ekv@stop#2\fi\@firstofone#3% + {% + \fi + \ifcsname#2{#1}\endcsname + \expandafter\ekvc@flag@height@\the\numexpr#1+1\relax\ekv@stop#2% + \fi + \@firstofone{#1}% + } +\ekv@exparg{\def\ekvcFlagRaise#1}% + {% + \expandafter\expandafter\expandafter\@gobble\expandafter + \csname\ekvc@flag@namescheme{\string#1}{\ekvcFlagHeight#1}\endcsname + } +\def\ekvcFlagSetTrue#1% + {\expandafter\ekvc@flag@set@true\ekvcFlagHeight#1\ekv@stop#1} +\def\ekvcFlagSetFalse#1% + {\expandafter\ekvc@flag@set@false\ekvcFlagHeight#1\ekv@stop#1} +\def\ekvc@flag@set@true#1% + {% + \def\ekvc@flag@set@true##1\ekv@stop##2% + {% + \ifodd##1 + \ekv@fi@gobble + \fi + \@firstofone{\expandafter\@gobble\csname#1\endcsname}% + }% + \def\ekvc@flag@set@false##1\ekv@stop##2% + {% + \ifodd##1 + \ekv@fi@firstofone + \fi + \@gobble{\expandafter\@gobble\csname#1\endcsname}% + }% + } +\expandafter\ekvc@flag@set@true\expandafter + {\ekvc@flag@namescheme{\string#2}{#1}} +\def\ekvcFlagIf#1% + {% + \ifodd#1% + \ekv@fi@firstoftwo + \fi + \@secondoftwo + } +\ekv@exparg{\def\ekvcFlagIfRaised#1}% + {% + \expandafter\ifcsname\ekvc@flag@namescheme{\string#1}0\endcsname + \ekv@fi@firstoftwo + \fi + \@secondoftwo + } +\protected\def\ekvcFlagReset#1% + {\expandafter\ekvc@flag@reset\csname\ekvc@flag@name#1\endcsname{}} +\protected\def\ekvcFlagResetGlobal#1% + {\expandafter\ekvc@flag@reset\csname\ekvc@flag@name#1\endcsname\global} +\protected\def\ekvc@flag@reset#1#2% + {% + \ifcsname#10\endcsname + #2\expandafter\let\csname#10\endcsname\ekvc@undefined + \ekvc@flag@reset@1\ekv@stop#1{#2}% + \fi + } +\protected\def\ekvc@flag@reset@#1\ekv@stop#2#3\fi + {% + \fi + \ifcsname#2{#1}\endcsname + #3\expandafter\let\csname#2{#1}\endcsname\ekvc@undefined + \expandafter\ekvc@flag@reset@\the\numexpr#1+1\relax\ekv@stop#2{#3}% + \fi + } +\def\ekvcFlagGetHeight#1% + {\expandafter\ekvc@flag@get@height@single\ekvcFlagHeight#1\ekv@stop} +\long\def\ekvc@flag@get@height@single#1\ekv@stop#2{#2{#1}} +\def\ekvcFlagGetHeights#1% + {% + \ekvc@flag@get@heights#1\ekv@stop{}% + } +\def\ekvc@flag@get@heights#1% + {% + \ekv@gobbleto@stop#1\ekvc@flag@get@heights@done\ekv@stop + \expandafter\ekvc@flag@get@heights@\ekvcFlagHeight#1\ekv@stop + } +\def\ekvc@flag@get@heights@#1\ekv@stop#2\ekv@stop#3% + {\ekvc@flag@get@heights#2\ekv@stop{#3{#1}}} +\long\def\ekvc@flag@get@heights@done + \ekv@stop + \expandafter\ekvc@flag@get@heights@\ekvcFlagHeight\ekv@stop\ekv@stop#1#2% + {#2{#1}} +\def\ekvc@extract@mark#1{\expandafter\ekvc@extract@mark@\meaning#1\ekv@stop} +\begingroup +\lccode`;=`# +\lccode`/=`\\ +\lowercase{\endgroup +\def\ekvc@extract@mark@#1:#2/#3 ;#4\ekv@stop{#3}% +} +\ekv@exparg{\def\ekvc@assert@not@long}% + {\ekvpAssertIfNot{\ifx\ekvc@long\long}{`long' not accepted}} +\long\def\ekvc@assert@defined#1% + {\ekvpAssertTF{\ekvifdefined\ekvc@set{#1}}{undefined key `#1'}} +\long\def\ekvc@assert@k@or@p@defined#1% + {% + \ekvpAssertTF + {\ekvifdefined\ekvc@set{#1}\@firstoftwo{\ekvifdefinedNoVal\ekvc@set{#1}}}% + {undefined key `#1'}% + } +\protected\long\def\ekvc@errm#1{\errmessage{expkv-cs Error: #1}} +\protected\long\def\ekvc@err@toomany#1% + {\ekvc@errm{Too many keys for macro `\string#1'}} +\protected\long\def\ekvc@err@value@required#1% + {\ekvc@errm{Missing value for key `\ekv@unexpanded{#1}'}} +\protected\long\def\ekvc@err@already@defined#1% + {\ekvc@errm{Macro `\string#1' already defined}} +\protected\long\def\ekvc@err@no@key@macro#1% + {\ekvc@errm{\string#1 is no key=val macro}} +\ekv@exparg{\long\def\ekvc@err#1}{\ekverr{expkv-cs}{#1}} +\long\def\ekvc@err@unknown@hash#1{\ekvc@err{unknown hash `#1'}} +\long\def\ekvc@err@missing@hash#1{\ekvc@err{hash `#1' not found}} +\long\def\ekvc@err@empty@hash{\ekvc@err{empty hash}} +\def\ekvc@err@invalid@bool#1{\ekvc@err{invalid boolean value `#1'}} +\long\def\ekvc@err@unknown@key@or@macro#1#2% + {\ekvc@err{unknown key `#2' for #1}} +\def\ekvc@err@unknown@enum#1#2#3% + {\ekvc@err{unknown choice `#3' for `#2' in #1}} +\catcode`\@=\ekvc@tmp +%% +%% +%% End of file `expkv-cs.tex'. diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex new file mode 100644 index 00000000000..89ddadbf916 --- /dev/null +++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex @@ -0,0 +1,867 @@ +%% +%% This is file `expkv-def.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-def.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. +%% +\input expkv-pop +\expandafter\ifx\csname ekvdVersion\endcsname\relax +\else + \expandafter\endinput +\fi +\def\ekvdVersion{1.0} +\def\ekvdDate{2023-01-23} +\csname ekvd@tmp\endcsname +\expandafter\chardef\csname ekvd@tmp\endcsname=\catcode`\@ +\catcode`\@=11 +\protected\long\def\ekvd@ifprimitive#1% + {% + \begingroup + \edef\ekvd@tmpa{\string #1}% + \edef\ekvd@tmpb{\meaning#1}% + \expandafter + \endgroup + \ifx\ekvd@tmpa\ekvd@tmpb + \ekv@fi@firstoftwo + \fi + \@secondoftwo + } +\protected\def\ekvd@clear@prefixes + {% + \let\ekvd@long\ekv@empty + \let\ekvd@prot\ekv@empty + \let\ekvd@ifalso\@secondoftwo + \let\ekvd@do@new\@gobbletwo + } +\ekvd@clear@prefixes +\ekvpNewParser{ekvd@definekeys} +\ekvpDefNoValuePrefix{ekvd@definekeys} + {\let\ekvd@ifnoarg\@firstoftwo} + {\let\ekvd@ifnoarg\@secondoftwo} +\ekvpDefPrefixLet{ekvd@definekeys}{long} \ekvd@long\long \ekv@empty +\ekvpDefPrefixLet{ekvd@definekeys}{protected}\ekvd@prot\protected\ekv@empty +\ekvpDefPrefixLet{ekvd@definekeys}{protect} \ekvd@prot\protected\ekv@empty +\ekvpDefPrefixLet{ekvd@definekeys}{also}\ekvd@ifalso\@firstoftwo\@secondoftwo +\ekvpDefPrefixLet{ekvd@definekeys}{new}\ekvd@do@new\ekvd@assert@new\@gobbletwo +\ekvpDefAutoPrefix{ekvd@definekeys}{\edef\ekvd@cur{\detokenize{#3}}}{} +\protected\edef\ekvdefinekeys#1% + {% + \ekv@unexpanded{\def\ekvd@set}{#1}% + \ekv@unexpanded{\ekvpParse@unsafe@auto\ekvp@@p@ekvd@definekeys}% + \ekv@unexpanded\expandafter{\csname\ekvp@@p@ekvd@definekeys{ppa}\endcsname}% + } +\protected\def\ekvd@def@type#1#2% + {% + \ekv@exparg{\ekvpDefType{ekvd@definekeys}{#1}} + {% + \expandafter\expandafter\csname ekvd@th@#1\endcsname + \detokenize{##1}\ekv@stop{##2}{##3}% + }% + \long\expandafter\def\csname ekvd@th@#1\endcsname##1\ekv@stop##2##3{#2}% + } +\protected\long\def\ekvd@def@type@fwd#1#2% + {\ekvpDefType{ekvd@definekeys}{#1}{\ekv@exparg{#2}{\detokenize{##1}}{##3}}} +\ekvd@def@type{set} + {\ekvd@ifnoarg{\ekvd@type@set{#1}{#1}}{\ekvd@type@set{#1}{#3}}} +\protected\def\ekvd@type@set#1#2% + {% + \ekvd@assert@not@long + \ekvd@assert@not@protected + \ekvd@do@new{NoVal}{#1}% + \ekv@ifempty{#2}% + {\ekvd@err@missing@definition}% + {% + \ekvd@ifalso + {% + \ekv@expargtwice{\ekvd@add@noval{#1}}% + {\ekvchangeset{#2}}% + \ekvd@assert@not@protected@also + }% + {\ekv@expargtwice{\ekvdefNoVal\ekvd@set{#1}}{\ekvchangeset{#2}}}% + }% + } +\ekvd@def@type@fwd{noval}{\ekvd@type@noval\def} +\ekvd@def@type@fwd{enoval}{\ekvd@type@noval\edef} +\protected\long\def\ekvd@type@noval#1#2#3% + {% + \ekvd@do@new{NoVal}{#2}% + \ekvd@assert@arg + \ekvd@assert@not@long + \ekvd@prot#1\ekvd@tmp{#3}% + \ekvd@ifalso + {\ekv@exparg{\ekvd@add@noval{#2}}\ekvd@tmp{}}% + {\ekvletNoVal\ekvd@set{#2}\ekvd@tmp}% + } +\ekvd@def@type@fwd{code}{\ekvd@type@code\def} +\ekvd@def@type@fwd{ecode}{\ekvd@type@code\edef} +\protected\long\def\ekvd@type@code#1#2#3% + {% + \ekvd@do@new{}{#2}% + \ekvd@assert@arg + \ekvd@prot\ekvd@long#1\ekvd@tmp##1{#3}% + \ekvd@ifalso + {\ekv@exparg{\ekvd@add@val{#2}}{\ekvd@tmp{##1}}{}}% + {\ekvlet\ekvd@set{#2}\ekvd@tmp}% + } +\ekvd@def@type@fwd{default}{\ekvd@type@default{\ekv@unexpanded\expandafter}{}} +\ekvd@def@type@fwd{odefault} + {\ekvd@type@default{\ekv@unexpanded\expandafter\expandafter\expandafter}{}} +\ekvpLet{ekvd@definekeys}{type}{qdefault}{odefault} +\ekvd@def@type@fwd{fdefault} + {\ekvd@type@default{\ekv@unexpanded\expandafter}{\romannumeral`\^^@}} +\protected\long\def\ekvd@type@default#1#2#3#4% + {% + \ekvd@assert@arg + \ekvd@do@new{NoVal}{#3}% + \ekvd@assert@not@long + \ekvifdefined\ekvd@set{#3}% + {% + \ekvd@prot\edef\ekvd@tmp + {#1{#2\csname\ekv@name\ekvd@set{#3}\endcsname{#4}}}% + \ekvd@ifalso + {\ekv@exparg{\ekvd@add@noval{#3}}\ekvd@tmp{}}% + {\ekvletNoVal\ekvd@set{#3}\ekvd@tmp}% + }% + {\ekvd@err@undefined@key{#3}}% + } +\ekvd@def@type{edefault} + {% + \ekvd@assert@arg + \ekvd@do@new{NoVal}{#1}% + \ekvd@assert@not@long + \ekvifdefined\ekvd@set{#1}% + {% + \ekvd@prot\edef\ekvd@tmp + {% + \ekv@unexpanded\ekv@expanded + {{\csname\ekv@name\ekvd@set{#1}\endcsname{#3}}}% + }% + \ekvd@ifalso + {\ekv@exparg{\ekvd@add@noval{#1}}\ekvd@tmp{}}% + {\ekvletNoVal\ekvd@set{#1}\ekvd@tmp}% + }% + {\ekvd@err@undefined@key{#1}}% + } +\ekvd@def@type@fwd{initial}{\ekvd@type@initial\@firstofone} +\ekvd@def@type@fwd{oinitial}{\ekvd@type@initial\ekv@exparg} +\ekvd@def@type@fwd{einitial}{\ekvd@type@initial\ekv@expandedarg} +\ekvd@def@type@fwd{finitial}{\ekvd@type@initial\ekv@fexparg} +\long\def\ekvd@type@initial#1#2#3% + {% + \ekvd@assert@not@new + \ekvd@assert@not@also + \ekvd@assert@not@long + \ekvd@assert@not@protected + \ekvd@ifnoarg + {% + \ekvifdefinedNoVal\ekvd@set{#2}% + {\csname\ekv@name\ekvd@set{#2}N\endcsname}% + {\ekvd@err@undefined@noval{#2}}% + }% + {% + \ekvifdefined\ekvd@set{#2}% + {#1{\csname\ekv@name\ekvd@set{#2}\endcsname}{#3}}% + {\ekvd@err@undefined@key{#2}}% + }% + } +\ekvd@def@type@fwd{bool}{\ekvd@type@bool{}\iftrue\iffalse} +\ekvd@def@type@fwd{gbool}{\ekvd@type@bool\global\iftrue\iffalse} +\ekvd@def@type@fwd{boolTF}{\ekvd@type@bool{}\@firstoftwo\@secondoftwo} +\ekvd@def@type@fwd{gboolTF}{\ekvd@type@bool\global\@firstoftwo\@secondoftwo} +\ekvd@def@type@fwd{invbool}{\ekvd@type@bool{}\iffalse\iftrue} +\ekvd@def@type@fwd{ginvbool}{\ekvd@type@bool\global\iffalse\iftrue} +\ekvd@def@type@fwd{invboolTF}{\ekvd@type@bool{}\@secondoftwo\@firstoftwo} +\ekvd@def@type@fwd{ginvboolTF}{\ekvd@type@bool\global\@secondoftwo\@firstoftwo} +\protected\def\ekvd@type@bool#1#2#3#4#5% + {% + \ekvd@do@new{}{#4}% + \ekvd@do@new{NoVal}{#4}% + \ekvd@assert@filledarg{#5}% + \ekvd@newlet#5#3% + \ekvd@type@choice{#4}% + \protected\ekvdefNoVal\ekvd@set{#4}{#1\let#5#2}% + \protected\expandafter\def + \csname\ekvd@choice@name\ekvd@set{#4}{true}\endcsname + {#1\let#5#2}% + \protected\expandafter\def + \csname\ekvd@choice@name\ekvd@set{#4}{false}\endcsname + {#1\let#5#3}% + } +\ekvd@def@type{boolpair} + {\ekvd@assert@twoargs{#3}\ekvd@type@boolpair{}\iftrue\iffalse{#1}#3} +\ekvd@def@type{gboolpair} + {\ekvd@assert@twoargs{#3}\ekvd@type@boolpair\global\iftrue\iffalse{#1}#3} +\ekvd@def@type{boolpairTF} + {\ekvd@assert@twoargs{#3}\ekvd@type@boolpair{}\@firstoftwo\@secondoftwo{#1}#3} +\ekvd@def@type{gboolpairTF} + {% + \ekvd@assert@twoargs{#3}% + \ekvd@type@boolpair\global\@firstoftwo\@secondoftwo{#1}#3% + } +\protected\def\ekvd@type@boolpair#1#2#3#4#5#6% + {% + \ekvd@do@new{}{#4}% + \ekvd@do@new{NoVal}{#4}% + \ekvd@newlet#5#3% + \ekvd@newlet#6#2% + \ekvd@type@choice{#4}% + \protected\ekvdefNoVal\ekvd@set{#4}{#1\let#5#2#1\let#6#3}% + \protected\expandafter\def + \csname\ekvd@choice@name\ekvd@set{#4}{true}\endcsname + {#1\let#5#2#1\let#6#3}% + \protected\expandafter\def + \csname\ekvd@choice@name\ekvd@set{#4}{false}\endcsname + {#1\let#5#3#1\let#6#2}% + } +\ekvd@def@type@fwd{data} + {\ekvd@type@data\@secondoftwo\edef{####2}{\ekv@unexpanded{##1}}} +\ekvd@def@type@fwd{edata} + {% + \ekvd@type@data\@secondoftwo\edef + {####2}{\ekv@unexpanded\ekv@expanded{{##1}}}% + } +\ekvd@def@type@fwd{gdata} + {\ekvd@type@data\@secondoftwo\xdef{####2}{\ekv@unexpanded{##1}}} +\ekvd@def@type@fwd{xdata} + {% + \ekvd@type@data\@secondoftwo\xdef + {####2}{\ekv@unexpanded\ekv@expanded{{##1}}}% + } +\ekvd@def@type@fwd{dataT}{\ekvd@type@data\@gobble\edef{}{\ekv@unexpanded{##1}}} +\ekvd@def@type@fwd{edataT} + {\ekvd@type@data\@gobble\edef{}{\ekv@unexpanded\ekv@expanded{{##1}}}} +\ekvd@def@type@fwd{gdataT}{\ekvd@type@data\@gobble\xdef{}{\ekv@unexpanded{##1}}} +\ekvd@def@type@fwd{xdataT} + {\ekvd@type@data\@gobble\xdef{}{\ekv@unexpanded\ekv@expanded{{##1}}}} +\protected\def\ekvd@type@data#1#2#3#4#5#6% + {% + \ekvd@do@new{}{#5}% + \ekvd@assert@filledarg{#6}% + \ekvd@newlet#6#1% + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#5}{\long#2#6####1#3{####1{#4}}}{}% + }% + {% + \protected\ekvd@long\ekvdef\ekvd@set{#5}% + {\long#2#6####1#3{####1{#4}}}% + }% + } +\ekvd@def@type@fwd{box}{\ekvd@type@box{}} +\ekvd@def@type@fwd{gbox}{\ekvd@type@box\global} +\protected\def\ekvd@type@box#1#2#3% + {% + \ekvd@do@new{}{#2}% + \ekvd@assert@filledarg{#3}% + \ekvd@newreg#3{box}% + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#2}{#1\setbox#3=\hbox{\begingroup##1\endgroup}}{}% + }% + {% + \protected\ekvd@long\ekvdef\ekvd@set{#2}% + {#1\setbox#3=\hbox{\begingroup##1\endgroup}}% + }% + } +\ekvd@def@type@fwd{toks}{\ekvd@type@toks{}} +\ekvd@def@type@fwd{gtoks}{\ekvd@type@toks\global} +\protected\def\ekvd@type@toks#1#2#3% + {% + \ekvd@do@new{}{#2}% + \ekvd@assert@filledarg{#3}% + \ekvd@newreg#3{toks}% + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#2}{#1#3={##1}}{}% + }% + {\protected\ekvd@long\ekvdef\ekvd@set{#2}{#1#3={##1}}}% + } +\ekvd@ifprimitive\toksapp + {% + \ekvd@def@type@fwd{apptoks}{\ekvd@type@preapptoks\toksapp} + \ekvd@def@type@fwd{gapptoks}{\ekvd@type@preapptoks\gtoksapp} + \ekvd@def@type@fwd{pretoks}{\ekvd@type@preapptoks\tokspre} + \ekvd@def@type@fwd{gpretoks}{\ekvd@type@preapptoks\gtokspre} + \protected\def\ekvd@type@preapptoks#1#2#3% + {% + \ekvd@do@new{}{#2}% + \ekvd@assert@filledarg{#3}% + \ekvd@newreg#3{toks}% + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#2}{#1#3{##1}}{}% + }% + {\protected\ekvd@long\ekvdef\ekvd@set{#2}{#1#3{##1}}}% + } + } + {% + \ekvd@def@type@fwd{apptoks}{\ekvd@type@apptoks{}} + \ekvd@def@type@fwd{gapptoks}{\ekvd@type@apptoks\global} + \protected\def\ekvd@type@apptoks#1#2#3% + {% + \ekvd@do@new{}{#2}% + \ekvd@assert@filledarg{#3}% + \ekvd@newreg#3{toks}% + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#2}{#1#3=\expandafter{\the#3##1}}{}% + }% + {% + \protected\ekvd@long\ekvdef\ekvd@set{#2}% + {#1#3=\expandafter{\the#3##1}}% + }% + } + \ekvd@def@type@fwd{pretoks}{\ekvd@type@pretoks{}} + \ekvd@def@type@fwd{gpretoks}{\ekvd@type@pretoks\global} + \newtoks\ekvd@toks + \protected\def\ekvd@type@pretoks#1#2#3% + {% + \ekvd@do@new{}{#2}% + \ekvd@assert@filledarg{#3}% + \ekvd@newreg#3{toks}% + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#2}% + {#1#3=\ekv@expanded{{\ekv@unexpanded{##1}\the#3}}}% + {}% + }% + {% + \protected\ekvd@long\ekvdef\ekvd@set{#2}% + {#1#3=\ekv@expanded{{\ekv@unexpanded{##1}\the#3}}}% + }% + } + } +\ekvd@def@type@fwd {int}{\ekvd@type@register{count}{}{}} +\ekvd@def@type@fwd{eint}{\ekvd@type@register{count}{}\numexpr} +\ekvd@def@type@fwd{gint}{\ekvd@type@register{count}\global{}} +\ekvd@def@type@fwd{xint}{\ekvd@type@register{count}\global\numexpr} +\ekvd@def@type@fwd {dimen}{\ekvd@type@register{dimen}{}{}} +\ekvd@def@type@fwd{edimen}{\ekvd@type@register{dimen}{}\dimexpr} +\ekvd@def@type@fwd{gdimen}{\ekvd@type@register{dimen}\global{}} +\ekvd@def@type@fwd{xdimen}{\ekvd@type@register{dimen}\global\dimexpr} +\ekvd@def@type@fwd {skip}{\ekvd@type@register{skip}{}{}} +\ekvd@def@type@fwd{eskip}{\ekvd@type@register{skip}{}\glueexpr} +\ekvd@def@type@fwd{gskip}{\ekvd@type@register{skip}\global{}} +\ekvd@def@type@fwd{xskip}{\ekvd@type@register{skip}\global\glueexpr} +\protected\def\ekvd@type@register#1#2#3#4#5% + {% + \ekvd@do@new{}{#4}% + \ekvd@assert@filledarg{#5}% + \ekvd@newreg#5{#1}% + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#4}{#2#5=#3##1\relax}{}% + }% + {\protected\ekvd@long\ekvdef\ekvd@set{#4}{#2#5=#3##1\relax}}% + } +\ekvd@def@type@fwd{store}{\ekvd@type@store\edef{\ekv@unexpanded{##1}}} +\ekvd@def@type@fwd{gstore}{\ekvd@type@store\xdef{\ekv@unexpanded{##1}}} +\ekvd@def@type@fwd{estore} + {\ekvd@type@store\edef{\ekv@unexpanded\ekv@expanded{{##1}}}} +\ekvd@def@type@fwd{xstore} + {\ekvd@type@store\xdef{\ekv@unexpanded\ekv@expanded{{##1}}}} +\protected\def\ekvd@type@store#1#2#3#4% + {% + \ekvd@do@new{}{#3}% + \ekvd@assert@filledarg{#4}% + \ekvd@newlet#4\ekv@empty + \ekvd@ifalso + {% + \let\ekvd@prot\protected + \ekvd@add@val{#3}{#1#4{#2}}{}% + }% + {\protected\ekvd@long\ekvdef\ekvd@set{#3}{#1#4{#2}}}% + } +\ekvd@def@type@fwd{meta} + {\ekvd@type@meta{}{##1}\ekvd@add@val{{##1}}{}\ekv@exparg} +\ekvd@def@type@fwd{nmeta} + {% + \ekvd@assert@not@long + \ekvd@type@meta + {NoVal}{}\ekvd@add@noval{}\ekvd@assert@not@long@also\ekv@expargtwice + } +\protected\long\def\ekvd@type@meta#1#2#3#4#5#6#7#8% + {% + \ekvd@do@new{#1}{#7}% + \ekvd@assert@filledarg{#8}% + #6{\ekvd@prot\ekvd@long\def\ekvd@tmp#2}{\ekvmorekv{#8}}% + \ekvd@ifalso + {\ekv@exparg{#3{#7}}{\ekvd@tmp#4}{#5}}% + {\csname ekvlet#1\endcsname\ekvd@set{#7}\ekvd@tmp}% + } +\ekvd@def@type@fwd{smeta}{\ekvd@type@smeta{}{##1}\ekvd@add@val{{##1}}{}} +\ekvd@def@type@fwd{snmeta} + {% + \ekvd@assert@not@long + \ekvd@type@smeta{NoVal}{}\ekvd@add@noval{}\ekvd@assert@not@long@also + } +\protected\long\def\ekvd@type@smeta#1#2#3#4#5#6#7% + {% + \ekvd@do@new{#1}{#6}% + \ekvd@assert@twoargs{#7}% + \ekvd@type@smeta@#7{#2}% + \ekvd@ifalso + {\ekv@exparg{#3{#6}}{\ekvd@tmp#4}{#5}}% + {\csname ekvlet#1\endcsname\ekvd@set{#6}\ekvd@tmp}% + } +\protected\long\def\ekvd@type@smeta@#1#2#3% + {\ekvd@prot\ekvd@long\ekv@expargtwice{\def\ekvd@tmp#3}{\ekvset{#1}{#2}}} +\protected\def\ekvd@type@choice#1% + {% + \ekvd@assert@not@long + \ekv@expargtwice{\ekvd@prot\def\ekvd@tmp##1}% + {% + \expandafter\expandafter\expandafter + \ekvd@h@choice + \expandafter\expandafter\expandafter + {\expandafter\ekvd@choice@name\expandafter{\ekvd@set}{#1}{##1}}% + }% + \ekvd@ifalso + {% + \ekvd@assert@val{#1}% + \ekvd@if@not@already@choice{#1}% + {% + \ekv@exparg + {% + \expandafter\ekvd@add@aux + \csname\ekv@name\ekvd@set{#1}\endcsname{{##1}}{#1}% + }% + {\ekvd@tmp{##1}}% + {\ekvd@long\ekvdef}\ekvd@assert@not@long@also + }% + }% + {\ekvlet\ekvd@set{#1}\ekvd@tmp}% + } +\ekvpNewParser{ekvd@populate@choice} +\ekvpValueAlwaysRequired{ekvd@populate@choice} +\ekvpDefType{ekvd@populate@choice}{protect} + {\ekvd@populate@choice\protected{#1}{#3}} +\ekvpDefType{ekvd@populate@choice}{unprotect}{\ekvd@populate@choice{}{#1}{#3}} +\ekvpDefNoType{ekvd@populate@choice} {\ekvd@populate@choice{}{#1}{#3}} +\ekvpLet{ekvd@populate@choice}{type}{protected}{protect} +\ekvpLet{ekvd@populate@choice}{type}{unprotected}{unprotect} +\protected\long\def\ekvd@populate@choice#1#2#3% + {% + #1\expandafter\edef + \csname\ekvd@choice@name\ekvd@set\ekvd@set@choice{#2}\endcsname + {\ekv@unexpanded{#3}}% + } +\ekvd@def@type{choice} + {% + \ekvd@do@new{}{#1}% + \ekvd@assert@arg + \ekvd@type@choice{#1}% + \def\ekvd@set@choice{#1}% + \ekvpParse@unsafe\ekvp@@p@ekvd@populate@choice{#3}% + } +\ekvd@def@type@fwd{choice-store} + {\ekvd@type@choicespecial\ekvd@populate@choicestore} +\ekvd@def@type@fwd{choice-enum} + {\ekvd@type@choicespecial\ekvd@populate@choiceenum} +\protected\long\def\ekvd@type@choicespecial#1#2#3% + {% + \ekvd@do@new{}{#2}% + \ekvd@assert@twoargs{#3}% + \ekvd@type@choice{#2}% + \def\ekvd@set@choice{#2}% + #1#3% + } +\protected\long\def\ekvd@populate@choicestore#1% + {% + \ekvd@newlet#1\ekv@empty + \ekvparse{\ekvd@populate@choicestore@k#1}{\ekvd@populate@choicestore@kv#1}% + } +\protected\long\def\ekvd@populate@choicestore@kv#1#2#3% + {% + \protected\expandafter\edef + \csname\ekvd@choice@name\ekvd@set\ekvd@set@choice{#2}\endcsname + {\ekv@unexpanded{\edef#1{\ekv@unexpanded{#3}}}}% + } +\ekv@exparg{\protected\long\def\ekvd@populate@choicestore@k#1#2}% + {\ekvd@populate@choicestore@kv{#1}{#2}{#2}} +\protected\long\def\ekvd@populate@choiceenum#1% + {% + \ekvd@newreg#1{count}% + \def\ekvd@tmp{0}% + \ekvcsvloop{\ekvd@populate@choiceenum@#1}% + } +\protected\long\def\ekvd@populate@choiceenum@#1#2% + {% + \protected\expandafter\edef + \csname\ekvd@choice@name\ekvd@set\ekvd@set@choice{#2}\endcsname + {#1=\@firstofone{\ekvd@tmp} }% + \edef\ekvd@tmp{\the\numexpr\ekvd@tmp+1\relax}% + } +\ekvd@def@type{unknown-choice} + {% + \ekvd@do@new@for@name{\ekvd@unknown@choice@name\ekvd@set{#1}}% + \ekvd@assert@arg + \ekvd@assert@not@long + \ekvd@assert@not@also + \ekvd@prot\expandafter + \def\csname\ekvd@unknown@choice@name\ekvd@set{#1}\endcsname##1{#3}% + } +\ekvd@def@type{unknown} + {% + \ekv@ifdefined{ekvd@type@unknown@\detokenize{#1}}% + {\csname ekvd@type@unknown@\detokenize{#1}\endcsname{#3}}% + \ekvd@err@misused@unknown + } +\protected\long\def\ekvd@type@unknown@noval#1% + {% + \ekvd@do@new@for@name{\ekv@name\ekvd@set{}uN}% + \ekvd@assert@arg + \ekvd@assert@not@also + \ekvd@prot\ekvd@long\ekvdefunknownNoVal\ekvd@set{#1}% + } +\protected\long\def\ekvd@type@unknown@code#1% + {% + \ekvd@do@new@for@name{\ekv@name\ekvd@set{}u}% + \ekvd@assert@arg + \ekvd@assert@not@also + \begingroup + \def\ekvd@tmp##1##2##3{#1}% + \ekv@exparg + {% + \endgroup + \ekvd@prot\ekvd@long\ekvdefunknown\ekvd@set + }% + {\ekvd@tmp{##2}{##1}{##3}}% + } +\protected\edef\ekvd@type@unknown@redirect#1% + {% + \expandafter\noexpand\csname ekvd@type@unknown@redirect-code\endcsname{#1}% + \expandafter\noexpand\csname ekvd@type@unknown@redirect-noval\endcsname{#1}% + } +\protected\expandafter\def\csname ekvd@type@unknown@redirect-code\endcsname#1% + {% + \ekvd@do@new@for@name{\ekv@name\ekvd@set{}u}% + \ekvd@assert@arg + \ekvd@assert@not@also + \ekvd@assert@not@protected + \expandafter\ekvredirectunknown\expandafter{\ekvd@set}{#1}% + } +\protected\expandafter\def\csname ekvd@type@unknown@redirect-noval\endcsname#1% + {% + \ekvd@do@new@for@name{\ekv@name\ekvd@set{}uN}% + \ekvd@assert@arg + \ekvd@assert@not@also + \ekvd@assert@not@protected + \expandafter\ekvredirectunknownNoVal\expandafter{\ekvd@set}{#1}% + } +\def\ekvd@h@choice#1% + {% + \expandafter\ekvd@h@choice@ + \csname\ifcsname#1\endcsname#1\else relax\fi\endcsname + {#1}% + } +\def\ekvd@h@choice@#1#2% + {% + \ifx#1\relax + \ekvd@err@choice@invalid{#2}% + \expandafter\@gobble + \fi + #1% + } +\protected\long\def\ekvd@add@val#1#2#3% + {% + \ekvd@assert@val{#1}% + \expandafter\ekvd@add@aux\csname\ekv@name\ekvd@set{#1}\endcsname{{##1}}% + {#1}{#2}{\ekvd@long\ekvdef}{#3}% + } +\protected\long\def\ekvd@add@noval#1#2#3% + {% + \ekvd@assert@noval{#1}% + \expandafter\ekvd@add@aux\csname\ekv@name\ekvd@set{#1}N\endcsname{}% + {#1}{#2}\ekvdefNoVal{#3}% + } +\protected\long\def\ekvd@add@aux#1#2% + {% + \ekvd@extract@prefixes#1% + \expandafter\ekvd@add@aux@\expandafter{#1#2}% + } +\protected\long\def\ekvd@add@aux@#1#2#3#4#5% + {% + #5% + \ekvd@prot#4\ekvd@set{#2}{#1#3}% + \ekvd@clear@prefixes + } +\protected\def\ekvd@extract@prefixes#1% + {% + \expandafter\ekvd@extract@prefixes@\meaning#1\ekvd@stop + } +\protected\def\ekvd@extract@prefixes@#1#2#3% + {% + \protected\def\ekvd@extract@prefixes@##1#1##2\ekvd@stop + {% + \ekvd@extract@prefixes@long + ##1\ekvd@mark\@firstofone#2\ekvd@mark\@gobble\ekvd@stop + {\let\ekvd@long\long}% + \ekvd@extract@prefixes@prot + ##1\ekvd@mark\@firstofone#3\ekvd@mark\@gobble\ekvd@stop + {\let\ekvd@prot\protected}% + }% + \protected\def\ekvd@extract@prefixes@long##1#2##2\ekvd@mark##3##4\ekvd@stop + {##3}% + \protected\def\ekvd@extract@prefixes@prot##1#3##2\ekvd@mark##3##4\ekvd@stop + {##3}% + } +\begingroup +\edef\ekvd@tmp + {% + \endgroup + \ekvd@extract@prefixes@ + {\detokenize{macro:}}% + {\string\long}% + {\string\protected}% + } +\ekvd@tmp +\protected\def\ekvd@newlet#1#2% + {% + \ifdefined#1% + \ifx#1\relax\ekv@fi@gobble\fi\@firstofone + \ekv@fi@gobble + \fi + \@firstofone{\let#1#2}% + } +\protected\def\ekvd@newreg#1#2% + {% + \ifdefined#1% + \ifx#1\relax\ekv@fi@gobble\fi\@firstofone + \ekv@fi@gobble + \fi + \@firstofone{\csname new#2\endcsname#1}% + } +\long\def\ekvd@assert@twoargs#1% + {\ekvd@ifnottwoargs{#1}{\ekvd@err@missing@definition\ekvpGobbleT}{}} +\long\def\ekvd@ifnottwoargs#1% + {% + \ekvd@ifempty@gtwo#1\ekv@ifempty@B + \ekv@ifempty@false\ekv@ifempty@A\ekv@ifempty@B\@firstoftwo + } +\long\def\ekvd@ifempty@gtwo#1#2{\ekv@ifempty@\ekv@ifempty@A} +\protected\def\ekvd@assert@val#1% + {% + \ekvifdefined\ekvd@set{#1}% + {\expandafter\ekvd@assert@val@\csname\ekv@name\ekvd@set{#1}\endcsname}% + {% + \ekvifdefinedNoVal\ekvd@set{#1}% + \ekvd@err@add@val@on@noval + {\ekvd@err@undefined@key{#1}}% + \ekvpGobbleT + }% + } +\protected\def\ekvd@assert@val@#1% + {% + \expandafter\ekvd@extract@args\meaning#1\ekvd@stop + \unless\ifx\ekvd@extracted@args\ekvd@one@arg@string + \ekvd@err@unsupported@arg + \expandafter\ekvpGobbleT + \fi + }% +\protected\def\ekvd@assert@noval#1% + {% + \ekvifdefinedNoVal\ekvd@set{#1}% + {\expandafter\ekvd@assert@noval@\csname\ekv@name\ekvd@set{#1}N\endcsname}% + {% + \ekvifdefined\ekvd@set{#1}% + \ekvd@err@add@noval@on@val + {\ekvd@err@undefined@key{#1}}% + \ekvpGobbleT + }% + } +\protected\def\ekvd@assert@noval@#1% + {% + \expandafter\ekvd@extract@args\meaning#1\ekvd@stop + \unless\ifx\ekvd@extracted@args\ekv@empty + \ekvd@err@unsupported@arg + \expandafter\ekvpGobbleT + \fi + } +\protected\def\ekvd@extract@args#1% + {% + \protected\def\ekvd@extract@args##1#1##2->##3\ekvd@stop + {\def\ekvd@extracted@args{##2}}% + } +\expandafter\ekvd@extract@args\expandafter{\detokenize{macro:}} +\edef\ekvd@one@arg@string{\string#1} +\def\ekvd@assert@arg{\ekvd@ifnoarg{\ekvd@err@missing@definition\ekvpGobbleT}{}} +\let\ekvd@ifnoarg\@secondoftwo +\long\def\ekvd@assert@filledarg#1% + {\ekvd@ifnoarg@or@empty{#1}{\ekvd@err@missing@definition\ekvpGobbleT}{}} +\long\def\ekvd@ifnoarg@or@empty#1% + {% + \ekvd@ifnoarg + \@firstoftwo + {\ekv@ifempty{#1}}% + } +\def\ekvd@assert@not@long{\ifx\ekvd@long\long\ekvd@err@no@prefix{long}\fi} +\def\ekvd@assert@not@protected + {\ifx\ekvd@prot\protected\ekvd@err@no@prefix{protected}\fi} +\def\ekvd@assert@not@also{\ekvd@ifalso{\ekvd@err@no@prefix{also}}{}} +\def\ekvd@assert@not@long@also + {\ifx\ekvd@long\long\ekvd@err@no@prefix@also{long}\fi} +\def\ekvd@assert@not@protected@also + {\ifx\ekvd@prot\protected\ekvd@err@no@prefix@also{protected}\fi} +\def\ekvd@assert@new#1#2% + {% + \csname ekvifdefined#1\endcsname\ekvd@set{#2}% + {\ekvd@err@not@new\ekvpGobbleT}% + {}% + } +\def\ekvd@assert@not@new + {\ifx\ekvd@do@new\ekvd@assert@new\ekvd@err@no@prefix{new}\fi} +\def\ekvd@do@new@for@name#1% + {% + \ifx\ekvd@do@new\ekvd@assert@new + \ekv@fi@firstofone + \fi + \@gobble{\ekv@ifdefined{#1}{\ekvd@err@not@new\ekvpGobbleT}{}}% + } +\protected\def\ekvd@if@not@already@choice#1% + {% + \expandafter\ekvd@if@not@already@choice@a + \csname\ekv@name\ekvd@set{#1}\endcsname + {}\ekvd@h@choice\ekvd@stop + } +\protected\def\ekvd@if@not@already@choice@a + {% + \expandafter\ekvd@if@not@already@choice@b + } +\long\protected\def\ekvd@if@not@already@choice@b#1\ekvd@h@choice#2\ekvd@stop + {% + \ekv@ifempty{#2}\@firstofone\@gobble + } +\long\def\ekvd@ifspace#1% + {% + \ekvd@ifspace@#1 \ekv@ifempty@B + \ekv@ifempty@false\ekv@ifempty@A\ekv@ifempty@B\@firstoftwo + } +\long\def\ekvd@ifspace@#1 % keep this space + {% + \ekv@ifempty@\ekv@ifempty@A + } +\protected\long\def\ekvd@errm#1{\errmessage{expkv-def Error: #1}} +\protected\def\ekvd@err@missing@definition + {\ekvd@errm{Missing definition for key `\ekvd@cur'}} +\protected\def\ekvd@err@missing@type + {\ekvd@errm{Missing type prefix for key `\ekvd@cur'}} +\protected\def\ekvd@err@undefined@prefix#1% + {% + \ekvd@errm + {% + Undefined prefix `\ekv@unexpanded{#1}' found while processing + `\ekvd@cur'% + }% + } +\protected\def\ekvd@err@undefined@key#1% + {% + \ekvd@errm + {Undefined key `\ekv@unexpanded{#1}' found while processing `\ekvd@cur'}% + } +\protected\def\ekvd@err@undefined@noval#1% + {% + \ekvd@errm + {% + Undefined noval key `\ekv@unexpanded{#1}' found while processing + `\ekvd@cur'% + }% + } +\protected\def\ekvd@err@no@prefix#1% + {\ekvd@errm{prefix `#1' not accepted in `\ekvd@cur'}} +\protected\def\ekvd@err@no@prefix@also#1% + {\ekvd@errm{`\ekvd@cur' not allowed with a `#1' key}} +\protected\def\ekvd@err@add@val@on@noval + {\ekvd@errm{`\ekvd@cur' not allowed with a NoVal key}} +\protected\def\ekvd@err@add@noval@on@val + {\ekvd@errm{`\ekvd@cur' not allowed with a value taking key}} +\protected\def\ekvd@err@unsupported@arg + {% + \ekvd@errm + {% + Existing key-macro has the unsupported argument string + `\ekvd@extracted@args' for key `\ekvd@cur'% + }% + } +\protected\def\ekvd@err@not@new + {\ekvd@errm{The key for `\ekvd@cur' is already defined}} +\protected\long\def\ekvd@err@misused@unknown + {\ekvd@errm{Misuse of the unknown type found while processing `\ekvd@cur'}} +\def\ekvd@err@choice@invalid#1% + {% + \ekvd@err@choice@invalid@#1% + } +\begingroup +\catcode40=8 +\catcode41=8 +\@firstofone{\endgroup +\def\ekvd@choice@name#1#2#3% + {% + ekvd#1(#2)\detokenize{#3}% + } +\def\ekvd@unknown@choice@name#1#2% + {% + ekvd:u:#1(#2)% + } +\def\ekvd@err@choice@invalid@ ekvd#1(#2)\detokenize#3% + {% + \ekv@ifdefined{\ekvd@unknown@choice@name{#1}{#2}}% + {\csname\ekvd@unknown@choice@name{#1}{#2}\endcsname{#3}}% + {\ekvd@err{invalid choice `#3' for `#2' in set `#1'}}% + } +} +\ekv@exparg{\long\def\ekvd@err#1}{\ekverr{expkv-def}{#1}} +\catcode`\@=\ekvd@tmp +%% +%% +%% End of file `expkv-def.tex'. diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex new file mode 100644 index 00000000000..d0d77817d9a --- /dev/null +++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex @@ -0,0 +1,326 @@ +%% +%% This is file `expkv-pop.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-pop.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. +%% +\input expkv +\expandafter\ifx\csname ekvpVersion\endcsname\relax +\else + \expandafter\endinput +\fi +\def\ekvpVersion{1.0} +\def\ekvpDate{2023-01-23} +\csname ekvp@tmp\endcsname +\expandafter\chardef\csname ekvp@tmp\endcsname=\catcode`\@ +\catcode`\@=11 +\long\def\ekvpParse#1#2% + {% + \ekv@unexpanded\ekv@expanded + {{\expandafter\ekvpParse@a\detokenize{#1}\ekv@mark{#2}}}% + } +\def\ekvpParse@a#1\ekv@mark + {% + \ekv@ifdefined{ekvp@@p@#1}% + {\expandafter\ekvpParse@b\csname ekvp@@p@#1\endcsname}% + {\ekvp@err@unknownparser{#1}\@gobble}% + } +\def\ekvpParse@b#1% + {% + \ekv@ifdefined{#1{ppa}}% + {% + \expandafter\ekvpParse@c\expandafter + {\expandafter#1\csname#1{ppa}\endcsname}% + }% + {\ekvpParse@c{#1{}}}% + } +\def\ekvpParse@c#1#2#3{#2#3} +\ekv@expargtwice{\long\def\ekvpParse@c#1#2}% + {\expandafter\ekvpParse@c\ekvparse{\ekvp@k#1}{\ekvp@p#1}{#2}} +\long\def\ekvpParse@unsafe#1#2#3{\ekv@unexpanded\ekv@expanded{{#2#3}}} +\ekv@expargtwice{\long\def\ekvpParse@unsafe@auto#1#2#3} + {\expandafter\ekvpParse@unsafe\ekvparse{\ekvp@k#1#2}{\ekvp@p#1#2}{#3}} +\ekv@expargtwice{\long\def\ekvpParse@unsafe#1#2}% + {\expandafter\ekvpParse@unsafe\ekvparse{\ekvp@k#1{}}{\ekvp@p#1{}}{#2}} +\def\ekvp@k#1{\csname #1k\endcsname#1} +\long\def\ekvp@ifspace#1% + {% + \ekvp@ifspace@#1 \ekv@ifempty@B\ekv@ifempty@false + \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo + } +\long\def\ekvp@ifspace@#1 % keep this space + {\ekv@ifempty@\ekv@ifempty@A} +\ekv@exparg{\long\def\ekvp@prefix#1}% + {% + \ekvp@ifspace{#1}% + {\ekvp@prefix@a#1\ekv@stop}% + {\ekvp@noprefix{#1}}% + } +\ekv@exparg{\long\def\ekvp@p#1#2#3}{\ekvp@prefix{#3}#1{#2}{#3}} +\long\def\ekvp@prefix@a#1 % keep this space + {\expandafter\ekvp@prefix@b\detokenize{#1}\ekv@mark{#1}} +\ekv@exparg{\long\def\ekvp@prefix@b#1\ekv@mark#2#3\ekv@stop#4}% + {% + \ekv@ifdefined{#4{pt}@#1} + {\expandafter\ekvp@prefix@pt\csname #4{pt}@#1\endcsname{#1}}% + {% + \ekv@ifdefined{#4{pp}@#1}% + {\expandafter\ekvp@prefix@pp\csname #4{pp}@#1\endcsname}% + {\@firstoftwo{\ekvp@noprefix{#2 #3}}}% + }% + {#3}#4% + } +\long\def\ekvp@prefix@pt#1#2#3#4#5#6#7% + {% + \ekvp@prefix@pt@{#2}{#3}{#6}#5{\@firstoftwo#1}{#7}\ekvpEOT + \ekv@unexpanded{\ekvpEOA{#6}}% + } +\long\def\ekvp@prefix@pt@#1#2#3#4{#4{#1}{#2}{#3}} +\ekv@exparg{\long\def\ekvp@prefix@pp#1#2#3#4}{\ekvp@prefix{#2}#3{#4#1}} +\long\def\ekvp@noprefix#1#2% + {% + \ekv@ifdefined{#2{pn}} + {\expandafter\ekvp@prefix@pt\csname #2{pn}\endcsname{}{#1}} + \ekvp@err@missingtype + #2% + } +\protected\long\def\ekvpNewParser#1% + {\expandafter\ekvpNewParser@\detokenize{#1}\ekv@mark} +\protected\def\ekvpNewParser@#1\ekv@mark + {% + \ekv@ifdefined{ekvp@@p@#1}% + {\ekvp@errm{Parser `#1' already defined}}% + {% + \expandafter\def\csname ekvp@@p@#1\endcsname##1{ekvp@@##1@#1} + \expandafter + \let\csname\csname ekvp@@p@#1\endcsname k\endcsname\ekvp@k@default + }% + } +\protected\long\def\ekvpValueAlwaysRequired#1% + {\ekvp@parser@def{#1}\ekvpValueAlwaysRequired@{}} +\protected\def\ekvpValueAlwaysRequired@#1% + {\expandafter\let\csname#1k\endcsname\ekvp@err@noval} +\protected\long\def\ekvpDefNoValue#1% + {\ekvp@parser@def{#1}\ekvpDefNoValue@\@gobble} +\protected\long\def\ekvpDefNoValue@#1#2% + {% + \def\ekvp@tmp##1{\ekv@unexpanded{#2}}% + \ekv@exparg{\long\expandafter\def\csname#1k\endcsname##1##2##3}% + {\ekvp@tmp{##3}}% + } +\protected\long\def\ekvpUseNoValueMarker#1% + {\ekvp@parser@def{#1}\ekvpUseNoValueMarker@\@gobble} +\protected\long\def\ekvpUseNoValueMarker@#1#2% + {% + \long\expandafter\edef\csname#1k\endcsname##1##2##3% + {\ekv@unexpanded{\ekvp@p}##1{##2}{##3}{\ekv@unexpanded{#2}}}% + } +\protected\long\def\ekvpDefNoValuePrefix#1% + {\ekvp@parser@def{#1}\ekvpDefNoValuePrefix@\@gobbletwo} +\protected\def\ekvpDefNoValuePrefix@#1% + {\expandafter\ekvpDefNoValuePrefix@@\csname#1{ppn}\endcsname#1} +\protected\long\def\ekvpDefNoValuePrefix@@#1#2% + {% + \long\def#1\ekvp@p##1##2##3% + {% + \ekv@unexpanded{\ekvp@p}% + ####1{####2\ekv@unexpanded{#1}}{####3}{\ekv@unexpanded{##3}}% + }% + \long\expandafter\edef\csname#2k\endcsname##1##2##3% + {\expandafter\expandafter\expandafter#1\csname#2k\endcsname{}{}{}}% + \ekvp@parser@def@prefix#1% + } +\protected\long\def\ekvpDefAutoPrefix#1% + {\ekvp@parser@def{#1}\ekvpDefAutoPrefix@\@gobbletwo} +\protected\long\def\ekvpDefAutoPrefix@#1% + {\expandafter\ekvp@parser@def@prefix\csname#1{ppa}\endcsname} +\long\def\ekvp@parser@def#1% + {\expandafter\ekvp@parser@def@\detokenize{#1}\ekv@mark} +\def\ekvp@parser@def@#1\ekv@mark#2#3% + {% + \ekv@ifdefined{ekvp@@p@#1}% + {\ekv@exparg{#2}{\csname ekvp@@p@#1\endcsname}}% + {\ekvp@errm{Parser `#1' not defined}#3}% + } +\protected\long\def\ekvpDefPrefix#1% + {\ekvp@parser@def{#1}\ekvpDefPrefix@\@gobblethree} +\protected\long\def\ekvpDefPrefix@#1#2% + {\expandafter\ekvp@parser@def@prefix\csname#1{pp}@\detokenize{#2}\endcsname} +\protected\long\def\ekvp@parser@def@prefix#1#2#3% + {% + \def#1##1##2##3{#2#3}% + \long\def#1##1##2##3##4##5\ekvpEOT + {\ekv@unexpanded{#2}##4{##1}{##2}{##3}##5\ekvpEOT\ekv@unexpanded{#3}}% + } +\ekv@exparg{\protected\long\def\ekvpDefPrefixLet#1#2#3#4#5}% + {\ekvpDefPrefix{#1}{#2}{\ekvpProtect{\let#3= #4}}{\ekvpProtect{\let#3= #5}}} +\ekv@exparg{\protected\long\def\ekvpDefPrefixStore#1#2#3#4#5}% + {% + \ekvpDefPrefix{#1}{#2}% + {\ekvpProtect{\edef#3{\ekv@unexpanded{#4}}}}% + {\ekvpProtect{\edef#3{\ekv@unexpanded{#5}}}}% + } +\protected\long\def\ekvpDefType#1{\ekvp@parser@def{#1}\ekvpDefType@\@gobbletwo} +\protected\long\def\ekvpDefType@#1#2% + {\ekvpDefType@NoType{#1{pt}@\detokenize{#2}}}% +\protected\long\def\ekvpDefNoType#1{\ekvp@parser@def{#1}\ekvpDefNoType@\@gobble} +\protected\long\def\ekvpDefNoType@#1{\ekvpDefType@NoType{#1{pn}}} +\protected\long\def\ekvpDefType@NoType#1#2% + {% + \long\expandafter\def\csname#1\endcsname##1##2##3\ekvpEOT + {\ekv@unexpanded{\ekvpEOP{##2}#2\ekvpEOT{##2}}}% + }% +\protected\long\def\ekvpLet#1#2#3{\ekvoptarg{\ekvpLet@a{#1}{#2}{#3}}{#1}} +\protected\long\def\ekvpLet@a#1% + {\ekvp@parser@def{#1}\ekvpLet@b{\@firstoftwo\@gobblethree}} +\protected\long\def\ekvpLet@b#1#2#3#4% + {\ekvp@parser@def{#4}\ekvpLet@c{\@firstoftwo\@gobblethree}#1{#2}{#3}} +\protected\long\def\ekvpLet@c#1#2#3% + {% + \ekv@ifdefined{ekvpLet@@\detokenize{#3}}% + {\expandafter\ekvpLet@d\csname ekvpLet@@\detokenize{#3}\endcsname{#1}{#2}}% + {\ekvp@errm{unknown type \detokenize{#3}}\@gobbletwo}% + } +\protected\long\def\ekvpLet@d#1#2#3#4#5% + {% + \ekv@ifdefined{#2{#1}@\detokenize{#5}}% + {% + \expandafter\let + \csname#3{#1}@\detokenize{#4}\expandafter\endcsname + \csname#2{#1}@\detokenize{#5}\endcsname + }% + {\ekvp@errm{Undefined prefix/type \detokenize{#5} can't be copied}}% + } +\def\ekvpLet@@prefix{pp} +\def\ekvpLet@@type{pt} +\ekv@ifdefined{c_novalue_tl} + {\expandafter\let\expandafter\ekvp@novalflag\csname c_novalue_tl\endcsname} + {% + \begingroup + \lccode`\Z=`\- + \lccode`\:=`\- + \lccode`\N=\z@ + \lccode`\V=\z@ + \lowercase{\endgroup\def\ekvp@novalflag{ZNoValue:}}% + } +\def\ekvpIfNoVal#1% + {% + \long\def\ekvpIfNoVal##1% + {% + \ekvp@ifnoval{}##1{}?!#1??!\ekv@ifempty@B\ekv@ifempty@true + \ekv@ifempty@A\ekv@ifempty@B\@secondoftwo + }% + \long\def\ekvp@ifnoval##1#1##2?##3?!{\ekv@ifempty@\ekv@ifempty@A##1##2}% + \long\def\ekvp@k@default##1##2##3{\ekvp@p##1{##2}{##3}{#1}}% + } +\expandafter\ekvpIfNoVal\expandafter{\ekvp@novalflag} +\let\ekvp@novalflag\ekvp@undefined +\def\ekvpAssertIf{\romannumeral\ekv@alignsafe\ekvoptarg{\ekvpAssertIf@{}}{EOT}} +\def\ekvpAssertIfNot + {\romannumeral\ekv@alignsafe\ekvoptarg{\ekvpAssertIf@\else}{EOT}} +\long\def\ekvpAssertIf@#1#2#3% + {% + #3#1\ekvpAssertIf@good\fi + \ekvpAssert@notgood{#2}% + } +\long\def\ekvpAssertIf@good\fi\ekvpAssert@notgood#1#2% + {\fi\ekv@endalignsafe\ekv@zero} +\long\def\ekvpAssert@notgood#1% + {% + \ekv@ifdefined{ekvpAssert@@#1}% + {\csname ekvpAssert@@#1\endcsname}% + {\ekvp@err@unknownmarker{#1}\ekvpAssert@@EOA}% + } +\def\ekvpAssertTF{\ekvoptarg{\ekvpAssertTF@{}}{EOT}} +\def\ekvpAssertTFNot{\ekvoptarg{\ekvpAssertTF@{\@secondoftwo\@firstoftwo}}{EOT}} +\long\def\ekvpAssertTF@#1#2#3% + {% + \ekv@alignsafe + #3#1% + {\ekv@endalignsafe\@gobble}% + {\romannumeral\ekvpAssert@notgood{#2}}% + } +\ekv@exparg{\def\ekvpAssert@further#1#2#3}% + {\ekvoptarg{\ekvpAssert@further{#1}{#2}{#3}}{EOT}} +\ekv@exparg{\def\ekvpAssertValue}% + {\ekvpAssert@further{\@secondoftwo\@firstoftwo}{\ekvpIfNoVal}{missing value}} +\ekv@exparg{\def\ekvpAssertNoValue}% + {\ekvpAssert@further{}{\ekvpIfNoVal}{superfluous value}} +\ekv@exparg{\def\ekvpAssertOneValue}% + {\ekvpAssert@further{}{\ekvp@assert@num@args\@gobble}{argument count != 1}} +\ekv@exparg{\def\ekvpAssertTwoValues}% + {\ekvpAssert@further{}{\ekvp@assert@num@args\@gobbletwo}{argument count != 2}} +\long\def\ekvp@assert@num@args#1#2% + {% + \expandafter\ekv@ifempty@\expandafter\ekv@ifempty@A#1#2\ekv@ifempty@B + \ekv@ifempty@true\ekv@ifempty@A\ekv@ifempty@B\@secondoftwo + } +\long\def\ekvpAssert@further#1#2#3#4#5{\ekvpAssertTF@{#1}{#4}{#2{#5}}{#3}} +\def\ekvpAssert@@EOA#1#2% + {\long\def#1##1##2#2##3{\ekvp@err{##1 at `##3'}\ekv@endalignsafe\ekv@zero}} +\ekvpAssert@@EOA\ekvpAssert@@EOP\ekvpEOP +\ekvpAssert@@EOA\ekvpAssert@@EOT\ekvpEOT +\ekvpAssert@@EOA\ekvpAssert@@EOA\ekvpEOA +\long\def\ekvpGobbleP#1\ekvpEOP#2{} +\long\def\ekvpGobbleT#1\ekvpEOT#2{} +\long\def\ekvpGobbleA#1\ekvpEOA#2{} +\let\ekvpEOP\@gobble +\let\ekvpEOT\@gobble +\let\ekvpEOA\@gobble +\def\ekvpProtect{\ekvpProtect@\ekvpProtect@@} +\protected\long\def\ekvpProtect@\ekvpProtect@@#1{#1} +\long\def\ekvpProtect@@#1{\ekv@unexpanded{\ekvpProtect@@{#1}}} +\protected\long\def\ekvp@errm#1{\errmessage{expkv-pop Error: #1}} +\ekv@exparg{\long\def\ekvp@err#1}{\ekverr{expkv-pop}{#1}} +\def\ekvp@err@unknownparser#1{\ekvp@err{unknown parser `#1'}} +\long\def\ekvp@err@noval#1#2#3{\ekvp@err{missing value for `#3'}} +\long\def\ekvp@err@missingtype#1#2#3#4{\ekvp@err{missing type in `#3'}} +\long\def\ekvp@err@unknownmarker#1{\ekvp@err{unknown marker `#1'}} +\let\ekvp@prefix\ekvp@undefined +\catcode`\@=\ekvp@tmp +%% +%% +%% End of file `expkv-pop.tex'. 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'. diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-cs.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-cs.sty new file mode 100644 index 00000000000..66faca62fe7 --- /dev/null +++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-cs.sty @@ -0,0 +1,67 @@ +%% +%% This is file `expkv-cs.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-cs.dtx (with options: `pkg') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\RequirePackage{expkv-pop} +\def\ekvc@tmp + {% + \ProvidesFile{expkv-cs.tex}% + [% + \ekvcDate\space v\ekvcVersion\space + define expandable key=val macros using expkv% + ]% + } +\input{expkv-cs.tex} +\ProvidesPackage{expkv-cs}% + [% + \ekvcDate\space v\ekvcVersion\space + define expandable key=val macros using expkv% + ] +%% +%% +%% End of file `expkv-cs.sty'. diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty new file mode 100644 index 00000000000..300974bd57f --- /dev/null +++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty @@ -0,0 +1,61 @@ +%% +%% This is file `expkv-def.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-def.dtx (with options: `pkg') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\RequirePackage{expkv-pop} +\def\ekvd@tmp + {% + \ProvidesFile{expkv-def.tex}% + [\ekvdDate\space v\ekvdVersion\space a key-defining frontend for expkv]% + } +\input{expkv-def.tex} +\ProvidesPackage{expkv-def}% + [\ekvdDate\space v\ekvdVersion\space a key-defining frontend for expkv] +%% +%% +%% End of file `expkv-def.sty'. diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt-2020-10-10.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt-2020-10-10.sty new file mode 100644 index 00000000000..c2082261d77 --- /dev/null +++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt-2020-10-10.sty @@ -0,0 +1,288 @@ +%% +%% This is file `expkv-opt-2020-10-10.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-opt-2020-10-10.dtx (with options: `pkg') +%% +%% -------------------------------------------------------------- +%% expkv-opt -- parse class and package options with expkv +%% 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 file expkv-opt.dtx +%% and the derived files expkv-opt.pdf +%% expkv-opt.sty +%% and the file expkv-opt-2020-10-10.dtx +%% and the derived file expkv-opt-2020-10-10.sty +%% +\newcommand*\ekvoVersion{0.1c} +\newcommand*\ekvoDate{2020-10-10} +\ProvidesPackage{expkv-opt} + [% + \ekvoDate\space v\ekvoVersion\space + parse class and package options with expkv% + ] +\RequirePackage{expkv} +\protected\long\def\ekvo@CurrentOption@loop#1#2% + {% + \ekvo@CurrentOption@loop@#2\ekv@set@other\ekv@mark#1,\ekv@stop,\ekvo@tail + } +\long\def\ekvo@CurrentOption@loop@#1\ekv@set@other#2,% + {% + \ekv@gobble@from@mark@to@stop#2\ekvo@end@loop\ekv@stop + \ekv@ifblank{#2}% + {}% + {% + \edef\CurrentOption{\unexpanded\expandafter{\ekv@gobble@mark#2}}% + #1{#2}% + }% + \ekvo@CurrentOption@loop@#1\ekv@set@other\ekv@mark + } +\long\def\ekvo@end@loop#1\ekvo@tail{} +\def\ekvo@ifx@TF#1#2{\ifx#1#2\ekv@fi@firstoftwo\fi\@secondoftwo} +\def\ekvo@ifx@F#1#2{\ifx#1#2\ekv@fi@gobble\fi\@firstofone} +\protected\def\ekvo@do@with@set#1#2% + {% + \ekvifdefinedset{#1}% + {% + \expandafter + \let\expandafter\ekvo@name\csname\ekv@undefined@set{#1}\endcsname + \def\ekvo@setname{#1}% + #2% + }% + {\ekvo@err@undefined@set{#1}}% + } +\protected\long\def\ekvo@handle@undefined@k@pkg#1% + {% + \ekv@ifdefined{\ekvo@name{#1}}% + {\ekvo@err@value@required{#1}}% + {\ekvo@err@undefined@key{#1}}% + } +\def\ekvo@handle@undefined@kv@pkg#1#2% + {% + \ekv@ifdefined{\ekvo@name{#1}N}% + {\ekvo@err@value@forbidden{#1}}% + {\ekvo@err@undefined@key{#1}}% + } +\long\def\ekvo@addto@unused@one#1{\ekvo@addto@list\@unusedoptionlist} +\long\def\ekvo@addto@unused@two#1#2{\ekvo@addto@list\@unusedoptionlist} +\long\def\ekvo@rmfrom@unused@one#1{\ekvo@rmfrom@list\@unusedoptionlist} +\long\def\ekvo@rmfrom@unused@two#1#2{\ekvo@rmfrom@list\@unusedoptionlist} +\protected\def\ekvo@set@handlers@local + {% + \ekvo@if@need@handlers + {% + \ifx\@currext\@clsextension + \ifx\@classoptionslist\relax + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + \else + \expandafter + \ifx\csname opt@\@currname.\@currext\endcsname\@classoptionslist + \let\ekvo@handle@undefined@k\ekvo@addto@unused@one + \let\ekvo@handle@undefined@kv\ekvo@addto@unused@two + \else + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + \fi + \fi + \else + \let\ekvo@handle@undefined@k\ekvo@handle@undefined@k@pkg + \let\ekvo@handle@undefined@kv\ekvo@handle@undefined@kv@pkg + \fi + }% + } +\protected\def\ekvo@set@handlers@global + {% + \unless\ifx\@unusedoptionlist\@empty + \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one + \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two + \fi + \ekvo@if@need@handlers + {% + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + }% + } +\protected\def\ekvo@set@handlers@unusedglobal + {% + \ekvo@if@need@handlers + {% + \let\ekvo@handle@undefined@k\ekvo@addto@unused@one + \let\ekvo@handle@undefined@kv\ekvo@addto@unused@two + \let\@unusedoptionlist\@empty + \@gobbletwo + }% + \@firstofone + {% + \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one + \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two + }% + } +\protected\def\ekvo@set@handlers@list + {% + \ekvo@if@need@handlers + {% + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + }% + } +\let\ekvo@if@need@handlers\@firstofone +\protected\long\def\ekvo@dont@need@handlers#1% + {% + \let\ekvo@if@need@handlers\@firstofone + }% +\let\ekvo@handle@defined@k\@gobble +\let\ekvo@handle@defined@kv\@gobbletwo +\protected\def\ekvo@process@common#1#2#3% + {% + #1{\ekvo@do@with@set{#3}{#2}}% + } +\protected\def\ekvo@process@list#1% + {% + \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@parse + } +\protected\long\def\ekvo@parse#1% + {% + \ekv@expanded + {\ekv@unexpanded{\ekvparse\ekvo@set@k\ekvo@set@kv}\expandafter}% + \expandafter{\ekv@gobble@mark#1}\ekvo@tail + } +\protected\def\ekvo@set@k#1#2\ekvo@tail + {% + \ekv@ifdefined{\ekvo@name{#1}N}% + {% + \ekvo@handle@defined@k{#1}% + \csname\ekvo@name{#1}N\endcsname + }% + {\ekvo@handle@undefined@k{#1}}% + } +\protected\def\ekvo@set@kv#1#2#3\ekvo@tail + {% + \ekv@ifdefined{\ekvo@name{#1}}% + {% + \ekvo@handle@defined@kv{#1}{#2}% + \csname\ekvo@name{#1}\endcsname{#2}% + }% + {\ekvo@handle@undefined@kv{#1}{#2}}% + } +\protected\def\ekvo@addto@list#1% + {% + \ekvo@ifx@TF#1\@empty + {\let#1\CurrentOption}% + {% + \edef#1% + {% + \unexpanded\expandafter{#1},% + \unexpanded\expandafter{\CurrentOption}% + }% + }% + } +\protected\def\ekvo@rmfrom@list#1% + {% + \ekvo@ifx@F#1\@empty + {% + \let\ekvo@tmp@list\@empty + \let\ekvo@curropt\CurrentOption + \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@rmfrom@list@ + \let\CurrentOption\ekvo@curropt + \let#1\ekvo@tmp@list + }% + } +\protected\long\def\ekvo@rmfrom@list@#1% + {% + \ekvo@ifx@F\CurrentOption\ekvo@curropt + {\ekvo@addto@list\ekvo@tmp@list}% + } +\protected\def\ekvo@err@undefined@key#1% + {% + \PackageError{expkv-opt}{Undefined key `#1' in set `\ekvo@setname'}{}% + } +\protected\def\ekvo@err@value@required#1% + {% + \PackageError{expkv-opt}% + {Value required for key `#1' in set `\ekvo@setname'}% + {}% + } +\protected\def\ekvo@err@value@forbidden#1% + {% + \PackageError{expkv-opt}% + {Value forbidden for key `#1' in set `\ekvo@setname'}% + {}% + } +\protected\def\ekvo@err@undefined@set#1% + {% + \PackageError{expkv-opt}% + {Undefined set `#1'}% + {The set for which you try to parse options isn't defined in expkv.}% + } +\protected\def\ekvoProcessLocalOptions + {% + \ekvo@process@common + {\ekv@ifdefined{opt@\@currname.\@currext}\@firstofone\@gobble}% + {% + \ekvo@set@handlers@local + \expandafter + \ekvo@process@list\csname opt@\@currname.\@currext\endcsname + \AtEndOfPackage{\let\@unprocessedoptions\relax}% + }% + } +\protected\def\ekvoProcessGlobalOptions + {% + \ekvo@process@common{\ekvo@ifx@F\@classoptionslist\relax}% + {% + \ekvo@set@handlers@global + \ekvo@process@list\@classoptionslist + \let\ekvo@handle@defined@k\@gobble + \let\ekvo@handle@defined@kv\@gobbletwo + }% + } +\protected\def\ekvoProcessUnusedGlobalOptions + {% + \ekvo@process@common{\ekvo@ifx@F\@unusedoptionlist\@empty}% + {% + \let\ekvo@tmp@list\@unusedoptionlist + \ekvo@set@handlers@unusedglobal + \ekvo@process@list\ekvo@tmp@list + \let\ekvo@handle@defined@k\@gobble + \let\ekvo@handle@defined@kv\@gobbletwo + }% + } +\protected\def\ekvoProcessOptionsList#1% + {% + \ekvo@process@common{\ekvo@ifx@F#1\@empty}% + {% + \ekvo@set@handlers@list + \ekvo@process@list#1% + }% + } +\protected\def\ekvoUseUnknownHandlers#1#2% + {% + \let\ekvo@handle@undefined@k#1\relax + \let\ekvo@handle@undefined@kv#2\relax + \let\ekvo@if@need@handlers\ekvo@dont@need@handlers + } +\@onlypreamble\ekvoProcessLocalOptions +\@onlypreamble\ekvoProcessGlobalOptions +\@onlypreamble\ekvoProcessUnusedGlobalOptions +\@onlypreamble\ekvoProcessOptionsList +\@onlypreamble\ekvoUseUnknownHandlers +%% +%% +%% End of file `expkv-opt-2020-10-10.sty'. diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty new file mode 100644 index 00000000000..a3d3dd2a742 --- /dev/null +++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty @@ -0,0 +1,517 @@ +%% +%% This is file `expkv-opt.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-opt.dtx (with options: `pkg') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\IfFormatAtLeastTF{2021/05/01} + {} + {% + \ifx\pkgcls@targetlabel\@empty + \ifnum\requestedLaTeXdate=\pkgcls@targetdate + \pkgcls@parse@date@arg{=v0.1}% + \fi + \fi + } +\DeclareRelease{v0.1}{2020/10/10}{expkv-opt-2020-10-10.sty} +\DeclareCurrentRelease{v0.2}{2021/04/04} +\newcommand*\ekvoVersion{1.0} +\newcommand*\ekvoDate{2023-01-23} +\ProvidesPackage{expkv-opt} + [% + \ekvoDate\space v\ekvoVersion\space + parse class and package options with expkv% + ] +\RequirePackage{expkv} +\protected\long\def\ekvo@CurrentOption@loop#1#2% + {% + \ekvo@CurrentOption@loop@#2\ekv@set@other\ekv@mark#1,\ekv@stop,\ekvo@tail + } +\long\def\ekvo@CurrentOption@loop@#1\ekv@set@other#2,% + {% + \ekv@gobble@from@mark@to@stop#2\ekvo@end@loop\ekv@stop + \ekv@ifblank{#2}% + {}% + {% + \edef\CurrentOption{\unexpanded\expandafter{\ekv@gobble@mark#2}}% + #1{#2}% + }% + \ekvo@CurrentOption@loop@#1\ekv@set@other\ekv@mark + } +\long\def\ekvo@end@loop#1\ekvo@tail{} +\def\ekvo@ifx@TF#1#2{\ifx#1#2\ekv@fi@firstoftwo\fi\@secondoftwo} +\def\ekvo@ifx@T#1#2{\ifx#1#2\ekv@fi@firstofone\fi\@gobble} +\def\ekvo@ifx@F#1#2{\ifx#1#2\ekv@fi@gobble\fi\@firstofone} +\protected\def\ekvo@do@with@set#1#2% + {% + \ekvifdefinedset{#1}% + {% + \expandafter + \let\expandafter\ekvo@name\csname\ekv@undefined@set{#1}\endcsname + \def\ekvo@setname{#1}% + #2% + }% + {\ekvo@err@undefined@set{#1}}% + } +\protected\long\def\ekvo@handle@undefined@k@pkg#1% + {% + \ekv@ifdefined{\ekvo@name{#1}}% + {\ekvo@err@value@required{#1}}% + {\ekvo@err@undefined@key{#1}}% + } +\def\ekvo@handle@undefined@kv@pkg#1#2% + {% + \ekv@ifdefined{\ekvo@name{#1}N}% + {\ekvo@err@value@forbidden{#1}}% + {\ekvo@err@undefined@key{#1}}% + } +\long\def\ekvo@addto@unused@one#1{\ekvo@do@unusedoptionlist\ekvo@addnewto@list} +\long\def\ekvo@addto@unused@two#1#2{\ekvo@do@unusedoptionlist\ekvo@addnewto@list} +\long\def\ekvo@rmfrom@unused@one#1% + {% + \ekvo@ifx@F\@unusedoptionlist\@empty + {\ekvo@do@unusedoptionlist\ekvo@rmfrom@list}% + } +\long\def\ekvo@rmfrom@unused@two#1#2% + {% + \ekvo@ifx@F\@unusedoptionlist\@empty + {\ekvo@do@unusedoptionlist\ekvo@rmfrom@list}% + } +\protected\def\ekvo@do@unusedoptionlist#1% + {% + \let\ekvo@unpreparedCurrentOption\CurrentOption + \edef\CurrentOption + {\expandafter\ekvo@prepare@unusedoption\CurrentOption=\ekv@mark}% + #1\@unusedoptionlist + \let\CurrentOption\ekvo@unpreparedCurrentOption + } +\def\ekvo@prepare@unusedoption{\ekvo@prepare@unusedoption@a\@empty} +\def\ekvo@prepare@unusedoption@a#1% + {% + \long\def\ekvo@prepare@unusedoption@a##1=##2\ekv@mark + {% + \ekvo@prepare@unusedoption@b##1\ekv@stop + \ekv@mark\ekvo@prepare@unusedoption@b + #1\ekv@mark\ekvo@prepare@unusedoption@c + }% + } +\ekvo@prepare@unusedoption@a{ } +\long\def\ekvo@prepare@unusedoption@b#1 #2\ekv@mark#3{#3#1#2\ekv@mark#3} +\long\def\ekvo@prepare@unusedoption@c + #1\ekv@stop + \ekv@mark\ekvo@prepare@unusedoption@b\ekv@mark\ekvo@prepare@unusedoption@c + {\unexpanded\expandafter{#1}} +\protected\def\ekvo@set@handlers@local + {% + \ekvo@if@need@handlers + {% + \ifx\@currext\@clsextension + \ifx\@classoptionslist\relax + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + \else + \expandafter + \ifx + \csname @raw@opt@\@currname.\@currext\endcsname + \@raw@classoptionslist + \let\ekvo@handle@undefined@k\ekvo@addto@unused@one + \let\ekvo@handle@undefined@kv\ekvo@addto@unused@two + \unless\ifx\@unusedoptionlist\@empty + \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one + \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two + \fi + \else + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + \fi + \fi + \else + \let\ekvo@handle@undefined@k\ekvo@handle@undefined@k@pkg + \let\ekvo@handle@undefined@kv\ekvo@handle@undefined@kv@pkg + \fi + }% + } +\protected\def\ekvo@set@handlers@global + {% + \unless\ifx\@unusedoptionlist\@empty + \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one + \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two + \fi + \ekvo@if@need@handlers + {% + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + }% + } +\protected\def\ekvo@set@handlers@list + {% + \ekvo@if@need@handlers + {% + \let\ekvo@handle@undefined@k\@gobble + \let\ekvo@handle@undefined@kv\@gobbletwo + }% + } +\let\ekvo@if@need@handlers\@firstofone +\protected\long\def\ekvo@dont@need@handlers#1% + {% + \let\ekvo@if@need@handlers\@firstofone + }% +\let\ekvo@handle@defined@k\@gobble +\let\ekvo@handle@defined@kv\@gobbletwo +\protected\def\ekvo@process@common#1#2#3% + {% + #1{\ekvo@do@with@set{#3}{#2}}% + } +\protected\def\ekvo@process@list#1% + {% + \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@parse + } +\long\def\ekvo@parse#1% + {% + \ekv@eq@other#1\ekv@nil\ekv@mark\ekvo@parse@kv + =\ekv@mark\ekvo@parse@k + } +\long\def\ekvo@parse@kv#1\ekv@stop#2\ekv@nil=\ekv@mark\ekvo@parse@k + {\ekv@strip{#2}{\ekv@strip{#1}\ekvo@parse@kv@}} +\long\def\ekvo@parse@kv@#1#2% + {% + \ekv@ifexp{#1}% + {\ekvo@expansion@kv{#2}}% + {\ekvo@set@kv{#1}{#2}}% + } +\long\def\ekvo@expansion@kv#1#2#3#4% + {% + \ekv@expansion@rule@{#1}#2\ekv@mark\ekv@stop{#3}{}% + {\ekvo@handle@defined@kv{#3}{#1}\ekvmorekv}% + \ekvo@expansion@kv@ + } +\long\def\ekvo@expansion@kv@#1#2{\ekvo@set@kv{#1}{#2}} +\long\def\ekvo@parse@k#1\ekv@nil\ekv@mark\ekvo@parse@kv\ekv@stop\ekv@mark + {\ekv@strip{#1}\ekvo@parse@k@} +\long\def\ekvo@parse@k@#1% + {% + \ekv@ifexp{#1}% + \ekvo@expansion@k + {\ekvo@set@k{#1}}% + } +\long\def\ekvo@expansion@k#1#2#3% + {% + \ekv@expansion@rule@{#2}#1\ekv@mark\ekv@stop{}{}% + {\ekvo@handle@defined@k{#2}\ekvmorekv}% + \ekvo@expansion@k@ + } +\long\def\ekvo@expansion@k@#1#2{\ekvo@set@k{#2}} +\protected\def\ekvo@set@k#1% + {% + \ekv@ifdefined{\ekvo@name{#1}N}% + {% + \ekvo@handle@defined@k{#1}% + \csname\ekvo@name{#1}N\endcsname + }% + {\ekvo@handle@undefined@k{#1}}% + } +\protected\def\ekvo@set@kv#1#2% + {% + \ekv@ifdefined{\ekvo@name{#1}}% + {% + \ekvo@handle@defined@kv{#1}{#2}% + \csname\ekvo@name{#1}\endcsname{#2}% + }% + {\ekvo@handle@undefined@kv{#1}{#2}}% + } +\protected\def\ekvo@addto@list#1% + {% + \ekvo@ifx@TF#1\@empty + {\let#1\CurrentOption}% + {% + \edef#1% + {% + \unexpanded\expandafter{#1},% + \unexpanded\expandafter{\CurrentOption}% + }% + }% + } +\protected\def\ekvo@addnewto@list#1% + {% + \ekvo@ifx@TF#1\@empty + {\let#1\CurrentOption}% + {% + \ekvo@if@in@list#1% + {}% + {% + \edef#1% + {% + \unexpanded\expandafter{#1},% + \unexpanded\expandafter{\CurrentOption}% + }% + }% + }% + } +\protected\def\ekvo@if@in@list#1% + {% + \ekvo@ifx@TF#1\@empty + \@secondoftwo + {% + \let\ekvo@curropt\CurrentOption + \let\ekvo@if@in@list@result\@secondoftwo + \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@if@in@list@ + \let\CurrentOption\ekvo@curropt + \ekvo@if@in@list@result + }% + } +\protected\long\def\ekvo@if@in@list@#1% + {% + \ekvo@ifx@T\ekvo@curropt\CurrentOption + {% + \let\ekvo@if@in@list@result\@firstoftwo + \ekvo@end@loop + }% + } +\protected\def\ekvo@rmfrom@list#1% + {% + \ekvo@ifx@F#1\@empty + {% + \let\ekvo@tmp@list\@empty + \let\ekvo@curropt\CurrentOption + \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@rmfrom@list@ + \let\CurrentOption\ekvo@curropt + \let#1\ekvo@tmp@list + }% + } +\protected\long\def\ekvo@rmfrom@list@#1% + {% + \ekvo@ifx@F\CurrentOption\ekvo@curropt + {\ekvo@addto@list\ekvo@tmp@list}% + } +\protected\def\ekvo@err@undefined@key#1% + {% + \ekvo@pkg@cls@error + {Undefined option `\detokenize{#1}'}% + {The used option was not defined. Perhaps you misspelled it?}% + } +\protected\def\ekvo@err@value@required#1% + {% + \ekvo@pkg@cls@error + {Missing value for option `\detokenize{#1}'}% + {The used option requires a value or you misspelled its name.}% + } +\protected\def\ekvo@err@value@forbidden#1% + {% + \ekvo@pkg@cls@error + {Unwanted value for option `\detokenize{#1}'}% + {The used option doesn't support a value or you misspelled its name.}% + } +\protected\def\ekvo@err@undefined@set#1% + {% + \PackageError{expkv-opt}% + {Undefined set `#1'}% + {The set for which you try to parse options isn't defined in expkv.}% + } +\protected\def\ekvo@pkg@cls@error + {% + \ekvo@ifx@TF\@currext\@clsextension + \ClassError + \PackageError + \@currname + } +\protected\def\ekvoProcessOptions#1% + {% + \ekvo@if@need@handlers + {% + \ekvoProcessGlobalOptions{#1}% + \ekvoProcessLocalOptions {#1}% + \ekvoProcessFutureOptions{#1}% + \@gobbletwo + }% + \@firstofone + {% + \let\ekvo@tmpa\ekvo@handle@undefined@k + \let\ekvo@tmpb\ekvo@handle@undefined@kv + \ekvoUseUnknownHandlers\ekvo@tmpa\ekvo@tmpb + \ekvoProcessGlobalOptions{#1}% + \ekvoUseUnknownHandlers\ekvo@tmpa\ekvo@tmpb + \ekvoProcessLocalOptions {#1}% + \ekvoUseUnknownHandlers\ekvo@tmpa\ekvo@tmpb + \ekvoProcessFutureOptions{#1}% + \let\ekvo@tmpa\ekvo@undefined + \let\ekvo@tmpb\ekvo@undefined + }% + } +\protected\def\ekvoProcessLocalOptions + {% + \ekvo@process@common + {\ekv@ifdefined{@raw@opt@\@currname.\@currext}\@firstofone\@gobble}% + {% + \ekvo@set@handlers@local + \expandafter + \ekvo@process@list\csname @raw@opt@\@currname.\@currext\endcsname + \AtEndOfPackage{\let\@unprocessedoptions\relax}% + }% + } +\protected\def\ekvoProcessGlobalOptions + {% + \ekvo@process@common{\ekvo@ifx@F\@classoptionslist\relax}% + {% + \ekvo@set@handlers@global + \ekvo@process@list\@raw@classoptionslist + \let\ekvo@handle@defined@k\@gobble + \let\ekvo@handle@defined@kv\@gobbletwo + }% + } +\protected\def\ekvoProcessUnusedGlobalOptions#1% + {% + \PackageError{expkv-opt}% + {% + \noexpand + \ekvoProcessUnusedGlobalOptions no longer works because of changes in% + \MessageBreak + the LaTeX2e kernel% + }% + {}% + } +\IfFormatAtLeastTF{2022/11/01} + {% + \protected\def\ekvoProcessFutureOptions#1% + {% + \ekvo@if@need@handlers\@gobbletwo + \@firstofone + {% + \expandafter\let + \csname ekvo@future@undefined@k@\@currname.\@currext\endcsname + \ekvo@handle@undefined@k + \expandafter\let + \csname ekvo@future@undefined@kv@\@currname.\@currext\endcsname + \ekvo@handle@undefined@kv + }% + \protected\expandafter + \xdef\csname opt@handler@\@currname.\@currext\endcsname + {\ekv@unexpanded{\ekvo@future{#1}}}% + } + \protected\def\ekvo@future + {% + \ekvo@process@common + {\ekv@ifdefined{@raw@opt@\@currname.\@currext}\@firstofone\@gobble}% + {% + \ekvo@set@handlers@future + \expandafter\ekvo@process@list + \csname @raw@opt@\@currname.\@currext\endcsname + \AtEndOfPackage{\let\@unprocessedoptions\relax}% + }% + } + \protected\def\ekvo@set@handlers@future + {% + \expandafter\let\expandafter + \ekvo@handle@undefined@k + \csname + \ekv@ifdefined{ekvo@future@undefined@k@\@currname.\@currext}% + {ekvo@future@undefined@k@\@currname.\@currext}% + {ekvo@handle@undefined@k@pkg}% + \endcsname + \expandafter\let\expandafter + \ekvo@handle@undefined@kv + \csname + \ekv@ifdefined{ekvo@future@undefined@kv@\@currname.\@currext}% + {ekvo@future@undefined@kv@\@currname.\@currext}% + {ekvo@handle@undefined@kv@pkg}% + \endcsname + } + } + {% + \protected\def\ekvoProcessFutureOptions#1% + {% + \PackageWarning{expkv-opt}% + {LaTeX-kernel is too old to process future options.\@gobbletwo}% + \protected\gdef\ekvoProcessFutureOptions##1{}% + }% + } +\protected\def\ekvoProcessOptionsList#1% + {% + \ekvo@process@common{\ekvo@ifx@F#1\@empty}% + {% + \ekvo@set@handlers@list + \ekvo@process@list#1% + }% + } +\protected\def\ekvoUseUnknownHandlers + {% + \let\ekvo@if@need@handlers\ekvo@dont@need@handlers + \@ifstar\ekvoUseUnknownHandlers@s\ekvoUseUnknownHandlers@n + } +\protected\def\ekvoUseUnknownHandlers@s + {% + \long\def\ekvo@handle@undefined@k##1% + {% + \ekv@ifdefined{\ekvo@name{}uN}% + {% + \csname\ekvo@name{}uN\expandafter\endcsname\expandafter + {\detokenize{##1}}{##1}% + }% + {\@gobble}% + }% + \long\def\ekvo@handle@undefined@kv##1##2% + {% + \ekv@ifdefined{\ekvo@name{}u}% + {% + \csname\ekvo@name{}u\ekv@expanded{\endcsname + {\ekv@unexpanded{##2}}{\detokenize{##1}}}{##1}% + }% + {}% + }% + } +\protected\def\ekvoUseUnknownHandlers@n#1#2% + {% + \let\ekvo@handle@undefined@k#1\relax + \let\ekvo@handle@undefined@kv#2\relax + } +\@onlypreamble\ekvoProcessOptions +\@onlypreamble\ekvoProcessLocalOptions +\@onlypreamble\ekvoProcessGlobalOptions +\@onlypreamble\ekvoProcessFutureOptions +\@onlypreamble\ekvoProcessOptionsList +\@onlypreamble\ekvoUseUnknownHandlers +%% +%% +%% End of file `expkv-opt.sty'. diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty new file mode 100644 index 00000000000..d72d49d2567 --- /dev/null +++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty @@ -0,0 +1,61 @@ +%% +%% This is file `expkv-pop.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv-pop.dtx (with options: `pkg') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\RequirePackage{expkv} +\def\ekvp@tmp + {% + \ProvidesFile{expkv-pop.tex}% + [\ekvpDate\space v\ekvpVersion\space a prefix oriented parser]% + } +\input{expkv-pop.tex} +\ProvidesPackage{expkv-pop}% + [\ekvpDate\space v\ekvpVersion\space a prefix oriented parser] +%% +%% +%% End of file `expkv-pop.sty'. diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv.sty new file mode 100644 index 00000000000..310beff3bc9 --- /dev/null +++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv.sty @@ -0,0 +1,68 @@ +%% +%% This is file `expkv.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% expkv.dtx (with options: `pkg') +%% +%% ---------------------------------------------------------------- +%% 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. +%% +\def\ekv@tmp + {% + \ProvidesFile{expkv.tex}% + [\ekvDate\space v\ekvVersion\space an expandable key=val implementation]% + } +\input{expkv.tex} +\ProvidesPackage{expkv}% + [\ekvDate\space v\ekvVersion\space an expandable key=val implementation] +\let\ekv@tmp\@empty +\DeclareOption{all} + {% + \def\ekv@tmp + {\RequirePackage{expkv-pop,expkv-cs,expkv-def,expkv-opt}}% + } +\ProcessOptions\relax +\ekv@tmp +%% +%% +%% End of file `expkv.sty'. |