Files
NetUnicodeInfo/UnicodeInformation/UnicodeCharacterRange.cs
T
2014-11-01 14:09:56 +01:00

58 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UnicodeInformation
{
public struct UnicodeCharacterRange
{
public readonly int FirstCodePoint;
public readonly int LastCodePoint;
public UnicodeCharacterRange(int codePoint)
{
if (codePoint < 0 || codePoint > 0x10FFFF) throw new ArgumentOutOfRangeException("codePoint");
FirstCodePoint = codePoint;
LastCodePoint = codePoint;
}
public UnicodeCharacterRange(int firstCodePoint, int lastCodePoint)
{
if (firstCodePoint < 0 || firstCodePoint > 0x10FFFF) throw new ArgumentOutOfRangeException("firstCodePoint");
if (lastCodePoint < firstCodePoint || lastCodePoint > 0x10FFFF) throw new ArgumentOutOfRangeException("lastCodePoint");
FirstCodePoint = firstCodePoint;
LastCodePoint = lastCodePoint;
}
public override string ToString()
{
return FirstCodePoint == LastCodePoint ? FirstCodePoint.ToString("X4") : FirstCodePoint.ToString("X4") + ".." + LastCodePoint.ToString("X4");
}
public static UnicodeCharacterRange Parse(string s)
{
int start, end;
var rangeSeparatorOffset = s.IndexOf("..");
if (rangeSeparatorOffset == 0) throw new FormatException();
else if (rangeSeparatorOffset < 0)
{
start = end = int.Parse(s, NumberStyles.HexNumber);
}
else
{
start = int.Parse(s.Substring(0, rangeSeparatorOffset), NumberStyles.HexNumber);
end = int.Parse(s.Substring(rangeSeparatorOffset + 2), NumberStyles.HexNumber);
}
return new UnicodeCharacterRange(start, end);
}
}
}