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

◆ WriteCommentOrPiNoFlush()

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

Definition at line 2866 of file XmlEncodedRawTextWriter.cs.

2867 {
2868 needWriteNewLine = false;
2869 if (count == 0)
2870 {
2871 return -1;
2872 }
2873 fixed (char* ptr = text)
2874 {
2875 char* ptr2 = ptr + index;
2876 char[] bufChars = _bufChars;
2877 fixed (char[] array = bufChars)
2878 {
2879 char* ptr3 = (char*)((bufChars != null && array.Length != 0) ? Unsafe.AsPointer(ref array[0]) : null);
2880 char* ptr4 = ptr2;
2881 char* ptr5 = ptr4;
2882 char* ptr6 = ptr2 + count;
2883 char* ptr7 = ptr3 + _bufPos;
2884 int num = 0;
2885 while (true)
2886 {
2887 char* ptr8 = ptr7 + (ptr6 - ptr4);
2888 if (ptr8 > ptr3 + _bufLen)
2889 {
2890 ptr8 = ptr3 + _bufLen;
2891 }
2892 while (ptr7 < ptr8 && XmlCharType.IsTextChar((char)(num = *ptr4)) && num != stopChar)
2893 {
2894 *ptr7 = (char)num;
2895 ptr7++;
2896 ptr4++;
2897 }
2898 if (ptr4 >= ptr6)
2899 {
2900 break;
2901 }
2902 if (ptr7 >= ptr8)
2903 {
2904 _bufPos = (int)(ptr7 - ptr3);
2905 return (int)(ptr4 - ptr5);
2906 }
2907 switch (num)
2908 {
2909 case 45:
2910 *ptr7 = '-';
2911 ptr7++;
2912 if (num == stopChar && (ptr4 + 1 == ptr6 || ptr4[1] == '-'))
2913 {
2914 *ptr7 = ' ';
2915 ptr7++;
2916 }
2917 break;
2918 case 63:
2919 *ptr7 = '?';
2920 ptr7++;
2921 if (num == stopChar && ptr4 + 1 < ptr6 && ptr4[1] == '>')
2922 {
2923 *ptr7 = ' ';
2924 ptr7++;
2925 }
2926 break;
2927 case 93:
2928 *ptr7 = ']';
2929 ptr7++;
2930 break;
2931 case 13:
2932 if (_newLineHandling == NewLineHandling.Replace)
2933 {
2934 if (ptr4 + 1 < ptr6 && ptr4[1] == '\n')
2935 {
2936 ptr4++;
2937 }
2938 _bufPos = (int)(ptr7 - ptr3);
2939 needWriteNewLine = true;
2940 return (int)(ptr4 - ptr5);
2941 }
2942 *ptr7 = (char)num;
2943 ptr7++;
2944 break;
2945 case 10:
2946 if (_newLineHandling == NewLineHandling.Replace)
2947 {
2948 _bufPos = (int)(ptr7 - ptr3);
2949 needWriteNewLine = true;
2950 return (int)(ptr4 - ptr5);
2951 }
2952 *ptr7 = (char)num;
2953 ptr7++;
2954 break;
2955 case 9:
2956 case 38:
2957 case 60:
2958 *ptr7 = (char)num;
2959 ptr7++;
2960 break;
2961 default:
2962 if (XmlCharType.IsSurrogate(num))
2963 {
2965 ptr4 += 2;
2966 }
2967 else if (num <= 127 || num >= 65534)
2968 {
2970 ptr4++;
2971 }
2972 else
2973 {
2974 *ptr7 = (char)num;
2975 ptr7++;
2976 ptr4++;
2977 }
2978 continue;
2979 }
2980 ptr4++;
2981 }
2982 _bufPos = (int)(ptr7 - ptr3);
2983 }
2984 return -1;
2985 }
2986 }
unsafe char * InvalidXmlChar(int ch, char *pDst, bool entitize)
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._newLineHandling, System.array, System.count, System.Xml.Dictionary, System.Xml.XmlEncodedRawTextWriter.EncodeSurrogate(), System.index, System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(), System.Xml.XmlCharType.IsSurrogate(), System.Xml.XmlCharType.IsTextChar(), and System.text.

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