# [NTG-context] Append to a commalist

Fredrik Sjunnesson Fredrik.Sjunnesson at acobiaflux.se
Thu Oct 12 23:15:20 CEST 2006

Great!

Thank you very much Hans. It would have taken me a lifetime to get there :)

/Fredrik

-----Ursprungligt meddelande-----
Från: ntg-context-bounces at ntg.nl [mailto:ntg-context-bounces at ntg.nl] För Hans Hagen
Skickat: den 12 oktober 2006 15:49
Till: mailing list for ConTeXt users
Ämne: Re: [NTG-context] Append to a commalist

Fredrik Sjunnesson wrote:
> Hello,
>
> Is there a smart way to create a commalist?
>
> I want to get the equivalent of
>
> \setparameter[namespace][listname={item1,item2,item3}]
>
> but be able to append one item at the time, like
>
> \append{namepace}{listname}{item1}
> \append{namepace}{listname}{item2}
> \append{namepace}{listname}{item3}
>
> I have tired this:
>
> \def\append#1#2#3{
>   \fullexpandoneargafter\doifemptyelse{\getvariable{#1}{#2}}
>   {\edef\tmp{#3}}
>   {\edef\tmp{\getvariable{#1}{#2},#3}}
>   \setvariables[#1][#2={\tmp}]}
>
> but it only works for one list. Apparently \tmp is not expanded so when
> an item is appended to one list all other lists are affected. I have
> tried \expanded but got the message stack full.
>
> Any help would be greatly appreciated.
>
>
\def\appendtovaluelist#1#2%
{\ifcsname#1\endcsname
\expandafter\ifx\csname#1\endcsname\empty
\expandafter\def\csname#1\endcsname{#2}%
\else
\expandafter\def\csname#1\expandafter
\expandafter\expandafter\endcsname
\expandafter\expandafter\expandafter{\csname#1\endcsname,#2}%
\fi
\else
\expandafter\def\csname#1\endcsname{#2}%
\fi}

% saves an argument:

\def\appendtovaluelist#1%
{\ifcsname#1\endcsname
\expandafter\ifx\csname#1\endcsname\empty
\expandafter\noappendtovaluelist
\csname#1\expandafter\expandafter\expandafter\endcsname
\else
\expandafter\doappendtovaluelist
\csname#1\expandafter\expandafter\expandafter\endcsname
\fi
\else
\expandafter\noappendtovaluelist\csname#1\expandafter\endcsname
\fi}

\def\doappendtovaluelist#1#2{\expandafter\def\expandafter#1\expandafter{#1,#2}}
\def\noappendtovaluelist#1#2{\def#1{#2}}

\appendtovaluelist{mylist}{aap}
\appendtovaluelist{mylist}{noot}
\appendtovaluelist{mylist}{mies}

\showvalue{mylist}

-----------------------------------------------------------------