%% %% 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@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@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@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@EnsureCode#1#2{% \edef\KVS@AtEnd{% \KVS@AtEnd \catcode#1=\the\catcode#1\relax }% \catcode#1=#2\relax } \TMP@EnsureCode{36}{3}% $ \TMP@EnsureCode{38}{4}% & \TMP@EnsureCode{39}{12}% ' \TMP@EnsureCode{43}{12}% + \TMP@EnsureCode{44}{12}% , \TMP@EnsureCode{45}{12}% - \TMP@EnsureCode{46}{12}% . \TMP@EnsureCode{47}{12}% / \TMP@EnsureCode{91}{12}% [ \TMP@EnsureCode{93}{12}% ] \TMP@EnsureCode{94}{7}% ^ (superscript) \TMP@EnsureCode{96}{12}% ` \TMP@EnsureCode{126}{13}% ~ (active) \edef\KVS@AtEnd{\KVS@AtEnd\noexpand\endinput} \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname RequirePackage\endcsname\relax \def\TMP@RequirePackage#1[#2]{% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname ver@#1.sty\endcsname\relax \input #1.sty\relax \fi }% \TMP@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@Empty{} \long\def\KVS@FirstOfTwo#1#2{#1} \long\def\KVS@SecondOfTwo#1#2{#2} \long\def\KVS@IfEmpty#1{% & \edef\KVS@Temp{\unexpanded{#1}}% $ \begingroup $ \toks@{#1}% $ \edef\KVS@Temp{\the\toks@}% $ \expandafter\endgroup \ifx\KVS@Temp\KVS@Empty \expandafter\KVS@FirstOfTwo \else \expandafter\KVS@SecondOfTwo \fi } \long\def\kv@normalize#1{% \begingroup \toks@{,#1,}% \KVS@Comma \KVS@SpaceComma \KVS@CommaSpace \KVS@CommaComma \KVS@Equals \KVS@SpaceEquals \KVS@EqualsSpace \xdef\KVS@Global{\the\toks@}% \endgroup \let\kv@list\KVS@Global } \def\comma@normalize#1{% \begingroup \toks@{,#1,}% \KVS@Comma \KVS@SpaceComma \KVS@CommaSpace \KVS@CommaComma \xdef\KVS@Global{\the\toks@}% \endgroup \let\comma@list\KVS@Global } \begingroup \lccode`\,=`\,% \lccode`\~=`\,% \lowercase{\endgroup \def\KVS@Comma{% \toks@\expandafter{\expandafter}\expandafter \KVS@@Comma\the\toks@~\KVS@Nil }% \long\def\KVS@@Comma#1~#2\KVS@Nil{% \toks@\expandafter{\the\toks@#1}% \KVS@IfEmpty{#2}{% }{% \KVS@@Comma,#2\KVS@Nil }% }% } \def\KVS@SpaceComma#1{% \def\KVS@SpaceComma{% \expandafter\KVS@@SpaceComma\the\toks@#1,\KVS@Nil }% } \KVS@SpaceComma{ } \long\def\KVS@@SpaceComma#1 ,#2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \KVS@@SpaceComma#1,#2\KVS@Nil }% } \def\KVS@CommaSpace{% \expandafter\KVS@@CommaSpace\the\toks@, \KVS@Nil } \long\def\KVS@@CommaSpace#1, #2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \KVS@@CommaSpace#1,#2\KVS@Nil }% } \def\KVS@CommaComma{% \expandafter\KVS@@CommaComma\the\toks@,\KVS@Nil } \long\def\KVS@@CommaComma#1,,#2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1,}% (!) }{% \KVS@@CommaComma#1,#2\KVS@Nil }% } \begingroup \lccode`\==`\=% \lccode`\~=`\=% \lowercase{\endgroup \def\KVS@Equals{% \toks@\expandafter{\expandafter}\expandafter \KVS@@Equals\the\toks@~\KVS@Nil }% \long\def\KVS@@Equals#1~#2\KVS@Nil{% \edef\KVS@Temp{\the\toks@}% \ifx\KVS@Temp\KVS@Empty \expandafter\KVS@FirstOfTwo \else \expandafter\KVS@SecondOfTwo \fi {% \toks@{#1}% }{% \toks@\expandafter{\the\toks@=#1}% }% \KVS@IfEmpty{#2}{% }{% \KVS@@Equals#2\KVS@Nil }% }% } \def\KVS@SpaceEquals#1{% \def\KVS@SpaceEquals{% \expandafter\KVS@@SpaceEquals\the\toks@#1=\KVS@Nil }% } \KVS@SpaceEquals{ } \long\def\KVS@@SpaceEquals#1 =#2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \KVS@@SpaceEquals#1=#2\KVS@Nil }% } \def\KVS@EqualsSpace{% \expandafter\KVS@@EqualsSpace\the\toks@= \KVS@Nil } \long\def\KVS@@EqualsSpace#1= #2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \KVS@@EqualsSpace#1=#2\KVS@Nil }% } \long\def\kv@parse#1{% \kv@normalize{#1}% \expandafter\kv@parse@normalized\expandafter{\kv@list}% } \long\def\kv@parse@normalized#1#2{% \KVS@Parse#1,\KVS@Nil{#2}% } \long\def\KVS@Parse#1,#2\KVS@Nil#3{% \KVS@IfEmpty{#1}{% }{% \KVS@Process#1=\KVS@Nil{#3}% }% \KVS@MaybeBreak \KVS@IfEmpty{#2}{% }{% \KVS@Parse#2\KVS@Nil{#3}% }% } \long\def\KVS@Process#1=#2\KVS@Nil#3{% \let\KVS@MaybeBreak\relax \def\kv@key{#1}% \KVS@IfEmpty{#2}{% \let\kv@value\relax #3{#1}{}% }{% \KVS@@Process{#1}#2\KVS@Nil{#3}% }% } \long\def\KVS@@Process#1#2=\KVS@Nil#3{% & \edef\kv@value{\unexpanded{#2}}% $ \begingroup $ \toks@{#2}% $ \xdef\KVS@Global{\the\toks@}% $ \endgroup $ \let\kv@value\KVS@Global #3{#1}{#2}% } \let\KVS@MaybeBreak\relax \def\KVS@break#1#2#3#4{% \let\KVS@MaybeBreak\relax } \def\kv@break{% \let\KVS@MaybeBreak\KVS@break } \def\comma@parse#1{% \comma@normalize{#1}% \expandafter\comma@parse@normalized\expandafter{\comma@list}% } \def\comma@parse@normalized#1#2{% \KVS@CommaParse#1,\KVS@Nil{#2}% } \def\KVS@CommaParse#1,#2\KVS@Nil#3{% \KVS@IfEmpty{#1}{% }{% \def\comma@entry{#1}% #3{#1}% }% \KVS@MaybeBreak \KVS@IfEmpty{#2}{% }{% \KVS@CommaParse#2\KVS@Nil{#3}% }% } \def\comma@break{% \let\KVS@MaybeBreak\KVS@break } \def\kv@handled@false{% \let\ifkv@handled@\iffalse } \def\kv@handled@true{% \let\ifkv@handled@\iftrue } \kv@handled@true \def\kv@processor@default#1#2{% \begingroup \csname @safe@activestrue\endcsname \let\ifincsname\iftrue \edef\KVS@temp{\endgroup \noexpand\KVS@ProcessorDefault{#1}{#2}% }% \KVS@temp } \long\def\KVS@ProcessorDefault#1#2#3{% \def\kv@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@handler\endcsname $ \begingroup\expandafter\expandafter\expandafter\endgroup $ \expandafter\ifx\csname KVS@#1@handler\endcsname\relax \kv@error@unknownkey{#1}{#2}% \else \kv@handled@true \csname KVS@#1@handler\endcsname{#2}{#3}% \relax \ifkv@handled@ \else \kv@error@unknownkey{#1}{#2}% \fi \fi \else \ifx\kv@value\relax & \unless\ifcsname KV@#1@#2@default\endcsname $ \begingroup\expandafter\expandafter\expandafter\endgroup $ \expandafter\ifx\csname KV@#1@#2@default\endcsname\relax \kv@error@novalue{#1}{#2}% \else \csname KV@#1@#2@default\endcsname \relax \fi \else \csname KV@#1@#2\endcsname{#3}% \fi \fi } \def\kv@processor@known#1#2#3{% \begingroup \csname @safe@activestrue\endcsname \let\ifincsname\iftrue \edef\KVS@temp{\endgroup \noexpand\KVS@ProcessorKnown{#1}\noexpand#2{#3}% }% \KVS@temp } \long\def\KVS@ProcessorKnown#1#2#3#4{% \def\kv@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@handler\endcsname $ \begingroup\expandafter\expandafter\expandafter\endgroup $ \expandafter\ifx\csname KVS@#1@handler\endcsname\relax \KVS@AddUnhandled#2{#3}{#4}% \else \kv@handled@true \csname KVS@#1@handler\endcsname{#3}{#4}% \relax \ifkv@handled@ \else \KVS@AddUnhandled#2{#3}{#4}% \fi \fi \else \ifx\kv@value\relax & \unless\ifcsname KV@#1@#2@default\endcsname $ \begingroup\expandafter\expandafter\expandafter\endgroup $ \expandafter\ifx\csname KV@#1@#3@default\endcsname\relax \kv@error@novalue{#1}{#3}% \else \csname KV@#1@#3@default\endcsname \relax \fi \else \csname KV@#1@#3\endcsname{#4}% \fi \fi } \long\def\KVS@AddUnhandled#1#2#3{% & \edef#1{% & \ifx#1\KVS@empty & \else & \unexpanded\expandafter{#1},% & \fi & \unexpanded{{#2}={#3}}% & }% $ \begingroup $ \ifx#1\KVS@empty $ \toks@{{#2}={#3}}% $ \else $ \toks@\expandafter{#1,{#2}={#3}}% $ \fi $ \xdef\KVS@Global{\the\toks@}% $ \endgroup $ \let#1\KVS@Global } \long\def\kv@set@family@handler#1#2{% \begingroup \csname @safe@activestrue\endcsname \let\ifincsname\iftrue \expandafter\endgroup \expandafter\def\csname KVS@#1@handler\endcsname##1##2{#2}% } \long\def\kv@unset@family@handler#1#2{% \begingroup \csname @safe@activestrue\endcsname \let\ifincsname\iftrue \expandafter\endgroup \expandafter\let\csname KVS@#1@handler\endcsname\@UnDeFiNeD } \def\kv@error@novalue{% \kv@error@generic{No value specified for}% } \def\kv@error@unknownkey{% \kv@error@generic{Undefined}% } \def\kv@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@parse{#2}{\kv@processor@default{#1}}% } \def\kvsetkeys@expandafter#1#2{% \expandafter\kv@parse\expandafter{#2}{% \kv@processor@default{#1}% }% } \def\KVS@cmd{0}% \def\KVS@cmd@inc{% & \edef\KVS@cmd{\the\numexpr\KVS@cmd+1}% $ \begingroup $ \count255=\KVS@cmd\relax $ \advance\count255 by 1\relax $ \edef\x{\endgroup $ \noexpand\def\noexpand\KVS@cmd{\number\count255}% $ }% $ \x } \def\KVS@cmd@dec{% & \edef\KVS@cmd{\the\numexpr\KVS@cmd-1}% $ \begingroup $ \count255=\KVS@cmd\relax $ \advance\count255 by -1\relax $ \edef\x{\endgroup $ \noexpand\def\noexpand\KVS@cmd{\number\count255}% $ }% $ \x } \def\KVS@empty{} \def\kvsetknownkeys{% \expandafter \KVS@setknownkeys\csname KVS@cmd\KVS@cmd\endcsname{}% } \long\def\KVS@setknownkeys#1#2#3#4#5{% \let#1\KVS@empty \KVS@cmd@inc #2\kv@parse#2{#5}{\kv@processor@known{#3}#1}% \KVS@cmd@dec \let#4=#1% } \def\kvsetknownkeys@expandafter{% \expandafter \KVS@setknownkeys \csname KVS@cmd\KVS@cmd\endcsname\expandafter } \KVS@AtEnd% %% \section{Installation} \endinput %% %% End of file `kvsetkeys.sty'.