Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ParseNumericCharRefInline()

int System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline ( int startPos,
bool expand,
StringBuilder internalSubsetBuilder,
out int charCount,
out EntityType entityType )
inlineprivate

Definition at line 6615 of file XmlTextReaderImpl.cs.

6616 {
6617 int num = 0;
6618 string res = null;
6619 char[] chars = _ps.chars;
6620 int i = startPos + 2;
6621 charCount = 0;
6622 int num2 = 0;
6623 try
6624 {
6625 if (chars[i] == 'x')
6626 {
6627 i++;
6628 num2 = i;
6630 while (true)
6631 {
6633 if (num3 == 255)
6634 {
6635 break;
6636 }
6637 num = checked(num * 16 + num3);
6638 i++;
6639 }
6640 entityType = EntityType.CharacterHex;
6641 }
6642 else
6643 {
6644 if (i >= _ps.charsUsed)
6645 {
6646 entityType = EntityType.Skipped;
6647 return -2;
6648 }
6649 num2 = i;
6651 for (; chars[i] >= '0' && chars[i] <= '9'; i++)
6652 {
6653 num = checked(num * 10 + chars[i] - 48);
6654 }
6655 entityType = EntityType.CharacterDec;
6656 }
6657 }
6658 catch (OverflowException innerException)
6659 {
6660 _ps.charPos = i;
6661 entityType = EntityType.Skipped;
6662 Throw(System.SR.Xml_CharEntityOverflow, (string)null, (Exception)innerException);
6663 }
6664 if (chars[i] != ';' || num2 == i)
6665 {
6666 if (i == _ps.charsUsed)
6667 {
6668 return -2;
6669 }
6670 Throw(i, res);
6671 }
6672 if (num <= 65535)
6673 {
6674 char c = (char)num;
6675 if (!XmlCharType.IsCharData(c) && ((_v1Compat && _normalize) || (!_v1Compat && _checkCharacters)))
6676 {
6677 Throw((_ps.chars[startPos + 2] == 'x') ? (startPos + 3) : (startPos + 2), System.SR.Xml_InvalidCharacter, XmlException.BuildCharExceptionArgs(c, '\0'));
6678 }
6679 if (expand)
6680 {
6682 chars[i] = c;
6683 }
6684 charCount = 1;
6685 return i + 1;
6686 }
6687 XmlCharType.SplitSurrogateChar(num, out var lowChar, out var highChar);
6688 if (_normalize && (!XmlCharType.IsHighSurrogate(highChar) || !XmlCharType.IsLowSurrogate(lowChar)))
6689 {
6690 Throw((_ps.chars[startPos + 2] == 'x') ? (startPos + 3) : (startPos + 2), System.SR.Xml_InvalidCharacter, XmlException.BuildCharExceptionArgs(highChar, lowChar));
6691 }
6692 if (expand)
6693 {
6695 chars[i - 1] = highChar;
6696 chars[i] = lowChar;
6697 }
6698 charCount = 2;
6699 return i + 1;
6700 }
static int FromChar(int c)
static string Xml_CharEntityOverflow
Definition SR.cs:208
static string Xml_BadDecimalEntity
Definition SR.cs:46
static string Xml_BadHexEntity
Definition SR.cs:48
Definition SR.cs:7
void Throw(int pos, string res, string arg)

References System.Xml.XmlTextReaderImpl._checkCharacters, System.Xml.XmlTextReaderImpl._normalize, System.Xml.XmlTextReaderImpl._ps, System.Xml.XmlTextReaderImpl._v1Compat, System.Xml.XmlException.BuildCharExceptionArgs(), System.charCount, System.Xml.XmlTextReaderImpl.ParsingState.charPos, System.chars, System.Xml.XmlTextReaderImpl.ParsingState.chars, System.Xml.XmlTextReaderImpl.ParsingState.charsUsed, System.Xml.Dictionary, System.HexConverter.FromChar(), System.Xml.XmlCharType.IsCharData(), System.Xml.XmlCharType.IsHighSurrogate(), System.Xml.XmlCharType.IsLowSurrogate(), System.Xml.XmlCharType.SplitSurrogateChar(), System.Xml.XmlTextReaderImpl.Throw(), System.SR.Xml_BadDecimalEntity, System.SR.Xml_BadHexEntity, System.SR.Xml_CharEntityOverflow, and System.SR.Xml_InvalidCharacter.

Referenced by System.Xml.XmlTextReaderImpl.ParseCharRefInline(), System.Xml.XmlTextReaderImpl.ParseNumericCharRef(), and System.Xml.XmlTextReaderImpl.ParseNumericCharRefAsync().