public static int CodePoint(string pattern, ref int index)
{
if (index >= pattern.Length)
return -1;
int hiUtf16 = (int)pattern[index++];
if (hiUtf16 < 0xD800 || hiUtf16 > 0xDBFF)
return hiUtf16;
else
{
int loUtf16 = (int)pattern[index++];
if (loUtf16 < 0xDC00 || loUtf16 > 0xDFFF)
throw new ArgumentException("Invalid surrogate pair");
else
return (0x10000 + (hiUtf16 & 0x3FF << 10) + (loUtf16 & 0x3FF));
}
}