* 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
* Re: Append to a commalist
2006-10-12 21:15 Append to a commalist 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 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 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 11:38 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
* 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
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 21:15 Append to a commalist Fredrik Sjunnesson
2006-10-12 22:03 ` Hans Hagen
-- strict thread matches above, loose matches on Subject: below --
2006-10-12 11:38 Fredrik Sjunnesson
2006-10-12 13:49 ` Hans Hagen
2006-10-12 15:31 ` Aditya Mahajan
2006-10-12 17:15 ` 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).