texlive[64632] Master: kvsetkeys[.sty]

commits+karl at tug.org commits+karl at tug.org
Thu Oct 6 16:40:31 CEST 2022


Revision: 64632
          http://tug.org/svn/texlive?view=revision&revision=64632
Author:   karl
Date:     2022-10-06 16:40:30 +0200 (Thu, 06 Oct 2022)
Log Message:
-----------
kvsetkeys[.sty]

Modified Paths:
--------------
    trunk/Master/tlpkg/libexec/ctan2tds

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/kvsetkeys/kvsetkeys-example.tex
    trunk/Master/texmf-dist/tex/latex/kvsetkeys/
    trunk/Master/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty

Added: trunk/Master/texmf-dist/doc/latex/kvsetkeys/kvsetkeys-example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/kvsetkeys/kvsetkeys-example.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/kvsetkeys/kvsetkeys-example.tex	2022-10-06 14:40:30 UTC (rev 64632)
@@ -0,0 +1,92 @@
+%%
+%% This is file `kvsetkeys-example.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% kvsetkeys.dtx  (with options: `example')
+%% 
+%% This is a generated file.
+%% 
+%% Project: kvsetkeys
+%% Version: 2022-10-05 v1.19
+%% 
+%% Copyright (C)
+%%    2006, 2007, 2009-2012 Heiko Oberdiek
+%%    2016-2022 Oberdiek Package Support Group
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status "maintained".
+%% 
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/kvsetkeys/issues
+%% 
+%% The Base Interpreter refers to any `TeX-Format',
+%% because some files are installed in TDS:tex/generic//.
+%% 
+%% This work consists of the main source file kvsetkeys.dtx
+%% and the derived files
+%%    kvsetkeys.sty, kvsetkeys.pdf, kvsetkeys.ins, kvsetkeys.drv,
+%%    kvsetkeys-example.tex, kvsetkeys-test1.tex,
+%%    kvsetkeys-test2.tex, kvsetkeys-test3.tex,
+%%    kvsetkeys-test4.tex.
+%% 
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage{kvsetkeys}
+\usepackage{keyval}
+
+\makeatletter
+\newcommand*{\tag}[2][]{%
+  % #1: attributes
+  % #2: tag name
+  \begingroup
+    \toks@={}%
+    \let\@endslash\@empty
+    \kvsetkeys{tag}{#1}%
+    \texttt{%
+      \textless #2\the\toks@\@endslash\textgreater
+    }%
+  \endgroup
+}
+\kv at set@family at handler{tag}{%
+  % #1: key
+  % #2: value
+  \toks@\expandafter{%
+    \the\toks@
+    \space
+    #1=\string"#2\string"%
+  }%
+}
+\define at key{tag}{/}[]{%
+  \def\@endslash{/}%
+}
+\makeatother
+
+\begin{document}
+\begin{tabbing}
+  \mbox{}\qquad\=\qquad\=\kill
+  \tag{html}\\
+  \>\dots\\
+  \>\tag[border=1]{table}\\
+  \>\>\tag[width=200, span=3, /]{colgroup}\\
+  \>\>\dots\\
+  \>\tag{/table}\\
+  \>\dots\\
+  \tag{/html}\\
+\end{tabbing}
+\end{document}
+%% \section{Installation}
+\endinput
+%%
+%% End of file `kvsetkeys-example.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/kvsetkeys/kvsetkeys-example.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty	2022-10-06 14:40:30 UTC (rev 64632)
@@ -0,0 +1,572 @@
+%%
+%% This is file `kvsetkeys.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% kvsetkeys.dtx  (with options: `package')
+%% 
+%% This is a generated file.
+%% 
+%% Project: kvsetkeys
+%% Version: 2022-10-05 v1.19
+%% 
+%% Copyright (C)
+%%    2006, 2007, 2009-2012 Heiko Oberdiek
+%%    2016-2022 Oberdiek Package Support Group
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status "maintained".
+%% 
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/kvsetkeys/issues
+%% 
+%% The Base Interpreter refers to any `TeX-Format',
+%% because some files are installed in TDS:tex/generic//.
+%% 
+%% This work consists of the main source file kvsetkeys.dtx
+%% and the derived files
+%%    kvsetkeys.sty, kvsetkeys.pdf, kvsetkeys.ins, kvsetkeys.drv,
+%%    kvsetkeys-example.tex, kvsetkeys-test1.tex,
+%%    kvsetkeys-test2.tex, kvsetkeys-test3.tex,
+%%    kvsetkeys-test4.tex.
+%% 
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5 % ^^M
+  \endlinechar=13 %
+  \catcode35=6 % #
+  \catcode39=12 % '
+  \catcode44=12 % ,
+  \catcode45=12 % -
+  \catcode46=12 % .
+  \catcode58=12 % :
+  \catcode64=11 % @
+  \catcode123=1 % {
+  \catcode125=2 % }
+  \expandafter\let\expandafter\x\csname ver at kvsetkeys.sty\endcsname
+  \ifx\x\relax % plain-TeX, first loading
+  \else
+    \def\empty{}%
+    \ifx\x\empty % LaTeX, first loading,
+      % variable is initialized, but \ProvidesPackage not yet seen
+    \else
+      \expandafter\ifx\csname PackageInfo\endcsname\relax
+        \def\x#1#2{%
+          \immediate\write-1{Package #1 Info: #2.}%
+        }%
+      \else
+        \def\x#1#2{\PackageInfo{#1}{#2, stopped}}%
+      \fi
+      \x{kvsetkeys}{The package is already loaded}%
+      \aftergroup\endinput
+    \fi
+  \fi
+\endgroup%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5 % ^^M
+  \endlinechar=13 %
+  \catcode35=6 % #
+  \catcode39=12 % '
+  \catcode40=12 % (
+  \catcode41=12 % )
+  \catcode44=12 % ,
+  \catcode45=12 % -
+  \catcode46=12 % .
+  \catcode47=12 % /
+  \catcode58=12 % :
+  \catcode64=11 % @
+  \catcode91=12 % [
+  \catcode93=12 % ]
+  \catcode123=1 % {
+  \catcode125=2 % }
+  \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+    \def\x#1#2#3[#4]{\endgroup
+      \immediate\write-1{Package: #3 #4}%
+      \xdef#1{#4}%
+    }%
+  \else
+    \def\x#1#2[#3]{\endgroup
+      #2[{#3}]%
+      \ifx#1\@undefined
+        \xdef#1{#3}%
+      \fi
+      \ifx#1\relax
+        \xdef#1{#3}%
+      \fi
+    }%
+  \fi
+\expandafter\x\csname ver at kvsetkeys.sty\endcsname
+\ProvidesPackage{kvsetkeys}%
+  [2022-10-05 v1.19 Key value parser (HO)]%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5 % ^^M
+  \endlinechar=13 %
+  \catcode123=1 % {
+  \catcode125=2 % }
+  \catcode64=11 % @
+  \def\x{\endgroup
+    \expandafter\edef\csname KVS at AtEnd\endcsname{%
+      \endlinechar=\the\endlinechar\relax
+      \catcode13=\the\catcode13\relax
+      \catcode32=\the\catcode32\relax
+      \catcode35=\the\catcode35\relax
+      \catcode61=\the\catcode61\relax
+      \catcode64=\the\catcode64\relax
+      \catcode123=\the\catcode123\relax
+      \catcode125=\the\catcode125\relax
+    }%
+  }%
+\x\catcode61\catcode48\catcode32=10\relax%
+\catcode13=5 % ^^M
+\endlinechar=13 %
+\catcode35=6 % #
+\catcode64=11 % @
+\catcode123=1 % {
+\catcode125=2 % }
+\def\TMP at EnsureCode#1#2{%
+  \edef\KVS at AtEnd{%
+    \KVS at AtEnd
+    \catcode#1=\the\catcode#1\relax
+  }%
+  \catcode#1=#2\relax
+}
+\TMP at EnsureCode{36}{3}% $
+\TMP at EnsureCode{38}{4}% &
+\TMP at EnsureCode{39}{12}% '
+\TMP at EnsureCode{43}{12}% +
+\TMP at EnsureCode{44}{12}% ,
+\TMP at EnsureCode{45}{12}% -
+\TMP at EnsureCode{46}{12}% .
+\TMP at EnsureCode{47}{12}% /
+\TMP at EnsureCode{91}{12}% [
+\TMP at EnsureCode{93}{12}% ]
+\TMP at EnsureCode{94}{7}% ^ (superscript)
+\TMP at EnsureCode{96}{12}% `
+\TMP at EnsureCode{126}{13}% ~ (active)
+\edef\KVS at AtEnd{\KVS at AtEnd\noexpand\endinput}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax
+  \def\TMP at RequirePackage#1[#2]{%
+    \begingroup\expandafter\expandafter\expandafter\endgroup
+    \expandafter\ifx\csname ver@#1.sty\endcsname\relax
+      \input #1.sty\relax
+    \fi
+  }%
+  \TMP at RequirePackage{infwarerr}[2007/09/09]%
+  \let\PackageError\@PackageError
+\else
+\fi
+\expandafter\ifx\csname toks@\endcsname\relax
+  \toksdef\toks@=0 %
+\fi
+\ifx\numexpr\@undefined
+  \catcode`\$=9 % ignore
+  \catcode`\&=14 % comment
+\else % e-TeX
+  \catcode`\$=14 % comment
+  \catcode`\&=9  % ignore
+\fi
+\def\KVS at Empty{}
+\long\def\KVS at FirstOfTwo#1#2{#1}
+\long\def\KVS at SecondOfTwo#1#2{#2}
+\long\def\KVS at IfEmpty#1{%
+& \edef\KVS at Temp{\unexpanded{#1}}%
+$ \begingroup
+$   \toks@{#1}%
+$   \edef\KVS at Temp{\the\toks@}%
+$ \expandafter\endgroup
+  \ifx\KVS at Temp\KVS at Empty
+    \expandafter\KVS at FirstOfTwo
+  \else
+    \expandafter\KVS at SecondOfTwo
+  \fi
+}
+\long\def\kv at normalize#1{%
+  \begingroup
+    \toks@{,#1,}%
+    \KVS at Comma
+    \KVS at SpaceComma
+    \KVS at CommaSpace
+    \KVS at CommaComma
+    \KVS at Equals
+    \KVS at SpaceEquals
+    \KVS at EqualsSpace
+    \xdef\KVS at Global{\the\toks@}%
+  \endgroup
+  \let\kv at list\KVS at Global
+}
+\def\comma at normalize#1{%
+  \begingroup
+    \toks@{,#1,}%
+    \KVS at Comma
+    \KVS at SpaceComma
+    \KVS at CommaSpace
+    \KVS at CommaComma
+    \xdef\KVS at Global{\the\toks@}%
+  \endgroup
+  \let\comma at list\KVS at Global
+}
+\begingroup
+  \lccode`\,=`\,%
+  \lccode`\~=`\,%
+\lowercase{\endgroup
+  \def\KVS at Comma{%
+    \toks@\expandafter{\expandafter}\expandafter
+    \KVS@@Comma\the\toks@~\KVS at Nil
+  }%
+  \long\def\KVS@@Comma#1~#2\KVS at Nil{%
+    \toks@\expandafter{\the\toks@#1}%
+    \KVS at IfEmpty{#2}{%
+    }{%
+      \KVS@@Comma,#2\KVS at Nil
+    }%
+  }%
+}
+\def\KVS at SpaceComma#1{%
+  \def\KVS at SpaceComma{%
+    \expandafter\KVS@@SpaceComma\the\toks@#1,\KVS at Nil
+  }%
+}
+\KVS at SpaceComma{ }
+\long\def\KVS@@SpaceComma#1 ,#2\KVS at Nil{%
+  \KVS at IfEmpty{#2}{%
+    \toks@{#1}%
+  }{%
+    \KVS@@SpaceComma#1,#2\KVS at Nil
+  }%
+}
+\def\KVS at CommaSpace{%
+  \expandafter\KVS@@CommaSpace\the\toks@, \KVS at Nil
+}
+\long\def\KVS@@CommaSpace#1, #2\KVS at Nil{%
+  \KVS at IfEmpty{#2}{%
+    \toks@{#1}%
+  }{%
+    \KVS@@CommaSpace#1,#2\KVS at Nil
+  }%
+}
+\def\KVS at CommaComma{%
+  \expandafter\KVS@@CommaComma\the\toks@,\KVS at Nil
+}
+\long\def\KVS@@CommaComma#1,,#2\KVS at Nil{%
+  \KVS at IfEmpty{#2}{%
+    \toks@{#1,}% (!)
+  }{%
+    \KVS@@CommaComma#1,#2\KVS at Nil
+  }%
+}
+\begingroup
+  \lccode`\==`\=%
+  \lccode`\~=`\=%
+\lowercase{\endgroup
+  \def\KVS at Equals{%
+    \toks@\expandafter{\expandafter}\expandafter
+    \KVS@@Equals\the\toks@~\KVS at Nil
+  }%
+  \long\def\KVS@@Equals#1~#2\KVS at Nil{%
+    \edef\KVS at Temp{\the\toks@}%
+    \ifx\KVS at Temp\KVS at Empty
+      \expandafter\KVS at FirstOfTwo
+    \else
+      \expandafter\KVS at SecondOfTwo
+    \fi
+    {%
+      \toks@{#1}%
+    }{%
+      \toks@\expandafter{\the\toks@=#1}%
+    }%
+    \KVS at IfEmpty{#2}{%
+    }{%
+      \KVS@@Equals#2\KVS at Nil
+    }%
+  }%
+}
+\def\KVS at SpaceEquals#1{%
+  \def\KVS at SpaceEquals{%
+    \expandafter\KVS@@SpaceEquals\the\toks@#1=\KVS at Nil
+  }%
+}
+\KVS at SpaceEquals{ }
+\long\def\KVS@@SpaceEquals#1 =#2\KVS at Nil{%
+  \KVS at IfEmpty{#2}{%
+    \toks@{#1}%
+  }{%
+    \KVS@@SpaceEquals#1=#2\KVS at Nil
+  }%
+}
+\def\KVS at EqualsSpace{%
+  \expandafter\KVS@@EqualsSpace\the\toks@= \KVS at Nil
+}
+\long\def\KVS@@EqualsSpace#1= #2\KVS at Nil{%
+  \KVS at IfEmpty{#2}{%
+    \toks@{#1}%
+  }{%
+    \KVS@@EqualsSpace#1=#2\KVS at Nil
+  }%
+}
+\long\def\kv at parse#1{%
+  \kv at normalize{#1}%
+  \expandafter\kv at parse@normalized\expandafter{\kv at list}%
+}
+\long\def\kv at parse@normalized#1#2{%
+  \KVS at Parse#1,\KVS at Nil{#2}%
+}
+\long\def\KVS at Parse#1,#2\KVS at Nil#3{%
+  \KVS at IfEmpty{#1}{%
+  }{%
+    \KVS at Process#1=\KVS at Nil{#3}%
+  }%
+  \KVS at MaybeBreak
+  \KVS at IfEmpty{#2}{%
+  }{%
+    \KVS at Parse#2\KVS at Nil{#3}%
+  }%
+}
+\long\def\KVS at Process#1=#2\KVS at Nil#3{%
+  \let\KVS at MaybeBreak\relax
+  \def\kv at key{#1}%
+  \KVS at IfEmpty{#2}{%
+    \let\kv at value\relax
+    #3{#1}{}%
+  }{%
+    \KVS@@Process{#1}#2\KVS at Nil{#3}%
+  }%
+}
+\long\def\KVS@@Process#1#2=\KVS at Nil#3{%
+& \edef\kv at value{\unexpanded{#2}}%
+$ \begingroup
+$   \toks@{#2}%
+$   \xdef\KVS at Global{\the\toks@}%
+$ \endgroup
+$ \let\kv at value\KVS at Global
+  #3{#1}{#2}%
+}
+\let\KVS at MaybeBreak\relax
+\def\KVS at break#1#2#3#4{%
+  \let\KVS at MaybeBreak\relax
+}
+\def\kv at break{%
+  \let\KVS at MaybeBreak\KVS at break
+}
+\def\comma at parse#1{%
+  \comma at normalize{#1}%
+  \expandafter\comma at parse@normalized\expandafter{\comma at list}%
+}
+\def\comma at parse@normalized#1#2{%
+  \KVS at CommaParse#1,\KVS at Nil{#2}%
+}
+\def\KVS at CommaParse#1,#2\KVS at Nil#3{%
+  \KVS at IfEmpty{#1}{%
+  }{%
+    \def\comma at entry{#1}%
+    #3{#1}%
+  }%
+  \KVS at MaybeBreak
+  \KVS at IfEmpty{#2}{%
+  }{%
+    \KVS at CommaParse#2\KVS at Nil{#3}%
+  }%
+}
+\def\comma at break{%
+  \let\KVS at MaybeBreak\KVS at break
+}
+\def\kv at handled@false{%
+  \let\ifkv at handled@\iffalse
+}
+\def\kv at handled@true{%
+  \let\ifkv at handled@\iftrue
+}
+\kv at handled@true
+\def\kv at processor@default#1#2{%
+  \begingroup
+    \csname @safe at activestrue\endcsname
+    \let\ifincsname\iftrue
+    \edef\KVS at temp{\endgroup
+      \noexpand\KVS at ProcessorDefault{#1}{#2}%
+    }%
+  \KVS at temp
+}
+\long\def\KVS at ProcessorDefault#1#2#3{%
+  \def\kv at fam{#1}%
+& \unless\ifcsname KV@#1@#2\endcsname
+$ \begingroup\expandafter\expandafter\expandafter\endgroup
+$ \expandafter\ifx\csname KV@#1@#2\endcsname\relax
+&   \unless\ifcsname KVS@#1 at handler\endcsname
+$   \begingroup\expandafter\expandafter\expandafter\endgroup
+$   \expandafter\ifx\csname KVS@#1 at handler\endcsname\relax
+      \kv at error@unknownkey{#1}{#2}%
+    \else
+      \kv at handled@true
+      \csname KVS@#1 at handler\endcsname{#2}{#3}%
+      \relax
+      \ifkv at handled@
+      \else
+        \kv at error@unknownkey{#1}{#2}%
+      \fi
+    \fi
+  \else
+    \ifx\kv at value\relax
+&     \unless\ifcsname KV@#1@#2 at default\endcsname
+$     \begingroup\expandafter\expandafter\expandafter\endgroup
+$     \expandafter\ifx\csname KV@#1@#2 at default\endcsname\relax
+        \kv at error@novalue{#1}{#2}%
+      \else
+        \csname KV@#1@#2 at default\endcsname
+        \relax
+      \fi
+    \else
+      \csname KV@#1@#2\endcsname{#3}%
+    \fi
+  \fi
+}
+\def\kv at processor@known#1#2#3{%
+  \begingroup
+    \csname @safe at activestrue\endcsname
+    \let\ifincsname\iftrue
+    \edef\KVS at temp{\endgroup
+      \noexpand\KVS at ProcessorKnown{#1}\noexpand#2{#3}%
+    }%
+  \KVS at temp
+}
+\long\def\KVS at ProcessorKnown#1#2#3#4{%
+  \def\kv at fam{#1}%
+& \unless\ifcsname KV@#1@#3\endcsname
+$ \begingroup\expandafter\expandafter\expandafter\endgroup
+$ \expandafter\ifx\csname KV@#1@#3\endcsname\relax
+&   \unless\ifcsname KVS@#1 at handler\endcsname
+$   \begingroup\expandafter\expandafter\expandafter\endgroup
+$   \expandafter\ifx\csname KVS@#1 at handler\endcsname\relax
+      \KVS at AddUnhandled#2{#3}{#4}%
+    \else
+      \kv at handled@true
+      \csname KVS@#1 at handler\endcsname{#3}{#4}%
+      \relax
+      \ifkv at handled@
+      \else
+        \KVS at AddUnhandled#2{#3}{#4}%
+      \fi
+    \fi
+  \else
+    \ifx\kv at value\relax
+&     \unless\ifcsname KV@#1@#2 at default\endcsname
+$     \begingroup\expandafter\expandafter\expandafter\endgroup
+$     \expandafter\ifx\csname KV@#1@#3 at default\endcsname\relax
+        \kv at error@novalue{#1}{#3}%
+      \else
+        \csname KV@#1@#3 at default\endcsname
+        \relax
+      \fi
+    \else
+      \csname KV@#1@#3\endcsname{#4}%
+    \fi
+  \fi
+}
+\long\def\KVS at AddUnhandled#1#2#3{%
+& \edef#1{%
+&   \ifx#1\KVS at empty
+&   \else
+&     \unexpanded\expandafter{#1},%
+&   \fi
+&   \unexpanded{{#2}={#3}}%
+& }%
+$ \begingroup
+$   \ifx#1\KVS at empty
+$     \toks@{{#2}={#3}}%
+$   \else
+$     \toks@\expandafter{#1,{#2}={#3}}%
+$   \fi
+$   \xdef\KVS at Global{\the\toks@}%
+$ \endgroup
+$ \let#1\KVS at Global
+}
+\long\def\kv at set@family at handler#1#2{%
+  \begingroup
+    \csname @safe at activestrue\endcsname
+    \let\ifincsname\iftrue
+  \expandafter\endgroup
+  \expandafter\def\csname KVS@#1 at handler\endcsname##1##2{#2}%
+}
+\long\def\kv at unset@family at handler#1#2{%
+  \begingroup
+    \csname @safe at activestrue\endcsname
+    \let\ifincsname\iftrue
+  \expandafter\endgroup
+  \expandafter\let\csname KVS@#1 at handler\endcsname\@UnDeFiNeD
+}
+\def\kv at error@novalue{%
+  \kv at error@generic{No value specified for}%
+}
+\def\kv at error@unknownkey{%
+  \kv at error@generic{Undefined}%
+}
+\def\kv at error@generic#1#2#3{%
+  \PackageError{kvsetkeys}{%
+    #1 key `#3'%
+  }{%
+    The keyval family of the key `#3' is `#2'.\MessageBreak
+    The setting of the key is ignored because of the error.\MessageBreak
+    \MessageBreak
+    \@ehc
+  }%
+}
+\long\def\kvsetkeys#1#2{%
+  \kv at parse{#2}{\kv at processor@default{#1}}%
+}
+\def\kvsetkeys at expandafter#1#2{%
+  \expandafter\kv at parse\expandafter{#2}{%
+    \kv at processor@default{#1}%
+  }%
+}
+\def\KVS at cmd{0}%
+\def\KVS at cmd@inc{%
+& \edef\KVS at cmd{\the\numexpr\KVS at cmd+1}%
+$ \begingroup
+$   \count255=\KVS at cmd\relax
+$   \advance\count255 by 1\relax
+$ \edef\x{\endgroup
+$   \noexpand\def\noexpand\KVS at cmd{\number\count255}%
+$ }%
+$ \x
+}
+\def\KVS at cmd@dec{%
+& \edef\KVS at cmd{\the\numexpr\KVS at cmd-1}%
+$ \begingroup
+$   \count255=\KVS at cmd\relax
+$   \advance\count255 by -1\relax
+$ \edef\x{\endgroup
+$   \noexpand\def\noexpand\KVS at cmd{\number\count255}%
+$ }%
+$ \x
+}
+\def\KVS at empty{}
+\def\kvsetknownkeys{%
+  \expandafter
+  \KVS at setknownkeys\csname KVS at cmd\KVS at cmd\endcsname{}%
+}
+\long\def\KVS at setknownkeys#1#2#3#4#5{%
+  \let#1\KVS at empty
+  \KVS at cmd@inc
+  #2\kv at parse#2{#5}{\kv at processor@known{#3}#1}%
+  \KVS at cmd@dec
+  \let#4=#1%
+}
+\def\kvsetknownkeys at expandafter{%
+  \expandafter
+  \KVS at setknownkeys
+      \csname KVS at cmd\KVS at cmd\endcsname\expandafter
+}
+\KVS at AtEnd%
+%% \section{Installation}
+\endinput
+%%
+%% End of file `kvsetkeys.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2022-10-05 23:49:36 UTC (rev 64631)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2022-10-06 14:40:30 UTC (rev 64632)
@@ -3126,6 +3126,7 @@
  'kdgdocs'      => 'latex',  # requires interaction
  'komacv'	=> 'latex',  # requires interaction
  'kvoptions'	=> 'etex',
+ 'kvsetkeys'	=> 'etex',
  'labelcas'     => 'latex',  # requires interaction
  'lastpage'     => 'tex',
  'latex-veryshortguide' => 'latex',  # requires interaction



More information about the tex-live-commits mailing list.