%% %% 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. %% %% Copyright (C) 2006, 2007 by Heiko Oberdiek %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either %% version 1.3 of this license or (at your option) any later %% version. The latest version of this license is in %% http://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". %% %% This Current Maintainer of this work is Heiko Oberdiek. %% %% 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. %% \begingroup \catcode44 12 % , \catcode45 12 % - \catcode46 12 % . \catcode58 12 % : \catcode64 11 % @ \expandafter\let\expandafter\x\csname ver@kvsetkeys.sty\endcsname \ifcase 0% \ifx\x\relax % plain \else \ifx\x\empty % LaTeX \else 1% \fi \fi \else \catcode35 6 % # \catcode123 1 % { \catcode125 2 % } \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}% \endgroup \expandafter\endinput \fi \endgroup \begingroup \catcode35 6 % # \catcode40 12 % ( \catcode41 12 % ) \catcode44 12 % , \catcode45 12 % - \catcode46 12 % . \catcode47 12 % / \catcode58 12 % : \catcode64 11 % @ \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\relax \xdef#1{#3}% \fi }% \fi \expandafter\x\csname ver@kvsetkeys.sty\endcsname \ProvidesPackage{kvsetkeys}% [2007/09/29 v1.3 Key value parser with default handler support (HO)] \begingroup \catcode123 1 % { \catcode125 2 % } \def\x{\endgroup \expandafter\edef\csname KVS@AtEnd\endcsname{% \catcode35 \the\catcode35\relax \catcode64 \the\catcode64\relax \catcode123 \the\catcode123\relax \catcode125 \the\catcode125\relax }% }% \x \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{44}{12}% , \TMP@EnsureCode{46}{12}% . \TMP@EnsureCode{47}{12}% / \TMP@EnsureCode{61}{12}% = \TMP@EnsureCode{94}{7}% ^ (superscript) \TMP@EnsureCode{96}{12}% ` \TMP@EnsureCode{126}{13}% ~ (active) \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname RequirePackage\endcsname\relax \input infwarerr.sty\relax \input etexcmds.sty\relax \else \RequirePackage{infwarerr}[2007/09/09]% \RequirePackage{etexcmds}[2007/09/09]% \fi \begingroup\expandafter\endgroup \ifcase0\ifetex@unexpanded \expandafter\ifx\csname ifcsname\endcsname\relax \else \expandafter\ifx\csname unless\endcsname\relax \else 1% \fi \fi \fi \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} \def\KVS@IfEmpty#1{% & \edef\KVS@Temp{\etex@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 } \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 }% \def\KVS@@Comma#1~#2\KVS@Nil{% \toks@\expandafter{\the\toks@#1}% \KVS@IfEmpty{#2}{% }{% \KVS@@Comma,#2\KVS@Nil }% }% } \def\KVS@SpaceComma#1{% \toks@\expandafter{\the\toks@#1,}% \expandafter\KVS@@SpaceComma\the\toks@\KVS@Nil } \def\KVS@@SpaceComma#1 ,#2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \toks@{#1,#2}% \expandafter\KVS@@SpaceComma\the\toks@\KVS@Nil }% } \def\KVS@CommaSpace{% \toks@\expandafter{\the\toks@, }% \expandafter\KVS@@CommaSpace\the\toks@\KVS@Nil } \def\KVS@@CommaSpace#1, #2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \toks@{#1,#2}% \expandafter\KVS@@CommaSpace\the\toks@\KVS@Nil }% } \def\KVS@CommaComma{% \toks@\expandafter{\the\toks@,}% \expandafter\KVS@@CommaComma\the\toks@\KVS@Nil } \def\KVS@@CommaComma#1,,#2\KVS@Nil{% \toks@{#1,#2}% \KVS@IfEmpty{#2}{% }{% \expandafter\KVS@@CommaComma\the\toks@\KVS@Nil }% } \begingroup \lccode`\==`\=% \lccode`\~=`\=% \lowercase{\endgroup \def\KVS@Equals{% \toks@\expandafter{\expandafter}\expandafter \KVS@@Equals\the\toks@~\KVS@Nil }% \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{% \toks@\expandafter{\the\toks@#1=}% \expandafter\KVS@@SpaceEquals\the\toks@\KVS@Nil } \def\KVS@@SpaceEquals#1 =#2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \toks@{#1=#2}% \expandafter\KVS@@SpaceEquals\the\toks@\KVS@Nil }% } \def\KVS@EqualsSpace{% \toks@\expandafter{\the\toks@= }% \expandafter\KVS@@EqualsSpace\the\toks@\KVS@Nil } \def\KVS@@EqualsSpace#1= #2\KVS@Nil{% \KVS@IfEmpty{#2}{% \toks@{#1}% }{% \toks@{#1=#2}% \expandafter\KVS@@EqualsSpace\the\toks@\KVS@Nil }% } \def\kv@parse#1{% \kv@normalize{#1}% \expandafter\kv@parse@normalized\expandafter{\kv@list}% } \def\kv@parse@normalized#1#2{% \KVS@Parse#1,\KVS@Nil{#2}% } \def\KVS@Parse#1,#2\KVS@Nil#3{% \KVS@IfEmpty{#1}{% }{% \KVS@Process#1=\KVS@Nil{#3}% }% \KVS@IfEmpty{#2}{% }{% \KVS@Parse#2\KVS@Nil{#3}% }% } \def\KVS@Process#1=#2\KVS@Nil#3{% \def\kv@key{#1}% \KVS@IfEmpty{#2}{% \let\kv@value\relax #3{#1}{}% }{% \KVS@@Process{#1}#2\KVS@Nil{#3}% }% } \def\KVS@@Process#1#2=\KVS@Nil#3{% & \edef\kv@value{\etex@unexpanded{#2}}% $ \begingroup $ \toks@{#2}% $ \xdef\KVS@Global{\the\toks@}% $ \endgroup $ \let\kv@value\KVS@Global #3{#1}{#2}% } \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@IfEmpty{#2}{% }{% \KVS@CommaParse#2\KVS@Nil{#3}% }% } \def\kv@processor@default#1#2#3{% & \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 \csname KVS@#1@handler\endcsname{#2}{#3}% \relax \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@set@family@handler#1{% \KVS@SetFamilyHandler{#1}\@nil } \def\KVS@SetFamilyHandler#1\@nil#{% \expandafter\def\csname KVS@#1@handler\endcsname##1##2% } \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 \MessageBreak \@ehc }% } \def\kvsetkeys#1#2{% \kv@parse{#2}{\kv@processor@default{#1}}% } \KVS@AtEnd \endinput %% %% End of file `kvsetkeys.sty'.