Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XdrBuilder.cs
Go to the documentation of this file.
5using System.IO;
6
7namespace System.Xml.Schema;
8
9internal sealed class XdrBuilder : SchemaBuilder
10{
11 private sealed class DeclBaseInfo
12 {
14
15 internal string _Prefix;
16
18
19 internal string _TypePrefix;
20
21 internal object _Default;
22
23 internal object _Revises;
24
25 internal uint _MaxOccurs;
26
27 internal uint _MinOccurs;
28
29 internal bool _Checking;
30
32
34
36
37 internal DeclBaseInfo()
38 {
39 Reset();
40 }
41
42 [MemberNotNull("_Name")]
43 [MemberNotNull("_TypeName")]
44 internal void Reset()
45 {
47 _Prefix = null;
49 _TypePrefix = null;
50 _Default = null;
51 _Revises = null;
52 _MaxOccurs = 1u;
53 _MinOccurs = 1u;
54 _Checking = false;
55 _ElementDecl = null;
56 _Next = null;
57 _Attdef = null;
58 }
59 }
60
61 private sealed class GroupContent
62 {
63 internal uint _MinVal;
64
65 internal uint _MaxVal;
66
67 internal bool _HasMaxAttr;
68
69 internal bool _HasMinAttr;
70
71 internal int _Order;
72
73 internal static void Copy(GroupContent from, GroupContent to)
74 {
75 to._MinVal = from._MinVal;
76 to._MaxVal = from._MaxVal;
77 to._Order = from._Order;
78 }
79
86 }
87
88 private sealed class ElementContent
89 {
91
92 internal int _ContentAttr;
93
94 internal int _OrderAttr;
95
96 internal bool _MasterGroupRequired;
97
98 internal bool _ExistTerminal;
99
100 internal bool _AllowDataType;
101
102 internal bool _HasDataType;
103
104 internal bool _HasType;
105
106 internal bool _EnumerationRequired;
107
108 internal uint _MinVal;
109
110 internal uint _MaxVal;
111
112 internal uint _MaxLength;
113
114 internal uint _MinLength;
115
117 }
118
119 private sealed class AttributeContent
120 {
122
124
125 internal string _Prefix;
126
127 internal bool _Required;
128
129 internal uint _MinVal;
130
131 internal uint _MaxVal;
132
133 internal uint _MaxLength;
134
135 internal uint _MinLength;
136
137 internal bool _EnumerationRequired;
138
139 internal bool _HasDataType;
140
141 internal bool _Global;
142
143 internal object _Default;
144 }
145
146 private delegate void XdrBuildFunction(XdrBuilder builder, object obj, string prefix);
147
149
151
153
154 private sealed class XdrAttributeEntry
155 {
157
158 internal int _SchemaFlags;
159
161
162 internal XdrBuildFunction _BuildFunc;
163
171
179 }
180
181 private sealed class XdrEntry
182 {
184
185 internal int[] _NextStates;
186
188
189 internal XdrInitFunction _InitFunc;
190
191 internal XdrBeginChildFunction _BeginChildFunc;
192
193 internal XdrEndChildFunction _EndChildFunc;
194
195 internal bool _AllowText;
196
197 internal XdrEntry(SchemaNames.Token n, int[] states, XdrAttributeEntry[] attributes, XdrInitFunction init, XdrBeginChildFunction begin, XdrEndChildFunction end, bool fText)
198 {
199 _Name = n;
201 _Attributes = attributes;
202 _InitFunc = init;
204 _EndChildFunc = end;
206 }
207 }
208
209 private static readonly int[] s_XDR_Root_Element = new int[1] { 1 };
210
211 private static readonly int[] s_XDR_Root_SubElements = new int[2] { 2, 3 };
212
213 private static readonly int[] s_XDR_ElementType_SubElements = new int[5] { 4, 6, 3, 5, 7 };
214
215 private static readonly int[] s_XDR_AttributeType_SubElements = new int[1] { 8 };
216
217 private static readonly int[] s_XDR_Group_SubElements = new int[2] { 4, 6 };
218
224
236
247
254
261
268
276
284
297
298 private readonly SchemaInfo _SchemaInfo;
299
300 private string _TargetNamespace;
301
302 private readonly XmlReader _reader;
303
304 private readonly PositionInfo _positionInfo;
305
307
309
311
312 private readonly HWStack _StateHistory;
313
314 private readonly HWStack _GroupStack;
315
316 private string _XdrName;
317
318 private string _XdrPrefix;
319
320 private readonly ElementContent _ElementDef;
321
323
325
327
329
330 private readonly XmlNameTable _NameTable;
331
332 private readonly SchemaNames _SchemaNames;
333
335
336 private string _Text;
337
338 private readonly ValidationEventHandler _validationEventHandler;
339
340 private readonly Hashtable _UndeclaredElements = new Hashtable();
341
343
345 {
346 set
347 {
349 }
350 }
351
370
371 internal override bool ProcessElement(string prefix, string name, string ns)
372 {
375 {
376 Push();
377 if (_CurState._InitFunc != null)
378 {
380 }
381 return true;
382 }
384 {
386 }
387 return false;
388 }
389
390 internal override void ProcessAttribute(string prefix, string name, string ns, string value)
391 {
393 for (int i = 0; i < _CurState._Attributes.Length; i++)
394 {
397 {
398 continue;
399 }
400 XdrBuildFunction buildFunc = xdrAttributeEntry._BuildFunc;
401 if (xdrAttributeEntry._Datatype.TokenizedType == XmlTokenizedType.QName)
402 {
403 string prefix2;
406 if (prefix2.Length == 0)
407 {
409 }
410 else if (xdrAttributeEntry._Attribute != SchemaNames.Token.SchemaType)
411 {
412 throw new XmlException(System.SR.Xml_UnexpectedToken, "NAME");
413 }
415 }
416 else
417 {
418 buildFunc(this, xdrAttributeEntry._Datatype.ParseValue(value, _NameTable, _CurNsMgr), string.Empty);
419 }
420 return;
421 }
422 if ((object)ns == _SchemaNames.NsXmlNs && IsXdrSchema(value))
423 {
425 }
427 {
429 }
430 }
431
432 private bool LoadSchema(string uri)
433 {
434 if (_xmlResolver == null)
435 {
436 return false;
437 }
438 uri = _NameTable.Add(uri);
440 {
441 return false;
442 }
443 SchemaInfo schemaInfo = null;
444 Uri baseUri = _xmlResolver.ResolveUri(null, _reader.BaseURI);
445 XmlReader xmlReader = null;
446 try
447 {
448 Uri uri2 = _xmlResolver.ResolveUri(baseUri, uri.Substring("x-schema:".Length));
450 xmlReader = new XmlTextReader(uri2.ToString(), input, _NameTable);
451 schemaInfo = new SchemaInfo();
454 parser.Parse(xmlReader, uri);
455 schemaInfo = parser.XdrSchema;
456 }
457 catch (XmlException ex)
458 {
459 SendValidationEvent(System.SR.Sch_CannotLoadSchema, new string[2] { uri, ex.Message }, XmlSeverityType.Warning);
460 schemaInfo = null;
461 }
462 finally
463 {
464 xmlReader?.Close();
465 }
466 if (schemaInfo != null && schemaInfo.ErrorCount == 0)
467 {
469 return true;
470 }
471 return false;
472 }
473
474 internal static bool IsXdrSchema(string uri)
475 {
476 if (uri.Length >= "x-schema:".Length && string.Compare(uri, 0, "x-schema:", 0, "x-schema:".Length, StringComparison.Ordinal) == 0)
477 {
478 return !uri.StartsWith("x-schema:#", StringComparison.Ordinal);
479 }
480 return false;
481 }
482
483 internal override bool IsContentParsed()
484 {
485 return true;
486 }
487
488 internal override void ProcessMarkup(XmlNode[] markup)
489 {
491 }
492
493 internal override void ProcessCData(string value)
494 {
496 {
497 _Text = value;
498 }
499 else
500 {
502 }
503 }
504
505 internal override void StartChildren()
506 {
507 if (_CurState._BeginChildFunc != null)
508 {
510 }
511 }
512
513 internal override void EndChildren()
514 {
515 if (_CurState._EndChildFunc != null)
516 {
518 }
519 Pop();
520 }
521
522 private void Push()
523 {
527 }
528
529 private void Pop()
530 {
532 }
533
539
540 private void PopGroupInfo()
541 {
543 }
544
552
553 private static void XDR_BuildRoot_Name(XdrBuilder builder, object obj, string prefix)
554 {
557 }
558
559 private static void XDR_BuildRoot_ID(XdrBuilder builder, object obj, string prefix)
560 {
561 }
562
563 private static void XDR_BeginRoot(XdrBuilder builder)
564 {
565 if (builder._TargetNamespace == null)
566 {
567 if (builder._XdrName != null)
568 {
569 builder._TargetNamespace = builder._NameTable.Add("x-schema:#" + builder._XdrName);
570 }
571 else
572 {
573 builder._TargetNamespace = string.Empty;
574 }
575 }
576 builder._SchemaInfo.TargetNamespaces.Add(builder._TargetNamespace, value: true);
577 }
578
579 private static void XDR_EndRoot(XdrBuilder builder)
580 {
581 while (builder._UndefinedAttributeTypes != null)
582 {
583 XmlQualifiedName xmlQualifiedName = builder._UndefinedAttributeTypes._TypeName;
584 if (xmlQualifiedName.Namespace.Length == 0)
585 {
586 xmlQualifiedName = new XmlQualifiedName(xmlQualifiedName.Name, builder._TargetNamespace);
587 }
588 if (builder._SchemaInfo.AttributeDecls.TryGetValue(xmlQualifiedName, out var value))
589 {
592 builder.XDR_CheckAttributeDefault(builder._UndefinedAttributeTypes, builder._UndefinedAttributeTypes._Attdef);
593 }
594 else
595 {
596 builder.SendValidationEvent(System.SR.Sch_UndeclaredAttribute, xmlQualifiedName.Name);
597 }
598 builder._UndefinedAttributeTypes = builder._UndefinedAttributeTypes._Next;
599 }
600 foreach (SchemaElementDecl value2 in builder._UndeclaredElements.Values)
601 {
602 builder.SendValidationEvent(System.SR.Sch_UndeclaredElement, XmlQualifiedName.ToString(value2.Name.Name, value2.Prefix));
603 }
604 }
605
622
623 private static void XDR_BuildElementType_Name(XdrBuilder builder, object obj, string prefix)
624 {
626 if (builder._SchemaInfo.ElementDecls.ContainsKey(xmlQualifiedName))
627 {
629 }
632 builder._SchemaInfo.ElementDecls.Add(xmlQualifiedName, builder._ElementDef._ElementDecl);
633 if (builder._UndeclaredElements[xmlQualifiedName] != null)
634 {
635 builder._UndeclaredElements.Remove(xmlQualifiedName);
636 }
637 }
638
639 private static void XDR_BuildElementType_Content(XdrBuilder builder, object obj, string prefix)
640 {
642 }
643
644 private static void XDR_BuildElementType_Model(XdrBuilder builder, object obj, string prefix)
645 {
647 }
648
653
654 private static void XDR_BuildElementType_DtType(XdrBuilder builder, object obj, string prefix)
655 {
657 string text = ((string)obj).Trim();
658 if (text.Length == 0)
659 {
660 builder.SendValidationEvent(System.SR.Sch_MissDtvalue);
661 return;
662 }
664 if (xmlSchemaDatatype == null)
665 {
666 builder.SendValidationEvent(System.SR.Sch_UnknownDtType, text);
667 }
669 }
670
676
677 private static void XDR_BuildElementType_DtMaxLength(XdrBuilder builder, object obj, string prefix)
678 {
679 ParseDtMaxLength(ref builder._ElementDef._MaxLength, obj, builder);
680 }
681
682 private static void XDR_BuildElementType_DtMinLength(XdrBuilder builder, object obj, string prefix)
683 {
684 ParseDtMinLength(ref builder._ElementDef._MinLength, obj, builder);
685 }
686
688 {
689 string text = null;
690 string msg = null;
691 if (builder._ElementDef._ElementDecl.Name.IsEmpty)
692 {
694 msg = "name";
695 }
696 else
697 {
698 if (builder._ElementDef._HasDataType)
699 {
700 if (!builder._ElementDef._AllowDataType)
701 {
703 goto IL_01f4;
704 }
706 }
707 else if (builder._ElementDef._ContentAttr == 0)
708 {
709 switch (builder._ElementDef._OrderAttr)
710 {
711 case 0:
714 break;
715 case 2:
717 break;
718 case 3:
720 break;
721 case 1:
723 break;
724 }
725 }
726 bool isOpen = builder._contentValidator.IsOpen;
727 ElementContent elementDef = builder._ElementDef;
728 switch (builder._ElementDef._ContentAttr)
729 {
730 case 2:
734 goto default;
735 case 4:
737 if (elementDef._OrderAttr == 0)
738 {
740 }
743 goto default;
744 case 1:
747 goto default;
748 case 3:
749 if (elementDef._OrderAttr == 0 || elementDef._OrderAttr == 1)
750 {
754 goto default;
755 }
757 break;
758 default:
759 if (elementDef._ContentAttr == 3 || elementDef._ContentAttr == 4)
760 {
761 builder._contentValidator.Start();
762 builder._contentValidator.OpenGroup();
763 }
764 break;
765 }
766 }
767 goto IL_01f4;
768 IL_01f4:
769 if (text != null)
770 {
771 builder.SendValidationEvent(text, msg);
772 }
773 }
774
776 {
777 SchemaElementDecl elementDecl = builder._ElementDef._ElementDecl;
778 if (builder._UndefinedAttributeTypes != null && builder._ElementDef._AttDefList != null)
779 {
780 DeclBaseInfo declBaseInfo = builder._UndefinedAttributeTypes;
782 while (declBaseInfo != null)
783 {
785 if (declBaseInfo._ElementDecl == elementDecl)
786 {
787 XmlQualifiedName typeName = declBaseInfo._TypeName;
788 schemaAttDef = (SchemaAttDef)builder._ElementDef._AttDefList[typeName];
789 if (schemaAttDef != null)
790 {
792 declBaseInfo._Attdef.Name = typeName;
793 builder.XDR_CheckAttributeDefault(declBaseInfo, schemaAttDef);
794 if (declBaseInfo == builder._UndefinedAttributeTypes)
795 {
798 }
799 else
800 {
803 }
804 }
805 }
806 if (schemaAttDef == null)
807 {
808 if (declBaseInfo != builder._UndefinedAttributeTypes)
809 {
811 }
813 }
814 }
815 }
816 if (builder._ElementDef._MasterGroupRequired)
817 {
818 builder._contentValidator.CloseGroup();
819 if (!builder._ElementDef._ExistTerminal)
820 {
821 if (builder._contentValidator.IsOpen)
822 {
825 }
826 else if (builder._ElementDef._ContentAttr != 3)
827 {
828 builder.SendValidationEvent(System.SR.Sch_ElementMissing);
829 }
830 }
831 else if (builder._GroupDef._Order == 1)
832 {
833 builder._contentValidator.AddStar();
834 }
835 }
836 if (elementDecl.Datatype != null)
837 {
838 XmlTokenizedType tokenizedType = elementDecl.Datatype.TokenizedType;
839 if (tokenizedType == XmlTokenizedType.ENUMERATION && !builder._ElementDef._EnumerationRequired)
840 {
841 builder.SendValidationEvent(System.SR.Sch_MissDtvaluesAttribute);
842 }
843 if (tokenizedType != XmlTokenizedType.ENUMERATION && builder._ElementDef._EnumerationRequired)
844 {
845 builder.SendValidationEvent(System.SR.Sch_RequireEnumeration);
846 }
847 }
848 CompareMinMaxLength(builder._ElementDef._MinLength, builder._ElementDef._MaxLength, builder);
849 elementDecl.MaxLength = builder._ElementDef._MaxLength;
850 elementDecl.MinLength = builder._ElementDef._MinLength;
851 if (builder._contentValidator != null)
852 {
853 builder._ElementDef._ElementDecl.ContentValidator = builder._contentValidator.Finish(useDFA: true);
855 }
858 }
859
875
876 private static void XDR_BuildAttributeType_Name(XdrBuilder builder, object obj, string prefix)
877 {
882 if (builder._ElementDef._ElementDecl != null)
883 {
884 if (builder._ElementDef._AttDefList[xmlQualifiedName] == null)
885 {
886 builder._ElementDef._AttDefList.Add(xmlQualifiedName, builder._AttributeDef._AttDef);
887 }
888 else
889 {
891 }
892 return;
893 }
894 xmlQualifiedName = new XmlQualifiedName(xmlQualifiedName.Name, builder._TargetNamespace);
896 if (!builder._SchemaInfo.AttributeDecls.ContainsKey(xmlQualifiedName))
897 {
898 builder._SchemaInfo.AttributeDecls.Add(xmlQualifiedName, builder._AttributeDef._AttDef);
899 }
900 else
901 {
903 }
904 }
905
910
911 private static void XDR_BuildAttributeType_Default(XdrBuilder builder, object obj, string prefix)
912 {
914 }
915
922
928
930 {
931 ParseDtMaxLength(ref builder._AttributeDef._MaxLength, obj, builder);
932 }
933
935 {
936 ParseDtMinLength(ref builder._AttributeDef._MinLength, obj, builder);
937 }
938
940 {
941 if (builder._AttributeDef._Name.IsEmpty)
942 {
943 builder.SendValidationEvent(System.SR.Sch_MissAttribute);
944 }
945 }
946
948 {
949 string text = null;
950 if (builder._AttributeDef._HasDataType && builder._AttributeDef._AttDef.Datatype != null)
951 {
952 XmlTokenizedType tokenizedType = builder._AttributeDef._AttDef.Datatype.TokenizedType;
953 if (tokenizedType == XmlTokenizedType.ENUMERATION && !builder._AttributeDef._EnumerationRequired)
954 {
956 }
957 else if (tokenizedType != XmlTokenizedType.ENUMERATION && builder._AttributeDef._EnumerationRequired)
958 {
960 }
961 else
962 {
963 if (builder._AttributeDef._Default == null || tokenizedType != XmlTokenizedType.ID)
964 {
965 goto IL_00a3;
966 }
968 }
969 goto IL_0164;
970 }
972 goto IL_00a3;
973 IL_00a3:
974 CompareMinMaxLength(builder._AttributeDef._MinLength, builder._AttributeDef._MaxLength, builder);
975 builder._AttributeDef._AttDef.MaxLength = builder._AttributeDef._MaxLength;
976 builder._AttributeDef._AttDef.MinLength = builder._AttributeDef._MinLength;
977 if (builder._AttributeDef._Default != null)
978 {
979 SchemaAttDef attDef = builder._AttributeDef._AttDef;
980 string defaultValueRaw = (builder._AttributeDef._AttDef.DefaultValueExpanded = (string)builder._AttributeDef._Default);
981 attDef.DefaultValueRaw = defaultValueRaw;
982 builder.CheckDefaultAttValue(builder._AttributeDef._AttDef);
983 }
984 builder.SetAttributePresence(builder._AttributeDef._AttDef, builder._AttributeDef._Required);
985 goto IL_0164;
986 IL_0164:
987 if (text != null)
988 {
989 builder.SendValidationEvent(text);
990 }
991 }
992
993 private static void XDR_InitElement(XdrBuilder builder, object obj)
994 {
995 if (builder._ElementDef._HasDataType || builder._ElementDef._ContentAttr == 1 || builder._ElementDef._ContentAttr == 2)
996 {
997 builder.SendValidationEvent(System.SR.Sch_ElementNotAllowed);
998 }
1003 }
1004
1005 private static void XDR_BuildElement_Type(XdrBuilder builder, object obj, string prefix)
1006 {
1008 if (!builder._SchemaInfo.ElementDecls.ContainsKey(xmlQualifiedName))
1009 {
1011 if (schemaElementDecl == null)
1012 {
1014 builder._UndeclaredElements.Add(xmlQualifiedName, schemaElementDecl);
1015 }
1016 }
1018 if (builder._ElementDef._ExistTerminal)
1019 {
1020 builder.AddOrder();
1021 }
1022 else
1023 {
1025 }
1026 builder._contentValidator.AddName(xmlQualifiedName, null);
1027 }
1028
1033
1038
1039 private static void XDR_EndElement(XdrBuilder builder)
1040 {
1041 if (builder._ElementDef._HasType)
1042 {
1043 HandleMinMax(builder._contentValidator, builder._ElementDef._MinVal, builder._ElementDef._MaxVal);
1044 }
1045 else
1046 {
1047 builder.SendValidationEvent(System.SR.Sch_MissAttribute);
1048 }
1049 }
1050
1051 private static void XDR_InitAttribute(XdrBuilder builder, object obj)
1052 {
1053 if (builder._BaseDecl == null)
1054 {
1056 }
1058 }
1059
1065
1066 private static void XDR_BuildAttribute_Required(XdrBuilder builder, object obj, string prefix)
1067 {
1068 if (IsYes(obj, builder))
1069 {
1071 }
1072 }
1073
1074 private static void XDR_BuildAttribute_Default(XdrBuilder builder, object obj, string prefix)
1075 {
1077 }
1078
1080 {
1081 if (builder._BaseDecl._TypeName.IsEmpty)
1082 {
1083 builder.SendValidationEvent(System.SR.Sch_MissAttribute);
1084 }
1086 XmlQualifiedName typeName = builder._BaseDecl._TypeName;
1087 string prefix = builder._BaseDecl._Prefix;
1088 if (builder._ElementDef._AttDefList != null)
1089 {
1090 schemaAttDef = (SchemaAttDef)builder._ElementDef._AttDefList[typeName];
1091 }
1092 if (schemaAttDef == null)
1093 {
1094 XmlQualifiedName key = typeName;
1095 if (prefix.Length == 0)
1096 {
1097 key = new XmlQualifiedName(typeName.Name, builder._TargetNamespace);
1098 }
1099 if (builder._SchemaInfo.AttributeDecls.TryGetValue(key, out var value))
1100 {
1101 schemaAttDef = value.Clone();
1102 schemaAttDef.Name = typeName;
1103 }
1104 else if (prefix.Length != 0)
1105 {
1107 }
1108 }
1109 if (schemaAttDef != null)
1110 {
1111 builder.XDR_CheckAttributeDefault(builder._BaseDecl, schemaAttDef);
1112 }
1113 else
1114 {
1115 schemaAttDef = new SchemaAttDef(typeName, prefix);
1119 declBaseInfo._TypeName = builder._BaseDecl._TypeName;
1120 declBaseInfo._ElementDecl = builder._ElementDef._ElementDecl;
1121 declBaseInfo._MinOccurs = builder._BaseDecl._MinOccurs;
1122 declBaseInfo._Default = builder._BaseDecl._Default;
1123 declBaseInfo._Next = builder._UndefinedAttributeTypes;
1125 }
1126 builder._ElementDef._ElementDecl.AddAttDef(schemaAttDef);
1127 }
1128
1130 {
1131 builder._BaseDecl.Reset();
1132 }
1133
1134 private static void XDR_InitGroup(XdrBuilder builder, object obj)
1135 {
1136 if (builder._ElementDef._ContentAttr == 1 || builder._ElementDef._ContentAttr == 2)
1137 {
1138 builder.SendValidationEvent(System.SR.Sch_GroupDisabled);
1139 }
1140 builder.PushGroupInfo();
1145 if (builder._ElementDef._ExistTerminal)
1146 {
1147 builder.AddOrder();
1148 }
1150 builder._contentValidator.OpenGroup();
1151 }
1152
1153 private static void XDR_BuildGroup_Order(XdrBuilder builder, object obj, string prefix)
1154 {
1156 if (builder._ElementDef._ContentAttr == 3 && builder._GroupDef._Order != 1)
1157 {
1158 builder.SendValidationEvent(System.SR.Sch_MixedMany);
1159 }
1160 }
1161
1167
1173
1174 private static void XDR_EndGroup(XdrBuilder builder)
1175 {
1176 if (!builder._ElementDef._ExistTerminal)
1177 {
1178 builder.SendValidationEvent(System.SR.Sch_ElementMissing);
1179 }
1180 builder._contentValidator.CloseGroup();
1181 if (builder._GroupDef._Order == 1)
1182 {
1183 builder._contentValidator.AddStar();
1184 }
1185 if (1 == builder._GroupDef._Order && builder._GroupDef._HasMaxAttr && builder._GroupDef._MaxVal != uint.MaxValue)
1186 {
1187 builder.SendValidationEvent(System.SR.Sch_ManyMaxOccurs);
1188 }
1189 HandleMinMax(builder._contentValidator, builder._GroupDef._MinVal, builder._GroupDef._MaxVal);
1190 builder.PopGroupInfo();
1191 }
1192
1193 private static void XDR_InitElementDtType(XdrBuilder builder, object obj)
1194 {
1195 if (builder._ElementDef._HasDataType)
1196 {
1197 builder.SendValidationEvent(System.SR.Sch_DupDtType);
1198 }
1199 if (!builder._ElementDef._AllowDataType)
1200 {
1201 builder.SendValidationEvent(System.SR.Sch_DataTypeTextOnly);
1202 }
1203 }
1204
1206 {
1207 if (!builder._ElementDef._HasDataType)
1208 {
1209 builder.SendValidationEvent(System.SR.Sch_MissAttribute);
1210 }
1215 }
1216
1217 private static void XDR_InitAttributeDtType(XdrBuilder builder, object obj)
1218 {
1219 if (builder._AttributeDef._HasDataType)
1220 {
1221 builder.SendValidationEvent(System.SR.Sch_DupDtType);
1222 }
1223 }
1224
1226 {
1227 string text = null;
1228 if (!builder._AttributeDef._HasDataType)
1229 {
1231 }
1232 else if (builder._AttributeDef._AttDef.Datatype != null)
1233 {
1234 XmlTokenizedType tokenizedType = builder._AttributeDef._AttDef.Datatype.TokenizedType;
1235 if (tokenizedType == XmlTokenizedType.ENUMERATION && !builder._AttributeDef._EnumerationRequired)
1236 {
1238 }
1239 else if (tokenizedType != XmlTokenizedType.ENUMERATION && builder._AttributeDef._EnumerationRequired)
1240 {
1242 }
1243 }
1244 if (text != null)
1245 {
1246 builder.SendValidationEvent(text);
1247 }
1248 }
1249
1250 private bool GetNextState(XmlQualifiedName qname)
1251 {
1252 if (_CurState._NextStates != null)
1253 {
1254 for (int i = 0; i < _CurState._NextStates.Length; i++)
1255 {
1257 {
1259 return true;
1260 }
1261 }
1262 }
1263 return false;
1264 }
1265
1267 {
1268 string @namespace = qname.Namespace;
1269 if (@namespace != null && !Ref.Equal(@namespace, _SchemaNames.NsXdr))
1270 {
1271 return true;
1272 }
1273 if (_SchemaNames.TokenToQName[38].Equals(qname) || _SchemaNames.TokenToQName[39].Equals(qname))
1274 {
1275 return true;
1276 }
1277 return false;
1278 }
1279
1281 {
1282 string @namespace = qname.Namespace;
1283 if (@namespace.Length != 0 && !Ref.Equal(@namespace, _SchemaNames.NsXdr) && !Ref.Equal(@namespace, _SchemaNames.NsDataType))
1284 {
1285 return true;
1286 }
1287 if (Ref.Equal(@namespace, _SchemaNames.NsDataType) && _CurState._Name == SchemaNames.Token.XdrDatatype && (_SchemaNames.QnDtMax.Equals(qname) || _SchemaNames.QnDtMin.Equals(qname) || _SchemaNames.QnDtMaxExclusive.Equals(qname) || _SchemaNames.QnDtMinExclusive.Equals(qname)))
1288 {
1289 return true;
1290 }
1291 return false;
1292 }
1293
1294 private int GetOrder(XmlQualifiedName qname)
1295 {
1296 int result = 0;
1297 if (_SchemaNames.TokenToQName[15].Equals(qname))
1298 {
1299 result = 2;
1300 }
1301 else if (_SchemaNames.TokenToQName[16].Equals(qname))
1302 {
1303 result = 3;
1304 }
1305 else if (_SchemaNames.TokenToQName[17].Equals(qname))
1306 {
1307 result = 1;
1308 }
1309 else
1310 {
1312 }
1313 return result;
1314 }
1315
1316 private void AddOrder()
1317 {
1318 switch (_GroupDef._Order)
1319 {
1320 case 2:
1322 break;
1323 case 1:
1324 case 3:
1326 break;
1327 default:
1328 throw new XmlException(System.SR.Xml_UnexpectedToken, "NAME");
1329 }
1330 }
1331
1332 private static bool IsYes(object obj, XdrBuilder builder)
1333 {
1335 bool result = false;
1336 if (xmlQualifiedName.Name == "yes")
1337 {
1338 result = true;
1339 }
1340 else if (xmlQualifiedName.Name != "no")
1341 {
1342 builder.SendValidationEvent(System.SR.Sch_UnknownRequired);
1343 }
1344 return result;
1345 }
1346
1347 private static uint ParseMinOccurs(object obj, XdrBuilder builder)
1348 {
1349 uint n = 1u;
1350 if (!ParseInteger((string)obj, ref n) || (n != 0 && n != 1))
1351 {
1352 builder.SendValidationEvent(System.SR.Sch_MinOccursInvalid);
1353 }
1354 return n;
1355 }
1356
1357 private static uint ParseMaxOccurs(object obj, XdrBuilder builder)
1358 {
1359 uint n = uint.MaxValue;
1360 string text = (string)obj;
1361 if (!text.Equals("*") && (!ParseInteger(text, ref n) || (n != uint.MaxValue && n != 1)))
1362 {
1363 builder.SendValidationEvent(System.SR.Sch_MaxOccursInvalid);
1364 }
1365 return n;
1366 }
1367
1368 private static void HandleMinMax(ParticleContentValidator pContent, uint cMin, uint cMax)
1369 {
1370 if (pContent == null)
1371 {
1372 return;
1373 }
1374 if (cMax == uint.MaxValue)
1375 {
1376 if (cMin == 0)
1377 {
1378 pContent.AddStar();
1379 }
1380 else
1381 {
1382 pContent.AddPlus();
1383 }
1384 }
1385 else if (cMin == 0)
1386 {
1387 pContent.AddQMark();
1388 }
1389 }
1390
1391 private static void ParseDtMaxLength(ref uint cVal, object obj, XdrBuilder builder)
1392 {
1393 if (-1 != (int)cVal)
1394 {
1395 builder.SendValidationEvent(System.SR.Sch_DupDtMaxLength);
1396 }
1397 if (!ParseInteger((string)obj, ref cVal) || cVal < 0)
1398 {
1399 builder.SendValidationEvent(System.SR.Sch_DtMaxLengthInvalid, obj.ToString());
1400 }
1401 }
1402
1403 private static void ParseDtMinLength(ref uint cVal, object obj, XdrBuilder builder)
1404 {
1405 if (-1 != (int)cVal)
1406 {
1407 builder.SendValidationEvent(System.SR.Sch_DupDtMinLength);
1408 }
1409 if (!ParseInteger((string)obj, ref cVal) || cVal < 0)
1410 {
1411 builder.SendValidationEvent(System.SR.Sch_DtMinLengthInvalid, obj.ToString());
1412 }
1413 }
1414
1415 private static void CompareMinMaxLength(uint cMin, uint cMax, XdrBuilder builder)
1416 {
1417 if (cMin != uint.MaxValue && cMax != uint.MaxValue && cMin > cMax)
1418 {
1419 builder.SendValidationEvent(System.SR.Sch_DtMinMaxLength);
1420 }
1421 }
1422
1423 private static bool ParseInteger(string str, ref uint n)
1424 {
1425 return uint.TryParse(str, NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite, NumberFormatInfo.InvariantInfo, out n);
1426 }
1427
1429 {
1430 if ((decl._Default != null || pAttdef.DefaultValueTyped != null) && decl._Default != null)
1431 {
1432 string defaultValueRaw = (pAttdef.DefaultValueExpanded = (string)decl._Default);
1433 pAttdef.DefaultValueRaw = defaultValueRaw;
1435 }
1436 SetAttributePresence(pAttdef, 1 == decl._MinOccurs);
1437 }
1438
1440 {
1441 if (SchemaDeclBase.Use.Fixed == pAttdef.Presence)
1442 {
1443 return;
1444 }
1445 if (fRequired || SchemaDeclBase.Use.Required == pAttdef.Presence)
1446 {
1447 if (pAttdef.DefaultValueTyped != null)
1448 {
1450 }
1451 else
1452 {
1454 }
1455 }
1456 else if (pAttdef.DefaultValueTyped != null)
1457 {
1459 }
1460 else
1461 {
1463 }
1464 }
1465
1466 private int GetContent(XmlQualifiedName qname)
1467 {
1468 int result = 0;
1469 if (_SchemaNames.TokenToQName[11].Equals(qname))
1470 {
1471 result = 1;
1473 }
1474 else if (_SchemaNames.TokenToQName[12].Equals(qname))
1475 {
1476 result = 4;
1478 }
1479 else if (_SchemaNames.TokenToQName[10].Equals(qname))
1480 {
1481 result = 3;
1483 }
1484 else if (_SchemaNames.TokenToQName[13].Equals(qname))
1485 {
1486 result = 2;
1487 }
1488 else
1489 {
1491 }
1492 return result;
1493 }
1494
1495 private bool GetModel(XmlQualifiedName qname)
1496 {
1497 bool result = false;
1498 if (_SchemaNames.TokenToQName[7].Equals(qname))
1499 {
1500 result = true;
1501 }
1502 else if (_SchemaNames.TokenToQName[8].Equals(qname))
1503 {
1504 result = false;
1505 }
1506 else
1507 {
1509 }
1510 return result;
1511 }
1512
1530
1536
1537 private bool IsGlobal(int flags)
1538 {
1539 return flags == 256;
1540 }
1541
1546
1547 private void SendValidationEvent(string code)
1548 {
1550 }
1551
1556
1558 {
1560 if (_validationEventHandler != null)
1561 {
1563 }
1564 else if (severity == XmlSeverityType.Error)
1565 {
1566 throw e;
1567 }
1568 }
1569}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
static string Sch_UnknownDtType
Definition SR.cs:442
static string Sch_UnsupportedAttribute
Definition SR.cs:424
static string Sch_DtMinMaxLength
Definition SR.cs:478
static string Xml_UnexpectedToken
Definition SR.cs:1806
static string Sch_UnknownModel
Definition SR.cs:434
static string Sch_ManyMaxOccurs
Definition SR.cs:464
static string Sch_DefaultIdValue
Definition SR.cs:458
static string Sch_MissAttribute
Definition SR.cs:428
static string Sch_UnsupportedElement
Definition SR.cs:426
static string Sch_ElementMissing
Definition SR.cs:462
static string Sch_DupAttribute
Definition SR.cs:454
static string Sch_TextNotAllowed
Definition SR.cs:556
static string Sch_DupElementDecl
Definition SR.cs:404
static string Sch_UnknownRequired
Definition SR.cs:440
static string Sch_MissDtvalue
Definition SR.cs:448
static string Sch_UnknownOrder
Definition SR.cs:436
static string Sch_MinOccursInvalid
Definition SR.cs:468
static string Sch_MixedMany
Definition SR.cs:444
static string Sch_RequireEnumeration
Definition SR.cs:456
static string Sch_UndeclaredElement
Definition SR.cs:412
static string Sch_MaxOccursInvalid
Definition SR.cs:466
static string Sch_DtMinLengthInvalid
Definition SR.cs:472
static string Sch_DtMaxLengthInvalid
Definition SR.cs:470
static string Sch_DataTypeTextOnly
Definition SR.cs:432
static string Sch_ElementNotAllowed
Definition SR.cs:460
static string Sch_DupDtMaxLength
Definition SR.cs:474
static string Sch_CannotLoadSchema
Definition SR.cs:1078
static string Sch_DupDtMinLength
Definition SR.cs:476
static string Sch_UnknownContent
Definition SR.cs:438
static string Sch_DupDtType
Definition SR.cs:452
static string Xml_InvalidOperation
Definition SR.cs:18
static string Sch_MissDtvaluesAttribute
Definition SR.cs:450
static string Sch_GroupDisabled
Definition SR.cs:446
static string Sch_IdAttrDeclared
Definition SR.cs:406
static string Sch_UndeclaredAttribute
Definition SR.cs:414
Definition SR.cs:7
object Push()
Definition HWStack.cs:52
static PositionInfo GetPositionInfo(object o)
static bool Equal(string strA, string strB)
Definition Ref.cs:5
static readonly ContentValidator Empty
static readonly ContentValidator Any
static readonly ContentValidator TextOnly
string IDtdAttributeListInfo. Prefix
void Add(SchemaInfo sinfo, ValidationEventHandler eventhandler)
Dictionary< string, bool > TargetNamespaces
Definition SchemaInfo.cs:95
XmlQualifiedName[] TokenToQName
static void Copy(GroupContent from, GroupContent to)
Definition XdrBuilder.cs:73
static GroupContent Copy(GroupContent other)
Definition XdrBuilder.cs:80
XdrAttributeEntry(SchemaNames.Token a, XmlTokenizedType ttype, int schemaFlags, XdrBuildFunction build)
XdrAttributeEntry(SchemaNames.Token a, XmlTokenizedType ttype, XdrBuildFunction build)
XdrEntry(SchemaNames.Token n, int[] states, XdrAttributeEntry[] attributes, XdrInitFunction init, XdrBeginChildFunction begin, XdrEndChildFunction end, bool fText)
XdrBeginChildFunction _BeginChildFunc
static void XDR_BeginElementType(XdrBuilder builder)
readonly ElementContent _ElementDef
bool GetNextState(XmlQualifiedName qname)
static void XDR_BuildGroup_Order(XdrBuilder builder, object obj, string prefix)
static void XDR_InitAttributeDtType(XdrBuilder builder, object obj)
static readonly XdrAttributeEntry[] s_XDR_ElementType_Attributes
static void XDR_BuildElement_MaxOccurs(XdrBuilder builder, object obj, string prefix)
readonly XmlNamespaceManager _CurNsMgr
static void XDR_BuildAttribute_Required(XdrBuilder builder, object obj, string prefix)
int GetOrder(XmlQualifiedName qname)
static readonly XdrEntry[] s_schemaEntries
static void XDR_BuildRoot_Name(XdrBuilder builder, object obj, string prefix)
static uint ParseMaxOccurs(object obj, XdrBuilder builder)
override void ProcessAttribute(string prefix, string name, string ns, string value)
static void XDR_BuildElementType_DtValues(XdrBuilder builder, object obj, string prefix)
override void ProcessCData(string value)
static void XDR_InitAttributeType(XdrBuilder builder, object obj)
static readonly int[] s_XDR_ElementType_SubElements
static void XDR_BuildAttributeType_DtMinLength(XdrBuilder builder, object obj, string prefix)
static void XDR_InitAttribute(XdrBuilder builder, object obj)
static readonly XdrAttributeEntry[] s_XDR_AttributeType_Attributes
readonly ValidationEventHandler _validationEventHandler
bool GetModel(XmlQualifiedName qname)
override void StartChildren()
static void XDR_InitElementType(XdrBuilder builder, object obj)
readonly SchemaNames _SchemaNames
static readonly XdrAttributeEntry[] s_XDR_Root_Attributes
readonly HWStack _GroupStack
static void HandleMinMax(ParticleContentValidator pContent, uint cMin, uint cMax)
static void XDR_BuildAttributeType_DtValues(XdrBuilder builder, object obj, string prefix)
static bool ParseInteger(string str, ref uint n)
static void XDR_BuildAttributeType_Name(XdrBuilder builder, object obj, string prefix)
XdrBuilder(XmlReader reader, XmlNamespaceManager curmgr, SchemaInfo sinfo, string targetNamspace, XmlNameTable nameTable, SchemaNames schemaNames, ValidationEventHandler eventhandler)
static void XDR_BuildElement_Type(XdrBuilder builder, object obj, string prefix)
static void XDR_BuildElement_MinOccurs(XdrBuilder builder, object obj, string prefix)
static readonly XdrAttributeEntry[] s_XDR_AttributeDataType_Attributes
static void XDR_BuildAttribute_Default(XdrBuilder builder, object obj, string prefix)
readonly SchemaInfo _SchemaInfo
static void XDR_EndRoot(XdrBuilder builder)
bool LoadSchema(string uri)
static void XDR_BuildElementType_Order(XdrBuilder builder, object obj, string prefix)
static void XDR_BuildGroup_MinOccurs(XdrBuilder builder, object obj, string prefix)
static readonly XdrAttributeEntry[] s_XDR_ElementDataType_Attributes
delegate void XdrBuildFunction(XdrBuilder builder, object obj, string prefix)
delegate void XdrBeginChildFunction(XdrBuilder builder)
static bool IsXdrSchema(string uri)
static void CompareMinMaxLength(uint cMin, uint cMax, XdrBuilder builder)
static void XDR_EndGroup(XdrBuilder builder)
readonly AttributeContent _AttributeDef
static readonly XdrAttributeEntry[] s_XDR_Group_Attributes
static void XDR_EndElementDtType(XdrBuilder builder)
void SetAttributePresence(SchemaAttDef pAttdef, bool fRequired)
static readonly int[] s_XDR_AttributeType_SubElements
delegate void XdrEndChildFunction(XdrBuilder builder)
void CheckDefaultAttValue(SchemaAttDef attDef)
static void XDR_InitElementDtType(XdrBuilder builder, object obj)
static readonly XdrAttributeEntry[] s_XDR_Attribute_Attributes
override void EndChildren()
void SendValidationEvent(XmlSchemaException e, XmlSeverityType severity)
override bool IsContentParsed()
static void ParseDtMinLength(ref uint cVal, object obj, XdrBuilder builder)
int GetContent(XmlQualifiedName qname)
static void XDR_BuildElementType_Model(XdrBuilder builder, object obj, string prefix)
static uint ParseMinOccurs(object obj, XdrBuilder builder)
static void XDR_BeginRoot(XdrBuilder builder)
ParticleContentValidator _contentValidator
static void XDR_BuildElementType_DtType(XdrBuilder builder, object obj, string prefix)
static void XDR_BuildAttributeType_Required(XdrBuilder builder, object obj, string prefix)
static readonly int[] s_XDR_Root_Element
override void ProcessMarkup(XmlNode[] markup)
static void XDR_InitElement(XdrBuilder builder, object obj)
static bool IsYes(object obj, XdrBuilder builder)
static void XDR_BuildAttributeType_DtType(XdrBuilder builder, object obj, string prefix)
static void XDR_BeginAttributeType(XdrBuilder builder)
static void XDR_BuildRoot_ID(XdrBuilder builder, object obj, string prefix)
static void XDR_InitGroup(XdrBuilder builder, object obj)
bool IsSkipableAttribute(XmlQualifiedName qname)
delegate void XdrInitFunction(XdrBuilder builder, object obj)
static readonly int[] s_XDR_Group_SubElements
void SendValidationEvent(string code)
static void XDR_BuildElementType_DtMinLength(XdrBuilder builder, object obj, string prefix)
void SendValidationEvent(string code, string[] args, XmlSeverityType severity)
static void XDR_EndElementType(XdrBuilder builder)
static void XDR_BuildAttributeType_Default(XdrBuilder builder, object obj, string prefix)
readonly Hashtable _UndeclaredElements
readonly XmlNameTable _NameTable
static void XDR_BuildAttribute_Type(XdrBuilder builder, object obj, string prefix)
static void XDR_BuildElementType_DtMaxLength(XdrBuilder builder, object obj, string prefix)
readonly HWStack _StateHistory
bool IsSkipableElement(XmlQualifiedName qname)
XmlSchemaDatatype CheckDatatype(string str)
static void XDR_BuildElementType_Name(XdrBuilder builder, object obj, string prefix)
void SendValidationEvent(string code, string msg)
static void XDR_InitRoot(XdrBuilder builder, object obj)
static void XDR_EndAttributeType(XdrBuilder builder)
static void ParseDtMaxLength(ref uint cVal, object obj, XdrBuilder builder)
readonly XmlReader _reader
DeclBaseInfo _UndefinedAttributeTypes
static void XDR_EndElement(XdrBuilder builder)
static void XDR_BeginAttribute(XdrBuilder builder)
readonly PositionInfo _positionInfo
void XDR_CheckAttributeDefault(DeclBaseInfo decl, SchemaAttDef pAttdef)
static void XDR_BuildElementType_Content(XdrBuilder builder, object obj, string prefix)
static void XDR_BuildGroup_MaxOccurs(XdrBuilder builder, object obj, string prefix)
static void XDR_BuildAttributeType_DtMaxLength(XdrBuilder builder, object obj, string prefix)
static readonly XdrAttributeEntry[] s_XDR_Element_Attributes
static void XDR_EndAttributeDtType(XdrBuilder builder)
static readonly int[] s_XDR_Root_SubElements
static void XDR_EndAttribute(XdrBuilder builder)
override bool ProcessElement(string prefix, string name, string ns)
static void CheckDefaultValue(string value, SchemaAttDef attdef, SchemaInfo sinfo, XmlNamespaceManager nsManager, XmlNameTable NameTable, object sender, ValidationEventHandler eventhandler, string baseUri, int lineNo, int linePos)
static string XdrCanonizeUri(string uri, XmlNameTable nameTable, SchemaNames schemaNames)
static XmlSchemaDatatype FromXmlTokenizedType(XmlTokenizedType token)
static XmlSchemaDatatype FromXdrName(string name)
string Add(char[] array, int offset, int length)
static XmlQualifiedName Parse(string s, IXmlNamespaceResolver nsmgr, out string prefix)
override bool Equals([NotNullWhen(true)] object? other)
static readonly XmlQualifiedName Empty
object? GetEntity(Uri absoluteUri, string? role, Type? ofObjectToReturn)
virtual Uri ResolveUri(Uri? baseUri, string? relativeUri)