From 6c8399fa0fdcc42516cf72c0cfe78791b2ae93c7 Mon Sep 17 00:00:00 2001 From: jesopo Date: Tue, 11 Sep 2018 08:52:12 +0100 Subject: Respect RFC1459 casemapping rules --- Utils.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'Utils.py') diff --git a/Utils.py b/Utils.py index 0aa407d4..ac39825c 100644 --- a/Utils.py +++ b/Utils.py @@ -1,10 +1,14 @@ import json, re, traceback, urllib.request, urllib.parse, urllib.error, ssl +import string import bs4 USER_AGENT = ("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36") REGEX_HTTP = re.compile("https?://", re.I) +RFC1459_UPPER = r'\[]~' +RFC1459_UPPER = r'|{}^' + def remove_colon(s): if s.startswith(":"): s = s[1:] @@ -13,6 +17,21 @@ def remove_colon(s): def arbitrary(s, n): return remove_colon(" ".join(s[n:])) +def _rfc1459_lower(s): + for upper, lower in zip(RFC1459_UPPER, RFC1459_LOWER): + s = s.replace(upper, lower) + return s.lower() +def irc_lower(server, s): + if server.case_mapping == "ascii": + return s.lower() + elif server.case_mapping == "rfc1459": + return _rfc1459_lower(s) + else: + raise ValueError("unknown casemapping '%s'" % server.case_mapping) + +def irc_equals(server, s1, s2): + return irc_lower(server, s1) == irc_lower(server, s2) + class IRCHostmask(object): def __init__(self, nickname, username, hostname, hostmask): self.nickname = nickname -- cgit v1.3.1-10-gc9f91