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

◆ WriteCDataSectionNoFlush()

unsafe int System.Xml.XmlEncodedRawTextWriter.WriteCDataSectionNoFlush ( string text,
int index,
int count,
out bool needWriteNewLine )
inlineprotectedinherited

Definition at line 3021 of file XmlEncodedRawTextWriter.cs.

3022 {
3023 needWriteNewLine = false;
3024 if (count == 0)
3025 {
3026 return -1;
3027 }
3028 fixed (char* ptr = text)
3029 {
3030 char* ptr2 = ptr + index;
3031 char[] bufChars = _bufChars;
3032 fixed (char[] array = bufChars)
3033 {
3034 char* ptr3 = (char*)((bufChars != null && array.Length != 0) ? Unsafe.AsPointer(ref array[0]) : null);
3035 char* ptr4 = ptr2;
3036 char* ptr5 = ptr2 + count;
3037 char* ptr6 = ptr4;
3038 char* ptr7 = ptr3 + _bufPos;
3039 int num = 0;
3040 while (true)
3041 {
3042 char* ptr8 = ptr7 + (ptr5 - ptr4);
3043 if (ptr8 > ptr3 + _bufLen)
3044 {
3045 ptr8 = ptr3 + _bufLen;
3046 }
3047 while (ptr7 < ptr8 && XmlCharType.IsAttributeValueChar((char)(num = *ptr4)) && num != 93)
3048 {
3049 *ptr7 = (char)num;
3050 ptr7++;
3051 ptr4++;
3052 }
3053 if (ptr4 >= ptr5)
3054 {
3055 break;
3056 }
3057 if (ptr7 >= ptr8)
3058 {
3059 _bufPos = (int)(ptr7 - ptr3);
3060 return (int)(ptr4 - ptr6);
3061 }
3062 switch (num)
3063 {
3064 case 62:
3065 if (_hadDoubleBracket && ptr7[-1] == ']')
3066 {
3069 }
3070 *ptr7 = '>';
3071 ptr7++;
3072 break;
3073 case 93:
3074 if (ptr7[-1] == ']')
3075 {
3076 _hadDoubleBracket = true;
3077 }
3078 else
3079 {
3080 _hadDoubleBracket = false;
3081 }
3082 *ptr7 = ']';
3083 ptr7++;
3084 break;
3085 case 13:
3086 if (_newLineHandling == NewLineHandling.Replace)
3087 {
3088 if (ptr4 + 1 < ptr5 && ptr4[1] == '\n')
3089 {
3090 ptr4++;
3091 }
3092 _bufPos = (int)(ptr7 - ptr3);
3093 needWriteNewLine = true;
3094 return (int)(ptr4 - ptr6);
3095 }
3096 *ptr7 = (char)num;
3097 ptr7++;
3098 break;
3099 case 10:
3100 if (_newLineHandling == NewLineHandling.Replace)
3101 {
3102 _bufPos = (int)(ptr7 - ptr3);
3103 needWriteNewLine = true;
3104 return (int)(ptr4 - ptr6);
3105 }
3106 *ptr7 = (char)num;
3107 ptr7++;
3108 break;
3109 case 9:
3110 case 34:
3111 case 38:
3112 case 39:
3113 case 60:
3114 *ptr7 = (char)num;
3115 ptr7++;
3116 break;
3117 default:
3118 if (XmlCharType.IsSurrogate(num))
3119 {
3121 ptr4 += 2;
3122 }
3123 else if (num <= 127 || num >= 65534)
3124 {
3126 ptr4++;
3127 }
3128 else
3129 {
3130 *ptr7 = (char)num;
3131 ptr7++;
3132 ptr4++;
3133 }
3134 continue;
3135 }
3136 ptr4++;
3137 }
3138 _bufPos = (int)(ptr7 - ptr3);
3139 }
3140 return -1;
3141 }
3142 }
unsafe char * InvalidXmlChar(int ch, char *pDst, bool entitize)
static unsafe char * RawStartCData(char *pDst)
static unsafe char * RawEndCData(char *pDst)
static unsafe char * EncodeSurrogate(char *pSrc, char *pSrcEnd, char *pDst)

References System.Xml.XmlEncodedRawTextWriter._bufChars, System.Xml.XmlEncodedRawTextWriter._bufLen, System.Xml.XmlEncodedRawTextWriter._bufPos, System.Xml.XmlEncodedRawTextWriter._hadDoubleBracket, System.Xml.XmlEncodedRawTextWriter._newLineHandling, System.array, System.count, System.Xml.Dictionary, System.Xml.XmlEncodedRawTextWriter.EncodeSurrogate(), System.index, System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(), System.Xml.XmlCharType.IsAttributeValueChar(), System.Xml.XmlCharType.IsSurrogate(), System.Xml.XmlEncodedRawTextWriter.RawEndCData(), System.Xml.XmlEncodedRawTextWriter.RawStartCData(), and System.text.

Referenced by System.Xml.XmlEncodedRawTextWriter.WriteCDataSectionAsync().