* how to dismantle parametrized macro
@ 2003-05-20 14:14 Johannes Hüsing
2003-05-21 12:30 ` Hans Hagen
0 siblings, 1 reply; 6+ messages in thread
From: Johannes Hüsing @ 2003-05-20 14:14 UTC (permalink / raw)
Dear ConTeXters,
I am a bit stuck about how to handle the key-value mechanism of ConTeXt.
The text here, between my "monkey-see-monkey-do"
attempts to write a macro, hopefully demonstrates what I want to achieve.
Could sb give me a hand?
Thank you very much
Johannes
---8-<---
\setupcolors[state=start]
\setupoutput[pdf]
\definecolor[Accent:1:5][r=0.50, g=0.79, b=0.50]
\definecolor[Accent:2:5][r=0.75, g=0.69, b=0.84]
\definecolor[Accent:3:5][r=1.00, g=0.76, b=0.53]
\definecolor[Accent:4:5][r=1.00, g=1.00, b=0.60]
\definecolor[Accent:5:5][r=0.22, g=0.43, b=0.69]
\def\defineCBpalet{\dodoubleemptywithset\dodefineCBpalet}
\def\dodefineCBpalet[#1][#2]%
{
\def\sep{}
\ifsecondargument
\getparameters[CB][\c!n=,#2]
\else
\def\CBn{3}
\fi
\def\colorlist{%
\dorecurse{\CBn}{
\sep #1:\recurselevel=#1:\recurselevel:\CBn
\def\sep{,}}}
\definepalet[#1][\colorlist]}
\defineCBpalet[Accent][n=5]
% I want this to expand into (without the indentation):
% \definepalet[Accent]
% [Accent:1=Accent:1:5,
% Accent:2=Accent:2:5,
% Accent:3=Accent:3:5,
% Accent:4=Accent:4:5,
% Accent:5=Accent:5:5]
\starttext
\comparepalet[Accent]
\stoptext
--->-8---
--
Johannes Hüsing There is something fascinating about science. One gets
hannes@ruhrau.de such wholesale returns of conjecture from such a
trifling investment of fact. Mark Twain
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to dismantle parametrized macro
2003-05-20 14:14 how to dismantle parametrized macro Johannes Hüsing
@ 2003-05-21 12:30 ` Hans Hagen
2003-05-21 20:09 ` Johannes Hüsing
0 siblings, 1 reply; 6+ messages in thread
From: Hans Hagen @ 2003-05-21 12:30 UTC (permalink / raw)
At 16:14 20/05/2003 +0200, you wrote:
>\def\dodefineCBpalet[#1][#2]%
> {
> \def\sep{}
> \ifsecondargument
> \getparameters[CB][\c!n=,#2]
> \else
> \def\CBn{3}
> \fi
^^^ this can be simplified (see code below)
> \def\colorlist{%
> \dorecurse{\CBn}{
> \sep #1:\recurselevel=#1:\recurselevel:\CBn
> \def\sep{,}}}
> \definepalet[#1][\colorlist]}
this way some loop is executed as argument, and that will fail (not fully
expandable and so)
>\defineCBpalet[Accent][n=5]
>
>% I want this to expand into (without the indentation):
>% \definepalet[Accent]
>% [Accent:1=Accent:1:5,
>% Accent:2=Accent:2:5,
>% Accent:3=Accent:3:5,
>% Accent:4=Accent:4:5,
>% Accent:5=Accent:5:5]
>
>\starttext
>
>\comparepalet[Accent]
>
>\stoptext
The solution to this is to construct the comma list:
\def\defineCBpalet{\dodoubleempty\dodefineCBpalet}
\def\dodefineCBpalet[#1][#2]%
{\getparameters[CB][\c!n=3,#2]
\let\CBcolorlist\empty
\dorecurse\CBn
{\addtocommalist
{#1:\recurselevel=#1:\recurselevel:\CBn} % is always expanded
\CBcolorlist}
\expanded{\definepalet[#1][\CBcolorlist]}}
\defineCBpalet[Accent][n=5]
-------------------------------------------------------------------------
Hans Hagen | PRAGMA ADE | pragma@wxs.nl
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
information: http://www.pragma-ade.com/roadmap.pdf
documentation: http://www.pragma-ade.com/showcase.pdf
-------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to dismantle parametrized macro
2003-05-21 12:30 ` Hans Hagen
@ 2003-05-21 20:09 ` Johannes Hüsing
2003-05-23 12:47 ` Hans Hagen
0 siblings, 1 reply; 6+ messages in thread
From: Johannes Hüsing @ 2003-05-21 20:09 UTC (permalink / raw)
Hans Hagen <pragma@wxs.nl> [Wed, May 21, 2003 at 02:30:44PM CEST]:
[...]
>
> \def\defineCBpalet{\dodoubleempty\dodefineCBpalet}
>
> \def\dodefineCBpalet[#1][#2]%
> {\getparameters[CB][\c!n=3,#2]
> \let\CBcolorlist\empty
> \dorecurse\CBn
> {\addtocommalist
> {#1:\recurselevel=#1:\recurselevel:\CBn} % is always expanded
> \CBcolorlist}
> \expanded{\definepalet[#1][\CBcolorlist]}}
>
> \defineCBpalet[Accent][n=5]
This gives the following error message here:
! Missing \endcsname inserted.
<to be read again>
\unhbox
\leavevmode ->\unhbox
\voidb@x
\bottomaccent #1#2#3#4#5->\leavevmode
\vtop {\forgetall \baselineskip \zerop...
\dohandleaccent ...acterencoding #1\endcsname {#2}
\else \csname \nocharacter...
<argument> \c !
n
\dosetvalue ...!internal!n \ifcsname \k!prefix! #2
\endcsname \let \c!interna...
...
l.22 \defineCBpalet[Accent][n=5]
What gives?
Johannes
--
Johannes Hüsing There is something fascinating about science. One gets
hannes@ruhrau.de such wholesale returns of conjecture from such a
trifling investment of fact. Mark Twain
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to dismantle parametrized macro
2003-05-21 20:09 ` Johannes Hüsing
@ 2003-05-23 12:47 ` Hans Hagen
2003-05-24 21:09 ` Johannes Hüsing
0 siblings, 1 reply; 6+ messages in thread
From: Hans Hagen @ 2003-05-23 12:47 UTC (permalink / raw)
Cc: ntg-context
At 22:09 21/05/2003 +0200, Johannes Hüsing wrote:
>Hans Hagen <pragma@wxs.nl> [Wed, May 21, 2003 at 02:30:44PM CEST]:
>[...]
> >
> > \def\defineCBpalet{\dodoubleempty\dodefineCBpalet}
> >
> > \def\dodefineCBpalet[#1][#2]%
> > {\getparameters[CB][\c!n=3,#2]
> > \let\CBcolorlist\empty
> > \dorecurse\CBn
> > {\addtocommalist
> > {#1:\recurselevel=#1:\recurselevel:\CBn} % is always expanded
> > \CBcolorlist}
> > \expanded{\definepalet[#1][\CBcolorlist]}}
> >
> > \defineCBpalet[Accent][n=5]
\protect [macrodef] \unprotect
or
\c!n => n
Hans
-------------------------------------------------------------------------
Hans Hagen | PRAGMA ADE | pragma@wxs.nl
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
information: http://www.pragma-ade.com/roadmap.pdf
documentation: http://www.pragma-ade.com/showcase.pdf
-------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to dismantle parametrized macro
2003-05-23 12:47 ` Hans Hagen
@ 2003-05-24 21:09 ` Johannes Hüsing
2003-05-24 22:24 ` Hans Hagen
0 siblings, 1 reply; 6+ messages in thread
From: Johannes Hüsing @ 2003-05-24 21:09 UTC (permalink / raw)
Hans Hagen <pragma@wxs.nl> [Fri, May 23, 2003 at 02:47:15PM CEST]:
[...]
>
> \protect [macrodef] \unprotect
This didn't work -- caused the same error message.
>
> or
>
> \c!n => n
>
This works. Thank you very much!
Groeten
Johannes
--
Johannes Hüsing There is something fascinating about science. One gets
hannes@ruhrau.de such wholesale returns of conjecture from such a
trifling investment of fact. Mark Twain
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to dismantle parametrized macro
2003-05-24 21:09 ` Johannes Hüsing
@ 2003-05-24 22:24 ` Hans Hagen
0 siblings, 0 replies; 6+ messages in thread
From: Hans Hagen @ 2003-05-24 22:24 UTC (permalink / raw)
At 23:09 24/05/2003 +0200, you wrote:
>Hans Hagen <pragma@wxs.nl> [Fri, May 23, 2003 at 02:47:15PM CEST]:
>[...]
> >
> > \protect [macrodef] \unprotect
>
>This didn't work -- caused the same error message.
should be \unprotect ... \protect
-------------------------------------------------------------------------
Hans Hagen | PRAGMA ADE | pragma@wxs.nl
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
information: http://www.pragma-ade.com/roadmap.pdf
documentation: http://www.pragma-ade.com/showcase.pdf
-------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2003-05-24 22:24 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-20 14:14 how to dismantle parametrized macro Johannes Hüsing
2003-05-21 12:30 ` Hans Hagen
2003-05-21 20:09 ` Johannes Hüsing
2003-05-23 12:47 ` Hans Hagen
2003-05-24 21:09 ` Johannes Hüsing
2003-05-24 22:24 ` Hans Hagen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).