Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
HtmlEncodedRawTextWriter.cs
Go to the documentation of this file.
1using System.IO;
2
3namespace System.Xml;
4
6{
8
10
12
13 private bool _endsWithAmpersand;
14
15 private byte[] _uriEscapingBuffer;
16
17 private string _mediaType;
18
20
22
24
26 : base(writer, settings)
27 {
28 Init(settings);
29 }
30
32 : base(stream, settings)
33 {
34 Init(settings);
35 }
36
38 {
39 }
40
41 internal override void WriteXmlDeclaration(string xmldecl)
42 {
43 }
44
45 public override void WriteDocType(string name, string pubid, string sysid, string subset)
46 {
48 {
50 }
51 RawText("<!DOCTYPE ");
52 if (name == "HTML")
53 {
54 RawText("HTML");
55 }
56 else
57 {
58 RawText("html");
59 }
60 if (pubid != null)
61 {
62 RawText(" PUBLIC \"");
64 if (sysid != null)
65 {
66 RawText("\" \"");
68 }
69 _bufChars[_bufPos++] = '"';
70 }
71 else if (sysid != null)
72 {
73 RawText(" SYSTEM \"");
75 _bufChars[_bufPos++] = '"';
76 }
77 else
78 {
79 _bufChars[_bufPos++] = ' ';
80 }
81 if (subset != null)
82 {
83 _bufChars[_bufPos++] = '[';
85 _bufChars[_bufPos++] = ']';
86 }
87 _bufChars[_bufPos++] = '>';
88 }
89
90 public override void WriteStartElement(string prefix, string localName, string ns)
91 {
93 if (ns.Length == 0)
94 {
96 {
98 }
99 _currentElementProperties = (ElementProperties)_elementPropertySearch.FindCaseInsensitiveString(localName);
100 _bufChars[_bufPos++] = '<';
101 RawText(localName);
103 }
104 else
105 {
107 base.WriteStartElement(prefix, localName, ns);
108 }
109 }
110
111 internal override void StartElementContent()
112 {
113 _bufChars[_bufPos++] = '>';
116 {
118 }
119 }
120
121 internal override void WriteEndElement(string prefix, string localName, string ns)
122 {
123 if (ns.Length == 0)
124 {
126 {
128 }
130 {
131 _bufChars[_bufPos++] = '<';
132 _bufChars[_bufPos++] = '/';
133 RawText(localName);
134 _bufChars[_bufPos++] = '>';
135 }
136 }
137 else
138 {
139 base.WriteEndElement(prefix, localName, ns);
140 }
142 }
143
144 internal override void WriteFullEndElement(string prefix, string localName, string ns)
145 {
146 if (ns.Length == 0)
147 {
149 {
151 }
153 {
154 _bufChars[_bufPos++] = '<';
155 _bufChars[_bufPos++] = '/';
156 RawText(localName);
157 _bufChars[_bufPos++] = '>';
158 }
159 }
160 else
161 {
162 base.WriteFullEndElement(prefix, localName, ns);
163 }
165 }
166
167 public override void WriteStartAttribute(string prefix, string localName, string ns)
168 {
169 if (ns.Length == 0)
170 {
172 {
174 }
175 if (_attrEndPos == _bufPos)
176 {
177 _bufChars[_bufPos++] = ' ';
178 }
179 RawText(localName);
181 {
182 _currentAttributeProperties = (AttributeProperties)((uint)_attributePropertySearch.FindCaseInsensitiveString(localName) & (uint)_currentElementProperties);
184 {
185 _inAttributeValue = true;
186 return;
187 }
188 }
189 else
190 {
192 }
193 _bufChars[_bufPos++] = '=';
194 _bufChars[_bufPos++] = '"';
195 }
196 else
197 {
198 base.WriteStartAttribute(prefix, localName, ns);
200 }
201 _inAttributeValue = true;
202 }
203
204 public override void WriteEndAttribute()
205 {
207 {
209 }
210 else
211 {
213 {
215 _endsWithAmpersand = false;
216 }
218 {
220 }
221 _bufChars[_bufPos++] = '"';
222 }
223 _inAttributeValue = false;
225 }
226
227 public override void WriteProcessingInstruction(string target, string text)
228 {
230 {
232 }
233 _bufChars[_bufPos++] = '<';
234 _bufChars[_bufPos++] = '?';
235 RawText(target);
236 _bufChars[_bufPos++] = ' ';
238 _bufChars[_bufPos++] = '>';
239 if (_bufPos > _bufLen)
240 {
241 FlushBuffer();
242 }
243 }
244
245 public unsafe override void WriteString(string text)
246 {
248 {
250 }
251 fixed (char* ptr = text)
252 {
253 char* pSrcEnd = ptr + text.Length;
255 {
257 }
258 else
259 {
261 }
262 }
263 }
264
265 public override void WriteEntityRef(string name)
266 {
268 }
269
270 public override void WriteCharEntity(char ch)
271 {
273 }
274
275 public override void WriteSurrogateCharEntity(char lowChar, char highChar)
276 {
278 }
279
280 public unsafe override void WriteChars(char[] buffer, int index, int count)
281 {
283 {
285 }
286 fixed (char* ptr = &buffer[index])
287 {
289 {
291 }
292 else
293 {
295 }
296 }
297 }
298
312
313 protected void WriteMetaElement()
314 {
315 RawText("<META http-equiv=\"Content-Type\"");
316 if (_mediaType == null)
317 {
318 _mediaType = "text/html";
319 }
320 RawText(" content=\"");
322 RawText("; charset=");
323 RawText(_encoding.WebName);
324 RawText("\">");
325 }
326
327 protected unsafe void WriteHtmlElementTextBlock(char* pSrc, char* pSrcEnd)
328 {
329 if ((_currentElementProperties & ElementProperties.NO_ENTITIES) != 0)
330 {
332 }
333 else
334 {
336 }
337 }
338
339 protected unsafe void WriteHtmlAttributeTextBlock(char* pSrc, char* pSrcEnd)
340 {
342 {
344 {
346 {
348 }
349 else
350 {
352 }
353 }
354 }
355 else if ((_currentElementProperties & ElementProperties.HAS_NS) != 0)
356 {
358 }
359 else
360 {
362 }
363 }
364
365 private unsafe void WriteHtmlAttributeText(char* pSrc, char* pSrcEnd)
366 {
368 {
369 if (pSrcEnd - pSrc > 0 && *pSrc != '{')
370 {
372 }
373 _endsWithAmpersand = false;
374 }
375 fixed (char* ptr = _bufChars)
376 {
377 char* pDst = ptr + _bufPos;
378 char c = '\0';
379 while (true)
380 {
381 char* ptr2 = pDst + (pSrcEnd - pSrc);
382 if (ptr2 > ptr + _bufLen)
383 {
384 ptr2 = ptr + _bufLen;
385 }
387 {
388 *(pDst++) = c;
389 pSrc++;
390 }
391 if (pSrc >= pSrcEnd)
392 {
393 break;
394 }
395 if (pDst >= ptr2)
396 {
397 _bufPos = (int)(pDst - ptr);
398 FlushBuffer();
399 pDst = ptr + 1;
400 continue;
401 }
402 switch (c)
403 {
404 case '&':
405 if (pSrc + 1 == pSrcEnd)
406 {
407 _endsWithAmpersand = true;
408 }
409 else if (pSrc[1] != '{')
410 {
412 break;
413 }
414 *(pDst++) = c;
415 break;
416 case '"':
418 break;
419 case '\t':
420 case '\'':
421 case '<':
422 case '>':
423 *(pDst++) = c;
424 break;
425 case '\r':
427 break;
428 case '\n':
430 break;
431 default:
433 continue;
434 }
435 pSrc++;
436 }
437 _bufPos = (int)(pDst - ptr);
438 }
439 }
440
441 private unsafe void WriteUriAttributeText(char* pSrc, char* pSrcEnd)
442 {
444 {
445 if (pSrcEnd - pSrc > 0 && *pSrc != '{')
446 {
448 }
449 _endsWithAmpersand = false;
450 }
451 fixed (char* ptr = _bufChars)
452 {
453 char* ptr2 = ptr + _bufPos;
454 char c = '\0';
455 while (true)
456 {
457 char* ptr3 = ptr2 + (pSrcEnd - pSrc);
458 if (ptr3 > ptr + _bufLen)
459 {
460 ptr3 = ptr + _bufLen;
461 }
462 while (ptr2 < ptr3 && XmlCharType.IsAttributeValueChar(c = *pSrc) && c < '\u0080')
463 {
464 *(ptr2++) = c;
465 pSrc++;
466 }
467 if (pSrc >= pSrcEnd)
468 {
469 break;
470 }
471 if (ptr2 >= ptr3)
472 {
473 _bufPos = (int)(ptr2 - ptr);
474 FlushBuffer();
475 ptr2 = ptr + 1;
476 continue;
477 }
478 switch (c)
479 {
480 case '&':
481 if (pSrc + 1 == pSrcEnd)
482 {
483 _endsWithAmpersand = true;
484 }
485 else if (pSrc[1] != '{')
486 {
488 break;
489 }
490 *(ptr2++) = c;
491 break;
492 case '"':
494 break;
495 case '\t':
496 case '\'':
497 case '<':
498 case '>':
499 *(ptr2++) = c;
500 break;
501 case '\r':
503 break;
504 case '\n':
506 break;
507 default:
509 {
510 byte* ptr5 = ptr4;
511 byte* pDst = ptr5;
513 for (; ptr5 < pDst; ptr5++)
514 {
515 *(ptr2++) = '%';
518 }
519 }
520 continue;
521 }
522 pSrc++;
523 }
524 _bufPos = (int)(ptr2 - ptr);
525 }
526 }
527
528 private void OutputRestAmps()
529 {
530 _bufChars[_bufPos++] = 'a';
531 _bufChars[_bufPos++] = 'm';
532 _bufChars[_bufPos++] = 'p';
533 _bufChars[_bufPos++] = ';';
534 }
535}
static char ToCharUpper(int value)
static string Xml_InvalidOperation
Definition SR.cs:18
Definition SR.cs:7
void Push(byte data)
Definition ByteStack.cs:21
unsafe override void WriteString(string text)
override void WriteEndElement(string prefix, string localName, string ns)
override void WriteProcessingInstruction(string target, string text)
unsafe override void WriteChars(char[] buffer, int index, int count)
void Init(XmlWriterSettings settings)
unsafe void WriteHtmlElementTextBlock(char *pSrc, char *pSrcEnd)
static TernaryTreeReadOnly _elementPropertySearch
override void WriteXmlDeclaration(string xmldecl)
unsafe void WriteHtmlAttributeTextBlock(char *pSrc, char *pSrcEnd)
override void WriteDocType(string name, string pubid, string sysid, string subset)
HtmlEncodedRawTextWriter(Stream stream, XmlWriterSettings settings)
override void WriteStartElement(string prefix, string localName, string ns)
HtmlEncodedRawTextWriter(TextWriter writer, XmlWriterSettings settings)
override void WriteXmlDeclaration(XmlStandalone standalone)
unsafe void WriteHtmlAttributeText(char *pSrc, char *pSrcEnd)
override void WriteStartAttribute(string prefix, string localName, string ns)
unsafe void WriteUriAttributeText(char *pSrc, char *pSrcEnd)
override void WriteSurrogateCharEntity(char lowChar, char highChar)
override void WriteFullEndElement(string prefix, string localName, string ns)
static TernaryTreeReadOnly _attributePropertySearch
static bool IsAttributeValueChar(char ch)
static unsafe char * AmpEntity(char *pDst)
unsafe void EncodeChar(ref char *pSrc, char *pSrcEnd, ref char *pDst)
unsafe void WriteCommentOrPi(string text, int stopChar)
static unsafe char * QuoteEntity(char *pDst)
static unsafe char * LineFeedEntity(char *pDst)
unsafe void WriteElementTextBlock(char *pSrc, char *pSrcEnd)
unsafe void WriteAttributeTextBlock(char *pSrc, char *pSrcEnd)
static unsafe char * CarriageReturnEntity(char *pDst)
static unsafe void CharToUTF8(ref char *pSrc, char *pSrcEnd, ref byte *pDst)