diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty | 354 |
1 files changed, 192 insertions, 162 deletions
diff --git a/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty b/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty index a93b927516e..a6b3ae92413 100644 --- a/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +++ b/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty @@ -25,7 +25,8 @@ %% 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-example.tex, kvsetkeys-test1.tex, +%% kvsetkeys-test2.tex, kvsetkeys-test3.tex. %% \begingroup \catcode44 12 % , @@ -79,7 +80,7 @@ \fi \expandafter\x\csname ver@kvsetkeys.sty\endcsname \ProvidesPackage{kvsetkeys}% - [2007/09/09 v1.2 Key value parser with default handler support (HO)] + [2007/09/29 v1.3 Key value parser with default handler support (HO)] \expandafter\edef\csname KVS@AtEnd\endcsname{% \catcode64 \the\catcode64\relax } @@ -91,6 +92,8 @@ }% \catcode#1 #2\relax } +\TMP@EnsureCode{36}{3}% $ +\TMP@EnsureCode{38}{4}% & \TMP@EnsureCode{39}{12}% ' \TMP@EnsureCode{44}{12}% , \TMP@EnsureCode{46}{12}% . @@ -99,199 +102,231 @@ \TMP@EnsureCode{94}{7}% ^ (superscript) \TMP@EnsureCode{96}{12}% ` \TMP@EnsureCode{126}{13}% ~ (active) -\def\KVS@empty{} -\long\def\@ReturnAfterFi#1\fi{\fi#1} +\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@equal - \KVS@spaceA - \KVS@spaceB{ }% - \KVS@spaceC - \KVS@spaceD{ }% - \xdef\kv@global{\the\toks@}% + \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\kv@list\kv@global + \let\comma@list\KVS@Global } \begingroup \lccode`\,=`\,% \lccode`\~=`\,% \lowercase{\endgroup - \def\KVS@comma{% + \def\KVS@Comma{% \toks@\expandafter{\expandafter}\expandafter - \KVS@@comma\the\toks@~\KVS@nil + \KVS@@Comma\the\toks@~\KVS@Nil }% - \def\KVS@@comma#1~#2\KVS@nil{% - \toks@\expandafter{\the\toks@#1,}% - \toks2{#2}% - \edef\x{\the\toks2}% - \ifx\x\KVS@empty - \else - \@ReturnAfterFi{% - \KVS@@comma#2\KVS@nil - }% - \fi + \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@equal{% + \def\KVS@Equals{% \toks@\expandafter{\expandafter}\expandafter - \KVS@@equal\the\toks@~\KVS@nil + \KVS@@Equals\the\toks@~\KVS@Nil }% - \def\KVS@@equal#1~#2\KVS@nil{% - \edef\x{\the\toks@}% - \ifx\x\KVS@empty - \toks@{#1}% + \def\KVS@@Equals#1~#2\KVS@Nil{% + \edef\KVS@Temp{\the\toks@}% + \ifx\KVS@Temp\KVS@Empty + \expandafter\KVS@FirstOfTwo \else - \toks@\expandafter{\the\toks@=#1}% - \fi - \toks2{#2}% - \edef\x{\the\toks2}% - \ifx\x\KVS@empty - \else - \@ReturnAfterFi{% - \KVS@@equal#2\KVS@nil - }% + \expandafter\KVS@SecondOfTwo \fi - }% -} -\def\KVS@spaceA{% - \toks@\expandafter{\expandafter}\expandafter - \KVS@@spaceA\the\toks@= \KVS@nil -} -\def\KVS@@spaceA#1= #2\KVS@nil{% - \edef\x{\the\toks@}% - \ifx\x\KVS@empty - \toks@{#1}% - \else - \toks@\expandafter{\the\toks@=#1}% - \fi - \toks2{#2}% - \edef\x{\the\toks2}% - \ifx\x\KVS@empty - \else - \@ReturnAfterFi{% - \KVS@@spaceA#2\KVS@nil + {% + \toks@{#1}% + }{% + \toks@\expandafter{\the\toks@=#1}% }% - \fi -} -\def\KVS@spaceB#1{% - \toks@\expandafter{\expandafter}\expandafter - \KVS@@spaceB\the\toks@#1,\KVS@nil -} -\def\KVS@@spaceB#1 ,#2\KVS@nil{% - \edef\x{\the\toks@}% - \ifx\x\KVS@empty - \toks@{#1}% - \else - \toks@\expandafter{\the\toks@,#1}% - \fi - \toks2{#2}% - \edef\x{\the\toks2}% - \ifx\x\KVS@empty - \else - \@ReturnAfterFi{% - \KVS@@spaceB#2\KVS@nil + \KVS@IfEmpty{#2}{% + }{% + \KVS@@Equals#2\KVS@Nil }% - \fi + }% } -\def\KVS@spaceC{% - \toks@\expandafter{\expandafter}\expandafter - \KVS@@spaceC\the\toks@, \KVS@nil +\def\KVS@SpaceEquals#1{% + \toks@\expandafter{\the\toks@#1=}% + \expandafter\KVS@@SpaceEquals\the\toks@\KVS@Nil } -\def\KVS@@spaceC#1, #2\KVS@nil{% - \edef\x{\the\toks@}% - \ifx\x\KVS@empty +\def\KVS@@SpaceEquals#1 =#2\KVS@Nil{% + \KVS@IfEmpty{#2}{% \toks@{#1}% - \else - \toks@\expandafter{\the\toks@,#1}% - \fi - \toks2{#2}% - \edef\x{\the\toks2}% - \ifx\x\KVS@empty - \else - \@ReturnAfterFi{% - \KVS@@spaceC#2\KVS@nil - }% - \fi + }{% + \toks@{#1=#2}% + \expandafter\KVS@@SpaceEquals\the\toks@\KVS@Nil + }% } -\def\KVS@spaceD#1{% - \toks@\expandafter{\expandafter}\expandafter - \KVS@@spaceD\the\toks@#1=\KVS@nil +\def\KVS@EqualsSpace{% + \toks@\expandafter{\the\toks@= }% + \expandafter\KVS@@EqualsSpace\the\toks@\KVS@Nil } -\def\KVS@@spaceD#1 =#2\KVS@nil{% - \edef\x{\the\toks@}% - \ifx\x\KVS@empty +\def\KVS@@EqualsSpace#1= #2\KVS@Nil{% + \KVS@IfEmpty{#2}{% \toks@{#1}% - \else - \toks@\expandafter{\the\toks@=#1}% - \fi - \toks2{#2}% - \edef\x{\the\toks2}% - \ifx\x\KVS@empty - \else - \@ReturnAfterFi{% - \KVS@@spaceD#2\KVS@nil - }% - \fi + }{% + \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}% + \KVS@Parse#1,\KVS@Nil{#2}% } -\def\KVS@parse#1,#2\KVS@nil#3{% - \begingroup - \toks@{#1}% - \edef\x{\the\toks@}% - \expandafter\endgroup - \ifx\x\KVS@empty - \else - \KVS@process#1=\KVS@nil{#3}% - \fi - \begingroup - \toks@{#2}% - \edef\x{\the\toks@}% - \expandafter\endgroup - \ifx\x\KVS@empty - \else - \@ReturnAfterFi{% - \KVS@parse#2\KVS@nil{#3}% - }% - \fi +\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\KVS@Process#1=#2\KVS@Nil#3{% \def\kv@key{#1}% - \begingroup - \toks@{#2}% - \edef\x{\the\toks@}% - \expandafter\endgroup - \ifx\x\KVS@empty + \KVS@IfEmpty{#2}{% \let\kv@value\relax #3{#1}{}% - \else - \KVS@@process{#1}#2\KVS@nil{#3}% - \fi + }{% + \KVS@@Process{#1}#2\KVS@Nil{#3}% + }% } -\def\KVS@@process#1#2=\KVS@nil#3{% - \begingroup - \toks@{#2}% - \xdef\KVS@global{\the\toks@}% - \endgroup - \let\kv@value\KVS@global +\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{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname KV@#1@#2\endcsname\relax - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname KVS@#1@handler\endcsname\relax +& \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}% @@ -299,8 +334,9 @@ \fi \else \ifx\kv@value\relax - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname KV@#1@#2@default\endcsname\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 @@ -312,17 +348,11 @@ \fi } \def\kv@set@family@handler#1{% - \KVS@set@family@handler{#1}\@nil + \KVS@SetFamilyHandler{#1}\@nil } -\def\KVS@set@family@handler#1\@nil#{% +\def\KVS@SetFamilyHandler#1\@nil#{% \expandafter\def\csname KVS@#1@handler\endcsname##1##2% } -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \input infwarerr.sty\relax -\else - \RequirePackage{infwarerr}[2007/09/09]% -\fi \def\kv@error@novalue{% \kv@error@generic{No value specified for}% } |