Message-ID: |
|
Sender: |
|
Subject: |
|
From: |
|
Date: |
Sat, 9 Mar 2013 12:55:25 +0100 |
Content-Type: |
text/plain; charset=ISO-8859-1 |
MIME-Version: |
1.0 |
Reply-To: |
|
Parts/Attachments: |
|
|
Hi all,
I encountered a bug in the \prop_map_tokens:Nn function in l3candidates.dtx.
Here's a not-working minimal example:
----------------------------------------
\ExplSyntaxOn
\cs_set:Nn \test_mapper:nn
{ (#1,~#2)~ }
\prop_new:N \testprop
\prop_put:Nnn \testprop {1} {v1}
\prop_put:Nnn \testprop {222} {v2}
\prop_put:Nnn \testprop {3} {v3}
\prop_put:Nnn \testprop {4} {v4}
\prop_map_tokens:Nn \testprop { \test_mapper:nn }
\ExplSyntaxOff
----------------------------------------
The output will be:
----------------------------------------
(1, v1)2
----------------------------------------
It only processes single-token keys correctly. At the first
multi-token key, everything except for its first two tokens are
processed directly, then the rest of the list is skipped.
Here's the fix for l3candidates.dtx:
----------------------------------------
\cs_new:Npn \@@_map_tokens:nwn #1 \q__prop #2 \q__prop #3
{
\__quark_if_recursion_tail_break:nN {#2} \prop_map_break:
\use:n {#1} {#2} {#3}
\@@_map_tokens:nwn {#1}
}
----------------------------------------
It just changes the tail-break test from :NN to :nN and adds braces around #2.
Cheers!
--
www.mhelvens.net
|
|
|