texlive[63622] Master: kvoptions with .sty restored

commits+karl at tug.org commits+karl at tug.org
Fri Jun 17 17:10:51 CEST 2022


Revision: 63622
          http://tug.org/svn/texlive?view=revision&revision=63622
Author:   karl
Date:     2022-06-17 17:10:51 +0200 (Fri, 17 Jun 2022)
Log Message:
-----------
kvoptions with .sty restored

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/kvoptions/example-mycolorsetup.sty
    trunk/Master/texmf-dist/tex/latex/kvoptions/
    trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty
    trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty

Added: trunk/Master/texmf-dist/doc/latex/kvoptions/example-mycolorsetup.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/kvoptions/example-mycolorsetup.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/kvoptions/example-mycolorsetup.sty	2022-06-17 15:10:51 UTC (rev 63622)
@@ -0,0 +1,143 @@
+%%
+%% This is file `example-mycolorsetup.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% kvoptions.dtx  (with options: `example')
+%% 
+%% This is a generated file.
+%% 
+%% Project: kvoptions
+%% Version: 2022-06-15 v3.15
+%% 
+%% Copyright (C)
+%%    2004, 2006, 2007, 2009-2011 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/kvoptions/issues
+%% 
+%% This work consists of the main source file kvoptions.dtx
+%% and the derived files
+%%    kvoptions.sty, kvoptions.pdf, kvoptions.ins, kvoptions.drv,
+%%    kvoptions-patch.sty, example-mycolorsetup.sty,
+%%    kvoptions-test1.tex, kvoptions-test2.tex,
+%%    kvoptions-test3.tex, kvoptions-test4.tex,
+%%    kvoptions-test4.sty.
+%% 
+%% No we don't need the option 'color'.
+%% With color support option 'emphcolor' will dynamically
+%% change the color of \emph statements.
+    % Package identification
+    % -----------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{example-mycolorsetup}[2019/11/29 Managing my colors]
+
+\RequirePackage{iftex}
+\RequirePackage{kvoptions}
+
+    % Option declarations
+    % -------------------
+
+\SetupKeyvalOptions{
+  family=MCS,
+  prefix=MCS@
+}
+    % Use a shorter family name and prefix
+
+    % Option print
+\DeclareBoolOption{print}
+    % is the same as
+    % \DeclareBoolOption[false]{print}
+
+    % Option driver
+\ifpdf
+  \DeclareStringOption[pdftex]{driver}
+\else
+  \DeclareStringOption[dvips]{driver}
+\fi
+
+    % Alternative interface for driver options
+\DeclareVoidOption{dvips}{\SetupDriver}
+\DeclareVoidOption{dvipdfm}{\SetupDriver}
+\DeclareVoidOption{pdftex}{\SetupDriver}
+    % In \SetupDriver we take the current option \CurrentOption
+    % and pass it to the driver option.
+    % The \expandafter commands expand \CurrentOption at the
+    % time, when \SetupDriver is executed and \CurrentOption
+    % has the correct meaning.
+\newcommand*{\SetupDriver}{%
+  \expandafter\@SetupDriver\expandafter{\CurrentOption}%
+}
+\newcommand*{\@SetupDriver}[1]{%
+  \setkeys{MCS}{driver={#1}}%
+}
+
+    % Option emph
+    % An empty value means, we want to have no color for \emph.
+    % If the user specifies option emph without value, the red is used.
+\DeclareStringOption{emph}[red]
+    % is the same as
+    % \DeclareStringOption[]{emph}[red]
+
+    % Default option rule
+\DeclareDefaultOption{%
+  \ifx\CurrentOptionValue\relax
+    \PackageWarningNoLine{\@currname}{%
+      Unknown option `\CurrentOption'\MessageBreak
+      is passed to package `color'%
+    }%
+    % Pass the option to package color.
+    % Again it is better to expand \CurrentOption.
+    \expandafter\PassOptionsToPackage
+    \expandafter{\CurrentOption}{color}%
+  \else
+    % Package color does not take options with values.
+    % We provide the standard LaTeX error.
+    \@unknownoptionerror
+  \fi
+}
+
+    % Process options
+    % ---------------
+\ProcessKeyvalOptions*
+
+    % Implementation depending on option values
+    % -----------------------------------------
+    % Code for print mode
+\ifMCS at print
+  \PassOptionsToPackage{monochrome}{color}
+    % tells package color to use black and white
+\fi
+
+\RequirePackage[\MCS at driver]{color}
+    % load package color with the correct driver
+
+    % \emph setup
+\ifx\MCS at emph\@empty
+    % \@empty is a predefined macro with empty contents.
+    % the option value of option emph is empty, thus
+    % we do not want a redefinition of \emph.
+\else
+  \renewcommand*{\emph}[1]{%
+    \textcolor{\MCS at emph}{#1}%
+  }
+\fi
+
+\endinput
+%%
+%% End of file `example-mycolorsetup.sty'.


Property changes on: trunk/Master/texmf-dist/doc/latex/kvoptions/example-mycolorsetup.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty	2022-06-17 15:10:51 UTC (rev 63622)
@@ -0,0 +1,549 @@
+%%
+%% This is file `kvoptions-patch.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% kvoptions.dtx  (with options: `patch')
+%% 
+%% This is a generated file.
+%% 
+%% Project: kvoptions
+%% Version: 2022-06-15 v3.15
+%% 
+%% Copyright (C)
+%%    2004, 2006, 2007, 2009-2011 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/kvoptions/issues
+%% 
+%% This work consists of the main source file kvoptions.dtx
+%% and the derived files
+%%    kvoptions.sty, kvoptions.pdf, kvoptions.ins, kvoptions.drv,
+%%    kvoptions-patch.sty, example-mycolorsetup.sty,
+%%    kvoptions-test1.tex, kvoptions-test2.tex,
+%%    kvoptions-test3.tex, kvoptions-test4.tex,
+%%    kvoptions-test4.sty.
+%% 
+%% No we don't need the option 'color'.
+%% With color support option 'emphcolor' will dynamically
+%% change the color of \emph statements.
+\providecommand\IfFormatAtLeastTF{\@ifl at t@r\fmtversion}
+\IfFormatAtLeastTF{2020/10/01}{\PackageWarning{kvoptions-patch}%
+ {kvoptions-patch is not compatible with \MessageBreak
+  LaTeX \fmtversion\MessageBreak Loading is aborted}{}}{}
+\IfFormatAtLeastTF{2020/10/01}{\endinput}{}
+
+\def\KVO at IfDefThen#1#2{%
+  \ifx#1\ltx at undefined
+  \else
+    \ifx#1\relax
+    \else
+      #2%
+    \fi
+  \fi
+}%
+\def\KVO at GetClassOptionsList{%
+  \let\KVO at classoptionslist\@classoptionslist
+  \KVO at IfDefThen\@classoptionslist{%
+    \KVO at IfDefThen\XKV at documentclass{%
+      \ifx\XKV at documentclass\ltx at empty
+      \else
+        \KVO at IfDefThen\XKV at classoptionslist{%
+          \ifx\XKV at classoptionslist\ltx at empty
+          \else
+            \let\KVO at classoptionslist\XKV at classoptionslist
+          \fi
+        }%
+      \fi
+    }%
+  }%
+}%
+\NeedsTeXFormat{LaTeX2e}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5 % ^^M
+  \endlinechar=13 %
+  \catcode123=1 % {
+  \catcode125=2 % }
+  \catcode64=11 % @
+  \def\x{\endgroup
+    \expandafter\edef\csname KVO 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\KVO at AtEnd{%
+    \KVO at AtEnd
+    \catcode#1=\the\catcode#1\relax
+  }%
+  \catcode#1=#2\relax
+}
+\TMP at EnsureCode{39}{12}% '
+\TMP at EnsureCode{40}{12}% (
+\TMP at EnsureCode{41}{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{58}{12}% :
+\TMP at EnsureCode{60}{12}% <
+\TMP at EnsureCode{62}{12}% >
+\TMP at EnsureCode{91}{12}% [
+\TMP at EnsureCode{93}{12}% ]
+\TMP at EnsureCode{96}{12}% `
+\TMP at EnsureCode{124}{12}% |
+\edef\KVO at AtEnd{\KVO at AtEnd\noexpand\endinput}
+\ProvidesPackage{kvoptions-patch}%
+  [2022-06-15 v3.15 LaTeX patch for keyval options (HO)]%
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname eTeXversion\endcsname\relax
+  \PackageWarningNoLine{kvoptions-patch}{%
+    Package loading is aborted, because e-TeX is missing%
+  }%
+  \expandafter\KVO at AtEnd
+\fi%
+\RequirePackage{etexcmds}[2007/09/09]
+\ifetex at unexpanded
+\else
+  \PackageError{kvoptions-patch}{%
+    Could not find eTeX's \string\unexpanded.\MessageBreak
+    Try adding \string\RequirePackage\string{etexcmds\string} %
+    before \string\documentclass%
+  }\@ehd
+  \expandafter\KVO at AtEnd
+\fi%
+\@ifpackageloaded{xkvltxp}{%
+  \PackageWarningNoLine{kvoptions}{%
+    Option `patch' cannot be used together with\MessageBreak
+    package `xkvltxp' that is already loaded.\MessageBreak
+    Therefore package loading is aborted%
+  }%
+  \KVO at AtEnd
+}{}%
+\def\@if at ptions#1#2#3{%
+  \begingroup
+    \KVO at normalize\KVO at temp{#3}%
+    \edef\x{\endgroup
+      \noexpand\@if at pti@ns{%
+        \detokenize\expandafter\expandafter\expandafter{%
+          \csname opt@#2.#1\endcsname
+        }%
+      }{%
+        \detokenize\expandafter{\KVO at temp}%
+      }%
+    }%
+  \x
+}
+\def\@pass at ptions#1#2#3{%
+  \KVO at normalize\KVO at temp{#2}%
+  \@ifundefined{opt@#3.#1}{%
+    \expandafter\gdef\csname opt@#3.#1%
+          \expandafter\endcsname\expandafter{%
+      \KVO at temp
+    }%
+  }{%
+    \expandafter\gdef\csname opt@#3.#1%
+          \expandafter\expandafter\expandafter\endcsname
+          \expandafter\expandafter\expandafter{%
+      \csname opt@#3.#1\expandafter\endcsname\expandafter,\KVO at temp
+    }%
+  }%
+}
+\def\ProcessOptions{%
+  \let\ds@\@empty
+  \@ifundefined{opt@\@currname.\@currext}{%
+    \let\@curroptions\@empty
+  }{%
+    \expandafter\expandafter\expandafter\def
+    \expandafter\expandafter\expandafter\@curroptions
+    \expandafter\expandafter\expandafter{%
+      \csname opt@\@currname.\@currext\endcsname
+    }%
+  }%
+  \@ifstar\KVO at xprocess@ptions\KVO at process@ptions
+}
+\def\KVO at process@ptions{%
+  \@for\CurrentOption:=\@declaredoptions\do{%
+    \ifx\CurrentOption\@empty
+    \else
+      \begingroup
+        \ifx\@currext\@clsextension
+          \toks@{}%
+        \else
+          \KVO at GetClassOptionsList
+          \toks@\expandafter{\KVO at classoptionslist,}%
+        \fi
+        \toks\tw@\expandafter{\@curroptions}%
+        \edef\x{\endgroup
+          \noexpand\in@{,\CurrentOption,}{,\the\toks@\the\toks\tw@,}%
+        }%
+      \x
+      \ifin@
+        \KVO at use@ption
+        \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+      \fi
+    \fi
+  }%
+  \KVO at process@pti at ns
+}
+\def\KVO at xprocess@ptions{%
+  \ifx\@currext\@clsextension
+  \else
+    \KVO at GetClassOptionsList
+    \@for\CurrentOption:=\KVO at classoptionslist\do{%
+      \ifx\CurrentOption\@empty
+      \else
+        \KVO at in@\CurrentOption\@declaredoptions
+        \ifin@
+          \KVO at use@ption
+          \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+        \fi
+      \fi
+    }%
+  \fi
+  \KVO at process@pti at ns
+}
+\def\KVO at in@#1#2{%
+  \in at false
+  \begingroup
+    \@for\x:=#2\do{%
+      \ifx\x#1\relax
+        \in at true
+      \fi
+    }%
+    \edef\x{\endgroup
+      \ifin@
+        \noexpand\in at true
+      \fi
+    }%
+  \x
+}
+\def\KVO at process@pti at ns{%
+  \@for\CurrentOption:=\@curroptions\do{%
+    \@ifundefined{ds@\KVO at SanitizedCurrentOption}{%
+      \KVO at use@ption
+      \default at ds
+    }%
+    \KVO at use@ption
+  }%
+  \@for\CurrentOption:=\@declaredoptions\do{%
+    \expandafter\let\csname ds@\CurrentOption\endcsname\relax
+  }%
+  \let\CurrentOption\@empty
+  \let\@fileswith at pti@ns\@@fileswith at pti@ns
+  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+}
+\def\KVO at use@ption{%
+  \begingroup
+    \edef\x{\endgroup
+      \noexpand\@removeelement{%
+        \detokenize\expandafter{\CurrentOption}%
+      }{%
+        \detokenize\expandafter{\@unusedoptionlist}%
+      }%
+    }%
+  \x\@unusedoptionlist
+  \csname ds@\KVO at SanitizedCurrentOption\endcsname
+}
+\def\OptionNotUsed{%
+  \ifx\@currext\@clsextension
+    \xdef\@unusedoptionlist{%
+      \ifx\@unusedoptionlist\@empty
+      \else
+        \detokenize\expandafter{\@unusedoptionlist,}%
+      \fi
+      \detokenize\expandafter{\CurrentOption}%
+    }%
+  \fi
+}
+\def\CurrentOption at SaveLevel{0}
+\def\ExecuteOptions{%
+  \expandafter\KVO at ExecuteOptions
+      \csname CurrentOption@\CurrentOption at SaveLevel\endcsname
+}
+\def\KVO at ExecuteOptions#1#2{%
+  \let#1\CurrentOption
+  \edef\CurrentOption at SaveLevel{%
+    \the\numexpr\CurrentOption at SaveLevel+1%
+  }%
+  \@for\CurrentOption:=#2\do{%
+    \csname ds@\CurrentOption\endcsname
+  }%
+  \edef\CurrentOption at SaveLevel{%
+    \the\numexpr\CurrentOption at SaveLevel-1%
+  }%
+  \let\CurrentOption#1%
+}
+\def\KVO at fileswith@pti at ns#1[#2]#3[#4]{%
+  \ifx#1\@clsextension
+    \ifx\@classoptionslist\relax
+      \KVO at normalize\KVO at temp{#2}%
+      \expandafter\gdef\expandafter\@classoptionslist\expandafter{%
+        \KVO at temp
+      }%
+      \def\reserved at a{%
+        \KVO at onefilewithoptions{#3}[{#2}][{#4}]#1%
+        \@documentclasshook
+      }%
+    \else
+      \def\reserved at a{%
+        \KVO at onefilewithoptions{#3}[{#2}][{#4}]#1%
+      }%
+    \fi
+  \else
+    \begingroup
+      \let\KVO at temp\relax
+      \let\KVO at onefilewithoptions\relax
+      \let\@pkgextension\relax
+      \def\reserved at b##1,{%
+        \ifx\@nil##1\relax
+        \else
+          \ifx\relax##1\relax
+          \else
+            \KVO at onefilewithoptions{##1}[{\KVO at temp}][{#4}]%
+            \@pkgextension
+          \fi
+          \expandafter\reserved at b
+        \fi
+      }%
+      \edef\reserved at a{\zap at space#3 \@empty}%
+      \edef\reserved at a{\expandafter\reserved at b\reserved at a,\@nil,}%
+      \toks@{#2}%
+      \def\KVO at temp{\the\toks@}%
+    \edef\reserved at a{\endgroup \reserved at a}%
+  \fi
+  \reserved at a
+}
+\def\KVO at onefilewithoptions#1[#2][#3]#4{%
+  \@pushfilename
+  \xdef\@currname{#1}%
+  \global\let\@currext#4%
+  \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
+  \let\CurrentOption\@empty
+  \@reset at ptions
+  \makeatletter
+  \def\reserved at a{%
+    \@ifl at aded\@currext{#1}{%
+      \@if at ptions\@currext{#1}{#2}{%
+      }{%
+        \begingroup
+          \@ifundefined{opt@#1.\@currext}{%
+            \def\x{}%
+          }{%
+            \edef\x{%
+              \expandafter\expandafter\expandafter\strip at prefix
+              \expandafter\meaning\csname opt@#1.\@currext\endcsname
+            }%
+          }%
+          \def\y{#2}%
+          \edef\y{\expandafter\strip at prefix\meaning\y}%
+          \@latex at error{Option clash for \@cls at pkg\space #1}{%
+            The package #1 has already been loaded %
+            with options:\MessageBreak
+            \space\space[\x]\MessageBreak
+            There has now been an attempt to load it %
+             with options\MessageBreak
+            \space\space[\y]\MessageBreak
+            Adding the global options:\MessageBreak
+            \space\space
+                 \x,\y\MessageBreak
+            to your \noexpand\documentclass declaration may fix this.%
+            \MessageBreak
+            Try typing \space <return> \space to proceed.%
+          }%
+        \endgroup
+      }%
+    }{%
+      \@pass at ptions\@currext{#2}{#1}%
+      \global\expandafter
+      \let\csname ver@\@currname.\@currext\endcsname\@empty
+      \InputIfFileExists
+        {\@currname.\@currext}%
+        {}%
+        {\@missingfileerror\@currname\@currext}%
+      \let\@unprocessedoptions\@@unprocessedoptions
+      \csname\@currname.\@currext-h@@k\endcsname
+      \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
+              \@undefined
+      \@unprocessedoptions
+    }%
+    \@ifl at ter\@currext{#1}{#3}{%
+    }{%
+      \@latex at warning@no at line{%
+        You have requested,\on at line, %
+        version\MessageBreak
+          #3' of \@cls at pkg\space #1,\MessageBreak
+        but only version\MessageBreak
+         `\csname ver@#1.\@currext\endcsname'\MessageBreak
+        is available%
+      }%
+    }%
+    \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
+    \@popfilename
+    \@reset at ptions
+  }%
+  \reserved at a
+}
+\def\@unknownoptionerror{%
+  \@latex at error{%
+    Unknown option `\KVO at SanitizedCurrentOption' %
+    for \@cls at pkg\space`\@currname'%
+  }{%
+    The option `\KVO at SanitizedCurrentOption' was not declared in %
+    \@cls at pkg\space`\@currname', perhaps you\MessageBreak
+    misspelled its name. %
+    Try typing \space <return> %
+    \space to proceed.%
+  }%
+}
+\def\@@unprocessedoptions{%
+  \ifx\@currext\@pkgextension
+    \@ifundefined{opt@\@currname.\@currext}{%
+      \let\@curroptions\@empty
+    }{%
+      \expandafter\let\expandafter\@curroptions
+          \csname opt@\@currname.\@currext\endcsname
+    }%
+    \@for\CurrentOption:=\@curroptions\do{%
+        \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi
+    }%
+  \fi
+}
+\def\KVO at SanitizedCurrentOption{%
+  \expandafter\strip at prefix\meaning\CurrentOption
+}
+\def\KVO at normalize#1#2{%
+  \let\KVO at result\@empty
+  \KVO at splitcomma#2,\@nil
+  \let#1\KVO at result
+}
+\def\KVO at splitcomma#1,#2\@nil{%
+  \KVO at ifempty{#1}{}{%
+    \KVO at checkkv#1=\@nil
+  }%
+  \KVO at ifempty{#2}{}{\KVO at splitcomma#2\@nil}%
+}
+\def\KVO at ifempty#1{%
+  \expandafter\ifx\expandafter\\\detokenize{#1}\\%
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+}
+\def\KVO at checkkv#1=#2\@nil{%
+  \KVO at ifempty{#2}{%
+    % option without value
+    \edef\KVO at x{\zap at space#1 \@empty}%
+    \ifx\KVO at x\@empty
+      % ignore empty option
+    \else
+      % append to list
+      \edef\KVO at result{%
+        \etex at unexpanded\expandafter{\KVO at result},\KVO at x
+      }%
+    \fi
+  }{%
+    % #1: "key", #2: "value="
+    % add key part
+    \edef\KVO at result{%
+      \etex at unexpanded\expandafter{\KVO at result},%
+      \zap at space#1 \@empty
+    }%
+    \futurelet\@let at token\KVO at checkfirsttok#2 \@nil| = \@nil|\KVO at nil
+  }%
+}
+\def\KVO at checkfirsttok{%
+  \ifx\@let at token\bgroup
+    % no space at start
+    \expandafter\KVO at removelastspace\expandafter=%
+    % "<value><spaceopt>= \@nil"
+  \else
+    \expandafter\KVO at checkfirstA
+  \fi
+}
+\def\KVO at checkfirstA#1 #2\@nil{%
+  \KVO at ifempty{#2}{%
+    \KVO at removelastspace=#1 \@nil
+  }{%
+    \KVO at ifempty{#1}{%
+      \KVO at removelastspace=#2\@nil
+    }{%
+      \KVO at removelastspace=#1 #2\@nil
+    }%
+  }%
+}
+\def\KVO at removelastspace#1 = \@nil|#2\KVO at nil{%
+  \KVO at ifempty{#2}{%
+    \edef\KVO at result{%
+      \etex at unexpanded\expandafter{\KVO at result}%
+      \etex at unexpanded\expandafter{\KVO at removegarbage#1\KVO at nil}%
+    }%
+  }{%
+    \edef\KVO at result{%
+      \etex at unexpanded\expandafter{\KVO at result}%
+      \etex at unexpanded{#1}%
+    }%
+  }%
+}
+\def\KVO at removegarbage#1= \@nil#2\KVO at nil{#1}%
+\def\KVO at removeelement#1#2{%
+  \begingroup
+    \toks@={}%
+    \@for\x:=#2\do{%
+      \ifx\x\@empty
+      \else
+        \ifx\x#1\relax
+        \else
+          \edef\t{\the\toks@}%
+          \ifx\t\@empty
+          \else
+            \toks@\expandafter{\the\toks@,}%
+          \fi
+          \toks@\expandafter{\the\expandafter\toks@\x}%
+        \fi
+      \fi
+    }%
+    \edef\x{\endgroup
+      \def\noexpand#2{\the\toks@}%
+    }%
+  \x
+}
+\let\@@fileswith at pti@ns\KVO at fileswith@pti at ns
+\ifx\@fileswith at pti@ns\@badrequireerror
+\else
+  \let\@fileswith at pti@ns\KVO at fileswith@pti at ns
+\fi
+\let\KVO at Patch=Y
+\KVO at AtEnd%
+\endinput
+%%
+%% End of file `kvoptions-patch.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty	2022-06-17 15:10:51 UTC (rev 63622)
@@ -0,0 +1,836 @@
+%%
+%% This is file `kvoptions.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% kvoptions.dtx  (with options: `package')
+%% 
+%% This is a generated file.
+%% 
+%% Project: kvoptions
+%% Version: 2022-06-15 v3.15
+%% 
+%% Copyright (C)
+%%    2004, 2006, 2007, 2009-2011 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/kvoptions/issues
+%% 
+%% This work consists of the main source file kvoptions.dtx
+%% and the derived files
+%%    kvoptions.sty, kvoptions.pdf, kvoptions.ins, kvoptions.drv,
+%%    kvoptions-patch.sty, example-mycolorsetup.sty,
+%%    kvoptions-test1.tex, kvoptions-test2.tex,
+%%    kvoptions-test3.tex, kvoptions-test4.tex,
+%%    kvoptions-test4.sty.
+%% 
+%% No we don't need the option 'color'.
+%% With color support option 'emphcolor' will dynamically
+%% change the color of \emph statements.
+
+\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 kvoptions.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{kvoptions}{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 kvoptions.sty\endcsname
+\ProvidesPackage{kvoptions}%
+  [2022-06-15 v3.15 Key value format for package options (HO)]%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5 % ^^M
+  \endlinechar=13 %
+  \catcode123=1 % {
+  \catcode125=2 % }
+  \catcode64=11 % @
+  \def\x{\endgroup
+    \expandafter\edef\csname KVO 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\KVO at AtEnd{%
+    \KVO at AtEnd
+    \catcode#1=\the\catcode#1\relax
+  }%
+  \catcode#1=#2\relax
+}
+\TMP at EnsureCode{1}{14}% ^^A (comment)
+\TMP at EnsureCode{2}{14}% ^^A (comment)
+\TMP at EnsureCode{33}{12}% !
+\TMP at EnsureCode{39}{12}% '
+\TMP at EnsureCode{40}{12}% (
+\TMP at EnsureCode{41}{12}% )
+\TMP at EnsureCode{42}{12}% *
+\TMP at EnsureCode{44}{12}% ,
+\TMP at EnsureCode{45}{12}% -
+\TMP at EnsureCode{46}{12}% .
+\TMP at EnsureCode{47}{12}% /
+\TMP at EnsureCode{58}{12}% :
+\TMP at EnsureCode{62}{12}% >
+\TMP at EnsureCode{91}{12}% [
+\TMP at EnsureCode{93}{12}% ]
+\TMP at EnsureCode{94}{7}% ^ (superscript)
+\TMP at EnsureCode{96}{12}% `
+\edef\KVO at AtEnd{\KVO at AtEnd\noexpand\endinput}
+\@ifundefined{define at key}{%
+  \RequirePackage{keyval}\relax
+}{}
+\RequirePackage{ltxcmds}[2010/12/02]
+\RequirePackage{kvsetkeys}[2007/09/29]
+\@ifundefined{@x at protect}{%
+  \def\@x at protect#1\fi#2#3{%
+    \fi\protect#1%
+  }%
+  \let\@typeset at protect\relax
+}{}
+\@ifundefined{@currname}{%
+  \def\@currname{}%
+}{}
+\@ifundefined{@currext}{%
+  \def\@currext{}%
+}{}
+\DeclareOption{debugshow}{\catcode\@ne=9 }
+\DeclareOption{patch}{%
+  \AtEndOfPackage{%
+    \RequirePackage{kvoptions-patch}[2019/11/29]%
+  }%
+}
+\ProcessOptions\relax
+\define at key{KVO}{family}{%
+  \expandafter\edef\csname KVO at family@%
+      \@currname.\@currext\endcsname{#1}%
+}
+\def\KVO at family{%
+  \@ifundefined{KVO at family@\@currname.\@currext}{%
+    \@currname
+  }{%
+    \csname KVO at family@\@currname.\@currext\endcsname
+  }%
+}
+\define at key{KVO}{prefix}{%
+  \expandafter\edef\csname KVO at prefix@%
+      \@currname.\@currext\endcsname{#1}%
+}
+\def\KVO at prefix{%
+  \ltx at ifundefined{KVO at prefix@\@currname.\@currext}{%
+    \@currname @%
+  }{%
+    \csname KVO at prefix@\@currname.\@currext\endcsname
+  }%
+}
+\define at key{KVO}{setkeys}{%
+  \expandafter\def\csname KVO at setkeys@%
+      \@currname.\@currext\endcsname{#1}%
+}
+\def\KVO at setkeys{%
+  \ltx at IfUndefined{KVO at setkeys@\@currname.\@currext}{%
+    \setkeys
+  }{%
+    \csname KVO at setkeys@\@currname.\@currext\endcsname
+  }%
+}
+\newcommand*{\SetupKeyvalOptions}{%
+  \kvsetkeys{KVO}%
+}
+\newcommand*{\DeclareBoolOption}[2][false]{%
+  \KVO at ifdefinable{if\KVO at prefix#2}{%
+    \KVO at ifdefinable{\KVO at prefix#2true}{%
+      \KVO at ifdefinable{\KVO at prefix#2false}{%
+        \csname newif\expandafter\endcsname
+        \csname if\KVO at prefix#2\endcsname
+        \@ifundefined{\KVO at prefix#2#1}{%
+          \PackageWarning{kvoptions}{%
+            Initialization of option `#2' failed,\MessageBreak
+            cannot set boolean option to `#1',\MessageBreak
+            use `true' or `false', now using `false'%
+          }%
+        }{%
+          \csname\KVO at prefix#2#1\endcsname
+        }%
+        \begingroup
+          \edef\x{\endgroup
+            \noexpand\define at key{\KVO at family}{#2}[true]{%
+              \noexpand\KVO at boolkey{\@currname}%
+              \ifx\@currext\@clsextension
+                \noexpand\@clsextension
+              \else
+                \noexpand\@pkgextension
+              \fi
+              {\KVO at prefix}{#2}{####1}%
+            }%
+          }%
+        \x
+      }%
+    }%
+  }%
+}
+\newcommand*{\DeclareComplementaryOption}[2]{%
+  \@ifundefined{if\KVO at prefix#2}{%
+    \PackageError{kvoptions}{%
+      Cannot generate option code for `#1',\MessageBreak
+      parent switch `#2' does not exist%
+    }{%
+      You are inside %
+      \ifx\@currext\@clsextension class\else package\fi\space
+      `\@currname.\@currext'.\MessageBreak
+      `\KVO at family' is used as familiy %
+      for the keyval options.\MessageBreak
+      `\KVO at prefix' serves as prefix %
+      for internal switch macros.\MessageBreak
+      \MessageBreak
+      \@ehc
+    }%
+  }{%
+    \KVO at ifdefinable{\KVO at prefix#1true}{%
+      \KVO at ifdefinable{\KVO at prefix#1false}{%
+        \expandafter\let\csname\KVO at prefix#1false\expandafter\endcsname
+          \csname\KVO at prefix#2true\endcsname
+        \expandafter\let\csname\KVO at prefix#1true\expandafter\endcsname
+          \csname\KVO at prefix#2false\endcsname
+        \begingroup
+          \edef\x{\endgroup
+            \noexpand\define at key{\KVO at family}{#1}[true]{%
+              \noexpand\KVO at boolkey{\@currname}%
+              \ifx\@currext\@clsextension
+                \noexpand\@clsextension
+              \else
+                \noexpand\@pkgextension
+              \fi
+              {\KVO at prefix}{#1}{####1}%
+            }%
+          }%
+        \x
+      }%
+    }%
+  }%
+}
+\def\KVO at ifdefinable#1{%
+  \expandafter\@ifdefinable\csname #1\endcsname
+}
+\def\KVO at boolkey#1#2#3#4#5{%
+  \edef\KVO at param{#5}%
+  \ltx at onelevel@sanitize\KVO at param
+  \ifx\KVO at param\KVO at true
+    \expandafter\@firstofone
+  \else
+    \ifx\KVO at param\KVO at false
+      \expandafter\expandafter\expandafter\@firstofone
+    \else
+      \ifx#2\@clsextension
+        \expandafter\ClassWarning
+      \else
+        \expandafter\PackageWarning
+      \fi
+      {#1}{%
+        Value `\KVO at param' is not supported by\MessageBreak
+        option `#4'%
+      }%
+      \expandafter\expandafter\expandafter\@gobble
+    \fi
+  \fi
+  {%
+    ^^A\ifx#2\@clsextension
+    ^^A  \expandafter\ClassInfo
+    ^^A\else
+    ^^A  \expandafter\PackageInfo
+    ^^A\fi
+    ^^A{#1}{[option] #4=\KVO at param}%
+    \csname#3#4\KVO at param\endcsname
+  }%
+}
+\def\KVO at true{true}
+\def\KVO at false{false}
+\ltx at onelevel@sanitize\KVO at true
+\ltx at onelevel@sanitize\KVO at false
+\newcommand*{\DeclareStringOption}[2][]{%
+  \@ifnextchar[{%
+    \KVO at DeclareStringOption{#1}{#2}@%
+  }{%
+    \KVO at DeclareStringOption{#1}{#2}{}[]%
+  }%
+}
+\def\KVO at DeclareStringOption#1#2#3[#4]{%
+  \KVO at ifdefinable{\KVO at prefix#2}{%
+    \@namedef{\KVO at prefix#2}{#1}%
+    \begingroup
+      \ifx\\#3\\%
+        \toks@{}%
+      \else
+        \toks@{[{#4}]}%
+      \fi
+      \edef\x{\endgroup
+        \noexpand\define at key{\KVO at family}{#2}\the\toks@{%
+          ^^A\begingroup
+          ^^A  \toks@{####1}%
+          ^^A  \ifx\@currext\@clsextension
+          ^^A    \noexpand\ClassInfo
+          ^^A  \else
+          ^^A    \noexpand\PackageInfo
+          ^^A  \fi
+          ^^A  {\@currname}{%
+          ^^A    [option] #2={\noexpand\the\toks@}%
+          ^^A  }%
+          ^^A\endgroup
+          \noexpand\def
+          \expandafter\noexpand\csname\KVO at prefix#2\endcsname{####1}%
+        }%
+      }%
+    \x
+  }%
+}
+\newcommand*{\DeclareVoidOption}[2]{%
+  \begingroup
+    \let\next\@gobbletwo
+    \KVO at ifdefinable{\KVO at prefix#1}{%
+      \let\next\@firstofone
+    }%
+  \expandafter\endgroup
+  \next{%
+    \begingroup
+      \edef\x{\endgroup
+        \noexpand\define at key{\KVO at family}{#1}[\KVO at VOID@]{%
+          \noexpand\KVO at voidkey{\@currname}%
+          \ifx\@currext\@clsextension
+            \noexpand\@clsextension
+          \else
+            \noexpand\@pkgextension
+          \fi
+          {#1}%
+          {####1}%
+          \expandafter\noexpand\csname\KVO at prefix#1\endcsname
+        }%
+      }%
+    \x
+    \begingroup
+      \toks@{#2}%
+    \expandafter\endgroup
+    \expandafter\def
+    \csname\KVO at prefix#1\expandafter\endcsname
+    \expandafter{\the\toks@}%
+  }%
+}
+\def\KVO at VOID@{@VOID@}
+\def\KVO at voidkey#1#2#3#4{%
+  \def\CurrentOption{#3}%
+  \begingroup
+    \def\x{#4}%
+  \expandafter\endgroup
+  \ifx\x\KVO at VOID@
+  \else
+    \ifx#2\@clsextension
+      \expandafter\ClassWarning
+    \else
+      \expandafter\PackageWarning
+    \fi
+    {#1}{%
+      Unexpected value for option `#3'\MessageBreak
+      is ignored%
+    }%
+  \fi
+  ^^A\ifx#2\@clsextension
+  ^^A  \expandafter\ClassInfo
+  ^^A\else
+  ^^A  \expandafter\PackageInfo
+  ^^A\fi
+  ^^A{#1}{[option] #3}%
+}
+\newcommand*{\DeclareDefaultOption}{%
+  \@namedef{KVO at default@\@currname.\@currext}%
+}
+\newcommand*{\DeclareLocalOptions}[1]{%
+  \comma at parse{#1}\KVO at DeclareLocalOption
+}
+\def\KVO at DeclareLocalOption#1{%
+  \expandafter\def\csname KVO at local@\KVO at family @#1\endcsname{}%
+}
+\SetupKeyvalOptions{%
+  family=KVOdyn,%
+  prefix=KVOdyn@%
+}
+\DeclareBoolOption[true]{global}
+\DeclareComplementaryOption{local}{global}
+\DeclareStringOption[undef]{action}
+\let\KVOdyn at name\relax
+\let\KVOdyn at ext\@empty
+\define at key{KVOdyn}{class}{%
+  \def\KVOdyn at name{#1}%
+  \let\KVOdyn at ext\@clsextension
+}
+\define at key{KVOdyn}{package}{%
+  \def\KVOdyn at name{#1}%
+  \let\KVOdyn at ext\@pkgextension
+}
+\newcommand*{\DisableKeyvalOption}[3][]{%
+  \begingroup
+    \kvsetkeys{KVOdyn}{#1}%
+    \def\x{\endgroup}%
+    \@ifundefined{KVO at action@\KVOdyn at action}{%
+      \PackageError{kvoptions}{%
+        Unknown disable action %
+        `\expandafter\strip at prefix\meaning\KVOdyn at action'\MessageBreak
+        for option `#3' in keyval family '#2'%
+      }\@ehc
+    }{%
+      \csname KVO at action@\KVOdyn at action\endcsname{#2}{#3}%
+    }%
+  \x
+}
+\def\KVO at action@undef#1#2{%
+  \edef\x{\endgroup
+    \ifKVOdyn at global\global\fi
+    \let
+    \expandafter\noexpand\csname KV@#1@#2\endcsname
+    \relax
+    \ifKVOdyn at global\global\fi
+    \let
+    \expandafter\noexpand\csname KV@#1@#2 at default\endcsname
+    \relax
+  }%
+  ^^A\PackageInfo{kvoptions}{%
+  ^^A  [option] key `#2' of family `#1'\MessageBreak
+  ^^A  is disabled (undef, \ifKVOdyn at global global\else local\fi)%
+  ^^A}%
+}
+\def\KVO at action@ignore#1#2{%
+  \edef\x{\endgroup
+    \ifKVOdyn at global\global\fi
+    \let
+    \expandafter\noexpand\csname KV@#1@#2\endcsname
+    \noexpand\@gobble
+    \ifKVOdyn at global\global\fi
+    \let
+    \expandafter\noexpand\csname KV@#1@#2 at default\endcsname
+    \noexpand\@empty
+  }%
+  ^^A\PackageInfo{kvoptions}{%
+  ^^A  [option] key `#2' of family `#1'\MessageBreak
+  ^^A  is disabled (ignore, \ifKVOdyn at global global\else local\fi)%
+  ^^A}%
+}
+\def\KVO at action@error{%
+  \KVO at do@action{error}%
+}
+\def\KVO at action@warning{%
+  \KVO at do@action{warning}%
+}
+\def\KVO at do@action#1#2#3{%
+  \ifx\KVOdyn at name\relax
+    \PackageError{kvoptions}{%
+      Action type `#1' needs package/class name\MessageBreak
+      for key `#3' in family `#2'%
+    }\@ehc
+  \else
+    \edef\x{\endgroup
+      \noexpand\define at key{#2}{#3}[]{%
+        \expandafter\noexpand\csname KVO at disable@#1\endcsname
+        {\KVOdyn at name}\noexpand\KVOdyn at ext{#3}%
+      }%
+      \ifKVOdyn at global
+        \global\let
+        \expandafter\noexpand\csname KV@#2@#3\endcsname
+        \expandafter\noexpand\csname KV@#2@#3\endcsname
+        \global\let
+        \expandafter\noexpand\csname KV@#2@#3 at default\endcsname
+        \expandafter\noexpand\csname KV@#2@#3 at default\endcsname
+      \fi
+    }%
+    ^^A\ifx\KVOdyn at ext\@clsextension
+    ^^A  \expandafter\ClassInfo
+    ^^A\else
+    ^^A   \expandafter\PackageInfo
+    ^^A\fi
+    ^^A{\KVOdyn at name}{%
+    ^^A  [option] key `#3' of family `#2'\MessageBreak
+    ^^A  is disabled (#1, \ifKVOdyn at global global\else local\fi)%
+    ^^A}%
+  \fi
+}
+\def\KVO at disable@error#1#2#3{%
+  \ifx#2\@clsextension
+    \expandafter\ClassError
+  \else
+    \expandafter\PackageError
+  \fi
+  {#1}{%
+    Option `#3' is given too late,\MessageBreak
+    now the option is ignored%
+  }\@ehc
+}
+\def\KVO at disable@warning#1#2#3{%
+  \ifx#2\@clsextension
+    \expandafter\ClassWarning
+  \else
+    \expandafter\PackageWarning
+  \fi
+  {#1}{%
+    Option `#3' is already consumed\MessageBreak
+    and has no effect%
+  }%
+}
+\newcommand*{\AddToKeyvalOption}{%
+  \@ifstar{%
+    \begingroup
+      \edef\x{\endgroup
+        \noexpand\KVO at AddToKeyvalOption{\KVO at family}%
+      }%
+    \x
+  }%
+  \KVO at AddToKeyvalOption
+}
+\def\KVO at AddToKeyvalOption#1#2{%
+  \@ifundefined{KV@#1@#2}{%
+    \PackageWarning{kvoptions}{%
+      Key `#2' of family `#1' does not exist.\MessageBreak
+      Ignoring \string\AddToKeyvalOption
+    }%
+    \@gobble
+  }{%
+    \edef\KVO at next{%
+      \noexpand\KVO@@AddToKeyvalOption
+      \expandafter\noexpand\csname KV@#1@#2\endcsname
+    }%
+    \afterassignment\KVO at next
+    \def\KVO at temp##1%
+  }%
+}
+\def\KVO@@AddToKeyvalOption#1{%
+  \begingroup
+    \toks@\expandafter{#1{##1}}%
+    \toks@\expandafter{\the\expandafter\toks@\KVO at temp{##1}}%
+    \edef\x{\endgroup
+      \noexpand\def\noexpand#1####1{\the\toks@}%
+    }%
+  \x
+}
+\def\KVO at IfDefThen#1#2{%
+  \ifx#1\ltx at undefined
+  \else
+    \ifx#1\relax
+    \else
+      #2%
+    \fi
+  \fi
+}%
+\def\KVO at GetClassOptionsList{%
+  \let\KVO at classoptionslist\@classoptionslist
+  \KVO at IfDefThen\@classoptionslist{%
+    \KVO at IfDefThen\XKV at documentclass{%
+      \ifx\XKV at documentclass\ltx at empty
+      \else
+        \KVO at IfDefThen\XKV at classoptionslist{%
+          \ifx\XKV at classoptionslist\ltx at empty
+          \else
+            \let\KVO at classoptionslist\XKV at classoptionslist
+          \fi
+        }%
+      \fi
+    }%
+  }%
+}%
+\newcommand*{\ProcessKeyvalOptions}{%
+  \@ifstar{%
+    \begingroup
+      \edef\x{\endgroup
+        \noexpand\KVO at ProcessKeyvalOptions{\KVO at family}%
+      }%
+    \x
+  }%
+  \KVO at ProcessKeyvalOptions
+}
+\def\KVO at ProcessKeyvalOptions#1{%
+  \let\@tempc\relax
+  \let\KVO at temp\@empty
+  \ifx\@currext\@clsextension
+  \else
+    \KVO at GetClassOptionsList
+    \ifx\KVO at classoptionslist\relax
+    \else
+      \@for\KVO at CurrentOption:=\KVO at classoptionslist\do{%
+        \@ifundefined{KV@#1@\expandafter\KVO at getkey
+                      \KVO at CurrentOption=\@nil}{%
+        }{%
+          \@ifundefined{KVO at local@#1@\expandafter\KVO at getkey
+                        \KVO at CurrentOption=\@nil}{%
+            \ifx\KVO at Patch Y%
+              \edef\KVO at temp{%
+                \etex at unexpanded\expandafter{%
+                  \KVO at temp
+                }%
+                ,%
+                \etex at unexpanded\expandafter{%
+                  \KVO at CurrentOption
+                }%
+                ,%
+              }%
+              \ltx at onelevel@sanitize\KVO at CurrentOption
+            \else
+              \edef\KVO at temp{%
+                \KVO at temp
+                ,%
+                \KVO at CurrentOption
+                ,%
+              }%
+            \fi
+            \@expandtwoargs\@removeelement{\expandafter\@remove at eq@value\KVO at CurrentOption=\@nil}%
+              \@unusedoptionlist\@unusedoptionlist
+          }{}%
+        }%
+      }%
+    \fi
+  \fi
+  \begingroup
+    \toks\tw@{}%
+    \@ifundefined{opt@\@currname.\@currext}{%
+      \toks@\expandafter{\KVO at temp}%
+    }{%
+      \toks@\expandafter\expandafter\expandafter{%
+        \csname opt@\@currname.\@currext\endcsname
+      }%
+      \ifx\@currext\@clsextension
+        \edef\CurrentOption{\the\toks@}%
+        \toks@\expandafter{\KVO at temp}%
+        \@for\CurrentOption:=\CurrentOption\do{%
+          \@ifundefined{%
+            KV@#1@\expandafter\KVO at getkey\CurrentOption=\@nil
+          }{%
+            \@ifundefined{KVO at default@\@currname.\@currext}{%
+              \ifx\KVO at Patch Y%
+                \ltx at onelevel@sanitize\CurrentOption
+              \fi
+              \ifx\@unusedoptionlist\@empty
+                \global\let\@unusedoptionlist\CurrentOption
+              \else
+                \expandafter\expandafter\expandafter\gdef
+                \expandafter\expandafter\expandafter\@unusedoptionlist
+                \expandafter\expandafter\expandafter{%
+                  \expandafter\@unusedoptionlist
+                  \expandafter,\CurrentOption
+                }%
+              \fi
+            }{%
+              \toks\tw@\expandafter{%
+                \the\toks\expandafter\tw@\expandafter,\CurrentOption
+              }%
+            }%
+          }{%
+            \toks@\expandafter{%
+              \the\expandafter\toks@\expandafter,\CurrentOption
+            }%
+          }%
+        }%
+      \else
+        \@ifundefined{KVO at default@\@currname.\@currext}{%
+          \toks@\expandafter\expandafter\expandafter{%
+            \expandafter\KVO at temp\the\toks@
+          }%
+        }{%
+          \edef\CurrentOption{\the\toks@}%
+          \toks@\expandafter{\KVO at temp}%
+          \@for\CurrentOption:=\CurrentOption\do{%
+            \@ifundefined{%
+              KV@#1@\expandafter\KVO at getkey\CurrentOption=\@nil
+            }{%
+              \toks\tw@\expandafter{%
+                \the\toks\expandafter\tw@\expandafter,\CurrentOption
+              }%
+            }{%
+              \toks@\expandafter{%
+                \the\expandafter\toks@\expandafter,\CurrentOption
+              }%
+            }%
+          }%
+        }%
+      \fi
+    }%
+    \edef\KVO at temp{\endgroup
+      \noexpand\KVO at calldefault{\the\toks\tw@}%
+      \noexpand\KVO at setkeys{#1}{\the\toks@}%
+    }%
+  \KVO at temp
+  \let\CurrentOption\@empty
+  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+}
+\newcommand*{\ProcessLocalKeyvalOptions}{%
+  \@ifstar{%
+    \begingroup
+      \edef\x{\endgroup
+        \noexpand\KVO at ProcessLocalKeyvalOptions{\KVO at family}%
+      }%
+    \x
+  }%
+  \KVO at ProcessLocalKeyvalOptions
+}
+\def\KVO at ProcessLocalKeyvalOptions#1{%
+  \let\@tempc\relax
+  \let\KVO at temp\@empty
+  \ifx\@currext\@pkgextension
+  \else
+    \PackageError{kvoptions}{%
+      \string\ProcessLocalKeyvalOptions\space is intended for packages only%
+    }\@ehc
+  \fi
+  \begingroup
+    \toks\tw@{}%
+    \@ifundefined{opt@\@currname.\@currext}{%
+      \toks@\expandafter{\KVO at temp}%
+    }{%
+      \toks@\expandafter\expandafter\expandafter{%
+        \csname opt@\@currname.\@currext\endcsname
+      }%
+      \@ifundefined{KVO at default@\@currname.\@currext}{%
+        \toks@\expandafter\expandafter\expandafter{%
+          \expandafter\KVO at temp\the\toks@
+        }%
+      }{%
+        \edef\CurrentOption{\the\toks@}%
+        \toks@\expandafter{\KVO at temp}%
+        \@for\CurrentOption:=\CurrentOption\do{%
+          \@ifundefined{%
+            KV@#1@\expandafter\KVO at getkey\CurrentOption=\@nil
+          }{%
+            \toks\tw@\expandafter{%
+              \the\toks\expandafter\tw@\expandafter,\CurrentOption
+            }%
+          }{%
+            \toks@\expandafter{%
+              \the\expandafter\toks@\expandafter,\CurrentOption
+            }%
+          }%
+        }%
+      }%
+    }%
+    \edef\KVO at temp{\endgroup
+      \noexpand\KVO at calldefault{\the\toks\tw@}%
+      \noexpand\KVO at setkeys{#1}{\the\toks@}%
+    }%
+  \KVO at temp
+  \let\CurrentOption\@empty
+  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+}
+\def\KVO at getkey#1=#2\@nil{#1}
+\def\KVO at calldefault#1{%
+  \begingroup
+    \def\x{#1}%
+  \expandafter\endgroup
+  \ifx\x\@empty
+  \else
+    \@for\CurrentOption:=#1\do{%
+      \ifx\CurrentOption\@empty
+      \else
+        \expandafter\KVO at setcurrents\CurrentOption=\@nil
+        \@nameuse{KVO at default@\@currname.\@currext}%
+      \fi
+    }%
+  \fi
+}
+\def\KVO at setcurrents#1=#2\@nil{%
+  \def\CurrentOptionValue{#2}%
+  \ifx\CurrentOptionValue\@empty
+    \let\CurrentOptionKey\CurrentOption
+    \let\CurrentOptionValue\relax
+  \else
+    \edef\CurrentOptionKey{\zap at space#1 \@empty}%
+    \expandafter\KVO at setcurrentvalue\CurrentOption\@nil
+  \fi
+}
+\def\KVO at setcurrentvalue#1=#2\@nil{%
+  \KV@@sp at def\CurrentOptionValue{#2}%
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname documentclass\endcsname\relax
+  \def\ProcessKeyvalOptions{%
+    \@ifstar{}\@gobble
+  }%
+\fi
+\KVO at AtEnd%
+\endinput
+%%
+%% End of file `kvoptions.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2022-06-16 23:49:15 UTC (rev 63621)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2022-06-17 15:10:51 UTC (rev 63622)
@@ -507,7 +507,7 @@
     luasseq luatex85 luatexbase luatexja luatexko luatextra
     luatodonotes luavlna luaxml
     lutabulartools lwarp lxfonts ly1 lyluatex
-  m-tx macrolist macros2e macroswap mafr magaz magicnum magra
+  m-tx macrolist macros2e macroswap mafr magaz magicnum magicwatermark magra
     mahjong mailing mailmerge
     make4ht makebarcode makebase makebox
     makecell makecirc makecmds makecookbook

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2022-06-16 23:49:15 UTC (rev 63621)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2022-06-17 15:10:51 UTC (rev 63622)
@@ -2091,6 +2091,7 @@
  'kotex-utf',   'hfontspec.default|\.dfu|' . $standardtex,
  'kpfonts',     '\.sty|\.fd',
  'kuvio',       '\.tex|\.sty',
+ 'kvoptions',	'kvoptions(-patch)?\.sty$',
  'labyrinth',   '\.sty',        # not .cfg
  'langsci',	'(langsci(b|_|-[^d])|tbls|.*sp-).*', # not langsci-doc
  'lastpage',    '\.sty',        # not .cfg
@@ -3086,6 +3087,7 @@
  'japanese'     => 'platex',
  'kdgdocs'      => 'latex',  # requires interaction
  'komacv'	=> 'latex',  # requires interaction
+ 'kvoptions'	=> 'etex',
  'labelcas'     => 'latex',  # requires interaction
  'lastpage'     => 'tex',
  'latex-veryshortguide' => 'latex',  # requires interaction



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