% \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 % (). % % 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} % % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{processkv} % [2004/08/09 v1.0.1 process key=value lists] %\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