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
List@epicsol.org
http://epicsol.org/mailman/listinfo/list

Reply via email to