Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DefaultHtmlEncoder.cs
Go to the documentation of this file.
4
6
7internal sealed class DefaultHtmlEncoder : HtmlEncoder
8{
10 {
11 internal static readonly EscaperImplementation Singleton = new EscaperImplementation();
12
14 {
15 }
16
17 internal override int EncodeUtf8(Rune value, Span<byte> destination)
18 {
19 if (value.Value == 60)
20 {
21 if (SpanUtility.TryWriteBytes(destination, 38, 108, 116, 59))
22 {
23 return 4;
24 }
25 }
26 else if (value.Value == 62)
27 {
28 if (SpanUtility.TryWriteBytes(destination, 38, 103, 116, 59))
29 {
30 return 4;
31 }
32 }
33 else if (value.Value == 38)
34 {
35 if (SpanUtility.TryWriteBytes(destination, 38, 97, 109, 112, 59))
36 {
37 return 5;
38 }
39 }
40 else
41 {
42 if (value.Value != 34)
43 {
44 return TryEncodeScalarAsHex(this, (uint)value.Value, destination);
45 }
46 if (SpanUtility.TryWriteBytes(destination, 38, 113, 117, 111, 116, 59))
47 {
48 return 6;
49 }
50 }
51 return -1;
52 static int TryEncodeScalarAsHex(object @this, uint scalarValue, Span<byte> destination)
53 {
54 int num = (int)((uint)BitOperations.Log2(scalarValue) / 4u + 4);
55 if (SpanUtility.IsValidIndex(destination, num))
56 {
57 destination[num] = 59;
58 SpanUtility.TryWriteBytes(destination, 38, 35, 120, 48);
59 destination = destination.Slice(3, num - 3);
60 int num2 = destination.Length - 1;
61 while (SpanUtility.IsValidIndex(destination, num2))
62 {
63 char c = System.HexConverter.ToCharUpper((int)scalarValue);
64 destination[num2] = (byte)c;
65 scalarValue >>= 4;
66 num2--;
67 }
68 return destination.Length + 4;
69 }
70 return -1;
71 }
72 }
73
75 {
76 if (value.Value == 60)
77 {
78 if (SpanUtility.TryWriteChars(destination, '&', 'l', 't', ';'))
79 {
80 return 4;
81 }
82 }
83 else if (value.Value == 62)
84 {
85 if (SpanUtility.TryWriteChars(destination, '&', 'g', 't', ';'))
86 {
87 return 4;
88 }
89 }
90 else if (value.Value == 38)
91 {
92 if (SpanUtility.TryWriteChars(destination, '&', 'a', 'm', 'p', ';'))
93 {
94 return 5;
95 }
96 }
97 else
98 {
99 if (value.Value != 34)
100 {
101 return TryEncodeScalarAsHex(this, (uint)value.Value, destination);
102 }
103 if (SpanUtility.TryWriteChars(destination, '&', 'q', 'u', 'o', 't', ';'))
104 {
105 return 6;
106 }
107 }
108 return -1;
109 static int TryEncodeScalarAsHex(object @this, uint scalarValue, Span<char> destination)
110 {
111 int num = (int)((uint)BitOperations.Log2(scalarValue) / 4u + 4);
112 if (SpanUtility.IsValidIndex(destination, num))
113 {
114 destination[num] = ';';
115 SpanUtility.TryWriteChars(destination, '&', '#', 'x', '0');
116 destination = destination.Slice(3, num - 3);
117 int num2 = destination.Length - 1;
118 while (SpanUtility.IsValidIndex(destination, num2))
119 {
120 char c = System.HexConverter.ToCharUpper((int)scalarValue);
121 destination[num2] = c;
122 scalarValue >>= 4;
123 num2--;
124 }
125 return destination.Length + 4;
126 }
127 return -1;
128 }
129 }
130 }
131
133
135
136 public override int MaxOutputCharactersPerInputCharacter => 8;
137
139 {
140 if (settings == null)
141 {
142 throw new ArgumentNullException("settings");
143 }
145 }
146
147 private protected override OperationStatus EncodeCore(ReadOnlySpan<char> source, Span<char> destination, out int charsConsumed, out int charsWritten, bool isFinalBlock)
148 {
149 return _innerEncoder.Encode(source, destination, out charsConsumed, out charsWritten, isFinalBlock);
150 }
151
152 private protected override OperationStatus EncodeUtf8Core(ReadOnlySpan<byte> utf8Source, Span<byte> utf8Destination, out int bytesConsumed, out int bytesWritten, bool isFinalBlock)
153 {
154 return _innerEncoder.EncodeUtf8(utf8Source, utf8Destination, out bytesConsumed, out bytesWritten, isFinalBlock);
155 }
156
157 private protected override int FindFirstCharacterToEncode(ReadOnlySpan<char> text)
158 {
160 }
161
162 public unsafe override int FindFirstCharacterToEncode(char* text, int textLength)
163 {
165 }
166
168 {
170 }
171
172 public unsafe override bool TryEncodeUnicodeScalar(int unicodeScalar, char* buffer, int bufferLength, out int numberOfCharactersWritten)
173 {
174 return _innerEncoder.TryEncodeUnicodeScalar(unicodeScalar, buffer, bufferLength, out numberOfCharactersWritten);
175 }
176
177 public override bool WillEncode(int unicodeScalar)
178 {
179 return !_innerEncoder.IsScalarValueAllowed(new Rune(unicodeScalar));
180 }
181}
static char ToCharUpper(int value)
static int Log2(uint value)
override int EncodeUtf16(Rune value, Span< char > destination)
override int EncodeUtf8(Rune value, Span< byte > destination)
static readonly DefaultHtmlEncoder BasicLatinSingleton
DefaultHtmlEncoder(TextEncoderSettings settings)
override OperationStatus EncodeUtf8Core(ReadOnlySpan< byte > utf8Source, Span< byte > utf8Destination, out int bytesConsumed, out int bytesWritten, bool isFinalBlock)
unsafe override bool TryEncodeUnicodeScalar(int unicodeScalar, char *buffer, int bufferLength, out int numberOfCharactersWritten)
override int FindFirstCharacterToEncodeUtf8(ReadOnlySpan< byte > utf8Text)
override int FindFirstCharacterToEncode(ReadOnlySpan< char > text)
override bool WillEncode(int unicodeScalar)
readonly OptimizedInboxTextEncoder _innerEncoder
override OperationStatus EncodeCore(ReadOnlySpan< char > source, Span< char > destination, out int charsConsumed, out int charsWritten, bool isFinalBlock)
unsafe override int FindFirstCharacterToEncode(char *text, int textLength)
OperationStatus Encode(ReadOnlySpan< char > source, Span< char > destination, out int charsConsumed, out int charsWritten, bool isFinalBlock)
unsafe bool TryEncodeUnicodeScalar(int unicodeScalar, char *buffer, int bufferLength, out int numberOfCharactersWritten)
unsafe int GetIndexOfFirstByteToEncode(ReadOnlySpan< byte > data)
unsafe int GetIndexOfFirstCharToEncode(ReadOnlySpan< char > data)
unsafe int FindFirstCharacterToEncode(char *text, int textLength)
OperationStatus EncodeUtf8(ReadOnlySpan< byte > source, Span< byte > destination, out int bytesConsumed, out int bytesWritten, bool isFinalBlock)
static bool TryWriteBytes(Span< byte > span, byte a, byte b, byte c, byte d)
static bool TryWriteChars(Span< char > span, char a, char b, char c, char d)
ref readonly AllowedBmpCodePointsBitmap GetAllowedCodePointsBitmap()