summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty')
-rw-r--r--Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty354
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}%
}