% \iffalse meta-comment
% Line endings: UNIX
% Tab size:     4
%
% Copyright 2004 Jonathan Sauer
%
% 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".
%
% The Current Maintainer of this work is Jonathan Sauer
% (<jonathan.sauer@gmx.de>).
%
% This work consists of the files processkv.dtx and processkv.ins and
% the derived file processkv.sty.
%
% This work is based on the package keyval.
%
% \fi
%
% \iffalse
%
%<*driver>
\documentclass{ltxdoc}
\IfFileExists{processkv.sty}{\usepackage{processkv}}{}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
% Modification of verbatim for tabs in listings
\makeatletter
{\catcode`\ =\active%
\catcode`\^^I=\active%
\gdef\@vobeyspaces{%
\catcode`\ \active\let \@xobeysp%
\catcode`\^^I\active\def^^I{~~}%
}}%
\makeatother
\begin{document}
	\DocInput{\jobname.dtx}
\end{document}
%</driver>
%
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{processkv}
%<package>   [2004/08/09 v1.0.1 process key=value lists]
%<package>\RequirePackage{keyval}[1999/03/16]
%
% \fi
%
% \CheckSum{41}
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \DoNotIndex{\@empty,\@tempa,\@tempb,\def,\else,\empty,\expandafter}
% \DoNotIndex{\fi,\ifx,\relax}
%
% \changes{1.0.1}{2004/08/09}{Mangled macronames corrected.}
%
% \GetFileInfo{\jobname.sty}
%
% \title{The \textsf{processkv} package\thanks{This document
% corresponds to \textsf{\filename}~\fileversion, dated \filedate.}}
%
% \author{Jonathan Sauer \\ \texttt{jonathan.sauer@gmx.de}}
%
% \date{\filedate}
%
% \maketitle
%
% \begin{abstract}
% This file describes the \textsf{processkv} package that provides
% macros for processing of key-value-lists by calling a user-defined
% macro for each key-value-pair.
%
% \end{abstract}
%
% \tableofcontents
%
% \section{Introduction}
%
% The \textsf{keyval} package provides the possibility of specifying
% macro arguments as |key=value|, where |key| is one of previously
% defined keys. Sometimes it is necessary not to have to define the
% keys in advance, but to specify arbitrary keys which are then
% processed.
%
% This package provides the macro |\processkeyvalues| that calls a
% user-defined macro for each key-value-pair.
%
% This package makes use of some internal macros of the package
% \textsf{keyval}. I hope this will not break someday \ldots
%
%
% \section{Using the package}
%
% \DescribeMacro{\processkeyvalues} Usage: |\processkeyvalues|
% \marg{keyvalue-list} \marg{macro}.
%
% The main macro of this package. It calls \meta{macro} for each
% key-value-pair in \meta{keyvalue-list}. Macros in the list are not
% expanded.
%
% \meta{macro} can be any macro with two parameters, i.e:
%
% \begin{verbatim}
% \def\testmacro#1#2{%
% 	\message{Key = `#1', value = `#2'}%
% }
% \end{verbatim}
% Or
%
% \begin{verbatim}
% \newcommand{\testmacro}[2]{%
% 	\message{Key = `#1', value = `#2'}%
% }
% \end{verbatim}
%
%
% \StopEventually{}
%
% \section{Implementation}
%
% \subsection{Main macros}
%
% \begin{macro}{\processkeyvalues}
%
% Usage: |\processkeyvalues| \marg{keyvalue-list} \marg{macro}.
%
% Calls \meta{macro} for each key-value-pair in the list. \meta{macro}
% must have two parameters, \meta{key} and \meta{value}.
%
%    \begin{macrocode}
\def\processkeyvalues#1#2{%
	\def\PKV@process{#2}%
	\PKV@do#1,\relax,%
}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Internal macros}
%
% \begin{macro}{\PKV@do}
%
% Processes the list.
%
%    \begin{macrocode}
\def\PKV@do#1,{%
	\ifx\relax#1\empty\else%
	\PKV@split#1==\relax%
	\expandafter\PKV@do\fi%
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\PKV@split}
%
% Processes a key-value-pair of the list. Uses some macros of the
% \textsf{keyval} package.
%
%    \begin{macrocode}
\def\PKV@split#1=#2=#3\relax{%
	\KV@@sp@def\@tempa{#1}%
	\ifx\@tempa\@empty\else%
		\KV@@sp@def\@tempb{#2}%
		\expandafter\expandafter\expandafter\PKV@process%
			\expandafter\expandafter\expandafter{\expandafter\@tempa%
			\expandafter}\expandafter{\@tempb}%
	\fi%
}
%    \end{macrocode}
% \end{macro}
%
% \Finale
% \PrintChanges
% \PrintIndex
\endinput