summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/xwatermark/keyreader.sty
blob: 1de651a122115cdce7850c7c2b32b4cea09fd1cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
% This is file 'keyreader.sty', version 0.1.                                 %
%                                                                            %
% This package reads multiple keys to be defined by xkeyval.sty.             %
%                                                                            %
% 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 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.         %
%                                                                            %
% The LPPL maintenance status of this software is 'author-maintained'.       %
%                                                                            %
% This software is provided 'as it is', without warranty of any kind,        %
% either expressed or implied, including, but not limited to, the            %
% implied warranties of merchantability and fitness for a particular         %
% purpose.                                                                   %
%                                                                            %
% Copyright (c) 2009 Ahmed Musa (a.musa@rocketmail.com).                     %
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
\begingroup
\catcode064=11% @
\catcode123=01% {
\catcode125=02% }
\def\x{\endgroup
  \edef\kr@restorecodeatend{%
    \catcode035=\the\catcode035\relax
    \catcode064=\the\catcode064\relax
    \catcode123=\the\catcode123\relax
    \catcode125=\the\catcode125\relax
  }%
}
\x
\catcode035=06% #
\catcode064=11% @
\catcode123=01% {
\catcode125=02% }
\def\kr@ensurecode#1#2{%
  \edef\kr@restorecodeatend{%
    \kr@restorecodeatend
    \catcode#1=\the\catcode#1\relax
  }%
  \catcode#1=#2\relax
}
\AtEndOfPackage{\kr@restorecodeatend}
\kr@ensurecode{044}{12}% ,
\kr@ensurecode{059}{12}% ;
\kr@ensurecode{038}{03}% &
\ProvidesPackage{keyreader}%
  [2009/12/15 v0.1 Read keys for the xkeyval package (AM)]
\NeedsTeXFormat{LaTeX2e}[1996/12/01]
\RequirePackage{xkeyval}[2008/08/13]
\newcommand\kr@warn[1]{\PackageWarningNoLine{keyreader}{#1}}
\newcommand\kr@err[1]{\PackageError{keyreader}{#1}{\@ehc}}
\define@cmdkey[KV]{keyreader}[kr@]{parser}[;]{}
\define@cmdkey[KV]{keyreader}[kr@]{keyprefix}[KV]{}
\define@cmdkey[KV]{keyreader}[kr@]{keyfamily}[fam]{}
\define@cmdkey[KV]{keyreader}[kr@]{macroprefix}[mp@]{}
\DeclareOptionX*{\kr@warn{Unknown option '\CurrentOption' ignored}}
\ExecuteOptionsX[KV]<keyreader>{parser,keyprefix,keyfamily,macroprefix}
\ProcessOptionsX*[KV]<keyreader>\relax
\@ifdefinable\krsetup{%
  \def\krsetup#1{\setkeys[KV]{keyreader}{#1}}%
}
\long\def\ifblank#1{\kr@ifblank#1&&\@secondoftwo\@firstoftwo:}
\long\def\kr@ifblank#1#2&#3#4#5:{#4}
\@ifdefinable\stopread{%
  \long\def\stopread#1&{\long\def\kr@remainder{#1}}%
}
\def\kr@allist{}
\gdef\kr@define@key#1,#2,#3,#4&{%
  \edef\kr@keytype{#1}%
  \edef\kr@key{#2}%
  \edef\kr@default{#3}%
  \def\kr@func{#4}%
  \ifcase\number\kr@keytype\relax
  \or
    \edef\x{\noexpand\define@key[\kr@keyprefix]{\kr@keyfamily}%
      {\kr@key}[\kr@default]{\expandafter\noexpand\kr@func}%
    }\x
  \or
    \edef\x{\noexpand\define@cmdkey[\kr@keyprefix]{\kr@keyfamily}%
      [\kr@macroprefix]{\kr@key}[\kr@default]{\expandafter\noexpand\kr@func}%
    }\x
  \or
    \edef\x{\noexpand\define@boolkey[\kr@keyprefix]{\kr@keyfamily}%
      [\kr@macroprefix]{\kr@key}[\kr@default]{\expandafter\noexpand\kr@func}%
    }\x
  \or
    \ifx\kr@allist\@empty
      \kr@err{'\string\kr@allist' is empty: choicekey can't be defined.
        \MessageBreak You need to first define '\string\kr@allist'
        \MessageBreak as a nonempty set}%
    \fi
    \edef\x{\noexpand\define@choicekey*[\kr@keyprefix]{\kr@keyfamily}{\kr@key}%
      [\noexpand\kr@val\noexpand\kr@nr]{\kr@allist}[\kr@default]%
      {\expandafter\noexpand\kr@func}%
    }\x
  \else
    \kr@err{Unknown key type/identifier '\kr@keytype'}%
  \fi
}
\newcount\kr@cnta
\newcommand\define@keylist[1]{%
  \kr@cnta=\z@\relax\romannumeral-`\q\expandafter\kr@readlist#1;&}
\expandafter\def\expandafter\kr@readlist\expandafter#\expandafter 1\kr@parser#2&{%
  \ifblank{#1}{}{%
    \ifx#1\stopread\stopread#2&\kr@cnta=1\relax\else\kr@define@key#1&\fi
  }%
  \ifnum\kr@cnta=\z@\ifblank{#2}{}{\kr@readlist#2&}\fi
}

\endinput