[log in to unmask]"
type="cite">
[log in to unmask] wrote:
\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
A couple of things here. First, active characters tend to be bad news. In my own siunitx package, I've moved from using an approach like yours in v1 to trying a different system in v2, based on \tl_replace_all_in:Nnn:
\cs_set:Nn \my_int_function:n #1 {
\tl_set:Nn \l_my_tmp_tl {#1}
\tl_replace_all_in:Nnn \l_my_tmp_tl { . } { \cheminsommet }
\tl_replace_all_in:Nnn \l_my_tmp_tl { : } { \cheminface }
% Do more stuff with the input
}
The reason for this is two-fold. First, active characters can cause a lot of problems (see what happens when two packages try to do something like this).
Note that those characters would be set active only in the call of the
function; outside of it the catcode is preserved (or so I think). In
fact, in my first version of the \chemin macro, I did some kind of
replace, but without expl3 that meant an ugly thing with a lot of
ad-hoc looping code. Won't search/replace be slower than setting . and
: to macros ? Anyway, the question here is more to play with expl3 than
anything else, getting rid of chemin as it is now isn't a priority at
all... :)[log in to unmask]"
type="cite">
If you do want to use \tl_rescan:Nnx, what is wrong with
\group_begin:
\char_make_active:N \:
\char_make_active:N \.
\cs_gset:Npn \my_int_function:n #1 {
\tl_set_rescan:Nnx \l_my_tmp_tl
{
\char_make_active:N \:
\char_make_active:N \.
\cs_set_eq:NN . \cheminsommet
\cs_set_eq:NN : \cheminface
}
{#1}
% Stuff with \l_my_tmp_tl
}
\group_end:
or
\group_begin:
\char_make_active:N \:
\char_make_active:N \.
\cs_gset_eq:NN . \cheminsommet
\cs_gset_eq:NN : \cheminface
\cs_gset:Npn \my_int_function:n #1 {
\tl_set_rescan:Nnn \l_my_tmp_tl
{
\char_make_active:N \:
\char_make_active:N \.
}
{#1}
% Stuff with \l_my_tmp_tl
}
\group_end:
(The later makes active . and : globally available, so works without x-type expansion of the tl. I'd personally go for the first of these two solutions as it again is independent of what others do.)
I think I have tried such solutions, wouldn't TeX complain about
nonexistent \char_make_active because a colon cannot anymore be in the
name of a macro ?