From ccb587e18c23dd8a68d9deaab22ec4e090142e23 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 26 Aug 2009 23:58:20 +0000 Subject: keycommand 2.z (26aug09) git-svn-id: svn://tug.org/texlive/trunk@14875 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/keycommand/keycommand.sty | 99 ++++++++++++++-------- 1 file changed, 62 insertions(+), 37 deletions(-) (limited to 'Master/texmf-dist/tex/latex/keycommand') diff --git a/Master/texmf-dist/tex/latex/keycommand/keycommand.sty b/Master/texmf-dist/tex/latex/keycommand/keycommand.sty index 23b30abba2a..e6043d051ed 100644 --- a/Master/texmf-dist/tex/latex/keycommand/keycommand.sty +++ b/Master/texmf-dist/tex/latex/keycommand/keycommand.sty @@ -8,7 +8,7 @@ %% %% This is a generated file. %% -%% keycommand : an easy way to define commands with keys +%% keycommand : an easy way to define commands with optional keys %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -21,18 +21,18 @@ %% keycommand.sty, keycommand.pdf, keycommand.ins, %% keycommand-example.tex %% -%% keycommand : an easy way to define commands with keys +%% keycommand : an easy way to define commands with optional keys %% Copyright (C) 2009 by Florent Chervet %% \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) [2005/12/01]% LaTeX must be 2005/12/01 or younger (see kvsetkeys.dtx). \ProvidesPackage{keycommand} - [2009/07/22 an easy way to define commands with keys] + [2009/07/22 v2.e- an easy way to define commands with optional keys] \RequirePackage{etex,kvsetkeys} -\let\kcmd@AtEnd=\` -\def\`#1`{\csname #1\endcsname} -\def\kcmd@keydef#1#2#3#4#5{% #1=\global(eventually), #2=command, #3=family, #4=key, #5=def +\edef\kcmd@AtEnd{\catcode34 \the\catcode34}% " +\catcode34 4 +\def\kcmd@keydef#1#2#3#4#5{% #1=\global, #2=command, #3=family, #4=key, #5=def #1\expandafter\edef\csname kcmd@keys\string#2\endcsname{% \csname kcmd@keys\string#2\endcsname,#4}% #1\@namedef{KV@#3@#4@default\expandafter}\expandafter{% @@ -55,36 +55,45 @@ \csname KV@kcmd@\expandafter\@gobble\string #2@\kcmp@temp\endcsname \@undefined}}% #1\@namedef{kcmd@keys\string#2}{\@gobble}} + \DeclareRobustCommand\keycmd{\@star@or@long\kcmd@prefix} \def\kcmd@prefix{\begingroup \let\kcmd@gbl\@empty \def\kcmd@prfx{\l@ngrel@x}% - \futurelet\x\kcmd@pref@x} -\def\kcmd@pref@x{% - \ifx\x\@sptoken \let\next\kcmd@pref@x@space + \futurelet\x\kcmd@@prefix} +\def\kcmd@@prefix{% + \let\kcmd@next@addto\kcmd@next@prefix + \ifx\x\@sptoken \let\next\kcmd@space@prefix \else \let\next\kcmd@addto@prfx \ifx\x\long \else\ifx\x\outer \else\ifx\x\protected \else\ifx\x\global \def\kcmd@gbl{\global}% \else - \def\kcmd@pref@x@next{\expandafter\key@cmd\noexpand}% + \def\kcmd@next@addto{\expandafter\key@cmd\noexpand}% \ifx\x\def \else\ifx\x\edef \else\ifx\x\gdef \def\kcmd@gbl{\global}% \else\ifx\x\xdef \def\kcmd@gbl{\global}% - \else \def\next{\kcmd@error{a \string\def\space - was expected after \string\keycmd.}}% + \else \let\kcmd@next@addto\kcmd@next@prefix + \ifx\y\x\kcmd@error@prefix + \else\let\y\x + \fi + \let\next\kcmd@expand@prefix \fi\fi\fi\fi \fi\fi\fi\fi \fi\next} -\begingroup\def\:{\kcmd@pref@x@space} -\expandafter\gdef\: {\futurelet\x\kcmd@pref@x} -\endgroup -\def\kcmd@addto@prfx#1{\expandafter\def\expandafter - \kcmd@prfx\expandafter{\kcmd@prfx#1}\kcmd@pref@x@next} -\def\kcmd@pref@x@next{\futurelet\x\kcmd@pref@x} -\def\kcmd@error#1{\@latex@error{#1}\@ehd} +\def\kcmd@next@prefix{\futurelet\x\kcmd@@prefix} +\def\kcmd@expand@prefix{\expandafter\kcmd@next@prefix} +\def\kcmd@addto@prfx#1{\let\y\@undefined + \expandafter\def\expandafter\kcmd@prfx + \expandafter{\kcmd@prfx#1}\kcmd@next@addto} +\expandafter\def\expandafter\kcmd@space@prefix\space{\kcmd@next@prefix} +\def\kcmd@error@prefix{\@latex@error{A \string\def\space + (or \string\gdef\space or \string\edef\space or \string\xdef)\MessageBreak + was expected after \string\keycmd\MessageBreak + I found a \meaning\x!\MessageBreak + see keycommand documentation for more information}\@ehd} \def\key@cmd#1{\@testopt{\expandafter\@keycmd\noexpand#1}{}} \def\@keycmd#1[#2]{\@tempswafalse\expandafter \@rc@ifdefinable\noexpand#1{\@tempswatrue}% @@ -112,7 +121,7 @@ \kcmd@undefinekeys{\kcmd@gbl}{#1}% \kv@parse{##1}{\kcmd@definekey{\kcmd@gbl}{#1}{\kcmd@fam}}% \kcmd@gbl\protected\def#1{% entry point - \protected\def\commandkey########1{\noexpand\csname\kcmd@fam @########1\endcsname}% + \def\commandkey########1{\noexpand\csname\kcmd@fam @########1\endcsname}% \def\"kcmd\string#1"########1[########2]{% \kvsetkeys{\kcmd@fam}{########1,########2}% \"\string #1"}% @@ -129,11 +138,11 @@ in the keycommand \string#1!\MessageBreak see the definition of the keycommand (or environment)\wheremsg}\@ehd} \DeclareRobustCommand\newkeycommand{\@star@or@long - \expandafter\new@keycommand\noexpand} + {\expandafter\new@keycommand\noexpand}} \DeclareRobustCommand\renewkeycommand{\@star@or@long - \expandafter\renew@keycommand\noexpand} + {\expandafter\renew@keycommand\noexpand}} \DeclareRobustCommand\providekeycommand{\@star@or@long - \expandafter\provide@keycommand\noexpand} + {\expandafter\provide@keycommand\noexpand}} \def\new@keycommand#1{\@testopt{\expandafter\@newkeycommand\noexpand#1}{}} \def\@newkeycommand#1[#2]{\begingroup \@tempswafalse\expandafter @@ -181,20 +190,36 @@ \expandafter\let\csname\expandafter\string\csname #1\endcsname\endcsname\relax \expandafter\let\csname end#1\endcsname\relax \new@keyenvironment{#1}} -\def\kv@normalize#1{% - \begingroup - \toks@{,#1,}% - \KVS@Comma - \KVS@SpaceComma{ }% - \KVS@CommaSpace - \KVS@CommaComma - \KVS@Equals - \KVS@SpaceEquals{ }% - \KVS@EqualsSpace% \KVS@EqualsSpace{ } - \xdef\KVS@Global{\the\toks@}% - \endgroup - \let\kv@list\KVS@Global -} + + +\def\kcmd@afterelse#1\else#2\fi{\fi#1} +\def\kcmd@afterfi#1\fi{\fi#1} +\newcommand\kcmd@expandnext[2]{% + \ifx#1\kcmd@expandnext + \kcmd@afterelse\expandafter\expandafter\expandafter + \expandafter\@kcmd@expandnext{#2}{\expandafter\expandafter\expandafter}% + \else\kcmd@afterfi\expandafter#1\expandafter{#2}% + \fi} +\long\def\@kcmd@expandnext#1#2#3{% + \ifx#1\kcmd@expandnext + \expandafter\kcmd@afterelse\expandafter\expandafter\expandafter + \expandafter\@kcmd@expandnext{#3}{\expandafter#2#2}% + \else + \expandafter\kcmd@afterfi#2#1#2{#3}% + \fi} +\def\kcmd@expandonce#1{\unexpanded\expandafter{#1}} +\begingroup\catcode`\:=4\catcode`\&=4 +\gdef\kcmd@ifblank#1{\kcmd@ifblank@#1&&\@secondoftwo\@firstoftwo:} +\gdef\kcmd@ifblank@#1#2#4#5:{#4} +\endgroup +\newcommand\ifcommandkey[3]{% + \kcmd@expandnext\kcmd@expandnext\kcmd@expandnext\kcmd@expandnext\kcmd@expandnext + \kcmd@expandnext\kcmd@expandnext\kcmd@expandnext\kcmd@expandnext\kcmd@expandnext + \kcmd@expandnext\kcmd@expandnext\kcmd@expandnext\kcmd@ifblank{% + \kcmd@expandnext\kcmd@expandnext\kcmd@expandonce{\commandkey{#1}}} + {#3} + {#2}} +\kcmd@AtEnd \endinput %% %% End of file `keycommand.sty'. -- cgit v1.2.3