ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Append to a commalist
@ 2006-10-12 11:38 Fredrik Sjunnesson
  2006-10-12 13:49 ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Fredrik Sjunnesson @ 2006-10-12 11:38 UTC (permalink / raw)


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.

/Fredrik
 


--------------------------------
Teknisk projektledare
Ph.D. Complex Systems
AcobiaFLUX AB
fredrik.sjunnesson@acobiaflux.se
Tel: +46 (0) 31 722 48 11
Fax: +46 (0) 31 722 48 01
Mob: +46 (0) 733 27 92 41
www.acobiaflux.se 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Append to a commalist
  2006-10-12 11:38 Append to a commalist Fredrik Sjunnesson
@ 2006-10-12 13:49 ` Hans Hagen
  2006-10-12 15:31   ` Aditya Mahajan
  0 siblings, 1 reply; 6+ messages in thread
From: Hans Hagen @ 2006-10-12 13:49 UTC (permalink / raw)


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}




-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Append to a commalist
  2006-10-12 13:49 ` Hans Hagen
@ 2006-10-12 15:31   ` Aditya Mahajan
  2006-10-12 17:15     ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Aditya Mahajan @ 2006-10-12 15:31 UTC (permalink / raw)


On Thu, 12 Oct 2006, Hans Hagen wrote:

> 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}

What is the difference between a commalist and a valuelist :-)

\def\secondlist{}

\appendtocommalist{aap}  {\secondlist}
\appendtocommalist{noot} {\secondlist}
\appendtocommalist{mies} {\secondlist}

\showvalue{secondlist}

Aditya

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Append to a commalist
  2006-10-12 15:31   ` Aditya Mahajan
@ 2006-10-12 17:15     ` Hans Hagen
  0 siblings, 0 replies; 6+ messages in thread
From: Hans Hagen @ 2006-10-12 17:15 UTC (permalink / raw)


Aditya Mahajan wrote:
> On Thu, 12 Oct 2006, Hans Hagen wrote:
>
>   
>> 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}
>>     
>
> What is the difference between a commalist and a valuelist :-)
>
> \def\secondlist{}
>
> \appendtocommalist{aap}  {\secondlist}
> \appendtocommalist{noot} {\secondlist}
> \appendtocommalist{mies} {\secondlist}
>
> \showvalue{secondlist}
>
>   
nothing, just the {name} thing -)


-- 

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Append to a commalist
  2006-10-12 21:15 Fredrik Sjunnesson
@ 2006-10-12 22:03 ` Hans Hagen
  0 siblings, 0 replies; 6+ messages in thread
From: Hans Hagen @ 2006-10-12 22:03 UTC (permalink / raw)


Fredrik Sjunnesson wrote:
> Great!
>
> Thank you very much Hans. It would have taken me a lifetime to get there :)
>   
never mind, it *has* taken me alive time already and i'm spending my current livetime on trickier stuff 

it takes a while but in the end expandafter, noexpand, futurelet and afterassignment start making sense 

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Append to a commalist
@ 2006-10-12 21:15 Fredrik Sjunnesson
  2006-10-12 22:03 ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Fredrik Sjunnesson @ 2006-10-12 21:15 UTC (permalink / raw)


Great!

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

/Fredrik



-----Ursprungligt meddelande-----
Från: ntg-context-bounces@ntg.nl [mailto:ntg-context-bounces@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}




-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------

_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-10-12 22:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-10-12 11:38 Append to a commalist Fredrik Sjunnesson
2006-10-12 13:49 ` Hans Hagen
2006-10-12 15:31   ` Aditya Mahajan
2006-10-12 17:15     ` Hans Hagen
2006-10-12 21:15 Fredrik Sjunnesson
2006-10-12 22:03 ` 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).