Historically ircII has always had two different contexts in which strings
were compared in a case insensitive way: Expressions, and wildcard patterns.
* In ircII expressions, strings are equal only if they are exactly identical,
except that case differences are forgiven:
[abc] == [ABC]
However, strings sort out case sensitively:
[BCD] < [abc]
because 'B' (66) is less than 'a' (97).
* In ircII wildcard patterns, strings are handled the same way as expressions.
However, these do not take into account irc nicknames, which have their own
history. The server considers the characters "[\]" uppercase equivalents to
"{|}" by rule (rfc1459) and the characters "^" and "~" equivalent by
historical practice (but not by rule).
This means it was impossible to do string comparisons to see if some nickname
on irc was your nickname:
on ^ctcp * {
if ([$1] == N) {
....
}
}
But if your nickname contained any of "[\]^{|}~", then the test would fail:
[foo~bar] and [foo^bar] are the same to the server, but different to ircII.
Similarly, $toupper() and $tolower() made no attempt to compensate for the
way servers do things.
------------------------------------------------------------------------------
So in EPIC3, the string comparisons were changed so they honored the server's
way of doing things. The /on ctcp above would work if your nickname contained
an unusual letter. But nothing else was changed -- particularly, regular
expressions, and $toupper() and $tolower() were not affected. This meant
you could not do this:
on ^ctcp '% $N *' {
....
}
if your nickname contained a weird character because only expression string
compare knew about the server way.
----------------------------------------------------------------------------
Today, some servers have de-supported the "[\]^{|}~" characters, making them
different, rather than equivalent. This is indicated by CASEMAPPING=ascii
or similar. On these servers, [foo^bar] and [foo~bar] are DIFFERENT
nicknames, instead of the same nickname.
Why is this important? If someone with the nickname [foo^bar] is on a
channel and someone else with [foo~bar] joins the channel, epic is going to
get mighty confused doing userhost caching because those are the same nick.
-----------------------------------------------------------------------------
So what to do? Should we just desupport the [\]^{|}~ characters in epic5,
because that is the way things are going, and it is easier? Should we make
some sort of half-hearted attempt to try to figure out whether [\]^ should
be the same as {|}~ or not, on the fly?
What about regular expressions? What about $toupper() and $tolower()?
I could use some advice and suggestions.
Jeremy
_______________________________________________
List mailing list
[email protected]
http://epicsol.org/mailman/listinfo/list