summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-13 00:11:40 +0000
committerKarl Berry <karl@freefriends.org>2006-01-13 00:11:40 +0000
commit9e03dd49eee57e61c49878d62fcc67a57a652a8d (patch)
treebc6203647942125cd7b6d191c02004716cdb25c7
parent05e898e69b631bb62d157201e0ca9fa7cc027f67 (diff)
xkeyval
git-svn-id: svn://tug.org/texlive/trunk@1459 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/keyval.tex82
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/pst-xkey.sty46
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/pst-xkey.tex70
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/xkeyval.sty152
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/xkeyval.tex842
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/xkvltxp.sty105
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/xkvtxhdr.tex91
-rw-r--r--Master/texmf-dist/tex/latex/xkeyval/xkvview.sty202
8 files changed, 1590 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/xkeyval/keyval.tex b/Master/texmf-dist/tex/latex/xkeyval/keyval.tex
new file mode 100644
index 00000000000..0aed1d328ab
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/keyval.tex
@@ -0,0 +1,82 @@
+%%
+%% This is file `keyval.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvkeyval')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+%%
+%% Based on keyval.sty.
+%%
+\def\XKV@tempa#1{%
+\def\KV@@sp@def##1##2{%
+ \futurelet\XKV@resa\KV@@sp@d##2\@nil\@nil#1\@nil\relax##1}%
+\def\KV@@sp@d{%
+ \ifx\XKV@resa\@sptoken
+ \expandafter\KV@@sp@b
+ \else
+ \expandafter\KV@@sp@b\expandafter#1%
+ \fi}%
+\def\KV@@sp@b#1##1 \@nil{\KV@@sp@c##1}%
+ }
+\XKV@tempa{ }
+\def\KV@@sp@c#1\@nil#2\relax#3{\XKV@toks{#1}\edef#3{\the\XKV@toks}}
+\def\KV@do#1,{%
+ \ifx\relax#1\@empty\else
+ \KV@split#1==\relax
+ \expandafter\KV@do\fi}
+\def\KV@split#1=#2=#3\relax{%
+ \KV@@sp@def\XKV@tempa{#1}%
+ \ifx\XKV@tempa\@empty\else
+ \expandafter\let\expandafter\XKV@tempc
+ \csname\KV@prefix\XKV@tempa\endcsname
+ \ifx\XKV@tempc\relax
+ \XKV@err{`\XKV@tempa' undefined}%
+ \else
+ \ifx\@empty#3\@empty
+ \KV@default
+ \else
+ \KV@@sp@def\XKV@tempb{#2}%
+ \expandafter\XKV@tempc\expandafter{\XKV@tempb}\relax
+ \fi
+ \fi
+ \fi}
+\def\KV@default{%
+ \expandafter\let\expandafter\XKV@tempb
+ \csname\KV@prefix\XKV@tempa @default\endcsname
+ \ifx\XKV@tempb\relax
+ \XKV@err{No value specified for key `\XKV@tempa'}%
+ \else
+ \XKV@tempb\relax
+ \fi}
+\endinput
+%%
+%% End of file `keyval.tex'.
diff --git a/Master/texmf-dist/tex/latex/xkeyval/pst-xkey.sty b/Master/texmf-dist/tex/latex/xkeyval/pst-xkey.sty
new file mode 100644
index 00000000000..ee39992ab2f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/pst-xkey.sty
@@ -0,0 +1,46 @@
+%%
+%% This is file `pst-xkey.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `pxklatex')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{pst-xkey}
+ [2005/02/22 v1.5 package wrapper for pst-xkey.tex (HA)]
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi
+\DeclareOptionX*{%
+ \PackageWarning{pst-xkey}{Unknown option `\CurrentOption'}%
+}
+\ProcessOptionsX
+\endinput
+%%
+%% End of file `pst-xkey.sty'.
diff --git a/Master/texmf-dist/tex/latex/xkeyval/pst-xkey.tex b/Master/texmf-dist/tex/latex/xkeyval/pst-xkey.tex
new file mode 100644
index 00000000000..c78b82d6ae9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/pst-xkey.tex
@@ -0,0 +1,70 @@
+%%
+%% This is file `pst-xkey.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `pxktex')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+\csname PSTXKeyLoaded\endcsname
+\let\PSTXKeyLoaded\endinput
+\edef\PSTXKeyCatcodes{%
+ \catcode`\noexpand\@\the\catcode`\@\relax
+ \let\noexpand\PSTXKeyCatcodes\relax
+}
+\catcode`\@=11\relax
+\ifx\ProvidesFile\@undefined
+ \message{2005/02/22 v1.5 PSTricks specialization of xkeyval (HA)}
+ \ifx\XKeyValLoaded\endinput\else\input xkeyval \fi
+\else
+ \ProvidesFile{pst-xkey.tex}
+ [2005/02/22 v1.5 PSTricks specialization of xkeyval (HA)]
+ \@addtofilelist{pst-xkey.tex}
+ \RequirePackage{xkeyval}
+\fi
+\def\pst@famlist{}
+\def\pst@addfams#1{%
+ \XKV@for@n{#1}\XKV@tempa{%
+ \@expandtwoargs\in@{,\XKV@tempa,}{,\pst@famlist,}%
+ \ifin@\else\edef\pst@famlist{\pst@famlist,\XKV@tempa}\fi
+ }%
+}
+\def\psset{%
+ \expandafter\@testopt\expandafter\pss@t\expandafter{\pst@famlist}%
+}
+\def\pss@t[#1]{\setkeys+[psset]{#1}}
+\def\@psset#1,\@nil{%
+ \edef\XKV@tempa{\noexpand\setkeys+[psset]{\pst@famlist}}%
+ \XKV@tempa{#1}%
+}
+\PSTXKeyCatcodes
+\endinput
+%%
+%% End of file `pst-xkey.tex'.
diff --git a/Master/texmf-dist/tex/latex/xkeyval/xkeyval.sty b/Master/texmf-dist/tex/latex/xkeyval/xkeyval.sty
new file mode 100644
index 00000000000..eac101c3e4f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/xkeyval.sty
@@ -0,0 +1,152 @@
+%%
+%% This is file `xkeyval.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvlatex')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{xkeyval}
+ [2005/08/12 v2.5d package option processing (HA)]
+\ifx\XKeyValLoaded\endinput\else\input xkeyval \fi
+\edef\XKVcatcodes{%
+ \catcode`\noexpand\=\the\catcode`\=\relax
+ \catcode`\noexpand\,\the\catcode`\,\relax
+ \let\noexpand\XKVcatcodes\relax
+}
+\catcode`\=12\relax
+\catcode`\,12\relax
+\let\XKV@doxs\relax
+\def\XKV@warn#1{\PackageWarning{xkeyval}{#1}}
+\def\XKV@err#1{\PackageError{xkeyval}{#1}\@ehc}
+\XKV@whilist\@filelist\XKV@tempa\ifx\XKV@documentclass\@undefined\fi{%
+ \filename@parse\XKV@tempa
+ \ifx\filename@ext\@clsextension
+ \XKV@ifundefined{opt@\filename@area\filename@base.\filename@ext
+ }{}{%
+ \edef\XKV@documentclass{%
+ \filename@area\filename@base.\filename@ext
+ }%
+ }%
+ \fi
+}
+\ifx\XKV@documentclass\@undefined
+ \XKV@err{xkeyval loaded before \protect\documentclass}%
+ \let\XKV@documentclass\@empty
+ \let\XKV@classoptionslist\@empty
+\else
+ \let\XKV@classoptionslist\@classoptionslist
+ \def\XKV@tempa#1{%
+ \let\@classoptionslist\@empty
+ \XKV@for@n{#1}\XKV@tempa{%
+ \expandafter\in@\expandafter=\expandafter{\XKV@tempa}%
+ \ifin@\else\XKV@addtolist@o\@classoptionslist\XKV@tempa\fi
+ }%
+ }
+ \expandafter\XKV@tempa\expandafter{\@classoptionslist}
+\fi
+\def\XKV@testopte#1{%
+ \XKV@ifstar{\XKV@sttrue\XKV@t@stopte#1}{\XKV@stfalse\XKV@t@stopte#1}%
+}
+\def\XKV@t@stopte#1{\@testopt{\XKV@t@st@pte#1}{KV}}
+\def\XKV@t@st@pte#1[#2]{%
+ \XKV@makepf{#2}%
+ \@ifnextchar<{\XKV@@t@st@pte#1}%
+ {\XKV@@t@st@pte#1<\@currname.\@currext>}%
+}
+\def\XKV@@t@st@pte#1<#2>{%
+ \XKV@sp@deflist\XKV@fams{#2}%
+ \@testopt#1{}%
+}
+\def\DeclareOptionX{%
+ \let\@fileswith@pti@ns\@badrequireerror
+ \XKV@ifstar\XKV@dox\XKV@d@x
+}
+\long\def\XKV@dox#1{\XKV@toks{#1}\edef\XKV@doxs{\the\XKV@toks}}
+\def\XKV@d@x{\@testopt\XKV@@d@x{KV}}
+\def\XKV@@d@x[#1]{%
+ \@ifnextchar<{\XKV@@@d@x[#1]}{\XKV@@@d@x[#1]<\@currname.\@currext>}%
+}
+\def\XKV@@@d@x[#1]<#2>#3{\@testopt{\define@key[#1]{#2}{#3}}{}}
+\def\ExecuteOptionsX{\XKV@stfalse\XKV@plfalse\XKV@t@stopte\XKV@setkeys}
+\def\ProcessOptionsX{\XKV@plfalse\XKV@testopte\XKV@pox}
+\def\XKV@pox[#1]{%
+ \let\XKV@tempa\@empty
+ \XKV@inpoxtrue
+ \let\@fileswith@pti@ns\@badrequireerror
+ \edef\XKV@testclass{\@currname.\@currext}%
+ \ifx\XKV@testclass\XKV@documentclass
+ \let\@unusedoptionlist\XKV@classoptionslist
+ \XKV@ifundefined{ver@xkvltxp.sty}{}{%
+ \@onelevel@sanitize\@unusedoptionlist
+ }%
+ \else
+ \ifXKV@st
+ \def\XKV@tempb##1,{%
+ \def\CurrentOption{##1}%
+ \ifx\CurrentOption\@nnil\else
+ \XKV@g@tkeyname##1=\@nil\CurrentOption
+ \XKV@key@if@ndefined{\CurrentOption}{}{%
+ \XKV@useoption{##1}%
+ \XKV@addtolist@n\XKV@tempa{##1}%
+ }%
+ \expandafter\XKV@tempb
+ \fi
+ }%
+ \expandafter\XKV@tempb\XKV@classoptionslist,\@nil,%
+ \fi
+ \fi
+ \expandafter\XKV@addtolist@o\expandafter
+ \XKV@tempa\csname opt@\@currname.\@currext\endcsname
+ \def\XKV@tempb{\XKV@setkeys[#1]}%
+ \expandafter\XKV@tempb\expandafter{\XKV@tempa}%
+ \let\XKV@doxs\relax
+ \let\XKV@rm\@empty
+ \XKV@inpoxfalse
+ \let\@fileswith@pti@ns\@@fileswith@pti@ns
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+}
+\def\XKV@useoption#1{%
+ \def\XKV@resa{#1}%
+ \XKV@ifundefined{ver@xkvltxp.sty}{}{%
+ \@onelevel@sanitize\XKV@resa
+ }%
+ \@expandtwoargs\@removeelement{\XKV@resa}%
+ {\@unusedoptionlist}\@unusedoptionlist
+}
+\DeclareOptionX*{%
+ \PackageWarning{xkeyval}{Unknown option `\CurrentOption'}%
+}
+\ProcessOptionsX
+\XKVcatcodes
+\endinput
+%%
+%% End of file `xkeyval.sty'.
diff --git a/Master/texmf-dist/tex/latex/xkeyval/xkeyval.tex b/Master/texmf-dist/tex/latex/xkeyval/xkeyval.tex
new file mode 100644
index 00000000000..eeee64cd52f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/xkeyval.tex
@@ -0,0 +1,842 @@
+%%
+%% This is file `xkeyval.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvtex')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+\csname XKeyValLoaded\endcsname
+\let\XKeyValLoaded\endinput
+\edef\XKVcatcodes{%
+ \catcode`\noexpand\@\the\catcode`\@\relax
+ \catcode`\noexpand\=\the\catcode`\=\relax
+ \catcode`\noexpand\,\the\catcode`\,\relax
+ \catcode`\noexpand\:\the\catcode`\:\relax
+ \let\noexpand\XKVcatcodes\relax
+}
+\catcode`\@11\relax
+\catcode`\=12\relax
+\catcode`\,12\relax
+\catcode`\:12\relax
+\newtoks\XKV@toks
+\newcount\XKV@depth
+\newif\ifXKV@st
+\newif\ifXKV@sg
+\newif\ifXKV@pl
+\newif\ifXKV@knf
+\newif\ifXKV@rkv
+\newif\ifXKV@inpox
+\newif\ifXKV@preset
+\let\XKV@rm\@empty
+\ifx\ProvidesFile\@undefined
+ \message{2005/08/12 v2.5d key=value parser (HA)}
+ \input xkvtxhdr
+\else
+ \ProvidesFile{xkeyval.tex}[2005/08/12 v2.5d key=value parser (HA)]
+ \@addtofilelist{xkeyval.tex}
+\fi
+\long\def\@firstoftwo#1#2{#1}
+\long\def\@secondoftwo#1#2{#2}
+\long\def\XKV@afterfi#1\fi{\fi#1}
+\long\def\XKV@afterelsefi#1\else#2\fi{\fi#1}
+\ifx\ifcsname\@undefined\XKV@afterelsefi
+ \def\XKV@ifundefined#1{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }
+\else
+ \def\XKV@ifundefined#1{%
+ \ifcsname#1\endcsname
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }
+\fi
+\XKV@ifundefined{ver@keyval.sty}{
+ \input keyval
+ \expandafter\def\csname ver@keyval.sty\endcsname{1999/03/16}
+}{}
+\long\def\@ifnextcharacter#1#2#3{%
+ \@ifnextchar\bgroup
+ {\@ifnextchar{#1}{#2}{#3}}%
+ {\@ifncharacter{#1}{#2}{#3}}%
+}
+\long\def\@ifncharacter#1#2#3#4{%
+ \if\string#1\string#4%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {#2}{#3}#4%
+}
+\long\def\XKV@for@n#1#2#3{%
+ \def#2{#1}%
+ \ifx#2\@empty
+ \XKV@for@break
+ \else
+ \expandafter\XKV@f@r
+ \fi
+ #2{#3}#1,\@nil,%
+}
+\long\def\XKV@f@r#1#2#3,{%
+ \def#1{#3}%
+ \ifx#1\@nnil
+ \expandafter\@gobbletwo
+ \else
+ #2\expandafter\XKV@f@r
+ \fi
+ #1{#2}%
+}
+\long\def\XKV@for@break #1\@nil,{\fi}
+\long\def\XKV@for@o#1{\expandafter\XKV@for@n\expandafter{#1}}
+\long\def\XKV@for@en#1#2#3{\XKV@f@r#2{#3}#1,\@nil,}
+\long\def\XKV@for@eo#1#2#3{%
+ \def#2{\XKV@f@r#2{#3}}\expandafter#2#1,\@nil,%
+}
+\long\def\XKV@whilist#1#2#3\fi#4{%
+ #3\expandafter\XKV@wh@list#1,\@nil,\@nil\@@#2#3\fi{#4}{}\fi
+}
+\long\def\XKV@wh@list#1,#2\@@#3#4\fi#5#6{%
+ \def#3{#1}%
+ \ifx#3\@nnil
+ \def#3{#6}\expandafter\XKV@wh@l@st
+ \else
+ #4%
+ #5\expandafter\expandafter\expandafter\XKV@wh@list
+ \else
+ \def#3{#6}\expandafter\expandafter\expandafter\XKV@wh@l@st
+ \fi
+ \fi
+ #2\@@#3#4\fi{#5}{#1}%
+}
+\long\def\XKV@wh@l@st#1\@@#2#3\fi#4#5{}
+\def\XKV@addtomacro@n#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+\def\XKV@addtomacro@o#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#1\expandafter
+ \expandafter\expandafter{\expandafter#1#2}%
+}
+\def\XKV@addtolist@n#1#2{%
+ \ifx#1\@empty
+ \XKV@addtomacro@n#1{#2}%
+ \else
+ \XKV@addtomacro@n#1{,#2}%
+ \fi
+}
+\def\XKV@addtolist@o#1#2{%
+ \ifx#1\@empty
+ \XKV@addtomacro@o#1#2%
+ \else
+ \XKV@addtomacro@o#1{\expandafter,#2}%
+ \fi
+}
+\def\XKV@addtolist@x#1#2{\edef#1{#1\ifx#1\@empty\else,\fi#2}}
+\def\@selective@sanitize{\@testopt\@s@lective@sanitize\@M}
+\def\@s@lective@sanitize[#1]#2#3{%
+ \begingroup
+ \count@#1\relax\advance\count@\@ne
+ \XKV@toks\expandafter{#3}%
+ \def#3{#2}\@onelevel@sanitize#3%
+ \edef#3{{#3}{\the\XKV@toks}}%
+ \expandafter\@s@l@ctive@sanitize\expandafter#3#3%
+ \expandafter\endgroup\expandafter\def\expandafter#3\expandafter{#3}%
+}
+\def\@s@l@ctive@sanitize#1#2#3{%
+ \def\@i{\futurelet\@@tok\@ii}%
+ \def\@ii{%
+ \expandafter\@iii\meaning\@@tok\relax
+ \ifx\@@tok\@s@l@ctive@sanitize
+ \let\@@cmd\@gobble
+ \else
+ \ifx\@@tok\@sptoken
+ \XKV@toks\expandafter{#1}\edef#1{\the\XKV@toks\space}%
+ \def\@@cmd{\afterassignment\@i\let\@@tok= }%
+ \else
+ \let\@@cmd\@iv
+ \fi
+ \fi
+ \@@cmd
+ }%
+ \def\@iii##1##2\relax{\if##1\@backslashchar\let\@@tok\relax\fi}%
+ \def\@iv##1{%
+ \toks@\expandafter{#1}\XKV@toks{##1}%
+ \ifx\@@tok\bgroup
+ \advance\count@\m@ne
+ \ifnum\count@>\z@
+ \begingroup
+ \def#1{\expandafter\@s@l@ctive@sanitize
+ \csname\string#1\endcsname{#2}}%
+ \expandafter#1\expandafter{\the\XKV@toks}%
+ \XKV@toks\expandafter\expandafter\expandafter
+ {\csname\string#1\endcsname}%
+ \edef#1{\noexpand\XKV@toks{\the\XKV@toks}}%
+ \expandafter\endgroup#1%
+ \fi
+ \edef#1{\the\toks@{\the\XKV@toks}}%
+ \advance\count@\@ne
+ \let\@@cmd\@i
+ \else
+ \edef#1{\expandafter\string\the\XKV@toks}%
+ \expandafter\in@\expandafter{#1}{#2}%
+ \edef#1{\the\toks@\ifin@#1\else
+ \ifx\@@tok\@sptoken\space\else\the\XKV@toks\fi\fi}%
+ \edef\@@cmd{\noexpand\@i\ifx\@@tok\@sptoken\the\XKV@toks\fi}%
+ \fi
+ \@@cmd
+ }%
+ \let#1\@empty\@i#3\@s@l@ctive@sanitize
+}
+\def\XKV@checksanitizea#1#2{%
+ \XKV@ch@cksanitize{#1}#2=%
+ \ifin@\else\XKV@ch@cksanitize{#1}#2,\fi
+ \ifin@\@selective@sanitize[0]{,=}#2\fi
+}
+\def\XKV@checksanitizeb#1#2{%
+ \XKV@ch@cksanitize{#1}#2,%
+ \ifin@\@selective@sanitize[0],#2\fi
+}
+\def\XKV@ch@cksanitize#1#2#3{%
+ \def#2{#1}%
+ \@onelevel@sanitize#2%
+ \@expandtwoargs\in@#3{#2}%
+ \ifin@
+ \def#2##1#3##2\@nil{%
+ \def#2{##2}%
+ \ifx#2\@empty\else\in@false\fi
+ }%
+ #2#1#3\@nil
+ \fi
+ \def#2{#1}%
+}
+\def\XKV@sp@deflist#1#2{%
+ \let#1\@empty
+ \XKV@for@n{#2}\XKV@resa{%
+ \expandafter\KV@@sp@def\expandafter\XKV@resa\expandafter{\XKV@resa}%
+ \XKV@addtomacro@o#1{\expandafter,\XKV@resa}%
+ }%
+ \ifx#1\@empty\else
+ \def\XKV@resa,##1\@nil{\def#1{##1}}%
+ \expandafter\XKV@resa#1\@nil
+ \fi
+}
+\def\XKV@merge#1#2#3{%
+ \XKV@checksanitizea{#2}\XKV@tempa
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \XKV@pltrue
+ #3\XKV@tempa\XKV@tempb
+ \let\XKV@tempc#1%
+ \let#1\@empty
+ \XKV@for@o\XKV@tempc\XKV@tempc{%
+ #3\XKV@tempc\XKV@tempd
+ \ifx\XKV@tempb\XKV@tempd
+ \XKV@plfalse
+ \XKV@addtolist@o#1\XKV@tempa
+ \else
+ \XKV@addtolist@o#1\XKV@tempc
+ \fi
+ }%
+ \ifXKV@pl\XKV@addtolist@o#1\XKV@tempa\fi
+ }%
+ \ifXKV@st\global\let#1#1\fi
+}
+\def\XKV@delete#1#2#3{%
+ \XKV@checksanitizeb{#2}\XKV@tempa
+ \let\XKV@tempb#1%
+ \let#1\@empty
+ \XKV@for@o\XKV@tempb\XKV@tempb{%
+ #3\XKV@tempb\XKV@tempc
+ \@expandtwoargs\in@{,\XKV@tempc,}{,\XKV@tempa,}%
+ \ifin@\else\XKV@addtolist@o#1\XKV@tempb\fi
+ }%
+ \ifXKV@st\global\let#1#1\fi
+}
+\def\XKV@warn#1{\message{xkeyval warning: #1}}
+\def\XKV@err#1{\errmessage{xkeyval error: #1}}
+\def\KV@errx{\XKV@err}
+\let\KV@err\KV@errx
+\def\XKV@ifstar#1{\@ifnextcharacter*{\@firstoftwo{#1}}}
+\def\XKV@ifplus#1{\@ifnextcharacter+{\@firstoftwo{#1}}}
+\def\XKV@makepf#1{%
+ \KV@@sp@def\XKV@prefix{#1}%
+ \def\XKV@resa{XKV}%
+ \ifx\XKV@prefix\XKV@resa
+ \XKV@err{`XKV' prefix is not allowed}%
+ \let\XKV@prefix\@empty
+ \else
+ \edef\XKV@prefix{\ifx\XKV@prefix\@empty\else\XKV@prefix @\fi}%
+ \fi
+}
+\def\XKV@makehd#1{%
+ \expandafter\KV@@sp@def\expandafter\XKV@header\expandafter{#1}%
+ \edef\XKV@header{%
+ \XKV@prefix\ifx\XKV@header\@empty\else\XKV@header @\fi
+ }%
+}
+\def\XKV@srstate#1#2{%
+ \ifx\@empty#2\@empty\advance\XKV@depth\@ne\fi
+ \XKV@for@n{XKV@prefix,XKV@fams,XKV@na,ifXKV@st,ifXKV@pl,ifXKV@knf}%
+ \XKV@resa{\expandafter\let\csname\XKV@resa#1\expandafter
+ \endcsname\csname\XKV@resa#2\endcsname
+ }%
+ \ifx\@empty#1\@empty\advance\XKV@depth\m@ne\fi
+}
+\def\XKV@testopta#1{%
+ \XKV@ifstar{\XKV@sttrue\XKV@t@stopta{#1}}%
+ {\XKV@stfalse\XKV@t@stopta{#1}}%
+}
+\def\XKV@t@stopta#1{\XKV@ifplus{\XKV@pltrue#1}{\XKV@plfalse#1}}
+\def\XKV@testoptb#1{\@testopt{\XKV@t@stoptb#1}{KV}}
+\def\XKV@t@stoptb#1[#2]#3{%
+ \XKV@makepf{#2}%
+ \XKV@makehd{#3}%
+ \KV@@sp@def\XKV@tfam{#3}%
+ #1%
+}
+\def\XKV@testoptc#1{\@testopt{\XKV@t@stoptc#1}{KV}}
+\def\XKV@t@stoptc#1[#2]#3{%
+ \XKV@makepf{#2}%
+ \XKV@checksanitizeb{#3}\XKV@fams
+ \expandafter\XKV@sp@deflist\expandafter
+ \XKV@fams\expandafter{\XKV@fams}%
+ \@testopt#1{}%
+}
+\def\XKV@testoptd#1#2{%
+ \XKV@testoptb{%
+ \edef\XKV@tempa{#2\XKV@header}%
+ \def\XKV@tempb{\@testopt{\XKV@t@stoptd#1}}%
+ \expandafter\XKV@tempb\expandafter{\XKV@tempa}%
+ }%
+}
+\def\XKV@t@stoptd#1[#2]#3{%
+ \@ifnextchar[{\XKV@sttrue#1{#2}{#3}}{\XKV@stfalse#1{#2}{#3}[]}%
+}
+\def\XKV@ifcmd#1#2#3{%
+ \def\XKV@@ifcmd##1#2##2##3\@nil##4{%
+ \def##4{##2}\ifx##4\@nnil
+ \def##4{##1}\expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+ \XKV@@ifcmd#1#2{\@nil}\@nil#3%
+}
+\def\XKV@getkeyname#1#2{\expandafter\XKV@g@tkeyname#1=\@nil#2}
+\def\XKV@g@tkeyname#1=#2\@nil#3{%
+ \XKV@ifcmd{#1}\savevalue#3{\XKV@rkvtrue\XKV@sgfalse}{%
+ \XKV@ifcmd{#1}\gsavevalue#3%
+ {\XKV@rkvtrue\XKV@sgtrue}{\XKV@rkvfalse\XKV@sgfalse}%
+ }%
+}
+\def\XKV@getsg#1#2{%
+ \expandafter\XKV@ifcmd\expandafter{#1}\global#2\XKV@sgtrue\XKV@sgfalse
+}
+\def\XKV@define@default#1#2{%
+ \expandafter\def\csname\XKV@header#1@default\expandafter
+ \endcsname\expandafter{\csname\XKV@header#1\endcsname{#2}}%
+}
+\def\define@key{\XKV@testoptb\XKV@define@key}
+\def\XKV@define@key#1{%
+ \@ifnextchar[{\XKV@d@fine@k@y{#1}}{%
+ \expandafter\def\csname\XKV@header#1\endcsname####1%
+ }%
+}
+\def\XKV@d@fine@k@y#1[#2]{%
+ \XKV@define@default{#1}{#2}%
+ \expandafter\def\csname\XKV@header#1\endcsname##1%
+}
+\def\define@cmdkey{\XKV@testoptd\XKV@define@cmdkey{cmd}}
+\def\XKV@define@cmdkey#1#2[#3]#4{%
+ \ifXKV@st\XKV@define@default{#2}{#3}\fi
+ \def\XKV@tempa{\expandafter\def\csname\XKV@header#2\endcsname####1}%
+ \begingroup\expandafter\endgroup\expandafter\XKV@tempa\expandafter
+ {\expandafter\def\csname#1#2\endcsname{##1}#4}%
+}
+\def\define@cmdkeys{\XKV@testoptd\XKV@define@cmdkeys{cmd}}
+\def\XKV@define@cmdkeys#1#2[#3]{%
+ \XKV@sp@deflist\XKV@tempa{#2}%
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \edef\XKV@tempa{\noexpand\XKV@define@cmdkey{#1}{\XKV@tempa}}%
+ \XKV@tempa[#3]{}%
+ }%
+}
+\def\define@choicekey{\XKV@testopta{\XKV@testoptb\XKV@define@choicekey}}
+\def\XKV@define@choicekey#1{\@testopt{\XKV@d@fine@choicekey{#1}}{}}
+\def\XKV@d@fine@choicekey#1[#2]#3{%
+ \toks@{#2}%
+ \XKV@sp@deflist\XKV@tempa{#3}\XKV@toks\expandafter{\XKV@tempa}%
+ \@ifnextchar[{\XKV@d@fine@ch@icekey{#1}}{\XKV@d@fine@ch@ic@key{#1}}%
+}
+\def\XKV@d@fine@ch@icekey#1[#2]{%
+ \XKV@define@default{#1}{#2}%
+ \XKV@d@fine@ch@ic@key{#1}%
+}
+\def\XKV@d@fine@ch@ic@key#1{%
+ \ifXKV@pl\XKV@afterelsefi
+ \expandafter\XKV@d@f@ne@ch@ic@k@y
+ \else\XKV@afterfi
+ \expandafter\XKV@d@f@ne@ch@ic@key
+ \fi
+ \csname\XKV@header#1\endcsname
+}
+\def\XKV@d@f@ne@ch@ic@key#1#2{\XKV@d@f@n@@ch@ic@k@y#1{{#2}}}
+\def\XKV@d@f@ne@ch@ic@k@y#1#2#3{\XKV@d@f@n@@ch@ic@k@y#1{{#2}{#3}}}
+\def\XKV@d@f@n@@ch@ic@k@y#1#2{%
+ \edef#1##1{%
+ \ifXKV@st\noexpand\XKV@sttrue\else\noexpand\XKV@stfalse\fi
+ \ifXKV@pl\noexpand\XKV@pltrue\else\noexpand\XKV@plfalse\fi
+ \noexpand\XKV@checkchoice[\the\toks@]{##1}{\the\XKV@toks}%
+ }%
+ \def\XKV@tempa{\def#1####1}%
+ \expandafter\XKV@tempa\expandafter{#1{##1}#2}%
+}
+\def\define@boolkey{\XKV@t@stopta{\XKV@testoptd\XKV@define@boolkey{}}}
+\def\XKV@define@boolkey#1#2[#3]{%
+ \ifXKV@pl\XKV@afterelsefi
+ \expandafter\XKV@d@f@ne@boolkey
+ \else\XKV@afterfi
+ \expandafter\XKV@d@fine@boolkey
+ \fi
+ \csname\XKV@header#2\endcsname{#2}{#1#2}{#3}%
+}
+\def\XKV@d@fine@boolkey#1#2#3#4#5{%
+ \XKV@d@f@ne@b@olkey#1{#2}{#3}{#4}%
+ {{\csname#3\XKV@resa\endcsname#5}}%
+}
+\def\XKV@d@f@ne@boolkey#1#2#3#4#5#6{%
+ \XKV@d@f@ne@b@olkey#1{#2}{#3}{#4}%
+ {{\csname#3\XKV@resa\endcsname#5}{#6}}%
+}
+\def\XKV@d@f@ne@b@olkey#1#2#3#4#5{%
+ \expandafter\newif\csname if#3\endcsname
+ \ifXKV@st\XKV@define@default{#2}{#4}\fi
+ \ifXKV@pl
+ \def#1##1{\XKV@pltrue\XKV@sttrue
+ \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5%
+ }%
+ \else
+ \def#1##1{\XKV@plfalse\XKV@sttrue
+ \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5%
+ }%
+ \fi
+}
+\def\define@boolkeys{\XKV@plfalse\XKV@testoptd\XKV@define@boolkeys{}}
+\def\XKV@define@boolkeys#1#2[#3]{%
+ \XKV@sp@deflist\XKV@tempa{#2}%
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \expandafter\XKV@d@fine@boolkeys\expandafter{\XKV@tempa}{#1}{#3}%
+ }%
+}
+\def\XKV@d@fine@boolkeys#1#2#3{%
+ \expandafter\XKV@d@f@ne@b@olkey\csname\XKV@header#1\endcsname
+ {#1}{#2#1}{#3}{{\csname#2#1\XKV@resa\endcsname}}%
+}
+\def\XKV@cc{\XKV@testopta{\@testopt\XKV@checkchoice{}}}
+\def\XKV@checkchoice[#1]#2#3{%
+ \def\XKV@tempa{#1}%
+ \ifXKV@st\lowercase{\fi
+ \ifx\XKV@tempa\@empty
+ \def\XKV@tempa{\XKV@ch@ckch@ice\@nil{#2}{#3}}%
+ \else
+ \def\XKV@tempa{\XKV@ch@ckchoice#1\@nil{#2}{#3}}%
+ \fi
+ \ifXKV@st}\fi\XKV@tempa
+}
+\def\XKV@ch@ckchoice#1#2\@nil#3#4{%
+ \def\XKV@tempa{#2}%
+ \ifx\XKV@tempa\@empty\XKV@afterelsefi
+ \XKV@ch@ckch@ice#1{#3}{#4}%
+ \else\XKV@afterfi
+ \XKV@@ch@ckchoice#1#2{#3}{#4}%
+ \fi
+}
+\def\XKV@ch@ckch@ice#1#2#3{%
+ \def\XKV@tempa{#1}%
+ \ifx\XKV@tempa\@nnil\let\XKV@tempa\@empty\else
+ \def\XKV@tempa{\def#1{#2}}%
+ \fi
+ \in@{,#2,}{,#3,}%
+ \ifin@
+ \ifXKV@pl
+ \XKV@addtomacro@n\XKV@tempa\@firstoftwo
+ \else
+ \XKV@addtomacro@n\XKV@tempa\@firstofone
+ \fi
+ \else
+ \ifXKV@pl
+ \XKV@addtomacro@n\XKV@tempa\@secondoftwo
+ \else
+ \XKV@toks{#2}%
+ \XKV@err{value `\the\XKV@toks' is not allowed}%
+ \XKV@addtomacro@n\XKV@tempa\@gobble
+ \fi
+ \fi
+ \XKV@tempa
+}
+\def\XKV@@ch@ckchoice#1#2#3#4{%
+ \edef\XKV@tempa{\the\count@}\count@\z@
+ \def\XKV@tempb{#3}%
+ \def\XKV@tempc##1,{%
+ \def#1{##1}%
+ \ifx#1\@nnil
+ \def#1{#3}\def#2{-1}\count@\XKV@tempa
+ \ifXKV@pl
+ \let\XKV@tempd\@secondoftwo
+ \else
+ \XKV@toks{#3}%
+ \XKV@err{value `\the\XKV@toks' is not allowed}%
+ \let\XKV@tempd\@gobble
+ \fi
+ \else
+ \ifx#1\XKV@tempb
+ \edef#2{\the\count@}\count@\XKV@tempa
+ \ifXKV@pl
+ \let\XKV@tempd\XKV@@ch@ckch@ice
+ \else
+ \let\XKV@tempd\XKV@@ch@ckch@ic@
+ \fi
+ \else
+ \advance\count@\@ne
+ \let\XKV@tempd\XKV@tempc
+ \fi
+ \fi
+ \XKV@tempd
+ }%
+ \XKV@tempc#4,\@nil,%
+}
+\def\XKV@@ch@ckch@ice#1\@nil,{\@firstoftwo}
+\def\XKV@@ch@ckch@ic@#1\@nil,{\@firstofone}
+\def\key@ifundefined{\@testopt\XKV@key@ifundefined{KV}}
+\def\XKV@key@ifundefined[#1]#2{%
+ \XKV@makepf{#1}%
+ \XKV@checksanitizeb{#2}\XKV@fams
+ \expandafter\XKV@sp@deflist\expandafter
+ \XKV@fams\expandafter{\XKV@fams}%
+ \XKV@key@if@ndefined
+}
+\def\XKV@key@if@ndefined#1{%
+ \XKV@knftrue
+ \KV@@sp@def\XKV@tkey{#1}%
+ \XKV@whilist\XKV@fams\XKV@tfam\ifXKV@knf\fi{%
+ \XKV@makehd\XKV@tfam
+ \XKV@ifundefined{\XKV@header\XKV@tkey}{}{\XKV@knffalse}%
+ }%
+ \ifXKV@knf
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\def\disable@keys{\XKV@testoptb\XKV@disable@keys}
+\def\XKV@disable@keys#1{%
+ \XKV@checksanitizeb{#1}\XKV@tempa
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \XKV@ifundefined{\XKV@header\XKV@tempa}{%
+ \XKV@err{key `\XKV@tempa' undefined}%
+ }{%
+ \edef\XKV@tempb{%
+ \noexpand\XKV@warn{key `\XKV@tempa' has been disabled}%
+ }%
+ \XKV@ifundefined{\XKV@header\XKV@tempa @default}{%
+ \edef\XKV@tempc{\noexpand\XKV@define@key{\XKV@tempa}}%
+ }{%
+ \edef\XKV@tempc{\noexpand\XKV@define@key{\XKV@tempa}[]}%
+ }%
+ \expandafter\XKV@tempc\expandafter{\XKV@tempb}%
+ }%
+ }%
+}
+\def\presetkeys{\XKV@stfalse\XKV@testoptb\XKV@presetkeys}
+\def\gpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@presetkeys}
+\def\XKV@presetkeys#1#2{%
+ \XKV@pr@setkeys{#1}{preseth}%
+ \XKV@pr@setkeys{#2}{presett}%
+}
+\def\XKV@pr@setkeys#1#2{%
+ \XKV@ifundefined{XKV@\XKV@header#2}{%
+ \XKV@checksanitizea{#1}\XKV@tempa
+ \ifXKV@st\expandafter\global\fi\expandafter\def\csname
+ XKV@\XKV@header#2\expandafter\endcsname\expandafter{\XKV@tempa}%
+ }{%
+ \expandafter\XKV@merge\csname XKV@\XKV@header
+ #2\endcsname{#1}\XKV@getkeyname
+ }%
+}
+\def\delpresetkeys{\XKV@stfalse\XKV@testoptb\XKV@delpresetkeys}
+\def\gdelpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@delpresetkeys}
+\def\XKV@delpresetkeys#1#2{%
+ \XKV@d@lpresetkeys{#1}{preseth}%
+ \XKV@d@lpresetkeys{#2}{presett}%
+}
+\def\XKV@d@lpresetkeys#1#2{%
+ \XKV@ifundefined{XKV@\XKV@header#2}{%
+ \XKV@err{no presets defined for `\XKV@header'}%
+ }{%
+ \expandafter\XKV@delete\csname XKV@\XKV@header
+ #2\endcsname{#1}\XKV@getkeyname
+ }%
+}
+\def\unpresetkeys{\XKV@stfalse\XKV@testoptb\XKV@unpresetkeys}
+\def\gunpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@unpresetkeys}
+\def\XKV@unpresetkeys{%
+ \XKV@ifundefined{XKV@\XKV@header preseth}{%
+ \XKV@err{no presets defined for `\XKV@header'}%
+ }{%
+ \ifXKV@st\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header preseth\endcsname\@undefined
+ \ifXKV@st\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header presett\endcsname\@undefined
+ }%
+}
+\def\savekeys{\XKV@stfalse\XKV@testoptb\XKV@savekeys}
+\def\gsavekeys{\XKV@sttrue\XKV@testoptb\XKV@savekeys}
+\def\XKV@savekeys#1{%
+ \XKV@ifundefined{XKV@\XKV@header save}{%
+ \XKV@checksanitizeb{#1}\XKV@tempa
+ \ifXKV@st\expandafter\global\fi\expandafter\def\csname XKV@%
+ \XKV@header save\expandafter\endcsname\expandafter{\XKV@tempa}%
+ }{%
+ \expandafter\XKV@merge\csname XKV@\XKV@header
+ save\endcsname{#1}\XKV@getsg
+ }%
+}
+\def\delsavekeys{\XKV@stfalse\XKV@testoptb\XKV@delsavekeys}
+\def\gdelsavekeys{\XKV@sttrue\XKV@testoptb\XKV@delsavekeys}
+\def\XKV@delsavekeys#1{%
+ \XKV@ifundefined{XKV@\XKV@header save}{%
+ \XKV@err{no save keys defined for `\XKV@header'}%
+ }{%
+ \expandafter\XKV@delete\csname XKV@\XKV@header
+ save\endcsname{#1}\XKV@getsg
+ }%
+}
+\def\unsavekeys{\XKV@stfalse\XKV@testoptb\XKV@unsavekeys}
+\def\gunsavekeys{\XKV@sttrue\XKV@testoptb\XKV@unsavekeys}
+\def\XKV@unsavekeys{%
+ \XKV@ifundefined{XKV@\XKV@header save}{%
+ \XKV@err{no save keys defined for `\XKV@header'}%
+ }{%
+ \ifXKV@st\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header save\endcsname\@undefined
+ }%
+}
+\def\setkeys{\XKV@testopta{\XKV@testoptc\XKV@setkeys}}
+\def\XKV@setkeys[#1]#2{%
+ \XKV@checksanitizea{#2}\XKV@resb
+ \let\XKV@naa\@empty
+ \XKV@for@o\XKV@resb\XKV@tempa{%
+ \expandafter\XKV@g@tkeyname\XKV@tempa=\@nil\XKV@tempa
+ \XKV@addtolist@x\XKV@naa\XKV@tempa
+ }%
+ \let\XKV@rm\@empty
+ \XKV@usepresetkeys{#1}{preseth}%
+ \expandafter\XKV@s@tkeys\expandafter{\XKV@resb}{#1}%
+ \XKV@usepresetkeys{#1}{presett}%
+}
+\def\XKV@usepresetkeys#1#2{%
+ \XKV@presettrue
+ \XKV@for@eo\XKV@fams\XKV@tfam{%
+ \XKV@makehd\XKV@tfam
+ \XKV@ifundefined{XKV@\XKV@header#2}{}{%
+ \XKV@toks\expandafter\expandafter\expandafter
+ {\csname XKV@\XKV@header#2\endcsname}%
+ \@expandtwoargs\XKV@s@tkeys{\the\XKV@toks}%
+ {\XKV@naa\ifx\XKV@naa\@empty\else,\fi#1}%
+ }%
+ }%
+ \XKV@presetfalse
+}
+\def\XKV@s@tkeys#1#2{%
+ \XKV@sp@deflist\XKV@na{#2}%
+ \XKV@for@n{#1}\CurrentOption{%
+ \expandafter\XKV@s@tk@ys\CurrentOption==\@nil
+ }%
+}
+\def\XKV@s@tk@ys#1=#2=#3\@nil{%
+ \XKV@g@tkeyname#1=\@nil\XKV@tkey
+ \expandafter\KV@@sp@def\expandafter\XKV@tkey\expandafter{\XKV@tkey}%
+ \ifx\XKV@tkey\@empty
+ \XKV@toks{#2}%
+ \ifcat$\the\XKV@toks$\else
+ \XKV@err{no key specified for value `\the\XKV@toks'}%
+ \fi
+ \else
+ \@expandtwoargs\in@{,\XKV@tkey,}{,\XKV@na,}%
+ \ifin@\else
+ \XKV@knftrue
+ \KV@@sp@def\XKV@tempa{#2}%
+ \ifXKV@preset\XKV@s@tk@ys@{#3}\else
+ \ifXKV@pl
+ \XKV@for@eo\XKV@fams\XKV@tfam{%
+ \XKV@makehd\XKV@tfam
+ \XKV@s@tk@ys@{#3}%
+ }%
+ \else
+ \XKV@whilist\XKV@fams\XKV@tfam\ifXKV@knf\fi{%
+ \XKV@makehd\XKV@tfam
+ \XKV@s@tk@ys@{#3}%
+ }%
+ \fi
+ \fi
+ \ifXKV@knf
+ \ifXKV@inpox
+ \ifx\XKV@doxs\relax
+ \ifx\@currext\@clsextension\else
+ \let\CurrentOption\XKV@tkey\@unknownoptionerror
+ \fi
+ \else\XKV@doxs\fi
+ \else
+ \ifXKV@st
+ \global\XKV@addtolist@o\XKV@rm\CurrentOption
+ \else
+ \XKV@err{`\XKV@tkey' undefined in families `\XKV@fams'}%
+ \fi
+ \fi
+ \else
+ \ifXKV@inpox\ifx\XKV@testclass\XKV@documentclass
+ \expandafter\XKV@useoption\expandafter{\CurrentOption}%
+ \fi\fi
+ \fi
+ \fi
+ \fi
+}
+\def\XKV@s@tk@ys@#1{%
+ \XKV@ifundefined{\XKV@header\XKV@tkey}{}{%
+ \XKV@knffalse
+ \XKV@ifundefined{XKV@\XKV@header save}{}{%
+ \expandafter\XKV@testsavekey\csname XKV@\XKV@header
+ save\endcsname\XKV@tkey
+ }%
+ \ifXKV@rkv
+ \ifXKV@sg\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header\XKV@tkey @value\endcsname\XKV@tempa
+ \fi
+ \expandafter\XKV@replacepointers\expandafter{\XKV@tempa}%
+ \ifx\@empty#1\@empty\XKV@afterelsefi
+ \XKV@ifundefined{\XKV@header\XKV@tkey @default}{%
+ \XKV@err{no value specified for key `\XKV@tkey'}%
+ }{%
+ \expandafter\expandafter\expandafter\XKV@default
+ \csname\XKV@header\XKV@tkey @default\endcsname\@nil
+ }%
+ \else\XKV@afterfi
+ \XKV@srstate{@\romannumeral\XKV@depth}{}%
+ \csname\XKV@header\XKV@tkey\expandafter
+ \endcsname\expandafter{\XKV@tempa}\relax
+ \XKV@srstate{}{@\romannumeral\XKV@depth}%
+ \fi
+ }%
+}
+\def\XKV@testsavekey#1#2{%
+ \ifXKV@rkv\else
+ \XKV@for@o#1\XKV@resa{%
+ \expandafter\XKV@ifcmd\expandafter{\XKV@resa}\global\XKV@resa{%
+ \ifx#2\XKV@resa
+ \XKV@rkvtrue\XKV@sgtrue
+ \fi
+ }{%
+ \ifx#2\XKV@resa
+ \XKV@rkvtrue\XKV@sgfalse
+ \fi
+ }%
+ }%
+ \fi
+}
+\def\XKV@replacepointers#1{%
+ \let\XKV@tempa\@empty
+ \let\XKV@resa\@empty
+ \XKV@r@placepointers#1\usevalue\@nil
+}
+\def\XKV@r@placepointers#1\usevalue#2{%
+ \XKV@addtomacro@n\XKV@tempa{#1}%
+ \def\XKV@tempb{#2}%
+ \ifx\XKV@tempb\@nnil\else\XKV@afterfi
+ \XKV@ifundefined{XKV@\XKV@header#2@value}{%
+ \XKV@err{no value recorded for key `#2'; ignored}%
+ \XKV@r@placepointers
+ }{%
+ \@expandtwoargs\in@{,#2,}{,\XKV@resa,}%
+ \ifin@\XKV@afterelsefi
+ \XKV@err{back linking pointers; pointer replacement canceled}%
+ \else\XKV@afterfi
+ \XKV@addtolist@x\XKV@resa{#2}%
+ \expandafter\expandafter\expandafter\XKV@r@placepointers
+ \csname XKV@\XKV@header#2@value\endcsname
+ \fi
+ }%
+ \fi
+}
+\def\XKV@default#1#2\@nil{%
+ \expandafter\edef\expandafter\XKV@tempa
+ \expandafter{\expandafter\@gobble\string#1}%
+ \edef\XKV@tempb{\XKV@header\XKV@tkey}%
+ \@onelevel@sanitize\XKV@tempb
+ \ifx\XKV@tempa\XKV@tempb
+ \begingroup
+ \expandafter\def\csname\XKV@header\XKV@tkey\endcsname##1{%
+ \gdef\XKV@tempa{##1}%
+ }%
+ \csname\XKV@header\XKV@tkey @default\endcsname
+ \endgroup
+ \XKV@ifundefined{XKV@\XKV@header save}{}{%
+ \expandafter\XKV@testsavekey\csname XKV@\XKV@header
+ save\endcsname\XKV@tkey
+ }%
+ \ifXKV@rkv
+ \ifXKV@sg\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header\XKV@tkey @value\endcsname\XKV@tempa
+ \fi
+ \expandafter\XKV@replacepointers\expandafter
+ {\XKV@tempa}\XKV@afterelsefi
+ \XKV@srstate{@\romannumeral\XKV@depth}{}%
+ \expandafter#1\expandafter{\XKV@tempa}\relax
+ \XKV@srstate{}{@\romannumeral\XKV@depth}%
+ \else\XKV@afterfi
+ \XKV@srstate{@\romannumeral\XKV@depth}{}%
+ \csname\XKV@header\XKV@tkey @default\endcsname\relax
+ \XKV@srstate{}{@\romannumeral\XKV@depth}%
+ \fi
+}
+\def\setrmkeys{\XKV@testopta{\XKV@testoptc\XKV@setrmkeys}}
+\def\XKV@setrmkeys[#1]{%
+ \def\XKV@tempa{\XKV@setkeys[#1]}%
+ \expandafter\XKV@tempa\expandafter{\XKV@rm}%
+}
+\XKVcatcodes
+\endinput
+%%
+%% End of file `xkeyval.tex'.
diff --git a/Master/texmf-dist/tex/latex/xkeyval/xkvltxp.sty b/Master/texmf-dist/tex/latex/xkeyval/xkvltxp.sty
new file mode 100644
index 00000000000..9f66ecccc60
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/xkvltxp.sty
@@ -0,0 +1,105 @@
+%%
+%% This is file `xkvltxp.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvltxpatch')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+%%
+%% Based on latex.ltx.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{xkvltxp}[2004/12/13 v1.2 LaTeX2e kernel patch (HA)]
+\def\@pass@ptions#1#2#3{%
+ \def\reserved@a{#2}%
+ \def\reserved@b{\CurrentOption}%
+ \ifx\reserved@a\reserved@b
+ \@ifundefined{opt@#3.#1}{\@temptokena\expandafter{#2}}{%
+ \@temptokena\expandafter\expandafter\expandafter
+ {\csname opt@#3.#1\endcsname}%
+ \@temptokena\expandafter\expandafter\expandafter{%
+ \expandafter\the\expandafter\@temptokena\expandafter,#2}%
+ }%
+ \else
+ \@ifundefined{opt@#3.#1}{\@temptokena{#2}}{%
+ \@temptokena\expandafter\expandafter\expandafter
+ {\csname opt@#3.#1\endcsname}%
+ \@temptokena\expandafter{\the\@temptokena,#2}%
+ }%
+ \fi
+ \expandafter\xdef\csname opt@#3.#1\endcsname{\the\@temptokena}%
+}
+\def\OptionNotUsed{%
+ \ifx\@currext\@clsextension
+ \let\reserved@a\CurrentOption
+ \@onelevel@sanitize\reserved@a
+ \xdef\@unusedoptionlist{%
+ \ifx\@unusedoptionlist\@empty\else\@unusedoptionlist,\fi
+ \reserved@a}%
+ \fi
+}
+\def\@use@ption{%
+ \let\reserved@a\CurrentOption
+ \@onelevel@sanitize\reserved@a
+ \@expandtwoargs\@removeelement\reserved@a
+ \@unusedoptionlist\@unusedoptionlist
+ \csname ds@\CurrentOption\endcsname
+}
+\def\@fileswith@pti@ns#1[#2]#3[#4]{%
+ \ifx#1\@clsextension
+ \ifx\@classoptionslist\relax
+ \@temptokena{#2}%
+ \xdef\@classoptionslist{\the\@temptokena}%
+ \def\reserved@a{%
+ \@onefilewithoptions#3[#2][#4]#1%
+ \@documentclasshook}%
+ \else
+ \def\reserved@a{%
+ \@onefilewithoptions#3[#2][#4]#1}%
+ \fi
+ \else
+ \@temptokena{#2}%
+ \def\reserved@b##1,{%
+ \ifx\@nil##1\relax\else
+ \ifx\relax##1\relax\else
+ \noexpand\@onefilewithoptions##1%
+ [\the\@temptokena][#4]\noexpand\@pkgextension
+ \fi
+ \expandafter\reserved@b
+ \fi}%
+ \edef\reserved@a{\zap@space#3 \@empty}%
+ \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nil,}%
+ \fi
+ \reserved@a}
+\let\@@fileswith@pti@ns\@fileswith@pti@ns
+\endinput
+%%
+%% End of file `xkvltxp.sty'.
diff --git a/Master/texmf-dist/tex/latex/xkeyval/xkvtxhdr.tex b/Master/texmf-dist/tex/latex/xkeyval/xkvtxhdr.tex
new file mode 100644
index 00000000000..f86969290f7
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/xkvtxhdr.tex
@@ -0,0 +1,91 @@
+%%
+%% This is file `xkvtxhdr.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvheader')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+%%
+%% Taken from latex.ltx.
+%%
+\message{2005/02/22 v1.1 xkeyval TeX header (HA)}
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\newif#1{%
+ \count@\escapechar \escapechar\m@ne
+ \let#1\iffalse
+ \@if#1\iftrue
+ \@if#1\iffalse
+ \escapechar\count@}
+\def\@if#1#2{%
+ \expandafter\def\csname\expandafter\@gobbletwo\string#1%
+ \expandafter\@gobbletwo\string#2\endcsname
+ {\let#1#2}}
+\long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+\def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch}
+\let\kernel@ifnextchar\@ifnextchar
+\long\def\@testopt#1#2{%
+ \kernel@ifnextchar[{#1}{#1[{#2}]}}
+\long\def\@firstofone#1{#1}
+\long\def \@gobble #1{}
+\long\def \@gobbletwo #1#2{}
+\def\@expandtwoargs#1#2#3{%
+\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a}
+\edef\@backslashchar{\expandafter\@gobble\string\\}
+\newif\ifin@
+\def\in@#1#2{%
+ \def\in@@##1#1##2##3\in@@{%
+ \ifx\in@##2\in@false\else\in@true\fi}%
+ \in@@#2#1\in@\in@@}
+\def\strip@prefix#1>{}
+\def \@onelevel@sanitize #1{%
+ \edef #1{\expandafter\strip@prefix
+ \meaning #1}%
+}
+\endinput
+%%
+%% End of file `xkvtxhdr.tex'.
diff --git a/Master/texmf-dist/tex/latex/xkeyval/xkvview.sty b/Master/texmf-dist/tex/latex/xkeyval/xkvview.sty
new file mode 100644
index 00000000000..112f2b7cfea
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xkeyval/xkvview.sty
@@ -0,0 +1,202 @@
+%%
+%% This is file `xkvview.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvview')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{xkvview}%
+ [2005/07/10 v1.4a viewer utility for xkeyval (HA)]
+\RequirePackage{xkeyval}
+\RequirePackage{longtable}
+\DeclareOptionX*{%
+ \PackageWarning{xkvview}{Unknown option `\CurrentOption'}%
+}
+\ProcessOptionsX
+\newif\ifXKVV@vwkey
+\newif\ifXKVV@colii
+\newif\ifXKVV@coliii
+\newif\ifXKVV@coliv
+\newif\ifXKVV@colv
+\newwrite\XKVV@out
+\let\XKVV@db\@empty
+\define@cmdkeys[XKVV]{xkvview}[XKVV@]{%
+ prefix,family,type,default,file,columns,wcolsep,weol}[\@nil]
+\define@boolkeys[XKVV]{xkvview}[XKVV@]{view,vlabels,wlabels}[true]
+\presetkeys[XKVV]{xkvview}{prefix,family,type,default,file,%
+ columns,wcolsep=&,weol=\\,view,vlabels=false,wlabels=false}{}
+\def\XKVV@tabulate#1#2#3{%
+ \def\XKV@tempa{#3}%
+ \@onelevel@sanitize\XKV@tempa
+ \XKV@addtolist@x\XKVV@db{#1=\expandafter
+ \XKVV@t@bulate\XKV@prefix=\XKV@tfam=#2=\XKV@tempa}%
+}
+\def\XKVV@t@bulate#1@{#1}
+\def\XKV@define@key#1{%
+ \@ifnextchar[{\XKV@d@fine@k@y{#1}}{%
+ \XKVV@tabulate{#1}{ordinary}{[none]}%
+ \expandafter\def\csname\XKV@header#1\endcsname####1%
+ }%
+}
+\def\XKV@d@fine@k@y#1[#2]{%
+ \XKVV@tabulate{#1}{ordinary}{#2}%
+ \XKV@define@default{#1}{#2}%
+ \expandafter\def\csname\XKV@header#1\endcsname##1%
+}
+\def\XKV@define@cmdkey#1#2[#3]#4{%
+ \ifXKV@st
+ \XKVV@tabulate{#2}{command}{#3}%
+ \XKV@define@default{#2}{#3}%
+ \else
+ \XKVV@tabulate{#2}{command}{[none]}%
+ \fi
+ \def\XKV@tempa{\expandafter\def\csname\XKV@header#2\endcsname####1}%
+ \begingroup\expandafter\endgroup\expandafter\XKV@tempa\expandafter
+ {\expandafter\def\csname#1#2\endcsname{##1}#4}%
+}
+\def\XKV@d@fine@ch@icekey#1[#2]{%
+ \XKVV@tabulate{#1}{choice}{#2}%
+ \XKV@define@default{#1}{#2}%
+ \XKV@d@fine@ch@ic@key{#1}%
+}
+\def\XKV@d@fine@ch@ic@key#1{%
+ \XKVV@tabulate{#1}{choice}{[none]}%
+ \ifXKV@pl\XKV@afterelsefi
+ \expandafter\XKV@d@f@ne@ch@ic@k@y
+ \else\XKV@afterfi
+ \expandafter\XKV@d@f@ne@ch@ic@key
+ \fi
+ \csname\XKV@header#1\endcsname
+}
+\def\XKV@d@f@ne@b@olkey#1#2#3#4#5{%
+ \expandafter\newif\csname if#3\endcsname
+ \ifXKV@st
+ \XKVV@tabulate{#2}{boolean}{#4}%
+ \XKV@define@default{#2}{#4}%
+ \else
+ \XKVV@tabulate{#2}{boolean}{[none]}%
+ \fi
+ \ifXKV@pl
+ \def#1##1{\XKV@pltrue\XKV@sttrue
+ \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5%
+ }%
+ \else
+ \def#1##1{\XKV@plfalse\XKV@sttrue
+ \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5%
+ }%
+ \fi
+}
+\def\xkvview#1{%
+ \setkeys[XKVV]{xkvview}{#1}%
+ \ifx\XKVV@default\@nnil\else\@onelevel@sanitize\XKVV@default\fi
+ \ifx\XKVV@columns\@nnil
+ \count@5
+ \XKVV@coliitrue\XKVV@coliiitrue\XKVV@colivtrue\XKVV@colvtrue
+ \else
+ \count@\@ne
+ \@expandtwoargs\in@{,prefix,}{,\XKVV@columns,}%
+ \ifin@\advance\count@\@ne\XKVV@coliitrue\else\XKVV@coliifalse\fi
+ \@expandtwoargs\in@{,family,}{,\XKVV@columns,}%
+ \ifin@\advance\count@\@ne\XKVV@coliiitrue\else\XKVV@coliiifalse\fi
+ \@expandtwoargs\in@{,type,}{,\XKVV@columns,}%
+ \ifin@\advance\count@\@ne\XKVV@colivtrue\else\XKVV@colivfalse\fi
+ \@expandtwoargs\in@{,default,}{,\XKVV@columns,}%
+ \ifin@\advance\count@\@ne\XKVV@colvtrue\else\XKVV@colvfalse\fi
+ \fi
+ \ifXKVV@view
+ \protected@edef\XKV@tempa{\noexpand\begin{longtable}[l]{%
+ *\the\count@ l}\normalfont Key\ifXKVV@colii&\normalfont Prefix%
+ \fi\ifXKVV@coliii&\normalfont Family\fi\ifXKVV@coliv&\normalfont
+ Type\fi\ifXKVV@colv&\normalfont Default\fi\\\noexpand\hline
+ \noexpand\endfirsthead\noexpand\multicolumn{\the\count@}{l}{%
+ \normalfont\emph{Continued from previous page}}\\\noexpand\hline
+ \normalfont Key\ifXKVV@colii&\normalfont Prefix\fi\ifXKVV@coliii
+ &\normalfont Family\fi\ifXKVV@coliv&\normalfont Type\fi
+ \ifXKVV@colv&\normalfont Default\fi\\\noexpand\hline\noexpand
+ \endhead\noexpand\hline\noexpand\multicolumn{\the\count@}{r}{%
+ \normalfont\emph{Continued on next page}}\\\noexpand\endfoot
+ \noexpand\hline\noexpand\endlastfoot
+ }%
+ \XKV@toks\expandafter{\XKV@tempa}%
+ \fi
+ \ifx\XKVV@file\@nnil\else\immediate\openout\XKVV@out\XKVV@file\fi
+ \XKV@for@o\XKVV@db\XKV@tempa{%
+ \XKVV@vwkeytrue\expandafter\XKVV@xkvview\XKV@tempa\@nil
+ }%
+ \ifXKVV@view
+ \addto@hook\XKV@toks{\end{longtable}}%
+ \begingroup\ttfamily\the\XKV@toks\endgroup
+ \fi
+ \ifx\XKVV@file\@nnil\else\immediate\closeout\XKVV@out\fi
+}
+\def\XKVV@xkvview#1=#2=#3=#4=#5\@nil{%
+ \ifx\XKVV@prefix\@nnil\else
+ \def\XKV@tempa{#2}%
+ \ifx\XKV@tempa\XKVV@prefix\else\XKVV@vwkeyfalse\fi
+ \fi
+ \ifx\XKVV@family\@nnil\else
+ \def\XKV@tempa{#3}%
+ \ifx\XKV@tempa\XKVV@family\else\XKVV@vwkeyfalse\fi
+ \fi
+ \ifx\XKVV@type\@nnil\else
+ \def\XKV@tempa{#4}%
+ \ifx\XKV@tempa\XKVV@type\else\XKVV@vwkeyfalse\fi
+ \fi
+ \ifx\XKVV@default\@nnil\else
+ \def\XKV@tempa{#5}%
+ \ifx\XKV@tempa\XKVV@default\else\XKVV@vwkeyfalse\fi
+ \fi
+ \ifXKVV@vwkey
+ \ifXKVV@view
+ \edef\XKV@tempa{%
+ #1\ifXKVV@colii&#2\fi\ifXKVV@coliii&#3\fi
+ \ifXKVV@coliv&#4\fi\ifXKVV@colv&#5\fi
+ \ifXKVV@vlabels\noexpand\label{#2-#3-#1}\fi
+ }%
+ \expandafter\addto@hook\expandafter
+ \XKV@toks\expandafter{\XKV@tempa\\}%
+ \fi
+ \ifx\XKVV@file\@nnil\else
+ \immediate\write\XKVV@out{%
+ #1\ifXKVV@colii\XKVV@wcolsep#2\fi
+ \ifXKVV@coliii\XKVV@wcolsep#3\fi
+ \ifXKVV@coliv\XKVV@wcolsep#4\fi
+ \ifXKVV@colv\XKVV@wcolsep#5\fi
+ \ifXKVV@wlabels\string\label{#2-#3-#1}\fi
+ \expandafter\noexpand\XKVV@weol
+ }%
+ \fi
+ \fi
+}
+\endinput
+%%
+%% End of file `xkvview.sty'.