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

◆ UnescapePercentEncodedUTF8Sequence()

static unsafe int System.PercentEncodingHelper.UnescapePercentEncodedUTF8Sequence ( char * input,
int length,
ref System::Text::ValueStringBuilder dest,
bool isQuery,
bool iriParsing )
inlinestatic

Definition at line 8 of file PercentEncodingHelper.cs.

9 {
10 uint num = 0u;
11 int num2 = 0;
12 int num3 = 0;
13 int num4 = 0;
14 int bytesConsumed = 0;
15 while (true)
16 {
17 int num5 = num3 + num2 * 3;
18 while (true)
19 {
20 if ((uint)(length - num5) > 2u && input[num5] == '%')
21 {
22 uint num6 = input[num5 + 1];
23 if ((uint)((num6 - 65) & -33) <= 5)
24 {
25 num6 = (num6 | 0x20) - 97 + 10;
26 }
27 else
28 {
29 if (num6 - 56 > 1)
30 {
31 goto IL_0135;
32 }
33 num6 -= 48;
34 }
35 uint num7 = (uint)(input[num5 + 2] - 48);
36 if (num7 > 9)
37 {
38 if ((uint)((num7 - 17) & -33) > 5)
39 {
40 goto IL_0135;
41 }
42 num7 = ((num7 + 48) | 0x20) - 97 + 10;
43 }
44 num6 = (num6 << 4) | num7;
45 num = ((!BitConverter.IsLittleEndian) ? ((num << 8) | num6) : ((num >> 8) | (num6 << 24)));
46 if (++num2 == 4)
47 {
48 break;
49 }
50 num5 += 3;
51 continue;
52 }
53 goto IL_0135;
54 IL_0135:
55 if (num2 > 1)
56 {
57 num = ((bytesConsumed != 1) ? ((!BitConverter.IsLittleEndian) ? (num << 32 - (num2 << 3)) : (num >> 32 - (num2 << 3))) : ((!BitConverter.IsLittleEndian) ? (num << 8) : (num >> 8)));
58 break;
59 }
60 if ((num2 | num4) == 0)
61 {
62 return num3;
63 }
64 num2 *= 3;
65 dest.Append(input + num3 - num4, num4 + num2);
66 return num3 + num2;
67 }
68 uint num8 = num;
69 if (Rune.DecodeFromUtf8(new ReadOnlySpan<byte>(&num8, num2), out var result, out bytesConsumed) == OperationStatus.Done && (!iriParsing || IriHelper.CheckIriUnicodeRange((uint)result.Value, isQuery)))
70 {
71 if (num4 != 0)
72 {
73 dest.Append(input + num3 - num4, num4);
74 num4 = 0;
75 }
76 dest.Append(result);
77 }
78 else
79 {
80 num4 += bytesConsumed * 3;
81 }
82 num2 -= bytesConsumed;
83 num3 += bytesConsumed * 3;
84 }
85 }
static OperationStatus DecodeFromUtf8(ReadOnlySpan< byte > source, out Rune result, out int bytesConsumed)
Definition Rune.cs:202

References System.IriHelper.CheckIriUnicodeRange(), System.Text.Rune.DecodeFromUtf8(), System.input, System.BitConverter.IsLittleEndian, and System.length.

Referenced by System.IriHelper.EscapeUnescapeIri(), and System.UriHelper.UnescapeString().