Mime-Version: |
1.0 (Apple Message framework v929.2) |
Content-Type: |
text/plain; charset=ISO-8859-1; format=flowed; delsp=yes |
Date: |
Tue, 18 Nov 2008 00:17:07 +1030 |
Reply-To: |
|
Subject: |
|
From: |
|
In-Reply-To: |
|
Content-Transfer-Encoding: |
8bit |
Sender: |
|
Parts/Attachments: |
|
|
On 07/11/2008, at 2:00 AM, Morten Høgholm wrote:
> Question is if you want to have the non-NN variants to be protected.
> If you do, then funny things can happen expansion-wise if you have
> active characters in the c-argument. Case in question: An active
> character appears in the c-argument (say, a colon in a reference
> label). If such a character uses the \ifincsname feature to turn
> normal in critical places, this will not kick in if \let:cN is
> protected and you can wind up with some strange things in place. If
> the functions are non-protected, they will perform argument expansion
> as usual and then stop once \let:NN is met.
Is this actually useful in practise? I'm trying to put some tests
together and I'm a bit stumped. I haven't done too much expansion
control in restricted contexts, so forgive any trivial cases I'm
overlooking. I'm thinking out loud here; some of the following might
be rather obvious in hindsight.
I'm assuming we've got something like
\def\expanded#1{\edef\tmp{#1}\tmp}
in which all the "funny stuff" is going on, since it's the only
expansion environment I can think of (in my tired state) where we
would be worried about the "c" argument being expanded in the wrong
context.
So if I write something like
\def\tmpa{abc}
\def\tmpz{xyz}
\expanded{ \let:cc{tmpa}{tmpz} }
this expands, sort of, to
\exp_args:Ncc\let:NN{tmpa}{tmpz}
then
\let:NN\tmpa\tmpz
then
\let:NN abc xyz
which is obviously bad news.
At least any active characters are indeed expanded "correctly" in a
csname or whatever. But that seems to be little comfort, when
everything else is being expanded when it doesn't make sense.
What I'm trying to ask, I guess, is: is there enough expansion control
"built-in" to \exp_args: to justify the argument above about \let:cN ?
I'm not arguing against not protecting the "c" variants, but at the
same time I'm a bit confused how they might be used.
Will
|
|
|