You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CaseMapping.kt 938B

1234567891011121314151617181920212223242526
  1. package com.dmdirc.ktirc.io
  2. enum class CaseMapping(private val lowerToUpperMapping: Pair<IntRange, IntRange>) {
  3. Ascii(97..122 to 65..90),
  4. Rfc(97..126 to 65..94),
  5. RfcStrict(97..125 to 65..93);
  6. companion object {
  7. fun fromName(name: String) = when(name.toLowerCase()) {
  8. "ascii" -> Ascii
  9. "rfc1459" -> Rfc
  10. "rfc1459-strict" -> RfcStrict
  11. else -> Rfc
  12. }
  13. }
  14. fun areEquivalent(string1: String, string2: String): Boolean {
  15. return string1.length == string2.length
  16. && string1.zip(string2).all { (c1, c2) -> areEquivalent(c1, c2) }
  17. }
  18. private fun areEquivalent(char1: Char, char2: Char) = char1 == char2 || char1.toUpper() == char2.toUpper()
  19. private fun Char.toUpper() = this + if (this.toInt() in lowerToUpperMapping.first) lowerToUpperMapping.second.start - lowerToUpperMapping.first.start else 0
  20. }