39 lines
1.2 KiB
C#
39 lines
1.2 KiB
C#
using System;
|
|
|
|
namespace IrcStates
|
|
{
|
|
public static class Casemap
|
|
{
|
|
public enum CaseMapping
|
|
{
|
|
Rfc1459,
|
|
Ascii
|
|
}
|
|
|
|
private const string AsciiUpperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
private const string AsciiLowerChars = "abcdefghijklmnopqrstuvwxyz";
|
|
private const string Rfc1459UpperChars = AsciiUpperChars + @"[]~\";
|
|
private const string Rfc1459LowerChars = AsciiLowerChars + @"{}^|";
|
|
|
|
private static string Replace(string s, string upper, string lower)
|
|
{
|
|
for (var i = 0; i < upper.Length; ++i) s = s.Replace(upper[i], lower[i]);
|
|
|
|
return s;
|
|
}
|
|
|
|
public static string CaseFold(CaseMapping mapping, string s)
|
|
{
|
|
if (s != null)
|
|
return mapping switch
|
|
{
|
|
CaseMapping.Rfc1459 => Replace(s, Rfc1459UpperChars, Rfc1459LowerChars),
|
|
CaseMapping.Ascii => Replace(s, AsciiUpperChars, AsciiLowerChars),
|
|
_ => throw new ArgumentOutOfRangeException(nameof(mapping), mapping, null)
|
|
};
|
|
|
|
return string.Empty;
|
|
}
|
|
}
|
|
}
|