diff options
Diffstat (limited to 'macros/latex/contrib/sauerj/processkv.dtx')
-rw-r--r-- | macros/latex/contrib/sauerj/processkv.dtx | 199 |
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 |