commit cf5d743

Hubert Hirtz  ·  2020-10-29 07:59:28 +0000 UTC
parent 60d215d
Consider the CASEMAPPING isupport token

Using RFC1459 as a default since servers not advertising this token are
likely to be pre-IRCv2, thus following the casemapping described in the
RFCs.
2 files changed,  +25, -2
+5, -2
 1@@ -265,8 +265,11 @@ func (s *Session) IsChannel(name string) bool {
 2 }
 3 
 4 func (s *Session) Casemap(name string) string {
 5-	// TODO use CASEMAPPING
 6-	return CasemapASCII(name)
 7+	if s.features["CASEMAPPING"] == "ascii" {
 8+		return CasemapASCII(name)
 9+	} else {
10+		return CasemapRFC1459(name)
11+	}
12 }
13 
14 func (s *Session) Users() []string {
+20, -0
 1@@ -20,6 +20,26 @@ func CasemapASCII(name string) string {
 2 	return sb.String()
 3 }
 4 
 5+func CasemapRFC1459(name string) string {
 6+	var sb strings.Builder
 7+	sb.Grow(len(name))
 8+	for _, r := range name {
 9+		if 'A' <= r && r <= 'Z' {
10+			r += 'a' - 'A'
11+		} else if r == '[' {
12+			r = '{'
13+		} else if r == ']' {
14+			r = '}'
15+		} else if r == '\\' {
16+			r = '|'
17+		} else if r == '~' {
18+			r = '^'
19+		}
20+		sb.WriteRune(r)
21+	}
22+	return sb.String()
23+}
24+
25 func word(s string) (w, rest string) {
26 	split := strings.SplitN(s, " ", 2)
27