From 84764e76d62d68daac0a00ac53194a2e8bb8562e Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Fri, 26 Aug 2011 22:12:11 +0000
Subject: keyval2e 0.0.2 (26aug11)

git-svn-id: svn://tug.org/texlive/trunk@23698 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/keyval2e/keyval2e.sty | 137 +++++++++++++++-------
 1 file changed, 93 insertions(+), 44 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/keyval2e/keyval2e.sty')

diff --git a/Master/texmf-dist/tex/latex/keyval2e/keyval2e.sty b/Master/texmf-dist/tex/latex/keyval2e/keyval2e.sty
index 81e60c3e0c4..6d4769568ea 100644
--- a/Master/texmf-dist/tex/latex/keyval2e/keyval2e.sty
+++ b/Master/texmf-dist/tex/latex/keyval2e/keyval2e.sty
@@ -1,6 +1,6 @@
 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
 %                                                                          %
-% This is file 'keyval2e.sty', version 0.0.1, July 2011                    %
+% This is file 'keyval2e.sty', version 0.0.2, August 2011                  %
 %                                                                          %
 % This package and accompanying files may be distributed and/or            %
 % modified under the conditions of the LaTeX Project Public License,       %
@@ -24,14 +24,15 @@
 \UseNormalCatcodes
 \StyleFilePurpose{Lightweight and robust key-value parser (AM)}
 \StyleFileRCSInfo
-$Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
+$Id: keyval2e.sty,v 0.0.2 2011/08/24 09:00:00 Ahmed Musa Exp $
 \ProvidesPackage{keyval2e}[\StyleFileInfo]
 \NeedsTeXFormat{LaTeX2e}[1996/12/01]
 \SetStyleFileMessages[kve@]{info}{warn}{err}
