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