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

◆ LoadManagedCodePage()

unsafe override void System.Text.DBCSCodePageEncoding.LoadManagedCodePage ( )
inlineprotectedinherited

Definition at line 80 of file DBCSCodePageEncoding.cs.

81 {
82 fixed (byte* ptr = &m_codePageHeader[0])
83 {
84 CodePageHeader* ptr2 = (CodePageHeader*)ptr;
85 if (ptr2->ByteCount != 2)
86 {
87 throw new NotSupportedException(System.SR.Format(System.SR.NotSupported_NoCodepageData, CodePage));
88 }
89 _bytesUnknown = ptr2->ByteReplace;
90 charUnknown = ptr2->UnicodeReplace;
91 if (base.DecoderFallback is InternalDecoderBestFitFallback)
92 {
93 ((InternalDecoderBestFitFallback)base.DecoderFallback).cReplacement = charUnknown;
94 }
96 if (_bytesUnknown > 255)
97 {
99 }
100 int num = 262148 + iExtraBytes;
101 byte* nativeMemory = GetNativeMemory(num);
102 Unsafe.InitBlockUnaligned(nativeMemory, 0, (uint)num);
103 mapBytesToUnicode = (char*)nativeMemory;
104 mapUnicodeToBytes = (ushort*)(nativeMemory + 131072);
105 byte[] array = new byte[m_dataSize];
106 lock (BaseCodePageEncoding.s_streamLock)
107 {
108 BaseCodePageEncoding.s_codePagesEncodingDataStream.Seek(m_firstDataWordOffset, SeekOrigin.Begin);
109 BaseCodePageEncoding.s_codePagesEncodingDataStream.Read(array, 0, m_dataSize);
110 }
111 fixed (byte* ptr3 = array)
112 {
113 char* ptr4 = (char*)ptr3;
114 int num2 = 0;
115 int num3 = 0;
116 while (num2 < 65536)
117 {
118 char c = ReadChar(ptr4);
119 ptr4++;
120 switch (c)
121 {
122 case '\u0001':
123 num2 = ReadChar(ptr4);
124 ptr4++;
125 continue;
126 case '\u0002':
127 case '\u0003':
128 case '\u0004':
129 case '\u0005':
130 case '\u0006':
131 case '\a':
132 case '\b':
133 case '\t':
134 case '\n':
135 case '\v':
136 case '\f':
137 case '\r':
138 case '\u000e':
139 case '\u000f':
140 case '\u0010':
141 case '\u0011':
142 case '\u0012':
143 case '\u0013':
144 case '\u0014':
145 case '\u0015':
146 case '\u0016':
147 case '\u0017':
148 case '\u0018':
149 case '\u0019':
150 case '\u001a':
151 case '\u001b':
152 case '\u001c':
153 case '\u001d':
154 case '\u001e':
155 case '\u001f':
156 num2 += c;
157 continue;
158 }
159 switch (c)
160 {
161 case '\uffff':
162 num3 = num2;
163 c = (char)num2;
164 break;
165 case '\ufffe':
166 num3 = num2;
167 break;
168 case '\ufffd':
169 num2++;
170 continue;
171 default:
172 num3 = num2;
173 break;
174 }
175 if (CleanUpBytes(ref num3))
176 {
177 if (c != '\ufffe')
178 {
179 mapUnicodeToBytes[(int)c] = (ushort)num3;
180 }
181 mapBytesToUnicode[num3] = c;
182 }
183 num2++;
184 }
185 }
187 }
188 }
static unsafe void InitBlockUnaligned(void *startAddress, byte value, uint byteCount)
Definition Unsafe.cs:133
static string NotSupported_NoCodepageData
Definition SR.cs:1688
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
Definition SR.cs:7
BaseCodePageEncoding(int codepage, int dataCodePage)
unsafe byte * GetNativeMemory(int iSize)
static unsafe char ReadChar(char *pChar)
virtual bool CleanUpBytes(ref int bytes)
virtual unsafe void CleanUpEndBytes(char *chars)
virtual int CodePage
Definition Encoding.cs:515

References System.Text.DBCSCodePageEncoding._byteCountUnknown, System.Text.DBCSCodePageEncoding._bytesUnknown, System.array, System.Text.BaseCodePageEncoding.CodePageHeader.ByteCount, System.Text.BaseCodePageEncoding.CodePageHeader.ByteReplace, System.Text.DBCSCodePageEncoding.charUnknown, System.Text.DBCSCodePageEncoding.CleanUpBytes(), System.Text.DBCSCodePageEncoding.CleanUpEndBytes(), System.Text.Encoding.CodePage, System.SR.Format(), System.Text.BaseCodePageEncoding.GetNativeMemory(), System.Text.BaseCodePageEncoding.iExtraBytes, System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(), System.Text.BaseCodePageEncoding.m_codePageHeader, System.Text.BaseCodePageEncoding.m_dataSize, System.Text.BaseCodePageEncoding.m_firstDataWordOffset, System.Text.DBCSCodePageEncoding.mapBytesToUnicode, System.Text.DBCSCodePageEncoding.mapUnicodeToBytes, System.SR.NotSupported_NoCodepageData, System.Text.DBCSCodePageEncoding.ReadChar(), System.Text.BaseCodePageEncoding.s_codePagesEncodingDataStream, System.Text.BaseCodePageEncoding.s_streamLock, and System.Text.BaseCodePageEncoding.CodePageHeader.UnicodeReplace.