ircsharp/IrcStates/Casemap.cs

44 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;
}
}
}