private XmlCharResult ScanXmlCharRef(ref int index)
{
Debug.Assert(index >= 0);
if (!CanGetCharAtOffset(index))
{
return default(XmlCharResult);
}
var charRefSb = new StringBuilder();
var Here = index;
var ch = PeekAheadChar(Here);
if (ch == 'x')
{
Here += 1;
while (CanGetCharAtOffset(Here))
{
ch = PeekAheadChar(Here);
if (XmlCharType.IsHexDigit(ch))
{
charRefSb.Append(ch);
}
else
{
break;
}
Here += 1;
}
if (charRefSb.Length > 0)
{
var result = HexToUTF16(charRefSb);
if (result.Length != 0)
{
index = Here;
}
return result;
}
}
else
{
while (CanGetCharAtOffset(Here))
{
ch = PeekAheadChar(Here);
if (XmlCharType.IsDigit(ch))
{
charRefSb.Append(ch);
}
else
{
break;
}
Here += 1;
}
if (charRefSb.Length > 0)
{
var result = DecToUTF16(charRefSb);
if (result.Length != 0)
{
index = Here;
}
return result;
}
}
return default(XmlCharResult);
}