Hi,

I'm not sure this ML is the right place to be asking my question, so 
please redirect me if needed.

I consider myself rather intimate with TeX (for instance I once 
reimplemented a key-val interface because the keyval package gobbled to 
much braces, and because I wanted more unknown key/unknown value 
facilities; nowadays I just use l3kv or l3keys), and I have been playing 
with expl3 for half a year.

I really like the approach you have taken, and have begun the process to 
rewrite my custom (ad-hoc) packages to take advantage of expl3; I could 
get rid of a lot of my packages since the functionnality is now directly 
included (probably better done than I could ever do myself), so thanks a 
lot for that.

The transision to expl3 is smooth until now, but I have one package that 
I have difficulty in translating: In my thesis, I use a kind of thing 
whose textual representation is some circles and squares intertwinned 
with integers. To type that, I like to use for instance `.8:3.9:5.9:0.' 
where a dot would be replaced by a circle and a colon by a square. I 
currently have a macro \chemin which typesets its argument in a new 
catcode regime where . is essentially \bullet and : is \square.

\chemin is defined like this:

\begingroup
\catcode`\:=13\catcode`\.=13\relax
\gdef\chemin#1{%
\begingroup
\catcode`\:=13\catcode`\.=13\relax
\let.\cheminsommet
\let:\cheminface
\endlinechar=-1\everyeof{}%
\scantokens{#1}%
\endgroup
}
\endgroup


I'm sure there is a way to define this in a beautiful expl3 manner, but 
I didn't find any satisfying definition. Of course I can basically use 
expl3 names and functions like \char_make_active:N, and using 
\cs_set_eq:NN to cheat and alias the functions I need to names without a 
colon, but that's hardly good looking.

Can you be of some help ? Or is there no beautiful way to solve this ? 
In which case, should there be an expl3 function akin to

\tl_rescan_with_active_char:nn { <char>=<token>, <char>=<token>, ...}{ 
<token list> }

where the <token>s in the first arg wouldn't be rescanned so that I 
could say

\tl_rescan_with_active_char:nn { :=\module_do_something:n, 
.=\module_do_another: } { #1 }
and it wouldn't complain about a non existent macro \module_do_something

I tried to play with \tl_[set_]rescan and didn't succeed in writing such 
a \tl_rescan_with_active_char:nn


Cheers,


Julien RIVAUD