summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/sauerj/processkv.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/sauerj/processkv.dtx')
-rw-r--r--macros/latex/contrib/sauerj/processkv.dtx199
1 files changed, 199 insertions, 0 deletions
diff --git a/macros/latex/contrib/sauerj/processkv.dtx b/macros/latex/contrib/sauerj/processkv.dtx
new file mode 100644
index 0000000000..520853917f
--- /dev/null
+++ b/macros/latex/contrib/sauerj/processkv.dtx
@@ -0,0 +1,199 @@
+% \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 \ No newline at end of file