+\newvariables{count}[kve@]{keydepth}[0]
 \robust@def*\kve@parse{\cpt@teststopt\kve@parse@a,}
 \robust@def*\kve@parse@a[#1]#2#3{%
+  \kve@ifblank#2\doblank\gobble@to@relax
   \cpt@stchoose{cpt@st}{#2}\reserved@e\kve@parse
-  \ifx\@empty\reserved@e\begingroup\cpt@defrelax\fi
   \pushfunctions\kve@parse
     {\ifloopbreak,\kve@do,\kve@act}\cpt@csvdepth
   \cpt@sttrue\cpt@csvnormalize[#1]\reserved@e
@@ -48,6 +49,14 @@ $Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
   \expandafter\kve@do\expandafter.\reserved@e#1\cpt@nil#1%
   \popfunctions\kve@parse\cpt@csvdepth\cpt@relax
 }
+\robust@def*\kve@ifblank#1\doblank#2{%
+  \ifcat$\detokenize\expandafter{\@gobble#1.}$%
+    \expandafter\@iden
+  \else
+    \expandafter\@gobble
+  \fi
+  {#2}%
+}
 % \kve@definekeys[<pref>]{<fam>}[<mp>]{keya/defa/callback,...}
 \robust@def*\kve@definekeys{%
   \begingroup\endlinechar\m@one
@@ -58,53 +67,92 @@ $Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
   \cpt@testopt{\kve@d@f@nekeys{#1}{#2}}{kvmp@}%
 }
 \robust@def*\kve@d@f@nekeys#1#2[#3]#4{%
-  \gletcs\ifcpt@defkeyst\ifcpt@st
+  \gletcs\ifkve@tempsw\ifcpt@st
   \endgroup
-  \ifx\noindent#4\noindent\begingroup\cpt@defrelax\fi
+  \kve@ifblank#4\doblank\gobble@to@relax
   \def\kve@d@f@n@keys##1{%
-    \ifcpt@defkeyst
-      \newcsndef*{#1@#2@\currkey}####1{%
-        \newcsndef*{#3\currkey}{####1}##1\relax
+    \ifkve@tempsw
+      \ifcsndefinable{#1@#2@\currkey}{%
+        \ifcsndefinable{#3\currkey}{}%
+      }%
+    \fi
+    \begingroup
+    \def\kve@true{true}\def\kve@false{false}%
+    \expandafter\endgroup\ifcase\ifx\currval\kve@true0\else
+      \ifx\currval\kve@false0\else1\fi\fi\relax
+      \expandafter\newif\csname if#3\currkey\endcsname
+      \@namedef{#1@#2@\currkey}####1{%
+        \kve@checkbool{####1}{%
+          \usename{#3\currkey####1}%
+          \@namedef{#3\currkey}{####1}##1\relax
+        }{%
+          \kve@keyvalerr
+        }%
       }%
     \else
-      \csndef{#1@#2@\currkey}####1{%
-        \csndef{#3\currkey}{####1}##1\relax
+      \@namedef{#1@#2@\currkey}####1{%
+        \@namedef{#3\currkey}{####1}##1\relax
       }%
     \fi
   }%
-  \csndef{#1@#2@initialkeyvals}{}%
-  \def\kve@splita##1/{\def\currkey{##1}\kve@splitb.}%
+  \@namedef{#1@#2@initialkeyvals}{}%
+  \def\kve@tempc{^?}%
+  \def\kve@splita##1/{%
+    \edef\currkey{\cpttrimspaces{##1}}%
+    \kve@splitb.%
+  }%
   \def\kve@splitb##1/##2/##3\kve@nil{%
-    \edef\currval{\unexpanded\expandafter{\@gobble##1}}%
-    \csnedef{#1@#2@\currkey @default}{%
-      \cptmakecs{#1@#2@\currkey}{\expandcsonce\currval}%
-    }%
-    \kve@d@f@n@keys{##2}%
+    \edef\currval{\expandafter\cpttrimspaces\expandafter{\@gobble##1}}%
+    \ifx\currval\kve@tempc
+      \def\currval{}%
+    \else
+      \expandafter\edef\csname#1@#2@\currkey @default\endcsname{%
+        \cptmakecs{#1@#2@\currkey}{\expandcsonce\currval}%
+      }%
+    \fi
+    \edef\kve@tempb{\unexpanded{##2}}%
+    \ifx\kve@tempb\kve@tempc\def\kve@tempb{}\fi
+    \expandafter\kve@d@f@n@keys\expandafter{\kve@tempb}%
     \letcstocsn\kve@tempa{#1@#2@initialkeyvals}%
-    \csnedef{#1@#2@initialkeyvals}{%
+    \expandafter\edef\csname#1@#2@initialkeyvals\endcsname{%
       \cptliststack,\kve@tempa\currkey=%
       \oifstrcmpTF\currval{true}{false}{\expandcsonce\currval}%
     }%
   }%
-  \kve@parse{#4}{\kve@splita##1///\kve@nil}%
+  \kve@parse{#4}{\kve@splita##1/^?/^?/\kve@nil}%
   \kve@setdefaults[#1]{#2}[]\cpt@relax
 }
 % \kve@setkeys[pref]{<fam>}[na]{<keyval>}
 \robust@def*\kve@setkeys{\cpt@testopt\kve@setkeys@a{KV}}
 \robust@def*\kve@setkeys@a[#1]#2{\cpt@testopt{\kve@setkeys@b{#1}{#2}}{}}
 \robust@def*\kve@setkeys@b#1#2[#3]#4{%
-  \ifx\noindent#4\noindent\begingroup\cpt@defrelax\fi
+  \kve@ifblank#4\doblank\gobble@to@relax
+  \ifnum\kve@keydepth>4\relax
+    \kve@err{Maximum re-entrance limit of 4 exceeded
+      \MsgBrk by \string\kve@setkeys}\@ehc
+  \fi
   \pushfunctions\kve@setkeys{\currpref,\currfam,\currkey,%
     \currval,\currkeyval}\kve@keydepth
   \def\currpref{#1}\def\currfam{#2}%
   \edef\kve@na{\cptcommanormalize{#3}}%
-  \def\kve@splita##1={\def\currkey{##1}\kve@splitb.}%
+  \def\kve@splita##1={%
+    \def\currkey{##1}%
+    \kve@splitb.%
+  }%
   \def\kve@splitb##1=##2\kve@nil{%
+    \cpt@swafalse
+    \kve@ifblank##2\doblank{%
+      \ifcsndefTF{#1@#2@\currkey @default}{%
+        \cpt@swatrue
+      }{%
+        \kve@err{No user value and no default value
+          \MsgBrk for key '\currkey'}\@ehc
+      }%
+    }%
     \edef\currval{\unexpanded\expandafter{\@gobble##1}}%
     \edef\currkeyval{\expandcsonce\currkey=\expandcsonce\currval}%
     \xifinsetTF{,\cptoxdetok\currkey,}{,\cptoxdetok\kve@na,}
-      {}
-      {\kve@setkeys@c{#1}{#2}}%
+      {}{\kve@setkeys@c{#1}{#2}}%
   }%
   \cpt@stfalse\cpt@kvnormalize[,]{#4}%
   \kve@parse*\normalized@list{\kve@splita##1==\kve@nil}%
@@ -113,12 +161,12 @@ $Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
 }
 \robust@def*\kve@setkeys@c#1#2{%
   \ifcsndefTF{#1@#2@\currkey}{%
-    \ifcsemptyTF\currval{%
+    \ifcpt@swa
       \begingroup
-      \csndef{#1@#2@\currkey}##1{\toks@{\def\currval{##1}}}%
+      \@namedef{#1@#2@\currkey}##1{\toks@{\def\currval{##1}}}%
       \csname#1@#2@\currkey @default\endcsname
       \expandafter\endgroup\the\toks@
-    }{}%
+    \fi
     \csname#1@#2@\currkey\expandafter
       \endcsname\expandafter{\currval}\relax
   }{%
@@ -128,17 +176,16 @@ $Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
 }
 \robust@def*\kve@getkeynames#1{%
   \def\kve@keynames{}%
-  \ifblankTF{#1}{}{%
-    \begingroup
-    \cpt@stfalse\cpt@kvnormalize[,]{#1}%
-    \def\kve@g@tkeynames##1=##2\kve@nil{%
-      \edef\kve@keynames{%
-        \cptliststack,\kve@keynames\cpttrimspaces{##1}%
-      }%
+  \kve@ifblank#1\doblank\gobble@to@relax
+  \begingroup
+  \cpt@stfalse\cpt@kvnormalize[,]{#1}%
+  \def\kve@g@tkeynames##1=##2\kve@nil{%
+    \edef\kve@keynames{%
+      \cptliststack,\kve@keynames\cpttrimspaces{##1}%
     }%
-    \kve@parse*\normalized@list{\kve@g@tkeynames##1=\kve@nil}%
-    \postgroupdef\kve@keynames\endgroup
   }%
+  \kve@parse*\normalized@list{\kve@g@tkeynames##1=\kve@nil}%
+  \postgroupdef\kve@keynames\endgroup\cpt@relax
 }
 % \kve@setdefaults[<pref>]{<fam>}[<na>]
 \robust@def*\kve@setdefaults{\cpt@testopt\kve@s@tdefaults{KV}}
@@ -157,7 +204,7 @@ $Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
       {No initial key-value pairs saved for '#1,#2'.}%
   }%
 }
-% \kve@setafterdefaults[<pref>]{<fam>}[<na>]{<curr-keyval>}
+% \kve@setafterdefaults[<pref>]{<fam>}[<na>]{<keyval>}
 \robust@def*\kve@setafterdefaults{%
   \cpt@testopt\kve@s@tafterdefaults{KV}%
 }
@@ -165,7 +212,7 @@ $Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
   \cpt@testopt{\kve@s@taft@rdefaults{#1}{#2}}{}%
 }
 \robust@def*\kve@s@taft@rdefaults#1#2[#3]#4{%
-  \ifx\noindent#4\noindent\begingroup\cpt@defrelax\fi
+  \kve@ifblank#4\doblank\gobble@to@relax
   \kve@getkeynames{#4}%
   \letcstocsn\kve@tempa{#1@#2@initialkeyvals}%
   \ifdefTF\kve@tempa{%
@@ -204,17 +251,19 @@ $Id: keyval2e.sty,v 0.0.1 2011/08/11 09:00:00 Ahmed Musa Exp $
 }
 \robust@def*\kve@checkchoice#1#2#3{%
   \expandafter\cptswapfirstbraced\expandafter
-  {\romannumeral-`\q\cpttrimspace{#1}}
+  {\romannumeral-`\q\cpttrimspaces{#1}}
   {\kve@ch@ckchoice#2,\cpt@mil:\cpt@mil,\cpt@nil}{#3}%
 }
 \robust@def*\kve@ch@ckchoice#1:#2,#3\cpt@nil#4#5{%
-  \ifblankTF{#3}{\unexpanded{#5}}{%
-    \xifstrcmpTF{\cpttrimspaces{#1}}{\unexpanded{#4}}{%
-      \unexpanded{#2}%
-    }{%
-      \kve@ch@ckchoice#3\cpt@nil{#4}{#5}%
-    }%
+  \kve@ifblank#3\doblank{%
+    \unexpanded{#5}\gobble@to@relax
   }%
+  \xifstrcmpTF{\cpttrimspaces{#1}}{\unexpanded{#4}}{%
+    \unexpanded{#2}%
+  }{%
+    \kve@ch@ckchoice#3\cpt@nil{#4}{#5}%
+  }%
+  \cpt@relax
 }
 
 \endinput
\ No newline at end of file
-- 
cgit v1.2.3

