45 lines
797 B
C#
45 lines
797 B
C#
namespace System.Unicode.Builder
|
|
{
|
|
public static class HexCodePoint
|
|
{
|
|
public static int ParsePrefixed(string s)
|
|
{
|
|
if (!s.StartsWith("U+"))
|
|
{
|
|
throw new FormatException("Expected a code point in the form U+nnnn.");
|
|
}
|
|
return Parse(s, 2);
|
|
}
|
|
|
|
public static int Parse(string s, int index)
|
|
{
|
|
return Parse(s, ref index);
|
|
}
|
|
|
|
public static int Parse(string s, ref int index)
|
|
{
|
|
int i = index;
|
|
int accum = 0;
|
|
|
|
while (i < s.Length)
|
|
{
|
|
char c = s[i];
|
|
|
|
if (c == ' ') break;
|
|
|
|
accum <<= 4;
|
|
|
|
if (c >= '0' && c <= '9') accum |= c - '0';
|
|
else if (c >= 'A' && c <= 'F') accum |= c - 'A' + 0xA;
|
|
else if (c >= 'a' && c <= 'f') accum |= c - 'a' + 0xA;
|
|
else throw new FormatException();
|
|
|
|
++i;
|
|
}
|
|
|
|
index = i;
|
|
return accum;
|
|
}
|
|
}
|
|
}
|