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.sty353
1 files changed, 353 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty b/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
new file mode 100644
index 00000000000..d76859fd885
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
@@ -0,0 +1,353 @@
+%%
+%% 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 by Heiko Oberdiek <oberdiek@uni-freiburg.de>
+%%
+%% 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.
+%%
+\begingroup
+ \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
+ \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
+ \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}%
+ [2006/03/06 v1.0 Key value parser with default handler support (HO)]
+\expandafter\edef\csname KVS@endinput\endcsname{%
+ \catcode39 \the\catcode39 % '
+ \catcode44 \the\catcode44 % ,
+ \catcode61 \the\catcode61 % =
+ \catcode64 \the\catcode64 % @
+ \catcode94 \the\catcode94 % ^
+ \catcode96 \the\catcode96 % `
+ \catcode126 \the\catcode126 % ~
+ \relax
+ \noexpand\endinput
+}
+\catcode39 12 % '
+\catcode44 12 % ,
+\catcode61 12 % =
+\catcode64 11 % @
+\catcode94 7 % ^
+\catcode96 12 % `
+\catcode126 13 % ~
+\def\KVS@empty{}
+\long\def\@ReturnAfterFi#1\fi{\fi#1}
+\def\kv@normalize#1{%
+ \begingroup
+ \toks@{,#1}%
+ \KVS@comma
+ \KVS@equal
+ \KVS@spaceA
+ \KVS@spaceB{ }%
+ \KVS@spaceC
+ \KVS@spaceD{ }%
+ \xdef\kv@global{\the\toks@}%
+ \endgroup
+ \let\kv@list\kv@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,}%
+ \toks2{#2}%
+ \edef\x{\the\toks2}%
+ \ifx\x\KVS@empty
+ \else
+ \@ReturnAfterFi{%
+ \KVS@@comma#2\KVS@nil
+ }%
+ \fi
+ }%
+}
+\begingroup
+ \lccode`\==`\=%
+ \lccode`\~=`\=%
+\lowercase{\endgroup
+ \def\KVS@equal{%
+ \toks@\expandafter{\expandafter}\expandafter
+ \KVS@@equal\the\toks@~\KVS@nil
+ }
+ \def\KVS@@equal#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@@equal#2\KVS@nil
+ }%
+ \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
+ }%
+ \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
+ }%
+ \fi
+}
+\def\KVS@spaceC{%
+ \toks@\expandafter{\expandafter}\expandafter
+ \KVS@@spaceC\the\toks@, \KVS@nil
+}
+\def\KVS@@spaceC#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@@spaceC#2\KVS@nil
+ }%
+ \fi
+}
+\def\KVS@spaceD#1{%
+ \toks@\expandafter{\expandafter}\expandafter
+ \KVS@@spaceD\the\toks@#1=\KVS@nil
+}
+\def\KVS@@spaceD#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@@spaceD#2\KVS@nil
+ }%
+ \fi
+}
+\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{%
+ \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@process#1=#2\KVS@nil#3{%
+ \def\kv@key{#1}%
+ \begingroup
+ \toks@{#2}%
+ \edef\x{\the\toks@}%
+ \expandafter\endgroup
+ \ifx\x\KVS@empty
+ \let\kv@value\relax
+ #3{#1}{}%
+ \else
+ \KVS@@process{#1}#2\KVS@nil{#3}%
+ \fi
+}
+\def\KVS@@process#1#2=\KVS@nil#3{%
+ \begingroup
+ \toks@{#2}%
+ \xdef\KVS@global{\the\toks@}%
+ \endgroup
+ \let\kv@value\KVS@global
+ #3{#1}{#2}%
+}
+\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
+ \kv@error@unknownkey{#1}{#2}%
+ \else
+ \csname KVS@#1@handler\endcsname{#2}{#3}%
+ \relax
+ \fi
+ \else
+ \ifx\kv@value\relax
+ \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#{%
+ \expandafter\def\csname KVS@#1@handler\endcsname
+}
+\expandafter\ifx\csname MessageBreak\endcsname\relax
+ \def\MessageBreak{^^J}%
+\fi
+\expandafter\ifx\csname @ehc\endcsname\relax
+ \def\@ehc{%
+ Try typing \space\string<return\string> %
+ \space to proceed.\MessageBreak
+ If that doesn't work, type \space X %
+ \string<return\string> \space to quit\string.%
+ }%
+\fi
+\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{%
+ \begingroup
+ \newlinechar=10 %
+ \def\MessageBreak{^^J}%
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \edef\x{%
+ \errhelp{%
+ The keyval family of the key `#3' is `#2'.\MessageBreak
+ \MessageBreak
+ \@ehc
+ }%
+ }%
+ \x
+ \errmessage{kvsetkeys: #1 key `#3'}%
+ \else
+ \edef\x{%
+ \noexpand\PackageError{kvsetkeys}{%
+ #1 key `#3'%
+ }{%
+ The keyval family of the key `#3' is `#2'.\MessageBreak
+ \MessageBreak
+ \@ehc
+ }%
+ }%
+ \x
+ \fi
+ \endgroup
+}%
+\def\kvsetkeys#1#2{%
+ \kv@parse{#2}{\kv@processor@default{#1}}%
+}
+\KVS@endinput
+\endinput
+%%
+%% End of file `kvsetkeys.sty'.