Hi Maurice,

The 'key' to the keyval functionality in ConTeXt are two macros called
\getparameters and \processaction.

Here is a 'quickstart', assuming you want to define \myzigzag:

%
\unprotect % enable exclamations in macro names

\def\myzigzag#1[#2]{% 
  % the #1 makes sure we allow a space before the bracket
  %
  \getparameters[ZZ][Dir=,Linewidth=1pt,Color=Red,Width=3em,#2]
  %
  % Now you have a set of new macros that all start with ZZ. 
  % At least there are \ZZDir,\ZZLinewidth, \ZZColor and \ZZWidth
  % (these have default values) but possibly others as well, 
  % depending on user input.
  % 
  % Here's a usage example: 
  %
  \edef\mywidth{\ZZWidth}%
  %
  % If you want to use keyword values, then you also need 
  % to use \processaction.
  % 
  % Say you want "Dir" to be mandatory and that it 
  % accepts 4 directional keywords, as well as a direct 
  % angle specification.
  %
  % I've used all mixed case keywords, because otherwise
  % you might run into conflicts with the multilingual interface
  %
  \expandafter\processaction\expandafter[\ZZDir]
        [Down       =>\def\Dir{270},
         Left       =>\def\Dir{180},
         Up         =>\def\Dir{90},
         Right      =>\def\Dir{0},
         \s!default =>\errorDir, 
         \s!unknown =>\checkDir{\ZZDir}]
  % 
  % \s!default may be triggered because \ZZDir's expansion is 
  % empty unless the user supplied something.
  %
  % The first argument to \processaction has to be expanded,
  % so you need the \expandafter's.q
}

% for completeness, here is an example definition of \checkDir and
% \errorDir:

\def\errorDir{%
   \def\Dir{0}% error recovery
   \message{Please supply "Dir" argument}%
}

\def\checkDir#1{%
  \doifnumberelse {#1}
                  {\def\Dir{#1}}
                  {\message{Invalid "Dir" argument! (#1)}}
}

\protect % end of definitions


On Sat, 26 Jun 2004 11:51:14 +0200, Maurice wrote:

> Bonjour à tous,
> 
> One thing is missing in context (or not documented in reference manual?)
> is a standard and easy way to build arbitrary parametrised high level 
> macros.
> 


-- 
groeten,

Taco
_______________________________________________
ntg-context mailing list
[EMAIL PROTECTED]
http://www.ntg.nl/mailman/listinfo/ntg-context

Reply via email to