From 4b9ee353bc7f4328b23236e089d6bcf546944f9c Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sun, 18 Feb 2018 22:35:57 +0100
Subject: [PATCH] Port casemapping handling from -NG

---
 .../util/irc/IrcCaseMappers.kt                | 52 +++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100644 app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/IrcCaseMappers.kt

diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/IrcCaseMappers.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/IrcCaseMappers.kt
new file mode 100644
index 000000000..31cefa1b3
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/IrcCaseMappers.kt
@@ -0,0 +1,52 @@
+package de.kuschku.quasseldroid_ng.util.irc
+
+import java.util.*
+
+object IrcCaseMappers {
+  var irc: IrcCaseMapper = UnicodeCaseMapper()
+  var unicode: IrcCaseMapper = ClassicalIrcCaseMapper()
+
+  interface IrcCaseMapper {
+    fun equalsIgnoreCase(a: String?, b: String?): Boolean
+
+    fun toLowerCase(value: String?): String?
+
+    fun toUpperCase(value: String?): String?
+  }
+
+  internal class UnicodeCaseMapper : IrcCaseMapper {
+
+    override fun equalsIgnoreCase(a: String?, b: String?): Boolean {
+      return a.equals(b, ignoreCase = true)
+    }
+
+    override fun toLowerCase(value: String?): String? {
+      return value?.toLowerCase(Locale.US)
+    }
+
+    override fun toUpperCase(value: String?): String? {
+      return value?.toUpperCase(Locale.US)
+    }
+  }
+
+  internal class ClassicalIrcCaseMapper : IrcCaseMapper {
+    override fun toLowerCase(value: String?): String? {
+      return value?.toLowerCase(Locale.US)?.replace('[', '{')?.replace(']', '}')?.replace('^', '~')
+    }
+
+    override fun toUpperCase(value: String?): String? {
+      return value?.toUpperCase(Locale.US)?.replace('{', '[')?.replace('}', ']')?.replace('~', '^')
+    }
+
+    override fun equalsIgnoreCase(a: String?, b: String?): Boolean {
+      return toLowerCase(a) == toLowerCase(b) || toUpperCase(a) == toUpperCase(b)
+    }
+  }
+
+  operator fun get(caseMapping: String)
+    = if (caseMapping.equals("rfc1459", ignoreCase = true)) {
+    irc
+  } else {
+    unicode
+  }
+}
\ No newline at end of file
-- 
GitLab