diff options
author | Karl Berry <karl@freefriends.org> | 2022-02-13 21:24:41 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-02-13 21:24:41 +0000 |
commit | f995d7165ff0cd3b9450cd268ec8d81826e623d4 (patch) | |
tree | e1493e1e6575d466c099815f8caf717083d3e1f9 /Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex | |
parent | bb1788443ceb234c15451f189aa9e6390576a0d6 (diff) |
expkv-cs (13feb22)
git-svn-id: svn://tug.org/texlive/trunk@62003 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex | 82 |
1 files changed, 79 insertions, 3 deletions
diff --git a/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex b/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex index 931c0c25ba3..f3fdd928829 100644 --- a/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex +++ b/Master/texmf-dist/tex/generic/expkv-cs/expkv-cs.tex @@ -13,7 +13,7 @@ %% See http://www.latex-project.org/lppl.txt %% -------------------------------------------------------------- %% -%% Copyright (C) 2020-2021 Jonathan P. Spratte +%% Copyright (C) 2020-2022 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 @@ -36,8 +36,8 @@ \else \expandafter\endinput \fi -\def\ekvcVersion{1.1b} -\def\ekvcDate{2021-11-21} +\def\ekvcVersion{1.2} +\def\ekvcDate{2022-02-13} \csname ekvc@tmp\endcsname \expandafter\chardef\csname ekvc@tmp\endcsname=\catcode`\@ \catcode`\@=11 @@ -686,6 +686,80 @@ }% {\ekvc@err@unknown@key{#1}}% } +\def\ekvc@enum@name#1#2#3{ekvc#1(#2)#3} +\protected\long\def\ekvc@t@enum#1#2% + {\ekvc@assert@twoargs{#2}{enum #1}{\ekvc@type@enum{#1}#2}} +\protected\long\def\ekvc@type@enum#1#2% + {% + \ekvifdefined\ekvc@set{#2}% + {% + \ekvc@long\edef\ekvc@tmp##1% + {% + \ekv@unexpanded{\expandafter\ekvc@h@enum\detokenize}{##1}% + \ekv@unexpanded{\ekvc@stop}% + {\ekvc@set}{#1}% + }% + \ekvlet\ekvc@set{#1}\ekvc@tmp + \def\ekvc@tmp{0}% + \expandafter\ekvcsvloop\expandafter + {% + \expandafter\ekvc@type@enum@ + \csname\ekv@name\ekvc@set{#2}\endcsname + {#1}% + }% + }% + {% + \ekvc@err@unknown@key{#2}% + \@gobble + }% + } +\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@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 \protected\def\ekvc@t@aggregate#1% {% \ekvc@assert@not@long{aggregate #1}% @@ -1000,6 +1074,8 @@ \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 macro #1}} +\def\ekvc@err@unknown@enum#1#2#3% + {\ekvc@err{unknown value `#3' for enum `#2' in macro #1}} \catcode`\@=\ekvc@tmp %% %% |