public int UTF16ToUnicode(Scanner.XmlCharResult ch)
{
switch (ch.Length)
{
case 1:
return Convert.ToInt32(ch.Char1);
case 2:
Debug.Assert(
Convert.ToInt32(ch.Char1) >= 0xD800 &&
Convert.ToInt32(ch.Char1) <= 0xDBFF &&
Convert.ToInt32(ch.Char2) >= 0xDC00 &&
Convert.ToInt32(ch.Char2) <= 0xDFFF);
return (
Convert.ToInt32(ch.Char1) - 0xD800) << 10 +
(Convert.ToInt32(ch.Char2) - 0xDC00) + 0x10000;
}
return 0;
}