Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlEventCache.cs
Go to the documentation of this file.
2using System.Text;
5
6namespace System.Xml;
7
8internal sealed class XmlEventCache : XmlRawWriter
9{
10 private enum XmlEventType
11 {
12 Unknown,
13 DocType,
16 EndAttr,
17 CData,
18 Comment,
19 PI,
21 String,
22 Raw,
23 EntRef,
24 CharEnt,
26 Base64,
27 BinHex,
31 EndElem,
33 Nmsp,
35 Close,
36 Flush,
38 }
39
40 private struct XmlEvent
41 {
43
44 private string _s1;
45
46 private string _s2;
47
48 private string _s3;
49
50 private object _o;
51
53
54 public string String1 => _s1;
55
56 public string String2 => _s2;
57
58 public string String3 => _s3;
59
60 public object Object => _o;
61
62 public void InitEvent(XmlEventType eventType)
63 {
64 _eventType = eventType;
65 }
66
67 public void InitEvent(XmlEventType eventType, string s1)
68 {
69 _eventType = eventType;
70 _s1 = s1;
71 }
72
73 public void InitEvent(XmlEventType eventType, string s1, string s2)
74 {
75 _eventType = eventType;
76 _s1 = s1;
77 _s2 = s2;
78 }
79
80 public void InitEvent(XmlEventType eventType, string s1, string s2, string s3)
81 {
82 _eventType = eventType;
83 _s1 = s1;
84 _s2 = s2;
85 _s3 = s3;
86 }
87
88 public void InitEvent(XmlEventType eventType, string s1, string s2, string s3, object o)
89 {
90 _eventType = eventType;
91 _s1 = s1;
92 _s2 = s2;
93 _s3 = s3;
94 _o = o;
95 }
96
97 public void InitEvent(XmlEventType eventType, object o)
98 {
99 _eventType = eventType;
100 _o = o;
101 }
102 }
103
105
107
108 private int _pageSize;
109
110 private readonly bool _hasRootNode;
111
113
114 private readonly string _baseUri;
115
116 public string BaseUri => _baseUri;
117
118 public bool HasRootNode => _hasRootNode;
119
120 public override XmlWriterSettings Settings => null;
121
122 public XmlEventCache(string baseUri, bool hasRootNode)
123 {
124 _baseUri = baseUri;
126 }
127
128 public void EndEvents()
129 {
130 if (_singleText.Count == 0)
131 {
132 AddEvent(XmlEventType.Unknown);
133 }
134 }
135
137 {
138 if (_singleText.Count != 0)
139 {
140 writer.WriteString(_singleText.GetResult());
141 return;
142 }
144 for (int i = 0; i < _pages.Count; i++)
145 {
146 XmlEvent[] array = _pages[i];
147 for (int j = 0; j < array.Length; j++)
148 {
149 switch (array[j].EventType)
150 {
151 case XmlEventType.Unknown:
152 return;
153 case XmlEventType.DocType:
154 writer.WriteDocType(array[j].String1, array[j].String2, array[j].String3, (string)array[j].Object);
155 break;
156 case XmlEventType.StartElem:
157 writer.WriteStartElement(array[j].String1, array[j].String2, array[j].String3);
158 break;
159 case XmlEventType.StartAttr:
160 writer.WriteStartAttribute(array[j].String1, array[j].String2, array[j].String3);
161 break;
162 case XmlEventType.EndAttr:
163 writer.WriteEndAttribute();
164 break;
165 case XmlEventType.CData:
166 writer.WriteCData(array[j].String1);
167 break;
168 case XmlEventType.Comment:
169 writer.WriteComment(array[j].String1);
170 break;
171 case XmlEventType.PI:
172 writer.WriteProcessingInstruction(array[j].String1, array[j].String2);
173 break;
174 case XmlEventType.Whitespace:
175 writer.WriteWhitespace(array[j].String1);
176 break;
177 case XmlEventType.String:
178 writer.WriteString(array[j].String1);
179 break;
180 case XmlEventType.Raw:
181 writer.WriteRaw(array[j].String1);
182 break;
183 case XmlEventType.EntRef:
184 writer.WriteEntityRef(array[j].String1);
185 break;
186 case XmlEventType.CharEnt:
187 writer.WriteCharEntity((char)array[j].Object);
188 break;
189 case XmlEventType.SurrCharEnt:
190 {
191 char[] array3 = (char[])array[j].Object;
192 writer.WriteSurrogateCharEntity(array3[0], array3[1]);
193 break;
194 }
195 case XmlEventType.Base64:
196 {
197 byte[] array2 = (byte[])array[j].Object;
198 writer.WriteBase64(array2, 0, array2.Length);
199 break;
200 }
201 case XmlEventType.BinHex:
202 {
203 byte[] array2 = (byte[])array[j].Object;
204 writer.WriteBinHex(array2, 0, array2.Length);
205 break;
206 }
207 case XmlEventType.XmlDecl1:
208 xmlRawWriter?.WriteXmlDeclaration((XmlStandalone)array[j].Object);
209 break;
210 case XmlEventType.XmlDecl2:
211 xmlRawWriter?.WriteXmlDeclaration(array[j].String1);
212 break;
213 case XmlEventType.StartContent:
214 xmlRawWriter?.StartElementContent();
215 break;
216 case XmlEventType.EndElem:
217 if (xmlRawWriter != null)
218 {
219 xmlRawWriter.WriteEndElement(array[j].String1, array[j].String2, array[j].String3);
220 }
221 else
222 {
223 writer.WriteEndElement();
224 }
225 break;
226 case XmlEventType.FullEndElem:
227 if (xmlRawWriter != null)
228 {
229 xmlRawWriter.WriteFullEndElement(array[j].String1, array[j].String2, array[j].String3);
230 }
231 else
232 {
233 writer.WriteFullEndElement();
234 }
235 break;
236 case XmlEventType.Nmsp:
237 if (xmlRawWriter != null)
238 {
239 xmlRawWriter.WriteNamespaceDeclaration(array[j].String1, array[j].String2);
240 }
241 else
242 {
243 writer.WriteAttributeString("xmlns", array[j].String1, "http://www.w3.org/2000/xmlns/", array[j].String2);
244 }
245 break;
246 case XmlEventType.EndBase64:
247 xmlRawWriter?.WriteEndBase64();
248 break;
249 case XmlEventType.Close:
250 writer.Close();
251 break;
252 case XmlEventType.Flush:
253 writer.Flush();
254 break;
255 case XmlEventType.Dispose:
256 ((IDisposable)writer).Dispose();
257 break;
258 }
259 }
260 }
261 }
262
263 public string EventsToString()
264 {
265 if (_singleText.Count != 0)
266 {
267 return _singleText.GetResult();
268 }
270 bool flag = false;
271 for (int i = 0; i < _pages.Count; i++)
272 {
273 XmlEvent[] array = _pages[i];
274 for (int j = 0; j < array.Length; j++)
275 {
276 switch (array[j].EventType)
277 {
278 case XmlEventType.Unknown:
279 return stringBuilder.ToString();
280 case XmlEventType.CData:
281 case XmlEventType.Whitespace:
282 case XmlEventType.String:
283 case XmlEventType.Raw:
284 if (!flag)
285 {
286 stringBuilder.Append(array[j].String1);
287 }
288 break;
289 case XmlEventType.StartAttr:
290 flag = true;
291 break;
292 case XmlEventType.EndAttr:
293 flag = false;
294 break;
295 }
296 }
297 }
298 return string.Empty;
299 }
300
301 public override void WriteDocType(string name, string pubid, string sysid, string subset)
302 {
303 AddEvent(XmlEventType.DocType, name, pubid, sysid, subset);
304 }
305
306 public override void WriteStartElement(string prefix, string localName, string ns)
307 {
308 AddEvent(XmlEventType.StartElem, prefix, localName, ns);
309 }
310
311 public override void WriteStartAttribute(string prefix, string localName, string ns)
312 {
313 AddEvent(XmlEventType.StartAttr, prefix, localName, ns);
314 }
315
316 public override void WriteEndAttribute()
317 {
318 AddEvent(XmlEventType.EndAttr);
319 }
320
321 public override void WriteCData(string text)
322 {
323 AddEvent(XmlEventType.CData, text);
324 }
325
326 public override void WriteComment(string text)
327 {
328 AddEvent(XmlEventType.Comment, text);
329 }
330
331 public override void WriteProcessingInstruction(string name, string text)
332 {
333 AddEvent(XmlEventType.PI, name, text);
334 }
335
336 public override void WriteWhitespace(string ws)
337 {
338 AddEvent(XmlEventType.Whitespace, ws);
339 }
340
341 public override void WriteString(string text)
342 {
343 if (_pages == null)
344 {
346 }
347 else
348 {
349 AddEvent(XmlEventType.String, text);
350 }
351 }
352
353 public override void WriteChars(char[] buffer, int index, int count)
354 {
355 WriteString(new string(buffer, index, count));
356 }
357
358 public override void WriteRaw(char[] buffer, int index, int count)
359 {
360 WriteRaw(new string(buffer, index, count));
361 }
362
363 public override void WriteRaw(string data)
364 {
365 AddEvent(XmlEventType.Raw, data);
366 }
367
368 public override void WriteEntityRef(string name)
369 {
370 AddEvent(XmlEventType.EntRef, name);
371 }
372
373 public override void WriteCharEntity(char ch)
374 {
375 AddEvent(XmlEventType.CharEnt, ch);
376 }
377
378 public override void WriteSurrogateCharEntity(char lowChar, char highChar)
379 {
380 char[] o = new char[2] { lowChar, highChar };
381 AddEvent(XmlEventType.SurrCharEnt, o);
382 }
383
384 public override void WriteBase64(byte[] buffer, int index, int count)
385 {
387 }
388
389 public override void WriteBinHex(byte[] buffer, int index, int count)
390 {
392 }
393
394 public override void Close()
395 {
396 AddEvent(XmlEventType.Close);
397 }
398
399 public override void Flush()
400 {
401 AddEvent(XmlEventType.Flush);
402 }
403
404 public override void WriteValue(object value)
405 {
407 }
408
409 public override void WriteValue(string value)
410 {
412 }
413
414 protected override void Dispose(bool disposing)
415 {
416 try
417 {
418 if (disposing)
419 {
420 AddEvent(XmlEventType.Dispose);
421 }
422 }
423 finally
424 {
425 base.Dispose(disposing);
426 }
427 }
428
430 {
432 }
433
434 internal override void WriteXmlDeclaration(string xmldecl)
435 {
436 AddEvent(XmlEventType.XmlDecl2, xmldecl);
437 }
438
439 internal override void StartElementContent()
440 {
441 AddEvent(XmlEventType.StartContent);
442 }
443
444 internal override void WriteEndElement(string prefix, string localName, string ns)
445 {
446 AddEvent(XmlEventType.EndElem, prefix, localName, ns);
447 }
448
449 internal override void WriteFullEndElement(string prefix, string localName, string ns)
450 {
451 AddEvent(XmlEventType.FullEndElem, prefix, localName, ns);
452 }
453
454 internal override void WriteNamespaceDeclaration(string prefix, string ns)
455 {
456 AddEvent(XmlEventType.Nmsp, prefix, ns);
457 }
458
459 internal override void WriteEndBase64()
460 {
461 AddEvent(XmlEventType.EndBase64);
462 }
463
464 private void AddEvent(XmlEventType eventType)
465 {
466 int num = NewEvent();
467 _pageCurr[num].InitEvent(eventType);
468 }
469
470 private void AddEvent(XmlEventType eventType, string s1)
471 {
472 int num = NewEvent();
473 _pageCurr[num].InitEvent(eventType, s1);
474 }
475
476 private void AddEvent(XmlEventType eventType, string s1, string s2)
477 {
478 int num = NewEvent();
479 _pageCurr[num].InitEvent(eventType, s1, s2);
480 }
481
482 private void AddEvent(XmlEventType eventType, string s1, string s2, string s3)
483 {
484 int num = NewEvent();
485 _pageCurr[num].InitEvent(eventType, s1, s2, s3);
486 }
487
488 private void AddEvent(XmlEventType eventType, string s1, string s2, string s3, object o)
489 {
490 int num = NewEvent();
491 _pageCurr[num].InitEvent(eventType, s1, s2, s3, o);
492 }
493
494 private void AddEvent(XmlEventType eventType, object o)
495 {
496 int num = NewEvent();
497 _pageCurr[num].InitEvent(eventType, o);
498 }
499
500 private int NewEvent()
501 {
502 if (_pages == null)
503 {
504 _pages = new List<XmlEvent[]>();
505 _pageCurr = new XmlEvent[32];
507 if (_singleText.Count != 0)
508 {
510 _pageSize++;
512 }
513 }
514 else if (_pageSize >= _pageCurr.Length)
515 {
516 _pageCurr = new XmlEvent[_pageSize * 2];
518 _pageSize = 0;
519 }
520 return _pageSize++;
521 }
522
523 private static byte[] ToBytes(byte[] buffer, int index, int count)
524 {
525 if (index != 0 || count != buffer.Length)
526 {
527 if (buffer.Length - index > count)
528 {
530 }
531 byte[] array = new byte[count];
533 return array;
534 }
535 return buffer;
536 }
537}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
void Add(TKey key, TValue value)
static readonly XmlValueConverter Untyped
override void WriteEndBase64()
XmlEventCache(string baseUri, bool hasRootNode)
override void WriteCharEntity(char ch)
override void WriteXmlDeclaration(XmlStandalone standalone)
override void WriteDocType(string name, string pubid, string sysid, string subset)
void AddEvent(XmlEventType eventType, string s1, string s2)
override void WriteRaw(string data)
override void WriteChars(char[] buffer, int index, int count)
override void StartElementContent()
List< XmlEvent[]> _pages
override void WriteBase64(byte[] buffer, int index, int count)
void AddEvent(XmlEventType eventType, string s1)
override void WriteProcessingInstruction(string name, string text)
void AddEvent(XmlEventType eventType, object o)
override void WriteWhitespace(string ws)
override void WriteBinHex(byte[] buffer, int index, int count)
override void WriteStartElement(string prefix, string localName, string ns)
override void WriteEndAttribute()
override void WriteEntityRef(string name)
void AddEvent(XmlEventType eventType, string s1, string s2, string s3, object o)
override void WriteNamespaceDeclaration(string prefix, string ns)
override void WriteValue(string value)
override void WriteXmlDeclaration(string xmldecl)
override void Dispose(bool disposing)
override void WriteCData(string text)
void EventsToWriter(XmlWriter writer)
override void WriteEndElement(string prefix, string localName, string ns)
void AddEvent(XmlEventType eventType)
override void WriteComment(string text)
override void WriteValue(object value)
static byte[] ToBytes(byte[] buffer, int index, int count)
override void WriteSurrogateCharEntity(char lowChar, char highChar)
override XmlWriterSettings Settings
override void WriteRaw(char[] buffer, int index, int count)
override void WriteStartAttribute(string prefix, string localName, string ns)
override void WriteFullEndElement(string prefix, string localName, string ns)
override void WriteString(string text)
void AddEvent(XmlEventType eventType, string s1, string s2, string s3)
IXmlNamespaceResolver _resolver
void InitEvent(XmlEventType eventType)
void InitEvent(XmlEventType eventType, string s1, string s2, string s3, object o)
void InitEvent(XmlEventType eventType, string s1, string s2)
void InitEvent(XmlEventType eventType, string s1, string s2, string s3)
void InitEvent(XmlEventType eventType, string s1)
void InitEvent(XmlEventType eventType, object o)