Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlWellFormedWriter.cs
Go to the documentation of this file.
5using System.Text;
7
8namespace System.Xml;
9
10internal sealed class XmlWellFormedWriter : XmlWriter
11{
12 private enum State
13 {
14 Start = 0,
15 TopLevel = 1,
16 Document = 2,
17 Element = 3,
18 Content = 4,
19 B64Content = 5,
20 B64Attribute = 6,
21 AfterRootEle = 7,
22 Attribute = 8,
23 SpecialAttr = 9,
24 EndDocument = 10,
25 RootLevelAttr = 11,
29 Closed = 15,
30 Error = 16,
31 StartContent = 101,
32 StartContentEle = 102,
33 StartContentB64 = 103,
34 StartDoc = 104,
35 StartDocEle = 106,
36 EndAttrSEle = 107,
37 EndAttrEEle = 108,
38 EndAttrSCont = 109,
39 EndAttrSAttr = 111,
40 PostB64Cont = 112,
41 PostB64Attr = 113,
42 PostB64RootAttr = 114,
43 StartFragEle = 115,
44 StartFragCont = 116,
45 StartFragB64 = 117,
47 }
48
49 private enum Token
50 {
53 PI,
54 Comment,
55 Dtd,
60 Text,
61 CData,
63 Base64,
64 RawData,
66 }
67
92
93 private struct ElementScope
94 {
95 internal int prevNSTop;
96
97 internal string prefix;
98
99 internal string localName;
100
101 internal string namespaceUri;
102
104
105 internal string xmlLang;
106
107 internal void Set(string prefix, string localName, string namespaceUri, int prevNSTop)
108 {
113 xmlSpace = (XmlSpace)(-1);
114 xmlLang = null;
115 }
116
118 {
119 rawWriter.WriteEndElement(prefix, localName, namespaceUri);
120 }
121
123 {
124 rawWriter.WriteFullEndElement(prefix, localName, namespaceUri);
125 }
126
128 {
129 return rawWriter.WriteEndElementAsync(prefix, localName, namespaceUri);
130 }
131
133 {
134 return rawWriter.WriteFullEndElementAsync(prefix, localName, namespaceUri);
135 }
136 }
137
138 private enum NamespaceKind
139 {
140 Written,
142 Implied,
143 Special
144 }
145
146 private struct Namespace
147 {
148 internal string prefix;
149
150 internal string namespaceUri;
151
153
154 internal int prevNsIndex;
155
156 internal void Set(string prefix, string namespaceUri, NamespaceKind kind)
157 {
160 this.kind = kind;
161 prevNsIndex = -1;
162 }
163
165 {
166 if (rawWriter != null)
167 {
168 rawWriter.WriteNamespaceDeclaration(prefix, namespaceUri);
169 return;
170 }
171 if (prefix.Length == 0)
172 {
173 writer.WriteStartAttribute(string.Empty, "xmlns", "http://www.w3.org/2000/xmlns/");
174 }
175 else
176 {
177 writer.WriteStartAttribute("xmlns", prefix, "http://www.w3.org/2000/xmlns/");
178 }
179 writer.WriteString(namespaceUri);
180 writer.WriteEndAttribute();
181 }
182
184 {
185 if (rawWriter != null)
186 {
187 await rawWriter.WriteNamespaceDeclarationAsync(prefix, namespaceUri).ConfigureAwait(continueOnCapturedContext: false);
188 return;
189 }
190 if (prefix.Length != 0)
191 {
192 await writer.WriteStartAttributeAsync("xmlns", prefix, "http://www.w3.org/2000/xmlns/").ConfigureAwait(continueOnCapturedContext: false);
193 }
194 else
195 {
196 await writer.WriteStartAttributeAsync(string.Empty, "xmlns", "http://www.w3.org/2000/xmlns/").ConfigureAwait(continueOnCapturedContext: false);
197 }
198 await writer.WriteStringAsync(namespaceUri).ConfigureAwait(continueOnCapturedContext: false);
199 await writer.WriteEndAttributeAsync().ConfigureAwait(continueOnCapturedContext: false);
200 }
201 }
202
203 private struct AttrName
204 {
205 internal string prefix;
206
207 internal string namespaceUri;
208
209 internal string localName;
210
211 internal int prev;
212
213 internal void Set(string prefix, string localName, string namespaceUri)
214 {
218 prev = 0;
219 }
220
221 internal bool IsDuplicate(string prefix, string localName, string namespaceUri)
222 {
223 if (this.localName == localName)
224 {
225 if (!(this.prefix == prefix))
226 {
228 }
229 return true;
230 }
231 return false;
232 }
233 }
234
235 private enum SpecialAttribute
236 {
237 No,
240 XmlSpace,
241 XmlLang
242 }
243
244 private sealed class AttributeValueCache
245 {
246 private enum ItemType
247 {
248 EntityRef,
252 String,
254 Raw,
255 RawChars,
257 }
258
259 private sealed class Item
260 {
261 internal ItemType type;
262
263 internal object data;
264
265 internal Item(ItemType type, object data)
266 {
267 Set(type, data);
268 }
269
270 [MemberNotNull("type")]
271 [MemberNotNull("data")]
272 internal void Set(ItemType type, object data)
273 {
274 this.type = type;
275 this.data = data;
276 }
277 }
278
279 private sealed class BufferChunk
280 {
281 internal char[] buffer;
282
283 internal int index;
284
285 internal int count;
286
287 internal BufferChunk(char[] buffer, int index, int count)
288 {
292 }
293 }
294
296
297 private string _singleStringValue;
298
299 private Item[] _items;
300
301 private int _firstItem;
302
303 private int _lastItem = -1;
304
305 internal string StringValue
306 {
307 get
308 {
309 if (_singleStringValue != null)
310 {
311 return _singleStringValue;
312 }
313 return _stringValue.ToString();
314 }
315 }
316
317 internal void WriteEntityRef(string name)
318 {
319 if (_singleStringValue != null)
320 {
322 }
323 switch (name)
324 {
325 case "lt":
326 _stringValue.Append('<');
327 break;
328 case "gt":
329 _stringValue.Append('>');
330 break;
331 case "quot":
332 _stringValue.Append('"');
333 break;
334 case "apos":
335 _stringValue.Append('\'');
336 break;
337 case "amp":
338 _stringValue.Append('&');
339 break;
340 default:
341 _stringValue.Append('&');
342 _stringValue.Append(name);
343 _stringValue.Append(';');
344 break;
345 }
346 AddItem(ItemType.EntityRef, name);
347 }
348
349 internal void WriteCharEntity(char ch)
350 {
351 if (_singleStringValue != null)
352 {
354 }
356 AddItem(ItemType.CharEntity, ch);
357 }
358
359 internal void WriteSurrogateCharEntity(char lowChar, char highChar)
360 {
361 if (_singleStringValue != null)
362 {
364 }
367 AddItem(ItemType.SurrogateCharEntity, new char[2] { lowChar, highChar });
368 }
369
370 internal void WriteWhitespace(string ws)
371 {
372 if (_singleStringValue != null)
373 {
375 }
377 AddItem(ItemType.Whitespace, ws);
378 }
379
380 internal void WriteString(string text)
381 {
382 if (_singleStringValue != null)
383 {
385 }
386 else if (_lastItem == -1)
387 {
389 return;
390 }
392 AddItem(ItemType.String, text);
393 }
394
395 internal void WriteChars(char[] buffer, int index, int count)
396 {
397 if (_singleStringValue != null)
398 {
400 }
402 AddItem(ItemType.StringChars, new BufferChunk(buffer, index, count));
403 }
404
405 internal void WriteRaw(char[] buffer, int index, int count)
406 {
407 if (_singleStringValue != null)
408 {
410 }
412 AddItem(ItemType.RawChars, new BufferChunk(buffer, index, count));
413 }
414
415 internal void WriteRaw(string data)
416 {
417 if (_singleStringValue != null)
418 {
420 }
421 _stringValue.Append(data);
422 AddItem(ItemType.Raw, data);
423 }
424
425 internal void WriteValue(string value)
426 {
427 if (_singleStringValue != null)
428 {
430 }
432 AddItem(ItemType.ValueString, value);
433 }
434
435 internal void Replay(XmlWriter writer)
436 {
437 if (_singleStringValue != null)
438 {
439 writer.WriteString(_singleStringValue);
440 return;
441 }
442 for (int i = _firstItem; i <= _lastItem; i++)
443 {
444 Item item = _items[i];
445 switch (item.type)
446 {
447 case ItemType.EntityRef:
448 writer.WriteEntityRef((string)item.data);
449 break;
450 case ItemType.CharEntity:
451 writer.WriteCharEntity((char)item.data);
452 break;
453 case ItemType.SurrogateCharEntity:
454 {
455 char[] array = (char[])item.data;
456 writer.WriteSurrogateCharEntity(array[0], array[1]);
457 break;
458 }
459 case ItemType.Whitespace:
460 writer.WriteWhitespace((string)item.data);
461 break;
462 case ItemType.String:
463 writer.WriteString((string)item.data);
464 break;
465 case ItemType.StringChars:
466 {
468 writer.WriteChars(bufferChunk.buffer, bufferChunk.index, bufferChunk.count);
469 break;
470 }
471 case ItemType.Raw:
472 writer.WriteRaw((string)item.data);
473 break;
474 case ItemType.RawChars:
475 {
477 writer.WriteChars(bufferChunk.buffer, bufferChunk.index, bufferChunk.count);
478 break;
479 }
480 case ItemType.ValueString:
481 writer.WriteValue((string)item.data);
482 break;
483 }
484 }
485 }
486
487 internal void Trim()
488 {
489 if (_singleStringValue != null)
490 {
492 return;
493 }
494 string text = _stringValue.ToString();
496 if (text != text2)
497 {
499 }
500 int i;
501 for (i = _firstItem; i == _firstItem && i <= _lastItem; i++)
502 {
503 Item item = _items[i];
504 switch (item.type)
505 {
506 case ItemType.Whitespace:
507 _firstItem++;
508 break;
509 case ItemType.String:
510 case ItemType.Raw:
511 case ItemType.ValueString:
513 if (((string)item.data).Length == 0)
514 {
515 _firstItem++;
516 }
517 break;
518 case ItemType.StringChars:
519 case ItemType.RawChars:
520 {
522 int num = bufferChunk.index + bufferChunk.count;
523 while (bufferChunk.index < num && XmlCharType.IsWhiteSpace(bufferChunk.buffer[bufferChunk.index]))
524 {
525 bufferChunk.index++;
526 bufferChunk.count--;
527 }
528 if (bufferChunk.index == num)
529 {
530 _firstItem++;
531 }
532 break;
533 }
534 }
535 }
536 i = _lastItem;
537 while (i == _lastItem && i >= _firstItem)
538 {
539 Item item2 = _items[i];
540 switch (item2.type)
541 {
542 case ItemType.Whitespace:
543 _lastItem--;
544 break;
545 case ItemType.String:
546 case ItemType.Raw:
547 case ItemType.ValueString:
549 if (((string)item2.data).Length == 0)
550 {
551 _lastItem--;
552 }
553 break;
554 case ItemType.StringChars:
555 case ItemType.RawChars:
556 {
558 while (bufferChunk2.count > 0 && XmlCharType.IsWhiteSpace(bufferChunk2.buffer[bufferChunk2.index + bufferChunk2.count - 1]))
559 {
560 bufferChunk2.count--;
561 }
562 if (bufferChunk2.count == 0)
563 {
564 _lastItem--;
565 }
566 break;
567 }
568 }
569 i--;
570 }
571 }
572
573 internal void Clear()
574 {
575 _singleStringValue = null;
576 _lastItem = -1;
577 _firstItem = 0;
579 }
580
587
588 private void AddItem(ItemType type, object data)
589 {
590 int num = _lastItem + 1;
591 if (_items == null)
592 {
593 _items = new Item[4];
594 }
595 else if (_items.Length == num)
596 {
597 Item[] array = new Item[num * 2];
598 Array.Copy(_items, array, num);
599 _items = array;
600 }
601 if (_items[num] == null)
602 {
603 _items[num] = new Item(type, data);
604 }
605 else
606 {
607 _items[num].Set(type, data);
608 }
609 _lastItem = num;
610 }
611
613 {
614 if (_singleStringValue != null)
615 {
616 await writer.WriteStringAsync(_singleStringValue).ConfigureAwait(continueOnCapturedContext: false);
617 return;
618 }
619 for (int i = _firstItem; i <= _lastItem; i++)
620 {
621 Item item = _items[i];
622 switch (item.type)
623 {
624 case ItemType.EntityRef:
625 await writer.WriteEntityRefAsync((string)item.data).ConfigureAwait(continueOnCapturedContext: false);
626 break;
627 case ItemType.CharEntity:
628 await writer.WriteCharEntityAsync((char)item.data).ConfigureAwait(continueOnCapturedContext: false);
629 break;
630 case ItemType.SurrogateCharEntity:
631 {
632 char[] array = (char[])item.data;
633 await writer.WriteSurrogateCharEntityAsync(array[0], array[1]).ConfigureAwait(continueOnCapturedContext: false);
634 break;
635 }
636 case ItemType.Whitespace:
637 await writer.WriteWhitespaceAsync((string)item.data).ConfigureAwait(continueOnCapturedContext: false);
638 break;
639 case ItemType.String:
640 await writer.WriteStringAsync((string)item.data).ConfigureAwait(continueOnCapturedContext: false);
641 break;
642 case ItemType.StringChars:
643 {
645 await writer.WriteCharsAsync(bufferChunk.buffer, bufferChunk.index, bufferChunk.count).ConfigureAwait(continueOnCapturedContext: false);
646 break;
647 }
648 case ItemType.Raw:
649 await writer.WriteRawAsync((string)item.data).ConfigureAwait(continueOnCapturedContext: false);
650 break;
651 case ItemType.RawChars:
652 {
654 await writer.WriteCharsAsync(bufferChunk.buffer, bufferChunk.index, bufferChunk.count).ConfigureAwait(continueOnCapturedContext: false);
655 break;
656 }
657 case ItemType.ValueString:
658 await writer.WriteStringAsync((string)item.data).ConfigureAwait(continueOnCapturedContext: false);
659 break;
660 }
661 }
662 }
663 }
664
665 private readonly XmlWriter _writer;
666
667 private readonly XmlRawWriter _rawWriter;
668
670
672
673 private int _nsTop;
674
676
677 private bool _useNsHashtable;
678
680
681 private int _elemTop;
682
684
685 private int _attrCount;
686
688
690
692
693 private string _curDeclPrefix;
694
696
698
699 private readonly bool _checkCharacters;
700
701 private readonly bool _omitDuplNamespaces;
702
703 private readonly bool _writeEndDocumentOnClose;
704
706
707 private bool _dtdWritten;
708
709 private bool _xmlDeclFollows;
710
711 internal static readonly string[] stateName = new string[17]
712 {
713 "Start", "TopLevel", "Document", "Element Start Tag", "Element Content", "Element Content", "Attribute", "EndRootElement", "Attribute", "Special Attribute",
714 "End Document", "Root Level Attribute Value", "Root Level Special Attribute Value", "Root Level Base64 Attribute Value", "After Root Level Attribute", "Closed", "Error"
715 };
716
717 internal static readonly string[] tokenName = new string[15]
718 {
719 "StartDocument", "EndDocument", "PI", "Comment", "DTD", "StartElement", "EndElement", "StartAttribute", "EndAttribute", "Text",
720 "CDATA", "Atomic value", "Base64", "RawData", "Whitespace"
721 };
722
723 private static readonly WriteState[] s_state2WriteState = new WriteState[17]
724 {
725 WriteState.Start,
726 WriteState.Prolog,
727 WriteState.Prolog,
728 WriteState.Element,
729 WriteState.Content,
730 WriteState.Content,
731 WriteState.Attribute,
732 WriteState.Content,
733 WriteState.Attribute,
734 WriteState.Attribute,
735 WriteState.Content,
736 WriteState.Attribute,
737 WriteState.Attribute,
738 WriteState.Attribute,
739 WriteState.Attribute,
740 WriteState.Closed,
742 };
743
744 private static readonly State[] s_stateTableDocument = new State[240]
745 {
746 State.Document,
747 State.Error,
748 State.Error,
749 State.Error,
750 State.Error,
751 State.PostB64Cont,
752 State.Error,
753 State.Error,
754 State.Error,
755 State.Error,
756 State.Error,
757 State.Error,
758 State.Error,
759 State.Error,
760 State.Error,
761 State.Error,
762 State.Error,
763 State.Error,
764 State.Error,
765 State.Error,
766 State.Error,
767 State.PostB64Cont,
768 State.Error,
769 State.EndDocument,
770 State.Error,
771 State.Error,
772 State.Error,
773 State.Error,
774 State.Error,
775 State.Error,
776 State.Error,
777 State.Error,
778 State.StartDoc,
779 State.TopLevel,
780 State.Document,
781 State.StartContent,
782 State.Content,
783 State.PostB64Cont,
784 State.PostB64Attr,
785 State.AfterRootEle,
786 State.EndAttrSCont,
787 State.EndAttrSCont,
788 State.Error,
789 State.Error,
790 State.Error,
791 State.Error,
792 State.Error,
793 State.Error,
794 State.StartDoc,
795 State.TopLevel,
796 State.Document,
797 State.StartContent,
798 State.Content,
799 State.PostB64Cont,
800 State.PostB64Attr,
801 State.AfterRootEle,
802 State.EndAttrSCont,
803 State.EndAttrSCont,
804 State.Error,
805 State.Error,
806 State.Error,
807 State.Error,
808 State.Error,
809 State.Error,
810 State.StartDoc,
811 State.TopLevel,
812 State.Document,
813 State.Error,
814 State.Error,
815 State.PostB64Cont,
816 State.PostB64Attr,
817 State.Error,
818 State.Error,
819 State.Error,
820 State.Error,
821 State.Error,
822 State.Error,
823 State.Error,
824 State.Error,
825 State.Error,
826 State.StartDocEle,
827 State.Element,
828 State.Element,
829 State.StartContentEle,
830 State.Element,
831 State.PostB64Cont,
832 State.PostB64Attr,
833 State.Error,
834 State.EndAttrSEle,
835 State.EndAttrSEle,
836 State.Error,
837 State.Error,
838 State.Error,
839 State.Error,
840 State.Error,
841 State.Error,
842 State.Error,
843 State.Error,
844 State.Error,
845 State.StartContent,
846 State.Content,
847 State.PostB64Cont,
848 State.PostB64Attr,
849 State.Error,
850 State.EndAttrEEle,
851 State.EndAttrEEle,
852 State.Error,
853 State.Error,
854 State.Error,
855 State.Error,
856 State.Error,
857 State.Error,
858 State.Error,
859 State.Error,
860 State.Error,
861 State.Attribute,
862 State.Error,
863 State.PostB64Cont,
864 State.PostB64Attr,
865 State.Error,
866 State.EndAttrSAttr,
867 State.EndAttrSAttr,
868 State.Error,
869 State.Error,
870 State.Error,
871 State.Error,
872 State.Error,
873 State.Error,
874 State.Error,
875 State.Error,
876 State.Error,
877 State.Error,
878 State.Error,
879 State.PostB64Cont,
880 State.PostB64Attr,
881 State.Error,
882 State.Element,
883 State.Element,
884 State.Error,
885 State.Error,
886 State.Error,
887 State.Error,
888 State.Error,
889 State.Error,
890 State.Error,
891 State.Error,
892 State.Error,
893 State.StartContent,
894 State.Content,
895 State.PostB64Cont,
896 State.PostB64Attr,
897 State.Error,
898 State.Attribute,
899 State.SpecialAttr,
900 State.Error,
901 State.Error,
902 State.Error,
903 State.Error,
904 State.Error,
905 State.Error,
906 State.Error,
907 State.Error,
908 State.Error,
909 State.StartContent,
910 State.Content,
911 State.PostB64Cont,
912 State.PostB64Attr,
913 State.Error,
914 State.EndAttrSCont,
915 State.EndAttrSCont,
916 State.Error,
917 State.Error,
918 State.Error,
919 State.Error,
920 State.Error,
921 State.Error,
922 State.Error,
923 State.Error,
924 State.Error,
925 State.StartContent,
926 State.Content,
927 State.PostB64Cont,
928 State.PostB64Attr,
929 State.Error,
930 State.Attribute,
931 State.Error,
932 State.Error,
933 State.Error,
934 State.Error,
935 State.Error,
936 State.Error,
937 State.Error,
938 State.Error,
939 State.Error,
940 State.Error,
941 State.StartContentB64,
942 State.B64Content,
943 State.B64Content,
944 State.B64Attribute,
945 State.Error,
946 State.B64Attribute,
947 State.Error,
948 State.Error,
949 State.Error,
950 State.Error,
951 State.Error,
952 State.Error,
953 State.Error,
954 State.StartDoc,
955 State.Error,
956 State.Document,
957 State.StartContent,
958 State.Content,
959 State.PostB64Cont,
960 State.PostB64Attr,
961 State.AfterRootEle,
962 State.Attribute,
963 State.SpecialAttr,
964 State.Error,
965 State.Error,
966 State.Error,
967 State.Error,
968 State.Error,
969 State.Error,
970 State.StartDoc,
971 State.TopLevel,
972 State.Document,
973 State.StartContent,
974 State.Content,
975 State.PostB64Cont,
976 State.PostB64Attr,
977 State.AfterRootEle,
978 State.Attribute,
979 State.SpecialAttr,
980 State.Error,
981 State.Error,
982 State.Error,
983 State.Error,
984 State.Error,
986 };
987
988 private static readonly State[] s_stateTableAuto = new State[240]
989 {
990 State.Document,
991 State.Error,
992 State.Error,
993 State.Error,
994 State.Error,
995 State.PostB64Cont,
996 State.Error,
997 State.Error,
998 State.Error,
999 State.Error,
1000 State.Error,
1001 State.Error,
1002 State.Error,
1003 State.Error,
1004 State.Error,
1005 State.Error,
1006 State.Error,
1007 State.Error,
1008 State.Error,
1009 State.Error,
1010 State.Error,
1011 State.PostB64Cont,
1012 State.Error,
1013 State.EndDocument,
1014 State.Error,
1015 State.Error,
1016 State.Error,
1017 State.Error,
1018 State.Error,
1019 State.Error,
1020 State.Error,
1021 State.Error,
1022 State.TopLevel,
1023 State.TopLevel,
1024 State.Error,
1025 State.StartContent,
1026 State.Content,
1027 State.PostB64Cont,
1028 State.PostB64Attr,
1029 State.AfterRootEle,
1030 State.EndAttrSCont,
1031 State.EndAttrSCont,
1032 State.Error,
1033 State.Error,
1034 State.Error,
1035 State.Error,
1036 State.Error,
1037 State.Error,
1038 State.TopLevel,
1039 State.TopLevel,
1040 State.Error,
1041 State.StartContent,
1042 State.Content,
1043 State.PostB64Cont,
1044 State.PostB64Attr,
1045 State.AfterRootEle,
1046 State.EndAttrSCont,
1047 State.EndAttrSCont,
1048 State.Error,
1049 State.Error,
1050 State.Error,
1051 State.Error,
1052 State.Error,
1053 State.Error,
1054 State.StartDoc,
1055 State.TopLevel,
1056 State.Error,
1057 State.Error,
1058 State.Error,
1059 State.PostB64Cont,
1060 State.PostB64Attr,
1061 State.Error,
1062 State.Error,
1063 State.Error,
1064 State.Error,
1065 State.Error,
1066 State.Error,
1067 State.Error,
1068 State.Error,
1069 State.Error,
1070 State.StartFragEle,
1071 State.Element,
1072 State.Error,
1073 State.StartContentEle,
1074 State.Element,
1075 State.PostB64Cont,
1076 State.PostB64Attr,
1077 State.Element,
1078 State.EndAttrSEle,
1079 State.EndAttrSEle,
1080 State.Error,
1081 State.Error,
1082 State.Error,
1083 State.Error,
1084 State.Error,
1085 State.Error,
1086 State.Error,
1087 State.Error,
1088 State.Error,
1089 State.StartContent,
1090 State.Content,
1091 State.PostB64Cont,
1092 State.PostB64Attr,
1093 State.Error,
1094 State.EndAttrEEle,
1095 State.EndAttrEEle,
1096 State.Error,
1097 State.Error,
1098 State.Error,
1099 State.Error,
1100 State.Error,
1101 State.Error,
1102 State.RootLevelAttr,
1103 State.Error,
1104 State.Error,
1105 State.Attribute,
1106 State.Error,
1107 State.PostB64Cont,
1108 State.PostB64Attr,
1109 State.Error,
1110 State.EndAttrSAttr,
1111 State.EndAttrSAttr,
1112 State.Error,
1113 State.StartRootLevelAttr,
1114 State.StartRootLevelAttr,
1115 State.PostB64RootAttr,
1116 State.RootLevelAttr,
1117 State.Error,
1118 State.Error,
1119 State.Error,
1120 State.Error,
1121 State.Error,
1122 State.Error,
1123 State.PostB64Cont,
1124 State.PostB64Attr,
1125 State.Error,
1126 State.Element,
1127 State.Element,
1128 State.Error,
1129 State.AfterRootLevelAttr,
1130 State.AfterRootLevelAttr,
1131 State.PostB64RootAttr,
1132 State.Error,
1133 State.Error,
1134 State.StartFragCont,
1135 State.StartFragCont,
1136 State.Error,
1137 State.StartContent,
1138 State.Content,
1139 State.PostB64Cont,
1140 State.PostB64Attr,
1141 State.Content,
1142 State.Attribute,
1143 State.SpecialAttr,
1144 State.Error,
1145 State.RootLevelAttr,
1146 State.RootLevelSpecAttr,
1147 State.PostB64RootAttr,
1148 State.Error,
1149 State.Error,
1150 State.StartFragCont,
1151 State.StartFragCont,
1152 State.Error,
1153 State.StartContent,
1154 State.Content,
1155 State.PostB64Cont,
1156 State.PostB64Attr,
1157 State.Content,
1158 State.EndAttrSCont,
1159 State.EndAttrSCont,
1160 State.Error,
1161 State.Error,
1162 State.Error,
1163 State.Error,
1164 State.Error,
1165 State.Error,
1166 State.StartFragCont,
1167 State.StartFragCont,
1168 State.Error,
1169 State.StartContent,
1170 State.Content,
1171 State.PostB64Cont,
1172 State.PostB64Attr,
1173 State.Content,
1174 State.Attribute,
1175 State.Error,
1176 State.Error,
1177 State.RootLevelAttr,
1178 State.Error,
1179 State.PostB64RootAttr,
1180 State.Error,
1181 State.Error,
1182 State.StartFragB64,
1183 State.StartFragB64,
1184 State.Error,
1185 State.StartContentB64,
1186 State.B64Content,
1187 State.B64Content,
1188 State.B64Attribute,
1189 State.B64Content,
1190 State.B64Attribute,
1191 State.Error,
1192 State.Error,
1193 State.RootLevelB64Attr,
1194 State.Error,
1195 State.RootLevelB64Attr,
1196 State.Error,
1197 State.Error,
1198 State.StartFragCont,
1199 State.TopLevel,
1200 State.Error,
1201 State.StartContent,
1202 State.Content,
1203 State.PostB64Cont,
1204 State.PostB64Attr,
1205 State.Content,
1206 State.Attribute,
1207 State.SpecialAttr,
1208 State.Error,
1209 State.RootLevelAttr,
1210 State.RootLevelSpecAttr,
1211 State.PostB64RootAttr,
1212 State.AfterRootLevelAttr,
1213 State.Error,
1214 State.TopLevel,
1215 State.TopLevel,
1216 State.Error,
1217 State.StartContent,
1218 State.Content,
1219 State.PostB64Cont,
1220 State.PostB64Attr,
1221 State.AfterRootEle,
1222 State.Attribute,
1223 State.SpecialAttr,
1224 State.Error,
1225 State.RootLevelAttr,
1226 State.RootLevelSpecAttr,
1227 State.PostB64RootAttr,
1228 State.AfterRootLevelAttr,
1230 };
1231
1232 public override WriteState WriteState
1233 {
1234 get
1235 {
1236 if (_currentState <= State.Error)
1237 {
1238 return s_state2WriteState[(int)_currentState];
1239 }
1240 return WriteState.Error;
1241 }
1242 }
1243
1245 {
1246 get
1247 {
1249 settings.ReadOnly = false;
1252 {
1254 }
1256 settings.ReadOnly = true;
1257 return settings;
1258 }
1259 }
1260
1261 public override XmlSpace XmlSpace
1262 {
1263 get
1264 {
1265 int num = _elemTop;
1266 while (num >= 0 && _elemScopeStack[num].xmlSpace == (XmlSpace)(-1))
1267 {
1268 num--;
1269 }
1270 return _elemScopeStack[num].xmlSpace;
1271 }
1272 }
1273
1274 public override string XmlLang
1275 {
1276 get
1277 {
1278 int num = _elemTop;
1279 while (num > 0 && _elemScopeStack[num].xmlLang == null)
1280 {
1281 num--;
1282 }
1283 return _elemScopeStack[num].xmlLang;
1284 }
1285 }
1286
1288
1290
1291 private bool InBase64
1292 {
1293 get
1294 {
1295 if (_currentState != State.B64Content && _currentState != State.B64Attribute)
1296 {
1297 return _currentState == State.RootLevelB64Attr;
1298 }
1299 return true;
1300 }
1301 }
1302
1303 private bool IsClosedOrErrorState => _currentState >= State.Closed;
1304
1306 {
1307 _writer = writer;
1310 if (_rawWriter != null)
1311 {
1313 }
1319 _currentState = State.Start;
1320 _nsStack = new Namespace[8];
1321 _nsStack[0].Set("xmlns", "http://www.w3.org/2000/xmlns/", NamespaceKind.Special);
1322 _nsStack[1].Set("xml", "http://www.w3.org/XML/1998/namespace", NamespaceKind.Special);
1323 if (_predefinedNamespaces == null)
1324 {
1325 _nsStack[2].Set(string.Empty, string.Empty, NamespaceKind.Implied);
1326 }
1327 else
1328 {
1330 _nsStack[2].Set(string.Empty, (text == null) ? string.Empty : text, NamespaceKind.Implied);
1331 }
1332 _nsTop = 2;
1334 _elemScopeStack[0].Set(string.Empty, string.Empty, string.Empty, _nsTop);
1336 _elemScopeStack[0].xmlLang = null;
1337 _elemTop = 0;
1338 _attrStack = new AttrName[8];
1339 }
1340
1341 public override void WriteStartDocument()
1342 {
1344 }
1345
1346 public override void WriteStartDocument(bool standalone)
1347 {
1349 }
1350
1351 public override void WriteEndDocument()
1352 {
1353 try
1354 {
1355 while (_elemTop > 0)
1356 {
1358 }
1360 AdvanceState(Token.EndDocument);
1361 if (currentState != State.AfterRootEle)
1362 {
1364 }
1365 if (_rawWriter == null)
1366 {
1368 }
1369 }
1370 catch
1371 {
1372 _currentState = State.Error;
1373 throw;
1374 }
1375 }
1376
1377 public override void WriteDocType(string name, string pubid, string sysid, string subset)
1378 {
1379 try
1380 {
1381 if (name == null || name.Length == 0)
1382 {
1384 }
1385 XmlConvert.VerifyQName(name, ExceptionType.XmlException);
1386 if (_conformanceLevel == ConformanceLevel.Fragment)
1387 {
1389 }
1390 AdvanceState(Token.Dtd);
1391 if (_dtdWritten)
1392 {
1393 _currentState = State.Error;
1395 }
1397 {
1400 }
1401 if (_checkCharacters)
1402 {
1403 int invCharIndex;
1404 if (pubid != null && (invCharIndex = XmlCharType.IsPublicId(pubid)) >= 0)
1405 {
1409 }
1410 if (sysid != null && (invCharIndex = XmlCharType.IsOnlyCharData(sysid)) >= 0)
1411 {
1415 }
1416 if (subset != null && (invCharIndex = XmlCharType.IsOnlyCharData(subset)) >= 0)
1417 {
1421 }
1422 }
1424 _dtdWritten = true;
1425 }
1426 catch
1427 {
1428 _currentState = State.Error;
1429 throw;
1430 }
1431 }
1432
1433 public override void WriteStartElement(string prefix, string localName, string ns)
1434 {
1435 try
1436 {
1437 if (localName == null || localName.Length == 0)
1438 {
1440 }
1441 CheckNCName(localName);
1442 AdvanceState(Token.StartElement);
1443 if (prefix == null)
1444 {
1445 if (ns != null)
1446 {
1447 prefix = LookupPrefix(ns);
1448 }
1449 if (prefix == null)
1450 {
1451 prefix = string.Empty;
1452 }
1453 }
1454 else if (prefix.Length > 0)
1455 {
1457 if (ns == null)
1458 {
1459 ns = LookupNamespace(prefix);
1460 }
1461 if (ns == null || (ns != null && ns.Length == 0))
1462 {
1464 }
1465 }
1466 if (ns == null)
1467 {
1468 ns = LookupNamespace(prefix);
1469 if (ns == null)
1470 {
1471 ns = string.Empty;
1472 }
1473 }
1474 if (_elemTop == 0 && _rawWriter != null)
1475 {
1477 }
1478 _writer.WriteStartElement(prefix, localName, ns);
1479 int num = ++_elemTop;
1480 if (num == _elemScopeStack.Length)
1481 {
1482 ElementScope[] array = new ElementScope[num * 2];
1485 }
1486 _elemScopeStack[num].Set(prefix, localName, ns, _nsTop);
1488 if (_attrCount >= 14)
1489 {
1491 }
1492 _attrCount = 0;
1493 }
1494 catch
1495 {
1496 _currentState = State.Error;
1497 throw;
1498 }
1499 }
1500
1501 public override void WriteEndElement()
1502 {
1503 try
1504 {
1505 AdvanceState(Token.EndElement);
1506 int elemTop = _elemTop;
1507 if (elemTop == 0)
1508 {
1509 throw new XmlException(System.SR.Xml_NoStartTag, string.Empty);
1510 }
1511 if (_rawWriter != null)
1512 {
1514 }
1515 else
1516 {
1518 }
1519 int prevNSTop = _elemScopeStack[elemTop].prevNSTop;
1520 if (_useNsHashtable && prevNSTop < _nsTop)
1521 {
1522 PopNamespaces(prevNSTop + 1, _nsTop);
1523 }
1524 _nsTop = prevNSTop;
1525 if ((_elemTop = elemTop - 1) == 0)
1526 {
1527 if (_conformanceLevel == ConformanceLevel.Document)
1528 {
1529 _currentState = State.AfterRootEle;
1530 }
1531 else
1532 {
1533 _currentState = State.TopLevel;
1534 }
1535 }
1536 }
1537 catch
1538 {
1539 _currentState = State.Error;
1540 throw;
1541 }
1542 }
1543
1544 public override void WriteFullEndElement()
1545 {
1546 try
1547 {
1548 AdvanceState(Token.EndElement);
1549 int elemTop = _elemTop;
1550 if (elemTop == 0)
1551 {
1552 throw new XmlException(System.SR.Xml_NoStartTag, string.Empty);
1553 }
1554 if (_rawWriter != null)
1555 {
1557 }
1558 else
1559 {
1561 }
1562 int prevNSTop = _elemScopeStack[elemTop].prevNSTop;
1563 if (_useNsHashtable && prevNSTop < _nsTop)
1564 {
1565 PopNamespaces(prevNSTop + 1, _nsTop);
1566 }
1567 _nsTop = prevNSTop;
1568 if ((_elemTop = elemTop - 1) == 0)
1569 {
1570 if (_conformanceLevel == ConformanceLevel.Document)
1571 {
1572 _currentState = State.AfterRootEle;
1573 }
1574 else
1575 {
1576 _currentState = State.TopLevel;
1577 }
1578 }
1579 }
1580 catch
1581 {
1582 _currentState = State.Error;
1583 throw;
1584 }
1585 }
1586
1587 public override void WriteStartAttribute(string prefix, string localName, string namespaceName)
1588 {
1589 try
1590 {
1591 if (localName == null || localName.Length == 0)
1592 {
1593 if (!(prefix == "xmlns"))
1594 {
1596 }
1597 localName = "xmlns";
1598 prefix = string.Empty;
1599 }
1600 CheckNCName(localName);
1601 AdvanceState(Token.StartAttribute);
1602 if (prefix == null)
1603 {
1604 if (namespaceName != null && (!(localName == "xmlns") || !(namespaceName == "http://www.w3.org/2000/xmlns/")))
1605 {
1607 }
1608 if (prefix == null)
1609 {
1610 prefix = string.Empty;
1611 }
1612 }
1613 if (namespaceName == null)
1614 {
1615 if (prefix.Length > 0)
1616 {
1618 }
1619 if (namespaceName == null)
1620 {
1621 namespaceName = string.Empty;
1622 }
1623 }
1624 if (prefix.Length == 0)
1625 {
1626 if (localName[0] != 'x' || !(localName == "xmlns"))
1627 {
1628 if (namespaceName.Length > 0)
1629 {
1631 if (prefix == null || prefix.Length == 0)
1632 {
1634 }
1635 }
1636 goto IL_01fd;
1637 }
1638 if (namespaceName.Length > 0 && namespaceName != "http://www.w3.org/2000/xmlns/")
1639 {
1641 }
1642 _curDeclPrefix = string.Empty;
1644 }
1645 else
1646 {
1647 if (prefix[0] != 'x')
1648 {
1649 goto IL_01c9;
1650 }
1651 if (prefix == "xmlns")
1652 {
1653 if (namespaceName.Length > 0 && namespaceName != "http://www.w3.org/2000/xmlns/")
1654 {
1656 }
1657 _curDeclPrefix = localName;
1659 }
1660 else
1661 {
1662 if (!(prefix == "xml"))
1663 {
1664 goto IL_01c9;
1665 }
1666 if (namespaceName.Length > 0 && namespaceName != "http://www.w3.org/XML/1998/namespace")
1667 {
1669 }
1670 if (!(localName == "space"))
1671 {
1672 if (!(localName == "lang"))
1673 {
1674 goto IL_01c9;
1675 }
1677 }
1678 else
1679 {
1681 }
1682 }
1683 }
1684 goto IL_020d;
1685 IL_01c9:
1687 if (namespaceName.Length == 0)
1688 {
1689 prefix = string.Empty;
1690 }
1691 else
1692 {
1694 if (text != null && text != namespaceName)
1695 {
1697 }
1698 }
1699 goto IL_01fd;
1700 IL_01fd:
1701 if (prefix.Length != 0)
1702 {
1704 }
1705 goto IL_020d;
1706 IL_020d:
1707 AddAttribute(prefix, localName, namespaceName);
1708 if (_specAttr == SpecialAttribute.No)
1709 {
1711 }
1712 }
1713 catch
1714 {
1715 _currentState = State.Error;
1716 throw;
1717 }
1718 }
1719
1720 public override void WriteEndAttribute()
1721 {
1722 try
1723 {
1724 AdvanceState(Token.EndAttribute);
1725 if (_specAttr != 0)
1726 {
1727 switch (_specAttr)
1728 {
1729 case SpecialAttribute.DefaultXmlns:
1730 {
1733 {
1734 if (_rawWriter != null)
1735 {
1737 {
1741 }
1742 else
1743 {
1745 }
1746 }
1747 else
1748 {
1749 _writer.WriteStartAttribute(string.Empty, "xmlns", "http://www.w3.org/2000/xmlns/");
1752 }
1753 }
1754 _curDeclPrefix = null;
1755 break;
1756 }
1757 case SpecialAttribute.PrefixedXmlns:
1758 {
1760 if (stringValue.Length == 0)
1761 {
1763 }
1764 if (stringValue == "http://www.w3.org/2000/xmlns/" || (stringValue == "http://www.w3.org/XML/1998/namespace" && _curDeclPrefix != "xml"))
1765 {
1767 }
1769 {
1770 if (_rawWriter != null)
1771 {
1773 {
1777 }
1778 else
1779 {
1781 }
1782 }
1783 else
1784 {
1785 _writer.WriteStartAttribute("xmlns", _curDeclPrefix, "http://www.w3.org/2000/xmlns/");
1788 }
1789 }
1790 _curDeclPrefix = null;
1791 break;
1792 }
1793 case SpecialAttribute.XmlSpace:
1794 {
1797 if (stringValue == "default")
1798 {
1800 }
1801 else
1802 {
1803 if (!(stringValue == "preserve"))
1804 {
1806 }
1808 }
1809 _writer.WriteStartAttribute("xml", "space", "http://www.w3.org/XML/1998/namespace");
1812 break;
1813 }
1814 case SpecialAttribute.XmlLang:
1815 {
1818 _writer.WriteStartAttribute("xml", "lang", "http://www.w3.org/XML/1998/namespace");
1821 break;
1822 }
1823 }
1826 }
1827 else
1828 {
1830 }
1831 }
1832 catch
1833 {
1834 _currentState = State.Error;
1835 throw;
1836 }
1837 }
1838
1839 public override void WriteCData(string text)
1840 {
1841 try
1842 {
1843 if (text == null)
1844 {
1845 text = string.Empty;
1846 }
1847 AdvanceState(Token.CData);
1849 }
1850 catch
1851 {
1852 _currentState = State.Error;
1853 throw;
1854 }
1855 }
1856
1857 public override void WriteComment(string text)
1858 {
1859 try
1860 {
1861 if (text == null)
1862 {
1863 text = string.Empty;
1864 }
1865 AdvanceState(Token.Comment);
1867 }
1868 catch
1869 {
1870 _currentState = State.Error;
1871 throw;
1872 }
1873 }
1874
1875 public override void WriteProcessingInstruction(string name, string text)
1876 {
1877 try
1878 {
1879 if (name == null || name.Length == 0)
1880 {
1882 }
1883 CheckNCName(name);
1884 if (text == null)
1885 {
1886 text = string.Empty;
1887 }
1888 if (name.Length == 3 && string.Equals(name, "xml", StringComparison.OrdinalIgnoreCase))
1889 {
1890 if (_currentState != 0)
1891 {
1893 }
1894 _xmlDeclFollows = true;
1895 AdvanceState(Token.PI);
1896 if (_rawWriter != null)
1897 {
1899 }
1900 else
1901 {
1903 }
1904 }
1905 else
1906 {
1907 AdvanceState(Token.PI);
1909 }
1910 }
1911 catch
1912 {
1913 _currentState = State.Error;
1914 throw;
1915 }
1916 }
1917
1918 public override void WriteEntityRef(string name)
1919 {
1920 try
1921 {
1922 if (name == null || name.Length == 0)
1923 {
1925 }
1926 CheckNCName(name);
1927 AdvanceState(Token.Text);
1928 if (SaveAttrValue)
1929 {
1931 }
1932 else
1933 {
1934 _writer.WriteEntityRef(name);
1935 }
1936 }
1937 catch
1938 {
1939 _currentState = State.Error;
1940 throw;
1941 }
1942 }
1943
1944 public override void WriteCharEntity(char ch)
1945 {
1946 try
1947 {
1948 if (char.IsSurrogate(ch))
1949 {
1951 }
1952 AdvanceState(Token.Text);
1953 if (SaveAttrValue)
1954 {
1956 }
1957 else
1958 {
1960 }
1961 }
1962 catch
1963 {
1964 _currentState = State.Error;
1965 throw;
1966 }
1967 }
1968
1969 public override void WriteSurrogateCharEntity(char lowChar, char highChar)
1970 {
1971 try
1972 {
1973 if (!char.IsSurrogatePair(highChar, lowChar))
1974 {
1976 }
1977 AdvanceState(Token.Text);
1978 if (SaveAttrValue)
1979 {
1981 }
1982 else
1983 {
1985 }
1986 }
1987 catch
1988 {
1989 _currentState = State.Error;
1990 throw;
1991 }
1992 }
1993
1994 public override void WriteWhitespace(string ws)
1995 {
1996 try
1997 {
1998 if (ws == null)
1999 {
2000 ws = string.Empty;
2001 }
2003 {
2005 }
2006 AdvanceState(Token.Whitespace);
2007 if (SaveAttrValue)
2008 {
2010 }
2011 else
2012 {
2014 }
2015 }
2016 catch
2017 {
2018 _currentState = State.Error;
2019 throw;
2020 }
2021 }
2022
2023 public override void WriteString(string text)
2024 {
2025 try
2026 {
2027 if (text != null)
2028 {
2029 AdvanceState(Token.Text);
2030 if (SaveAttrValue)
2031 {
2033 }
2034 else
2035 {
2037 }
2038 }
2039 }
2040 catch
2041 {
2042 _currentState = State.Error;
2043 throw;
2044 }
2045 }
2046
2047 public override void WriteChars(char[] buffer, int index, int count)
2048 {
2049 try
2050 {
2051 if (buffer == null)
2052 {
2053 throw new ArgumentNullException("buffer");
2054 }
2055 if (index < 0)
2056 {
2057 throw new ArgumentOutOfRangeException("index");
2058 }
2059 if (count < 0)
2060 {
2061 throw new ArgumentOutOfRangeException("count");
2062 }
2063 if (count > buffer.Length - index)
2064 {
2065 throw new ArgumentOutOfRangeException("count");
2066 }
2067 AdvanceState(Token.Text);
2068 if (SaveAttrValue)
2069 {
2071 }
2072 else
2073 {
2075 }
2076 }
2077 catch
2078 {
2079 _currentState = State.Error;
2080 throw;
2081 }
2082 }
2083
2084 public override void WriteRaw(char[] buffer, int index, int count)
2085 {
2086 try
2087 {
2088 if (buffer == null)
2089 {
2090 throw new ArgumentNullException("buffer");
2091 }
2092 if (index < 0)
2093 {
2094 throw new ArgumentOutOfRangeException("index");
2095 }
2096 if (count < 0)
2097 {
2098 throw new ArgumentOutOfRangeException("count");
2099 }
2100 if (count > buffer.Length - index)
2101 {
2102 throw new ArgumentOutOfRangeException("count");
2103 }
2104 AdvanceState(Token.RawData);
2105 if (SaveAttrValue)
2106 {
2108 }
2109 else
2110 {
2112 }
2113 }
2114 catch
2115 {
2116 _currentState = State.Error;
2117 throw;
2118 }
2119 }
2120
2121 public override void WriteRaw(string data)
2122 {
2123 try
2124 {
2125 if (data != null)
2126 {
2127 AdvanceState(Token.RawData);
2128 if (SaveAttrValue)
2129 {
2131 }
2132 else
2133 {
2134 _writer.WriteRaw(data);
2135 }
2136 }
2137 }
2138 catch
2139 {
2140 _currentState = State.Error;
2141 throw;
2142 }
2143 }
2144
2145 public override void WriteBase64(byte[] buffer, int index, int count)
2146 {
2147 try
2148 {
2149 if (buffer == null)
2150 {
2151 throw new ArgumentNullException("buffer");
2152 }
2153 if (index < 0)
2154 {
2155 throw new ArgumentOutOfRangeException("index");
2156 }
2157 if (count < 0)
2158 {
2159 throw new ArgumentOutOfRangeException("count");
2160 }
2161 if (count > buffer.Length - index)
2162 {
2163 throw new ArgumentOutOfRangeException("count");
2164 }
2165 AdvanceState(Token.Base64);
2167 }
2168 catch
2169 {
2170 _currentState = State.Error;
2171 throw;
2172 }
2173 }
2174
2175 public override void Close()
2176 {
2177 if (_currentState == State.Closed)
2178 {
2179 return;
2180 }
2181 try
2182 {
2184 {
2185 while (_currentState != State.Error && _elemTop > 0)
2186 {
2188 }
2189 }
2190 else if (_currentState != State.Error && _elemTop > 0)
2191 {
2192 try
2193 {
2194 AdvanceState(Token.EndElement);
2195 }
2196 catch
2197 {
2198 _currentState = State.Error;
2199 throw;
2200 }
2201 }
2202 if (InBase64 && _rawWriter != null)
2203 {
2205 }
2206 _writer.Flush();
2207 }
2208 finally
2209 {
2210 try
2211 {
2212 if (_rawWriter != null)
2213 {
2215 }
2216 else
2217 {
2218 _writer.Close();
2219 }
2220 }
2221 finally
2222 {
2223 _currentState = State.Closed;
2224 }
2225 }
2226 }
2227
2228 public override void Flush()
2229 {
2230 try
2231 {
2232 _writer.Flush();
2233 }
2234 catch
2235 {
2236 _currentState = State.Error;
2237 throw;
2238 }
2239 }
2240
2241 public override string LookupPrefix(string ns)
2242 {
2243 try
2244 {
2245 if (ns == null)
2246 {
2247 throw new ArgumentNullException("ns");
2248 }
2249 for (int num = _nsTop; num >= 0; num--)
2250 {
2251 if (_nsStack[num].namespaceUri == ns)
2252 {
2253 string prefix = _nsStack[num].prefix;
2254 for (num++; num <= _nsTop; num++)
2255 {
2256 if (_nsStack[num].prefix == prefix)
2257 {
2258 return null;
2259 }
2260 }
2261 return prefix;
2262 }
2263 }
2264 return (_predefinedNamespaces != null) ? _predefinedNamespaces.LookupPrefix(ns) : null;
2265 }
2266 catch
2267 {
2268 _currentState = State.Error;
2269 throw;
2270 }
2271 }
2272
2273 public override void WriteQualifiedName(string localName, string ns)
2274 {
2275 try
2276 {
2277 if (localName == null || localName.Length == 0)
2278 {
2280 }
2281 CheckNCName(localName);
2282 AdvanceState(Token.Text);
2283 string text = string.Empty;
2284 if (ns != null && ns.Length != 0)
2285 {
2286 text = LookupPrefix(ns);
2287 if (text == null)
2288 {
2289 if (_currentState != State.Attribute)
2290 {
2292 }
2293 text = GeneratePrefix();
2295 }
2296 }
2297 if (SaveAttrValue || _rawWriter == null)
2298 {
2299 if (text.Length != 0)
2300 {
2302 WriteString(":");
2303 }
2304 WriteString(localName);
2305 }
2306 else
2307 {
2308 _rawWriter.WriteQualifiedName(text, localName, ns);
2309 }
2310 }
2311 catch
2312 {
2313 _currentState = State.Error;
2314 throw;
2315 }
2316 }
2317
2318 public override void WriteValue(bool value)
2319 {
2320 try
2321 {
2322 AdvanceState(Token.AtomicValue);
2324 }
2325 catch
2326 {
2327 _currentState = State.Error;
2328 throw;
2329 }
2330 }
2331
2332 public override void WriteValue(DateTime value)
2333 {
2334 try
2335 {
2336 AdvanceState(Token.AtomicValue);
2338 }
2339 catch
2340 {
2341 _currentState = State.Error;
2342 throw;
2343 }
2344 }
2345
2346 public override void WriteValue(DateTimeOffset value)
2347 {
2348 try
2349 {
2350 AdvanceState(Token.AtomicValue);
2352 }
2353 catch
2354 {
2355 _currentState = State.Error;
2356 throw;
2357 }
2358 }
2359
2360 public override void WriteValue(double value)
2361 {
2362 try
2363 {
2364 AdvanceState(Token.AtomicValue);
2366 }
2367 catch
2368 {
2369 _currentState = State.Error;
2370 throw;
2371 }
2372 }
2373
2374 public override void WriteValue(float value)
2375 {
2376 try
2377 {
2378 AdvanceState(Token.AtomicValue);
2380 }
2381 catch
2382 {
2383 _currentState = State.Error;
2384 throw;
2385 }
2386 }
2387
2388 public override void WriteValue(decimal value)
2389 {
2390 try
2391 {
2392 AdvanceState(Token.AtomicValue);
2394 }
2395 catch
2396 {
2397 _currentState = State.Error;
2398 throw;
2399 }
2400 }
2401
2402 public override void WriteValue(int value)
2403 {
2404 try
2405 {
2406 AdvanceState(Token.AtomicValue);
2408 }
2409 catch
2410 {
2411 _currentState = State.Error;
2412 throw;
2413 }
2414 }
2415
2416 public override void WriteValue(long value)
2417 {
2418 try
2419 {
2420 AdvanceState(Token.AtomicValue);
2422 }
2423 catch
2424 {
2425 _currentState = State.Error;
2426 throw;
2427 }
2428 }
2429
2430 public override void WriteValue(string value)
2431 {
2432 try
2433 {
2434 if (value != null)
2435 {
2436 if (SaveAttrValue)
2437 {
2438 AdvanceState(Token.Text);
2440 }
2441 else
2442 {
2443 AdvanceState(Token.AtomicValue);
2445 }
2446 }
2447 }
2448 catch
2449 {
2450 _currentState = State.Error;
2451 throw;
2452 }
2453 }
2454
2455 public override void WriteValue(object value)
2456 {
2457 try
2458 {
2459 if (SaveAttrValue && value is string)
2460 {
2461 AdvanceState(Token.Text);
2463 }
2464 else
2465 {
2466 AdvanceState(Token.AtomicValue);
2468 }
2469 }
2470 catch
2471 {
2472 _currentState = State.Error;
2473 throw;
2474 }
2475 }
2476
2477 public override void WriteBinHex(byte[] buffer, int index, int count)
2478 {
2480 {
2482 }
2483 try
2484 {
2485 AdvanceState(Token.Text);
2486 base.WriteBinHex(buffer, index, count);
2487 }
2488 catch
2489 {
2490 _currentState = State.Error;
2491 throw;
2492 }
2493 }
2494
2496 {
2498 if (State.Attribute == _currentState)
2499 {
2500 _currentState = State.SpecialAttr;
2501 }
2502 else if (State.RootLevelAttr == _currentState)
2503 {
2504 _currentState = State.RootLevelSpecAttr;
2505 }
2506 if (_attrValueCache == null)
2507 {
2509 }
2510 }
2511
2513 {
2514 try
2515 {
2516 AdvanceState(Token.StartDocument);
2518 {
2521 }
2522 else if (_conformanceLevel == ConformanceLevel.Fragment)
2523 {
2525 }
2526 if (_rawWriter != null)
2527 {
2528 if (!_xmlDeclFollows)
2529 {
2531 }
2532 }
2533 else
2534 {
2536 }
2537 }
2538 catch
2539 {
2540 _currentState = State.Error;
2541 throw;
2542 }
2543 }
2544
2545 private void StartFragment()
2546 {
2548 }
2549
2550 private void PushNamespaceImplicit(string prefix, string ns)
2551 {
2552 int num = LookupNamespaceIndex(prefix);
2553 NamespaceKind kind;
2554 if (num != -1)
2555 {
2556 if (num > _elemScopeStack[_elemTop].prevNSTop)
2557 {
2558 if (_nsStack[num].namespaceUri != ns)
2559 {
2560 throw new XmlException(System.SR.Xml_RedefinePrefix, new string[3]
2561 {
2562 prefix,
2563 _nsStack[num].namespaceUri,
2564 ns
2565 });
2566 }
2567 return;
2568 }
2569 if (_nsStack[num].kind == NamespaceKind.Special)
2570 {
2571 if (!(prefix == "xml"))
2572 {
2574 }
2575 if (ns != _nsStack[num].namespaceUri)
2576 {
2578 }
2579 kind = NamespaceKind.Implied;
2580 }
2581 else
2582 {
2583 kind = ((!(_nsStack[num].namespaceUri == ns)) ? NamespaceKind.NeedToWrite : NamespaceKind.Implied);
2584 }
2585 }
2586 else
2587 {
2588 if ((ns == "http://www.w3.org/XML/1998/namespace" && prefix != "xml") || (ns == "http://www.w3.org/2000/xmlns/" && prefix != "xmlns"))
2589 {
2591 }
2592 if (_predefinedNamespaces != null)
2593 {
2595 kind = ((!(text == ns)) ? NamespaceKind.NeedToWrite : NamespaceKind.Implied);
2596 }
2597 else
2598 {
2599 kind = NamespaceKind.NeedToWrite;
2600 }
2601 }
2602 AddNamespace(prefix, ns, kind);
2603 }
2604
2605 private bool PushNamespaceExplicit(string prefix, string ns)
2606 {
2607 bool result = true;
2608 int num = LookupNamespaceIndex(prefix);
2609 if (num != -1)
2610 {
2611 if (num > _elemScopeStack[_elemTop].prevNSTop)
2612 {
2613 if (_nsStack[num].namespaceUri != ns)
2614 {
2615 throw new XmlException(System.SR.Xml_RedefinePrefix, new string[3]
2616 {
2617 prefix,
2618 _nsStack[num].namespaceUri,
2619 ns
2620 });
2621 }
2622 NamespaceKind kind = _nsStack[num].kind;
2623 if (kind == NamespaceKind.Written)
2624 {
2625 throw DupAttrException((prefix.Length == 0) ? string.Empty : "xmlns", (prefix.Length == 0) ? "xmlns" : prefix);
2626 }
2627 if (_omitDuplNamespaces && kind != NamespaceKind.NeedToWrite)
2628 {
2629 result = false;
2630 }
2631 _nsStack[num].kind = NamespaceKind.Written;
2632 return result;
2633 }
2634 if (_nsStack[num].namespaceUri == ns && _omitDuplNamespaces)
2635 {
2636 result = false;
2637 }
2638 }
2639 else if (_predefinedNamespaces != null)
2640 {
2642 if (text == ns && _omitDuplNamespaces)
2643 {
2644 result = false;
2645 }
2646 }
2647 if ((ns == "http://www.w3.org/XML/1998/namespace" && prefix != "xml") || (ns == "http://www.w3.org/2000/xmlns/" && prefix != "xmlns"))
2648 {
2650 }
2651 if (prefix.Length > 0 && prefix[0] == 'x')
2652 {
2653 if (prefix == "xml")
2654 {
2655 if (ns != "http://www.w3.org/XML/1998/namespace")
2656 {
2658 }
2659 }
2660 else if (prefix == "xmlns")
2661 {
2663 }
2664 }
2665 AddNamespace(prefix, ns, NamespaceKind.Written);
2666 return result;
2667 }
2668
2669 private void AddNamespace(string prefix, string ns, NamespaceKind kind)
2670 {
2671 int num = ++_nsTop;
2672 if (num == _nsStack.Length)
2673 {
2674 Namespace[] array = new Namespace[num * 2];
2675 Array.Copy(_nsStack, array, num);
2676 _nsStack = array;
2677 }
2678 _nsStack[num].Set(prefix, ns, kind);
2679 if (_useNsHashtable)
2680 {
2682 }
2683 else if (_nsTop == 16)
2684 {
2686 for (int i = 0; i <= _nsTop; i++)
2687 {
2689 }
2690 _useNsHashtable = true;
2691 }
2692 }
2693
2703
2704 private int LookupNamespaceIndex(string prefix)
2705 {
2706 if (_useNsHashtable)
2707 {
2709 {
2710 return value;
2711 }
2712 }
2713 else
2714 {
2715 for (int num = _nsTop; num >= 0; num--)
2716 {
2717 if (_nsStack[num].prefix == prefix)
2718 {
2719 return num;
2720 }
2721 }
2722 }
2723 return -1;
2724 }
2725
2726 private void PopNamespaces(int indexFrom, int indexTo)
2727 {
2728 for (int num = indexTo; num >= indexFrom; num--)
2729 {
2730 if (_nsStack[num].prevNsIndex == -1)
2731 {
2733 }
2734 else
2735 {
2737 }
2738 }
2739 }
2740
2741 private static XmlException DupAttrException(string prefix, string localName)
2742 {
2744 if (prefix.Length > 0)
2745 {
2746 stringBuilder.Append(prefix);
2747 stringBuilder.Append(':');
2748 }
2749 stringBuilder.Append(localName);
2751 }
2752
2753 private void AdvanceState(Token token)
2754 {
2755 if (_currentState >= State.Closed)
2756 {
2757 if (_currentState == State.Closed || _currentState == State.Error)
2758 {
2760 }
2762 }
2763 State state;
2764 while (true)
2765 {
2766 state = _stateTable[(int)(((int)token << 4) + _currentState)];
2767 switch (state)
2768 {
2769 case State.Error:
2771 break;
2772 case State.StartContent:
2774 state = State.Content;
2775 break;
2776 case State.StartContentEle:
2778 state = State.Element;
2779 break;
2780 case State.StartContentB64:
2782 state = State.B64Content;
2783 break;
2784 case State.StartDoc:
2786 state = State.Document;
2787 break;
2788 case State.StartDocEle:
2790 state = State.Element;
2791 break;
2792 case State.EndAttrSEle:
2795 state = State.Element;
2796 break;
2797 case State.EndAttrEEle:
2800 state = State.Content;
2801 break;
2802 case State.EndAttrSCont:
2805 state = State.Content;
2806 break;
2807 case State.EndAttrSAttr:
2809 state = State.Attribute;
2810 break;
2811 case State.PostB64Cont:
2812 if (_rawWriter != null)
2813 {
2815 }
2816 _currentState = State.Content;
2817 continue;
2818 case State.PostB64Attr:
2819 if (_rawWriter != null)
2820 {
2822 }
2823 _currentState = State.Attribute;
2824 continue;
2825 case State.PostB64RootAttr:
2826 if (_rawWriter != null)
2827 {
2829 }
2830 _currentState = State.RootLevelAttr;
2831 continue;
2832 case State.StartFragEle:
2833 StartFragment();
2834 state = State.Element;
2835 break;
2836 case State.StartFragCont:
2837 StartFragment();
2838 state = State.Content;
2839 break;
2840 case State.StartFragB64:
2841 StartFragment();
2842 state = State.B64Content;
2843 break;
2844 case State.StartRootLevelAttr:
2846 state = State.RootLevelAttr;
2847 break;
2848 }
2849 break;
2850 }
2852 }
2853
2854 private void StartElementContent()
2855 {
2856 int prevNSTop = _elemScopeStack[_elemTop].prevNSTop;
2857 for (int num = _nsTop; num > prevNSTop; num--)
2858 {
2859 if (_nsStack[num].kind == NamespaceKind.NeedToWrite)
2860 {
2862 }
2863 }
2864 if (_rawWriter != null)
2865 {
2867 }
2868 }
2869
2870 private static string GetStateName(State state)
2871 {
2872 if (state >= State.Error)
2873 {
2874 return "Error";
2875 }
2876 return stateName[(int)state];
2877 }
2878
2879 internal string LookupNamespace(string prefix)
2880 {
2881 for (int num = _nsTop; num >= 0; num--)
2882 {
2883 if (_nsStack[num].prefix == prefix)
2884 {
2885 return _nsStack[num].namespaceUri;
2886 }
2887 }
2888 if (_predefinedNamespaces == null)
2889 {
2890 return null;
2891 }
2893 }
2894
2895 private string LookupLocalNamespace(string prefix)
2896 {
2897 for (int num = _nsTop; num > _elemScopeStack[_elemTop].prevNSTop; num--)
2898 {
2899 if (_nsStack[num].prefix == prefix)
2900 {
2901 return _nsStack[num].namespaceUri;
2902 }
2903 }
2904 return null;
2905 }
2906
2907 private string GeneratePrefix()
2908 {
2912 handler.AppendLiteral("p");
2913 handler.AppendFormatted(_nsTop - 2, "d");
2914 string text = string.Create(provider, ref handler);
2915 if (LookupNamespace(text) == null)
2916 {
2917 return text;
2918 }
2919 int num = 0;
2920 string text2;
2921 do
2922 {
2926 handler2.AppendFormatted(text);
2927 handler2.AppendFormatted(num);
2928 text2 = string.Create(provider2, ref handler2);
2929 num++;
2930 }
2931 while (LookupNamespace(text2) != null);
2932 return text2;
2933 }
2934
2935 private void CheckNCName(string ncname)
2936 {
2937 int length = ncname.Length;
2939 {
2940 for (int i = 1; i < length; i++)
2941 {
2943 {
2944 throw InvalidCharsException(ncname, i);
2945 }
2946 }
2947 return;
2948 }
2949 throw InvalidCharsException(ncname, 0);
2950 }
2951
2952 private static Exception InvalidCharsException(string name, int badCharIndex)
2953 {
2955 string[] array2 = new string[3]
2956 {
2957 name,
2958 array[0],
2959 array[1]
2960 };
2962 object[] args = array2;
2964 }
2965
2967 {
2969 if ((currentState == State.Start || currentState == State.AfterRootEle) && _conformanceLevel == ConformanceLevel.Document)
2970 {
2972 }
2974 }
2975
2976 private void AddAttribute(string prefix, string localName, string namespaceName)
2977 {
2978 int num = _attrCount++;
2979 if (num == _attrStack.Length)
2980 {
2981 AttrName[] array = new AttrName[num * 2];
2982 Array.Copy(_attrStack, array, num);
2983 _attrStack = array;
2984 }
2985 _attrStack[num].Set(prefix, localName, namespaceName);
2986 if (_attrCount < 14)
2987 {
2988 for (int i = 0; i < num; i++)
2989 {
2990 if (_attrStack[i].IsDuplicate(prefix, localName, namespaceName))
2991 {
2992 throw DupAttrException(prefix, localName);
2993 }
2994 }
2995 return;
2996 }
2997 if (_attrCount == 14)
2998 {
2999 if (_attrHashTable == null)
3000 {
3002 }
3003 for (int j = 0; j < num; j++)
3004 {
3006 }
3007 }
3008 AddToAttrHashTable(num);
3009 int prev;
3010 for (prev = _attrStack[num].prev; prev > 0; prev = _attrStack[prev].prev)
3011 {
3012 prev--;
3013 if (_attrStack[prev].IsDuplicate(prefix, localName, namespaceName))
3014 {
3015 throw DupAttrException(prefix, localName);
3016 }
3017 }
3018 }
3019
3021 {
3022 string localName = _attrStack[attributeIndex].localName;
3024 _attrHashTable[localName] = 0;
3025 if (count == _attrHashTable.Count)
3026 {
3027 int num = attributeIndex - 1;
3028 while (num >= 0 && !(_attrStack[num].localName == localName))
3029 {
3030 num--;
3031 }
3032 _attrStack[attributeIndex].prev = num + 1;
3033 }
3034 }
3035
3037 {
3039 }
3040
3045
3047 {
3048 _ = 2;
3049 try
3050 {
3051 while (_elemTop > 0)
3052 {
3053 await WriteEndElementAsync().ConfigureAwait(continueOnCapturedContext: false);
3054 }
3057 if (prevState != State.AfterRootEle)
3058 {
3060 }
3061 if (_rawWriter == null)
3062 {
3064 }
3065 }
3066 catch
3067 {
3068 _currentState = State.Error;
3069 throw;
3070 }
3071 }
3072
3073 public override async Task WriteDocTypeAsync(string name, string pubid, string sysid, string subset)
3074 {
3075 _ = 1;
3076 try
3077 {
3078 if (name == null || name.Length == 0)
3079 {
3081 }
3082 XmlConvert.VerifyQName(name, ExceptionType.XmlException);
3083 if (_conformanceLevel == ConformanceLevel.Fragment)
3084 {
3086 }
3088 if (_dtdWritten)
3089 {
3090 _currentState = State.Error;
3092 }
3094 {
3097 }
3098 if (_checkCharacters)
3099 {
3100 int invCharIndex;
3101 if (pubid != null && (invCharIndex = XmlCharType.IsPublicId(pubid)) >= 0)
3102 {
3106 }
3107 if (sysid != null && (invCharIndex = XmlCharType.IsOnlyCharData(sysid)) >= 0)
3108 {
3112 }
3113 if (subset != null && (invCharIndex = XmlCharType.IsOnlyCharData(subset)) >= 0)
3114 {
3118 }
3119 }
3121 _dtdWritten = true;
3122 }
3123 catch
3124 {
3125 _currentState = State.Error;
3126 throw;
3127 }
3128 }
3129
3131 {
3132 if (task.IsSuccess())
3133 {
3134 return Task.CompletedTask;
3135 }
3136 return _TryReturnTask(task);
3137 }
3138
3140 {
3141 try
3142 {
3143 await task.ConfigureAwait(continueOnCapturedContext: false);
3144 }
3145 catch
3146 {
3147 _currentState = State.Error;
3148 throw;
3149 }
3150 }
3151
3153 {
3154 if (task.IsSuccess())
3155 {
3156 return TryReturnTask(nextTaskFun(arg));
3157 }
3158 return _SequenceRun(task, nextTaskFun, arg);
3159 }
3160
3162 {
3163 _ = 1;
3164 try
3165 {
3166 await task.ConfigureAwait(continueOnCapturedContext: false);
3167 await nextTaskFun(arg).ConfigureAwait(continueOnCapturedContext: false);
3168 }
3169 catch
3170 {
3171 _currentState = State.Error;
3172 throw;
3173 }
3174 }
3175
3176 public override Task WriteStartElementAsync(string prefix, string localName, string ns)
3177 {
3178 try
3179 {
3180 if (localName == null || localName.Length == 0)
3181 {
3183 }
3184 CheckNCName(localName);
3185 Task task = AdvanceStateAsync(Token.StartElement);
3186 if (task.IsSuccess())
3187 {
3188 return WriteStartElementAsync_NoAdvanceState(prefix, localName, ns);
3189 }
3190 return WriteStartElementAsync_NoAdvanceState(task, prefix, localName, ns);
3191 }
3192 catch
3193 {
3194 _currentState = State.Error;
3195 throw;
3196 }
3197 }
3198
3199 private Task WriteStartElementAsync_NoAdvanceState(string prefix, string localName, string ns)
3200 {
3201 try
3202 {
3203 if (prefix == null)
3204 {
3205 if (ns != null)
3206 {
3207 prefix = LookupPrefix(ns);
3208 }
3209 if (prefix == null)
3210 {
3211 prefix = string.Empty;
3212 }
3213 }
3214 else if (prefix.Length > 0)
3215 {
3217 if (ns == null)
3218 {
3219 ns = LookupNamespace(prefix);
3220 }
3221 if (ns == null || (ns != null && ns.Length == 0))
3222 {
3224 }
3225 }
3226 if (ns == null)
3227 {
3228 ns = LookupNamespace(prefix);
3229 if (ns == null)
3230 {
3231 ns = string.Empty;
3232 }
3233 }
3234 if (_elemTop == 0 && _rawWriter != null)
3235 {
3237 }
3238 Task task = _writer.WriteStartElementAsync(prefix, localName, ns);
3239 if (task.IsSuccess())
3240 {
3242 return Task.CompletedTask;
3243 }
3244 return WriteStartElementAsync_FinishWrite(task, prefix, localName, ns);
3245 }
3246 catch
3247 {
3248 _currentState = State.Error;
3249 throw;
3250 }
3251 }
3252
3253 private async Task WriteStartElementAsync_NoAdvanceState(Task task, string prefix, string localName, string ns)
3254 {
3255 _ = 1;
3256 try
3257 {
3258 await task.ConfigureAwait(continueOnCapturedContext: false);
3260 }
3261 catch
3262 {
3263 _currentState = State.Error;
3264 throw;
3265 }
3266 }
3267
3268 private void WriteStartElementAsync_FinishWrite(string prefix, string localName, string ns)
3269 {
3270 try
3271 {
3272 int num = ++_elemTop;
3273 if (num == _elemScopeStack.Length)
3274 {
3275 ElementScope[] array = new ElementScope[num * 2];
3278 }
3279 _elemScopeStack[num].Set(prefix, localName, ns, _nsTop);
3281 if (_attrCount >= 14)
3282 {
3284 }
3285 _attrCount = 0;
3286 }
3287 catch
3288 {
3289 _currentState = State.Error;
3290 throw;
3291 }
3292 }
3293
3294 private async Task WriteStartElementAsync_FinishWrite(Task t, string prefix, string localName, string ns)
3295 {
3296 try
3297 {
3300 }
3301 catch
3302 {
3303 _currentState = State.Error;
3304 throw;
3305 }
3306 }
3307
3308 public override Task WriteEndElementAsync()
3309 {
3310 try
3311 {
3312 Task task = AdvanceStateAsync(Token.EndElement);
3313 return SequenceRun(task, (XmlWellFormedWriter thisRef) => thisRef.WriteEndElementAsync_NoAdvanceState(), this);
3314 }
3315 catch
3316 {
3317 _currentState = State.Error;
3318 throw;
3319 }
3320 }
3321
3323 {
3324 try
3325 {
3326 int elemTop = _elemTop;
3327 if (elemTop == 0)
3328 {
3329 throw new XmlException(System.SR.Xml_NoStartTag, string.Empty);
3330 }
3332 return SequenceRun(task, (XmlWellFormedWriter thisRef) => thisRef.WriteEndElementAsync_FinishWrite(), this);
3333 }
3334 catch
3335 {
3336 _currentState = State.Error;
3337 throw;
3338 }
3339 }
3340
3342 {
3343 try
3344 {
3345 int elemTop = _elemTop;
3346 int prevNSTop = _elemScopeStack[elemTop].prevNSTop;
3347 if (_useNsHashtable && prevNSTop < _nsTop)
3348 {
3349 PopNamespaces(prevNSTop + 1, _nsTop);
3350 }
3351 _nsTop = prevNSTop;
3352 if ((_elemTop = elemTop - 1) == 0)
3353 {
3354 if (_conformanceLevel == ConformanceLevel.Document)
3355 {
3356 _currentState = State.AfterRootEle;
3357 }
3358 else
3359 {
3360 _currentState = State.TopLevel;
3361 }
3362 }
3363 }
3364 catch
3365 {
3366 _currentState = State.Error;
3367 throw;
3368 }
3369 return Task.CompletedTask;
3370 }
3371
3373 {
3374 try
3375 {
3376 Task task = AdvanceStateAsync(Token.EndElement);
3377 return SequenceRun(task, (XmlWellFormedWriter thisRef) => thisRef.WriteFullEndElementAsync_NoAdvanceState(), this);
3378 }
3379 catch
3380 {
3381 _currentState = State.Error;
3382 throw;
3383 }
3384 }
3385
3387 {
3388 try
3389 {
3390 int elemTop = _elemTop;
3391 if (elemTop == 0)
3392 {
3393 throw new XmlException(System.SR.Xml_NoStartTag, string.Empty);
3394 }
3396 return SequenceRun(task, (XmlWellFormedWriter thisRef) => thisRef.WriteEndElementAsync_FinishWrite(), this);
3397 }
3398 catch
3399 {
3400 _currentState = State.Error;
3401 throw;
3402 }
3403 }
3404
3405 protected internal override Task WriteStartAttributeAsync(string prefix, string localName, string namespaceName)
3406 {
3407 try
3408 {
3409 if (localName == null || localName.Length == 0)
3410 {
3411 if (!(prefix == "xmlns"))
3412 {
3414 }
3415 localName = "xmlns";
3416 prefix = string.Empty;
3417 }
3418 CheckNCName(localName);
3419 Task task = AdvanceStateAsync(Token.StartAttribute);
3420 if (task.IsSuccess())
3421 {
3423 }
3425 }
3426 catch
3427 {
3428 _currentState = State.Error;
3429 throw;
3430 }
3431 }
3432
3433 private Task WriteStartAttributeAsync_NoAdvanceState(string prefix, string localName, string namespaceName)
3434 {
3435 try
3436 {
3437 if (prefix == null)
3438 {
3439 if (namespaceName != null && (!(localName == "xmlns") || !(namespaceName == "http://www.w3.org/2000/xmlns/")))
3440 {
3442 }
3443 if (prefix == null)
3444 {
3445 prefix = string.Empty;
3446 }
3447 }
3448 if (namespaceName == null)
3449 {
3450 if (prefix.Length > 0)
3451 {
3453 }
3454 if (namespaceName == null)
3455 {
3456 namespaceName = string.Empty;
3457 }
3458 }
3459 if (prefix.Length == 0)
3460 {
3461 if (localName[0] != 'x' || !(localName == "xmlns"))
3462 {
3463 if (namespaceName.Length > 0)
3464 {
3466 if (prefix == null || prefix.Length == 0)
3467 {
3469 }
3470 }
3471 goto IL_01bc;
3472 }
3473 if (namespaceName.Length > 0 && namespaceName != "http://www.w3.org/2000/xmlns/")
3474 {
3476 }
3477 _curDeclPrefix = string.Empty;
3479 }
3480 else
3481 {
3482 if (prefix[0] != 'x')
3483 {
3484 goto IL_0188;
3485 }
3486 if (prefix == "xmlns")
3487 {
3488 if (namespaceName.Length > 0 && namespaceName != "http://www.w3.org/2000/xmlns/")
3489 {
3491 }
3492 _curDeclPrefix = localName;
3494 }
3495 else
3496 {
3497 if (!(prefix == "xml"))
3498 {
3499 goto IL_0188;
3500 }
3501 if (namespaceName.Length > 0 && namespaceName != "http://www.w3.org/XML/1998/namespace")
3502 {
3504 }
3505 if (!(localName == "space"))
3506 {
3507 if (!(localName == "lang"))
3508 {
3509 goto IL_0188;
3510 }
3512 }
3513 else
3514 {
3516 }
3517 }
3518 }
3519 goto IL_01cc;
3520 IL_0188:
3522 if (namespaceName.Length == 0)
3523 {
3524 prefix = string.Empty;
3525 }
3526 else
3527 {
3529 if (text != null && text != namespaceName)
3530 {
3532 }
3533 }
3534 goto IL_01bc;
3535 IL_01bc:
3536 if (prefix.Length != 0)
3537 {
3539 }
3540 goto IL_01cc;
3541 IL_01cc:
3542 AddAttribute(prefix, localName, namespaceName);
3543 if (_specAttr == SpecialAttribute.No)
3544 {
3546 }
3547 return Task.CompletedTask;
3548 }
3549 catch
3550 {
3551 _currentState = State.Error;
3552 throw;
3553 }
3554 }
3555
3557 {
3558 _ = 1;
3559 try
3560 {
3561 await task.ConfigureAwait(continueOnCapturedContext: false);
3563 }
3564 catch
3565 {
3566 _currentState = State.Error;
3567 throw;
3568 }
3569 }
3570
3571 protected internal override Task WriteEndAttributeAsync()
3572 {
3573 try
3574 {
3575 Task task = AdvanceStateAsync(Token.EndAttribute);
3576 return SequenceRun(task, (XmlWellFormedWriter thisRef) => thisRef.WriteEndAttributeAsync_NoAdvance(), this);
3577 }
3578 catch
3579 {
3580 _currentState = State.Error;
3581 throw;
3582 }
3583 }
3584
3586 {
3587 try
3588 {
3589 if (_specAttr != 0)
3590 {
3592 }
3594 }
3595 catch
3596 {
3597 _currentState = State.Error;
3598 throw;
3599 }
3600 }
3601
3603 {
3604 _ = 19;
3605 try
3606 {
3607 switch (_specAttr)
3608 {
3609 case SpecialAttribute.DefaultXmlns:
3610 {
3613 {
3614 if (_rawWriter == null)
3615 {
3616 await _writer.WriteStartAttributeAsync(string.Empty, "xmlns", "http://www.w3.org/2000/xmlns/").ConfigureAwait(continueOnCapturedContext: false);
3619 }
3621 {
3623 }
3624 else
3625 {
3629 }
3630 }
3631 _curDeclPrefix = null;
3632 break;
3633 }
3634 case SpecialAttribute.PrefixedXmlns:
3635 {
3637 if (stringValue.Length == 0)
3638 {
3640 }
3641 if (stringValue == "http://www.w3.org/2000/xmlns/" || (stringValue == "http://www.w3.org/XML/1998/namespace" && _curDeclPrefix != "xml"))
3642 {
3644 }
3646 {
3647 if (_rawWriter == null)
3648 {
3649 await _writer.WriteStartAttributeAsync("xmlns", _curDeclPrefix, "http://www.w3.org/2000/xmlns/").ConfigureAwait(continueOnCapturedContext: false);
3652 }
3654 {
3656 }
3657 else
3658 {
3662 }
3663 }
3664 _curDeclPrefix = null;
3665 break;
3666 }
3667 case SpecialAttribute.XmlSpace:
3668 {
3671 if (stringValue == "default")
3672 {
3674 }
3675 else
3676 {
3677 if (!(stringValue == "preserve"))
3678 {
3680 }
3682 }
3683 await _writer.WriteStartAttributeAsync("xml", "space", "http://www.w3.org/XML/1998/namespace").ConfigureAwait(continueOnCapturedContext: false);
3686 break;
3687 }
3688 case SpecialAttribute.XmlLang:
3689 {
3692 await _writer.WriteStartAttributeAsync("xml", "lang", "http://www.w3.org/XML/1998/namespace").ConfigureAwait(continueOnCapturedContext: false);
3695 break;
3696 }
3697 }
3700 }
3701 catch
3702 {
3703 _currentState = State.Error;
3704 throw;
3705 }
3706 }
3707
3708 public override async Task WriteCDataAsync(string text)
3709 {
3710 _ = 1;
3711 try
3712 {
3713 if (text == null)
3714 {
3715 text = string.Empty;
3716 }
3719 }
3720 catch
3721 {
3722 _currentState = State.Error;
3723 throw;
3724 }
3725 }
3726
3727 public override async Task WriteCommentAsync(string text)
3728 {
3729 _ = 1;
3730 try
3731 {
3732 if (text == null)
3733 {
3734 text = string.Empty;
3735 }
3738 }
3739 catch
3740 {
3741 _currentState = State.Error;
3742 throw;
3743 }
3744 }
3745
3746 public override async Task WriteProcessingInstructionAsync(string name, string text)
3747 {
3748 _ = 4;
3749 try
3750 {
3751 if (name == null || name.Length == 0)
3752 {
3754 }
3755 CheckNCName(name);
3756 if (text == null)
3757 {
3758 text = string.Empty;
3759 }
3760 if (name.Length != 3 || !string.Equals(name, "xml", StringComparison.OrdinalIgnoreCase))
3761 {
3764 return;
3765 }
3766 if (_currentState != 0)
3767 {
3769 }
3770 _xmlDeclFollows = true;
3772 if (_rawWriter != null)
3773 {
3775 }
3776 else
3777 {
3779 }
3780 }
3781 catch
3782 {
3783 _currentState = State.Error;
3784 throw;
3785 }
3786 }
3787
3788 public override async Task WriteEntityRefAsync(string name)
3789 {
3790 _ = 1;
3791 try
3792 {
3793 if (name == null || name.Length == 0)
3794 {
3796 }
3797 CheckNCName(name);
3799 if (SaveAttrValue)
3800 {
3802 }
3803 else
3804 {
3805 await _writer.WriteEntityRefAsync(name).ConfigureAwait(continueOnCapturedContext: false);
3806 }
3807 }
3808 catch
3809 {
3810 _currentState = State.Error;
3811 throw;
3812 }
3813 }
3814
3815 public override async Task WriteCharEntityAsync(char ch)
3816 {
3817 _ = 1;
3818 try
3819 {
3820 if (char.IsSurrogate(ch))
3821 {
3823 }
3825 if (SaveAttrValue)
3826 {
3828 }
3829 else
3830 {
3832 }
3833 }
3834 catch
3835 {
3836 _currentState = State.Error;
3837 throw;
3838 }
3839 }
3840
3842 {
3843 _ = 1;
3844 try
3845 {
3846 if (!char.IsSurrogatePair(highChar, lowChar))
3847 {
3849 }
3851 if (SaveAttrValue)
3852 {
3854 }
3855 else
3856 {
3858 }
3859 }
3860 catch
3861 {
3862 _currentState = State.Error;
3863 throw;
3864 }
3865 }
3866
3867 public override async Task WriteWhitespaceAsync(string ws)
3868 {
3869 _ = 1;
3870 try
3871 {
3872 if (ws == null)
3873 {
3874 ws = string.Empty;
3875 }
3877 {
3879 }
3881 if (SaveAttrValue)
3882 {
3884 }
3885 else
3886 {
3888 }
3889 }
3890 catch
3891 {
3892 _currentState = State.Error;
3893 throw;
3894 }
3895 }
3896
3897 public override Task WriteStringAsync(string text)
3898 {
3899 try
3900 {
3901 if (text == null)
3902 {
3903 return Task.CompletedTask;
3904 }
3906 if (task.IsSuccess())
3907 {
3909 }
3911 }
3912 catch
3913 {
3914 _currentState = State.Error;
3915 throw;
3916 }
3917 }
3918
3920 {
3921 try
3922 {
3923 if (SaveAttrValue)
3924 {
3926 return Task.CompletedTask;
3927 }
3929 }
3930 catch
3931 {
3932 _currentState = State.Error;
3933 throw;
3934 }
3935 }
3936
3938 {
3939 _ = 1;
3940 try
3941 {
3942 await task.ConfigureAwait(continueOnCapturedContext: false);
3944 }
3945 catch
3946 {
3947 _currentState = State.Error;
3948 throw;
3949 }
3950 }
3951
3952 public override async Task WriteCharsAsync(char[] buffer, int index, int count)
3953 {
3954 _ = 1;
3955 try
3956 {
3957 if (buffer == null)
3958 {
3959 throw new ArgumentNullException("buffer");
3960 }
3961 if (index < 0)
3962 {
3963 throw new ArgumentOutOfRangeException("index");
3964 }
3965 if (count < 0)
3966 {
3967 throw new ArgumentOutOfRangeException("count");
3968 }
3969 if (count > buffer.Length - index)
3970 {
3971 throw new ArgumentOutOfRangeException("count");
3972 }
3974 if (SaveAttrValue)
3975 {
3977 }
3978 else
3979 {
3981 }
3982 }
3983 catch
3984 {
3985 _currentState = State.Error;
3986 throw;
3987 }
3988 }
3989
3990 public override async Task WriteRawAsync(char[] buffer, int index, int count)
3991 {
3992 _ = 1;
3993 try
3994 {
3995 if (buffer == null)
3996 {
3997 throw new ArgumentNullException("buffer");
3998 }
3999 if (index < 0)
4000 {
4001 throw new ArgumentOutOfRangeException("index");
4002 }
4003 if (count < 0)
4004 {
4005 throw new ArgumentOutOfRangeException("count");
4006 }
4007 if (count > buffer.Length - index)
4008 {
4009 throw new ArgumentOutOfRangeException("count");
4010 }
4012 if (SaveAttrValue)
4013 {
4015 }
4016 else
4017 {
4019 }
4020 }
4021 catch
4022 {
4023 _currentState = State.Error;
4024 throw;
4025 }
4026 }
4027
4028 public override async Task WriteRawAsync(string data)
4029 {
4030 _ = 1;
4031 try
4032 {
4033 if (data != null)
4034 {
4036 if (SaveAttrValue)
4037 {
4039 }
4040 else
4041 {
4042 await _writer.WriteRawAsync(data).ConfigureAwait(continueOnCapturedContext: false);
4043 }
4044 }
4045 }
4046 catch
4047 {
4048 _currentState = State.Error;
4049 throw;
4050 }
4051 }
4052
4053 public override Task WriteBase64Async(byte[] buffer, int index, int count)
4054 {
4055 try
4056 {
4057 if (buffer == null)
4058 {
4059 throw new ArgumentNullException("buffer");
4060 }
4061 if (index < 0)
4062 {
4063 throw new ArgumentOutOfRangeException("index");
4064 }
4065 if (count < 0)
4066 {
4067 throw new ArgumentOutOfRangeException("count");
4068 }
4069 if (count > buffer.Length - index)
4070 {
4071 throw new ArgumentOutOfRangeException("count");
4072 }
4073 Task task = AdvanceStateAsync(Token.Base64);
4074 if (task.IsSuccess())
4075 {
4077 }
4079 }
4080 catch
4081 {
4082 _currentState = State.Error;
4083 throw;
4084 }
4085 }
4086
4088 {
4089 _ = 1;
4090 try
4091 {
4092 await task.ConfigureAwait(continueOnCapturedContext: false);
4094 }
4095 catch
4096 {
4097 _currentState = State.Error;
4098 throw;
4099 }
4100 }
4101
4102 public override async Task FlushAsync()
4103 {
4104 try
4105 {
4106 await _writer.FlushAsync().ConfigureAwait(continueOnCapturedContext: false);
4107 }
4108 catch
4109 {
4110 _currentState = State.Error;
4111 throw;
4112 }
4113 }
4114
4115 public override async Task WriteQualifiedNameAsync(string localName, string ns)
4116 {
4117 _ = 4;
4118 try
4119 {
4120 if (localName == null || localName.Length == 0)
4121 {
4123 }
4124 CheckNCName(localName);
4126 string text = string.Empty;
4127 if (ns != null && ns.Length != 0)
4128 {
4129 text = LookupPrefix(ns);
4130 if (text == null)
4131 {
4132 if (_currentState != State.Attribute)
4133 {
4135 }
4136 text = GeneratePrefix();
4138 }
4139 }
4140 if (SaveAttrValue || _rawWriter == null)
4141 {
4142 if (text.Length != 0)
4143 {
4144 await WriteStringAsync(text).ConfigureAwait(continueOnCapturedContext: false);
4145 await WriteStringAsync(":").ConfigureAwait(continueOnCapturedContext: false);
4146 }
4147 await WriteStringAsync(localName).ConfigureAwait(continueOnCapturedContext: false);
4148 }
4149 else
4150 {
4151 await _rawWriter.WriteQualifiedNameAsync(text, localName, ns).ConfigureAwait(continueOnCapturedContext: false);
4152 }
4153 }
4154 catch
4155 {
4156 _currentState = State.Error;
4157 throw;
4158 }
4159 }
4160
4161 public override async Task WriteBinHexAsync(byte[] buffer, int index, int count)
4162 {
4164 {
4166 }
4167 try
4168 {
4170 await base.WriteBinHexAsync(buffer, index, count).ConfigureAwait(continueOnCapturedContext: false);
4171 }
4172 catch
4173 {
4174 _currentState = State.Error;
4175 throw;
4176 }
4177 }
4178
4180 {
4181 _ = 2;
4182 try
4183 {
4186 {
4189 }
4190 else if (_conformanceLevel == ConformanceLevel.Fragment)
4191 {
4193 }
4194 if (_rawWriter != null)
4195 {
4196 if (!_xmlDeclFollows)
4197 {
4199 }
4200 }
4201 else
4202 {
4204 }
4205 }
4206 catch
4207 {
4208 _currentState = State.Error;
4209 throw;
4210 }
4211 }
4212
4214 {
4215 if (task.IsSuccess())
4216 {
4218 return Task.CompletedTask;
4219 }
4221 }
4222
4228
4230 {
4231 if (task.IsSuccess())
4232 {
4234 return AdvanceStateAsync(token);
4235 }
4237 }
4238
4245
4247 {
4248 if (_currentState >= State.Closed)
4249 {
4250 if (_currentState == State.Closed || _currentState == State.Error)
4251 {
4253 }
4255 }
4256 State state;
4257 while (true)
4258 {
4259 state = _stateTable[(int)(((int)token << 4) + _currentState)];
4260 switch (state)
4261 {
4262 case State.Error:
4264 break;
4265 case State.StartContent:
4267 case State.StartContentEle:
4269 case State.StartContentB64:
4271 case State.StartDoc:
4273 case State.StartDocEle:
4275 case State.EndAttrSEle:
4276 {
4277 Task task = SequenceRun(WriteEndAttributeAsync(), (XmlWellFormedWriter thisRef) => thisRef.StartElementContentAsync(), this);
4279 }
4280 case State.EndAttrEEle:
4281 {
4282 Task task = SequenceRun(WriteEndAttributeAsync(), (XmlWellFormedWriter thisRef) => thisRef.StartElementContentAsync(), this);
4284 }
4285 case State.EndAttrSCont:
4286 {
4287 Task task = SequenceRun(WriteEndAttributeAsync(), (XmlWellFormedWriter thisRef) => thisRef.StartElementContentAsync(), this);
4289 }
4290 case State.EndAttrSAttr:
4292 case State.PostB64Cont:
4293 if (_rawWriter != null)
4294 {
4296 }
4297 _currentState = State.Content;
4298 continue;
4299 case State.PostB64Attr:
4300 if (_rawWriter != null)
4301 {
4303 }
4304 _currentState = State.Attribute;
4305 continue;
4306 case State.PostB64RootAttr:
4307 if (_rawWriter != null)
4308 {
4310 }
4311 _currentState = State.RootLevelAttr;
4312 continue;
4313 case State.StartFragEle:
4314 StartFragment();
4315 state = State.Element;
4316 break;
4317 case State.StartFragCont:
4318 StartFragment();
4319 state = State.Content;
4320 break;
4321 case State.StartFragB64:
4322 StartFragment();
4323 state = State.B64Content;
4324 break;
4325 case State.StartRootLevelAttr:
4327 }
4328 break;
4329 }
4331 return Task.CompletedTask;
4332 }
4333
4335 {
4337 for (int i = _nsTop; i > start; i--)
4338 {
4339 if (_nsStack[i].kind == NamespaceKind.NeedToWrite)
4340 {
4342 }
4343 }
4344 if (_rawWriter != null)
4345 {
4347 }
4348 }
4349
4351 {
4352 if (_nsTop > _elemScopeStack[_elemTop].prevNSTop)
4353 {
4355 }
4356 if (_rawWriter != null)
4357 {
4359 }
4360 return Task.CompletedTask;
4361 }
4362
4363 protected override async ValueTask DisposeAsyncCore()
4364 {
4365 if (_currentState == State.Closed)
4366 {
4367 return;
4368 }
4369 try
4370 {
4372 {
4373 while (_currentState != State.Error && _elemTop > 0)
4374 {
4375 await WriteEndElementAsync().ConfigureAwait(continueOnCapturedContext: false);
4376 }
4377 }
4378 else if (_currentState != State.Error && _elemTop > 0)
4379 {
4380 try
4381 {
4383 }
4384 catch
4385 {
4386 _currentState = State.Error;
4387 throw;
4388 }
4389 }
4390 if (InBase64 && _rawWriter != null)
4391 {
4393 }
4394 await _writer.FlushAsync().ConfigureAwait(continueOnCapturedContext: false);
4395 }
4396 finally
4397 {
4398 try
4399 {
4400 if (_rawWriter == null)
4401 {
4402 await _writer.DisposeAsync().ConfigureAwait(continueOnCapturedContext: false);
4403 }
4404 else
4405 {
4407 }
4408 }
4409 finally
4410 {
4411 _currentState = State.Closed;
4412 }
4413 }
4414 }
4415}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
static CultureInfo InvariantCulture
static string Xml_InvalidXmlSpace
Definition SR.cs:92
static string Xml_PrefixForEmptyNs
Definition SR.cs:286
static string Xml_EmptyName
Definition SR.cs:292
static string Xml_ClosedOrError
Definition SR.cs:300
static string Xml_InvalidNameCharsDetail
Definition SR.cs:296
static string Xml_CanNotBindToReservedNamespace
Definition SR.cs:108
static string Xml_NoStartTag
Definition SR.cs:298
static string Xml_WrongToken
Definition SR.cs:302
static string Xml_DtdNotAllowedInFragment
Definition SR.cs:164
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Xml_DupXmlDecl
Definition SR.cs:312
static string Xml_CannotWriteXmlDecl
Definition SR.cs:314
static string Xml_InvalidSurrogateMissingLowChar
Definition SR.cs:324
static string Xml_XmlPrefix
Definition SR.cs:304
static string Xml_RedefinePrefix
Definition SR.cs:328
static string Xml_CannotStartDocumentOnFragment
Definition SR.cs:166
static string Xml_EmptyLocalName
Definition SR.cs:294
static string Xml_UndefNamespace
Definition SR.cs:290
static string Xml_NamespaceDeclXmlXmlns
Definition SR.cs:308
static string Xml_ConformanceLevelFragment
Definition SR.cs:336
static string Xml_NoRoot
Definition SR.cs:316
static string Xml_InvalidCharacter
Definition SR.cs:110
static string Xml_DtdAlreadyWritten
Definition SR.cs:330
static string Xml_NonWhitespace
Definition SR.cs:310
static string Xml_DupAttributeName
Definition SR.cs:96
static string Xml_XmlnsPrefix
Definition SR.cs:306
Definition SR.cs:7
override string ToString()
StringBuilder Append(char value, int repeatCount)
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
static Task CompletedTask
Definition Task.cs:1120
static bool IsStartNCNameSingleChar(char ch)
static int IsOnlyCharData(string str)
static bool IsOnlyWhitespace(string str)
static bool IsNCNameSingleChar(char ch)
static bool IsWhiteSpace(char ch)
static int IsPublicId(string str)
static string TrimStringEnd(string value)
static string TrimStringStart(string value)
static string TrimString(string value)
static Exception CreateInvalidSurrogatePairException(char low, char hi)
static string VerifyQName(string name, ExceptionType exceptionType)
static string[] BuildCharExceptionArgs(string data, int invCharIndex)
virtual void Close(WriteState currentState)
virtual ValueTask DisposeAsyncCore(WriteState currentState)
virtual void OnRootElement(ConformanceLevel conformanceLevel)
virtual bool SupportsNamespaceDeclarationInChunks
virtual Task WriteXmlDeclarationAsync(XmlStandalone standalone)
override Task WriteQualifiedNameAsync(string localName, string ns)
virtual Task WriteEndNamespaceDeclarationAsync()
void WriteNamespaceDeclaration(string prefix, string ns)
virtual void WriteEndNamespaceDeclaration()
override void WriteQualifiedName(string localName, string ns)
virtual void WriteStartNamespaceDeclaration(string prefix)
virtual void WriteEndBase64()
virtual Task WriteStartNamespaceDeclarationAsync(string prefix)
virtual Task WriteEndBase64Async()
virtual Task WriteNamespaceDeclarationAsync(string prefix, string ns)
virtual void WriteXmlDeclaration(XmlStandalone standalone)
void WriteRaw(char[] buffer, int index, int count)
void WriteChars(char[] buffer, int index, int count)
void WriteSurrogateCharEntity(char lowChar, char highChar)
Task WriteStringAsync_NoAdvanceState(string text)
async Task _AdvanceStateAsync_ContinueWhenFinish(Task task, State newState, Token token)
override void WriteCharEntity(char ch)
override async Task WriteEndDocumentAsync()
override void WriteValue(DateTimeOffset value)
static string GetStateName(State state)
void AddAttribute(string prefix, string localName, string namespaceName)
async Task WriteStartAttributeAsync_NoAdvanceState(Task task, string prefix, string localName, string namespaceName)
override void WriteValue(decimal value)
void PopNamespaces(int indexFrom, int indexTo)
override void WriteValue(object value)
Task AdvanceStateAsync_ReturnWhenFinish(Task task, State newState)
override void WriteString(string text)
Dictionary< string, int > _nsHashtable
override async Task WriteBinHexAsync(byte[] buffer, int index, int count)
void ThrowInvalidStateTransition(Token token, State currentState)
static readonly State[] s_stateTableDocument
override Task WriteStartAttributeAsync(string prefix, string localName, string namespaceName)
override void WriteWhitespace(string ws)
override void WriteValue(bool value)
override void WriteStartAttribute(string prefix, string localName, string namespaceName)
override void WriteComment(string text)
static readonly State[] s_stateTableAuto
override async Task WriteCharsAsync(char[] buffer, int index, int count)
override void WriteQualifiedName(string localName, string ns)
static readonly WriteState[] s_state2WriteState
override void WriteBase64(byte[] buffer, int index, int count)
Task SequenceRun< TArg >(Task task, Func< TArg, Task > nextTaskFun, TArg arg)
override void WriteValue(string value)
void WriteStartElementAsync_FinishWrite(string prefix, string localName, string ns)
override void WriteStartDocument(bool standalone)
override async Task WriteEntityRefAsync(string name)
override void WriteStartElement(string prefix, string localName, string ns)
override Task WriteStartElementAsync(string prefix, string localName, string ns)
override void WriteProcessingInstruction(string name, string text)
void WriteStartDocumentImpl(XmlStandalone standalone)
bool PushNamespaceExplicit(string prefix, string ns)
override void WriteValue(long value)
async Task WriteStartElementAsync_NoAdvanceState(Task task, string prefix, string localName, string ns)
override void WriteEntityRef(string name)
override void WriteChars(char[] buffer, int index, int count)
Task WriteStartAttributeAsync_NoAdvanceState(string prefix, string localName, string namespaceName)
void PushNamespaceImplicit(string prefix, string ns)
static readonly string[] tokenName
Dictionary< string, int > _attrHashTable
async Task WriteStringAsync_NoAdvanceState(Task task, string text)
override async Task WriteRawAsync(string data)
override Task WriteBase64Async(byte[] buffer, int index, int count)
Task WriteStartElementAsync_NoAdvanceState(string prefix, string localName, string ns)
Task AdvanceStateAsync_ContinueWhenFinish(Task task, State newState, Token token)
void AddNamespace(string prefix, string ns, NamespaceKind kind)
override Task WriteStartDocumentAsync(bool standalone)
string LookupLocalNamespace(string prefix)
override async Task WriteRawAsync(char[] buffer, int index, int count)
override void WriteRaw(string data)
static Exception InvalidCharsException(string name, int badCharIndex)
override void WriteBinHex(byte[] buffer, int index, int count)
void AddToAttrHashTable(int attributeIndex)
override void WriteValue(float value)
static readonly string[] stateName
async Task _SequenceRun< TArg >(Task task, Func< TArg, Task > nextTaskFun, TArg arg)
async Task WriteStartDocumentImplAsync(XmlStandalone standalone)
override Task WriteStringAsync(string text)
static XmlException DupAttrException(string prefix, string localName)
override async Task WriteSurrogateCharEntityAsync(char lowChar, char highChar)
override async Task WriteCDataAsync(string text)
override async Task WriteCommentAsync(string text)
override void WriteValue(int value)
override void WriteDocType(string name, string pubid, string sysid, string subset)
void AddToNamespaceHashtable(int namespaceIndex)
override async ValueTask DisposeAsyncCore()
async Task WriteBase64Async_NoAdvanceState(Task task, byte[] buffer, int index, int count)
override void WriteRaw(char[] buffer, int index, int count)
override async Task WriteProcessingInstructionAsync(string name, string text)
override XmlWriterSettings Settings
void SetSpecialAttribute(SpecialAttribute special)
override async Task WriteCharEntityAsync(char ch)
readonly IXmlNamespaceResolver _predefinedNamespaces
override async Task WriteDocTypeAsync(string name, string pubid, string sysid, string subset)
override string LookupPrefix(string ns)
override async Task WriteWhitespaceAsync(string ws)
override void WriteValue(DateTime value)
override async Task WriteQualifiedNameAsync(string localName, string ns)
XmlWellFormedWriter(XmlWriter writer, XmlWriterSettings settings)
async Task _AdvanceStateAsync_ReturnWhenFinish(Task task, State newState)
override void WriteSurrogateCharEntity(char lowChar, char highChar)
async Task WriteStartElementAsync_FinishWrite(Task t, string prefix, string localName, string ns)
override void WriteCData(string text)
override void WriteValue(double value)
void WriteCData(string? text)
void WriteComment(string? text)
void WriteProcessingInstruction(string name, string? text)
virtual Task WriteProcessingInstructionAsync(string name, string? text)
Definition XmlWriter.cs:648
virtual Task WriteSurrogateCharEntityAsync(char lowChar, char highChar)
Definition XmlWriter.cs:673
virtual void Close()
Definition XmlWriter.cs:110
virtual Task WriteBase64Async(byte[] buffer, int index, int count)
Definition XmlWriter.cs:693
void WriteSurrogateCharEntity(char lowChar, char highChar)
virtual Task WriteWhitespaceAsync(string? ws)
Definition XmlWriter.cs:663
void WriteEntityRef(string name)
void WriteString(string? text)
void WriteChars(char[] buffer, int index, int count)
virtual Task WriteEntityRefAsync(string name)
Definition XmlWriter.cs:653
void WriteBase64(byte[] buffer, int index, int count)
virtual Task WriteStringAsync(string? text)
Definition XmlWriter.cs:668
void WriteCharEntity(char ch)
virtual Task WriteCharEntityAsync(char ch)
Definition XmlWriter.cs:658
virtual Task FlushAsync()
Definition XmlWriter.cs:703
virtual Task WriteCommentAsync(string? text)
Definition XmlWriter.cs:643
virtual Task WriteFullEndElementAsync()
Definition XmlWriter.cs:606
async ValueTask DisposeAsync()
virtual Task WriteCDataAsync(string? text)
Definition XmlWriter.cs:638
virtual Task WriteCharsAsync(char[] buffer, int index, int count)
Definition XmlWriter.cs:678
virtual Task WriteEndElementAsync()
Definition XmlWriter.cs:601
void WriteRaw(char[] buffer, int index, int count)
virtual Task WriteStartElementAsync(string? prefix, string localName, string? ns)
Definition XmlWriter.cs:596
virtual Task WriteStartDocumentAsync()
Definition XmlWriter.cs:576
virtual void WriteValue(object value)
Definition XmlWriter.cs:147
virtual Task WriteRawAsync(char[] buffer, int index, int count)
Definition XmlWriter.cs:683
virtual Task WriteStartAttributeAsync(string? prefix, string localName, string? ns)
Definition XmlWriter.cs:628
virtual Task WriteDocTypeAsync(string name, string? pubid, string? sysid, string? subset)
Definition XmlWriter.cs:591
virtual Task WriteEndDocumentAsync()
Definition XmlWriter.cs:586
void WriteStartAttribute(string localName, string? ns)
Definition XmlWriter.cs:67
void WriteWhitespace(string? ws)
void WriteDocType(string name, string? pubid, string? sysid, string? subset)
virtual ? XmlWriterSettings Settings
Definition XmlWriter.cs:14
virtual Task WriteEndAttributeAsync()
Definition XmlWriter.cs:633
void WriteStartElement(string localName, string? ns)
Definition XmlWriter.cs:30
IDictionary< string, string > GetNamespacesInScope(XmlNamespaceScope scope)
string? LookupPrefix(string namespaceName)
string? LookupNamespace(string prefix)
void Set(string prefix, string localName, string namespaceUri)
bool IsDuplicate(string prefix, string localName, string namespaceUri)
Task WriteEndElementAsync(XmlRawWriter rawWriter)
Task WriteFullEndElementAsync(XmlRawWriter rawWriter)
void Set(string prefix, string localName, string namespaceUri, int prevNSTop)
async Task WriteDeclAsync(XmlWriter writer, XmlRawWriter rawWriter)
void WriteDecl(XmlWriter writer, XmlRawWriter rawWriter)
void Set(string prefix, string namespaceUri, NamespaceKind kind)