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

◆ DecodeFromUtf8()

static OperationStatus System.Text.Rune.DecodeFromUtf8 ( ReadOnlySpan< byte > source,
out Rune result,
out int bytesConsumed )
inlinestatic

Definition at line 202 of file Rune.cs.

203 {
204 int num = 0;
205 uint num2;
206 if ((uint)num < (uint)source.Length)
207 {
208 num2 = source[num];
209 if (UnicodeUtility.IsAsciiCodePoint(num2))
210 {
211 goto IL_0021;
212 }
213 if (UnicodeUtility.IsInRangeInclusive(num2, 194u, 244u))
214 {
215 num2 = num2 - 194 << 6;
216 num++;
217 if ((uint)num >= (uint)source.Length)
218 {
219 goto IL_0163;
220 }
221 int num3 = (sbyte)source[num];
222 if (num3 < -64)
223 {
224 num2 += (uint)num3;
225 num2 += 128;
226 num2 += 128;
227 if (num2 < 2048)
228 {
229 goto IL_0021;
230 }
231 if (UnicodeUtility.IsInRangeInclusive(num2, 2080u, 3343u) && !UnicodeUtility.IsInRangeInclusive(num2, 2912u, 2943u) && !UnicodeUtility.IsInRangeInclusive(num2, 3072u, 3087u))
232 {
233 num++;
234 if ((uint)num >= (uint)source.Length)
235 {
236 goto IL_0163;
237 }
238 num3 = (sbyte)source[num];
239 if (num3 < -64)
240 {
241 num2 <<= 6;
242 num2 += (uint)num3;
243 num2 += 128;
244 num2 -= 131072;
245 if (num2 > 65535)
246 {
247 num++;
248 if ((uint)num >= (uint)source.Length)
249 {
250 goto IL_0163;
251 }
252 num3 = (sbyte)source[num];
253 if (num3 >= -64)
254 {
255 goto IL_0153;
256 }
257 num2 <<= 6;
258 num2 += (uint)num3;
259 num2 += 128;
260 num2 -= 4194304;
261 }
262 goto IL_0021;
263 }
264 }
265 }
266 }
267 else
268 {
269 num = 1;
270 }
271 goto IL_0153;
272 }
273 goto IL_0163;
274 IL_0021:
275 bytesConsumed = num + 1;
276 result = UnsafeCreate(num2);
277 return OperationStatus.Done;
278 IL_0163:
279 bytesConsumed = num;
280 result = ReplacementChar;
281 return OperationStatus.NeedMoreData;
282 IL_0153:
283 bytesConsumed = num;
284 result = ReplacementChar;
285 return OperationStatus.InvalidData;
286 }
static Rune UnsafeCreate(uint scalarValue)
Definition Rune.cs:643
static Rune ReplacementChar
Definition Rune.cs:53

References System.Text.UnicodeUtility.IsAsciiCodePoint(), System.Text.UnicodeUtility.IsInRangeInclusive(), System.Text.Rune.ReplacementChar, System.source, and System.Text.Rune.UnsafeCreate().

Referenced by System.Text.UTF8Encoding.DecodeFirstRune(), System.Text.Rune.DecodeLastFromUtf8(), System.Text.Encodings.Web.OptimizedInboxTextEncoder.EncodeUtf8(), System.Text.Encodings.Web.TextEncoder.EncodeUtf8Core(), System.Text.Encodings.Web.TextEncoder.FindFirstCharacterToEncodeUtf8(), System.Text.Encodings.Web.OptimizedInboxTextEncoder.GetIndexOfFirstByteToEncode(), System.Text.Unicode.Utf8.ToUtf16(), and System.PercentEncodingHelper.UnescapePercentEncodedUTF8Sequence().