Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Parser.cs
Go to the documentation of this file.
3
4namespace System.Xml.Schema;
5
6internal sealed class Parser
7{
9
10 private readonly XmlNameTable _nameTable;
11
12 private readonly SchemaNames _schemaNames;
13
14 private readonly ValidationEventHandler _eventHandler;
15
17
19
21
23
24 private int _schemaXmlDepth;
25
26 private int _markupDepth;
27
29
31
33
35
36 private readonly XmlDocument _dummyDocument;
37
38 private bool _processMarkup;
39
41
43
44 private string _xmlns;
45
47
49 {
50 set
51 {
53 }
54 }
55
57
58 public Parser(SchemaType schemaType, XmlNameTable nameTable, SchemaNames schemaNames, ValidationEventHandler eventHandler)
59 {
60 _schemaType = schemaType;
64 _xmlResolver = null;
65 _processMarkup = true;
67 }
68
70 {
72 while (ParseReaderNode() && reader.Read())
73 {
74 }
75 return FinishParsing();
76 }
77
78 public void StartParsing(XmlReader reader, string targetNamespace)
79 {
80 _reader = reader;
83 if (_namespaceManager == null)
84 {
87 }
88 else
89 {
91 }
92 while (reader.NodeType != XmlNodeType.Element && reader.Read())
93 {
94 }
95 _markupDepth = int.MaxValue;
96 _schemaXmlDepth = reader.Depth;
99 {
101 }
102 if (_schemaType == SchemaType.XSD)
103 {
104 _schema = new XmlSchema();
105 _schema.BaseUri = new Uri(reader.BaseURI, UriKind.RelativeOrAbsolute);
107 }
108 else
109 {
110 _xdrSchema = new SchemaInfo();
113 ((XdrBuilder)_builder).XmlResolver = _xmlResolver;
114 }
115 }
116
117 private bool CheckSchemaRoot(SchemaType rootType, [NotNullWhen(false)] out string code)
118 {
119 code = null;
120 if (_schemaType == SchemaType.None)
121 {
123 }
124 switch (rootType)
125 {
126 case SchemaType.XSD:
127 if (_schemaType != SchemaType.XSD)
128 {
130 return false;
131 }
132 break;
133 case SchemaType.XDR:
134 if (_schemaType == SchemaType.XSD)
135 {
137 return false;
138 }
139 if (_schemaType != SchemaType.XDR)
140 {
142 return false;
143 }
144 break;
145 case SchemaType.None:
146 case SchemaType.DTD:
148 if (_schemaType == SchemaType.XSD)
149 {
151 }
152 return false;
153 }
154 return true;
155 }
156
158 {
159 return _schemaType;
160 }
161
162 public bool ParseReaderNode()
163 {
165 {
166 if (_processMarkup)
167 {
168 ProcessAppInfoDocMarkup(root: false);
169 }
170 return true;
171 }
172 if (_reader.NodeType == XmlNodeType.Element)
173 {
175 {
178 {
179 do
180 {
183 {
185 }
186 }
189 }
192 {
196 {
197 return false;
198 }
199 }
200 else if (!_builder.IsContentParsed())
201 {
203 _processMarkup = true;
204 if (_annotationNSManager == null)
205 {
207 _xmlns = _nameTable.Add("xmlns");
208 }
209 ProcessAppInfoDocMarkup(root: true);
210 }
211 }
212 else if (!_reader.IsEmptyElement)
213 {
215 _processMarkup = false;
216 }
217 }
218 else if (_reader.NodeType == XmlNodeType.Text)
219 {
221 {
223 }
224 }
225 else if (_reader.NodeType == XmlNodeType.EntityReference || _reader.NodeType == XmlNodeType.SignificantWhitespace || _reader.NodeType == XmlNodeType.CDATA)
226 {
228 }
229 else if (_reader.NodeType == XmlNodeType.EndElement)
230 {
232 {
233 if (_processMarkup)
234 {
236 XmlNode[] array = new XmlNode[childNodes.Count];
237 for (int i = 0; i < childNodes.Count; i++)
238 {
239 array[i] = childNodes[i];
240 }
244 }
245 _markupDepth = int.MaxValue;
246 }
247 else
248 {
251 }
253 {
254 return false;
255 }
256 }
257 return true;
258 }
259
260 private void ProcessAppInfoDocMarkup(bool root)
261 {
262 XmlNode newChild = null;
263 switch (_reader.NodeType)
264 {
265 case XmlNodeType.Element:
268 return;
269 case XmlNodeType.Text:
271 break;
272 case XmlNodeType.SignificantWhitespace:
274 break;
275 case XmlNodeType.CDATA:
277 break;
278 case XmlNodeType.EntityReference:
280 break;
281 case XmlNodeType.Comment:
283 break;
284 case XmlNodeType.ProcessingInstruction:
286 break;
287 case XmlNodeType.EndElement:
290 return;
291 case XmlNodeType.Whitespace:
292 case XmlNodeType.EndEntity:
293 return;
294 }
296 }
297
298 private XmlElement LoadElementNode(bool root)
299 {
300 XmlReader reader = _reader;
301 bool isEmptyElement = reader.IsEmptyElement;
304 if (root)
305 {
307 }
308 else
309 {
310 XmlAttributeCollection attributes = xmlElement.Attributes;
311 if (reader.MoveToFirstAttribute())
312 {
313 do
314 {
316 {
317 _annotationNSManager.AddNamespace((reader.Prefix.Length == 0) ? string.Empty : _reader.LocalName, _reader.Value);
318 }
320 attributes.Append(node);
321 }
322 while (reader.MoveToNextAttribute());
323 }
324 reader.MoveToElement();
326 if (text == null)
327 {
329 attributes.Append(node2);
330 }
331 else if (text.Length == 0)
332 {
334 if (text2 != string.Empty)
335 {
337 attributes.Append(node3);
338 }
339 }
340 while (reader.MoveToNextAttribute())
341 {
342 if (reader.Prefix.Length != 0)
343 {
345 if (text3 == null)
346 {
348 attributes.Append(node4);
349 }
350 }
351 }
352 reader.MoveToElement();
354 if (!reader.IsEmptyElement)
355 {
357 }
358 }
359 return xmlElement;
360 }
361
363 {
364 XmlAttribute xmlAttribute = ((prefix.Length != 0) ? _dummyDocument.CreateAttribute(_xmlns, prefix, "http://www.w3.org/2000/xmlns/") : _dummyDocument.CreateAttribute(string.Empty, _xmlns, "http://www.w3.org/2000/xmlns/"));
367 return xmlAttribute;
368 }
369
371 {
372 XmlReader reader = _reader;
374 while (reader.ReadAttributeValue())
375 {
376 switch (reader.NodeType)
377 {
378 case XmlNodeType.Text:
380 break;
381 case XmlNodeType.EntityReference:
383 break;
384 default:
386 }
387 }
388 return xmlAttribute;
389 }
390
392 {
395 {
396 return xmlEntityReference;
397 }
400 {
401 switch (_reader.NodeType)
402 {
403 case XmlNodeType.Text:
405 break;
406 case XmlNodeType.EndEntity:
407 if (xmlEntityReference.ChildNodes.Count == 0)
408 {
409 xmlEntityReference.AppendChild(_dummyDocument.CreateTextNode(string.Empty));
410 }
411 return xmlEntityReference;
412 case XmlNodeType.EntityReference:
414 break;
415 default:
417 }
418 }
419 return xmlEntityReference;
420 }
421
423 {
424 _reader = reader;
427 if (_namespaceManager == null)
428 {
431 }
432 else
433 {
434 _isProcessNamespaces = false;
435 }
436 bool flag2;
437 do
438 {
439 bool flag = reader.NodeType != XmlNodeType.Element;
440 flag2 = flag;
441 if (flag2)
442 {
444 }
445 }
446 while (flag2);
447 _markupDepth = int.MaxValue;
448 _schemaXmlDepth = reader.Depth;
451 {
453 }
454 if (_schemaType == SchemaType.XSD)
455 {
456 _schema = new XmlSchema();
457 _schema.BaseUri = new Uri(reader.BaseURI, UriKind.RelativeOrAbsolute);
459 }
460 else
461 {
462 _xdrSchema = new SchemaInfo();
465 ((XdrBuilder)_builder).XmlResolver = _xmlResolver;
466 }
467 }
468}
static string Sch_MixSchemaTypes
Definition SR.cs:1122
static string Sch_XSDSchemaOnly
Definition SR.cs:1124
static string Sch_XSDSchemaRootExpected
Definition SR.cs:422
static string Sch_SchemaRootExpected
Definition SR.cs:420
Definition SR.cs:7
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
static PositionInfo GetPositionInfo(object o)
static bool Equal(string strA, string strB)
Definition Ref.cs:5
readonly SchemaNames _schemaNames
Definition Parser.cs:12
async Task StartParsingAsync(XmlReader reader, string targetNamespace)
Definition Parser.cs:422
XmlAttribute CreateXmlNsAttribute(string prefix, string value)
Definition Parser.cs:362
SchemaInfo XdrSchema
Definition Parser.cs:56
SchemaType FinishParsing()
Definition Parser.cs:157
XmlNamespaceManager _namespaceManager
Definition Parser.cs:16
SchemaInfo _xdrSchema
Definition Parser.cs:32
SchemaType _schemaType
Definition Parser.cs:8
XmlResolver _xmlResolver
Definition Parser.cs:34
readonly XmlDocument _dummyDocument
Definition Parser.cs:36
PositionInfo _positionInfo
Definition Parser.cs:20
XmlEntityReference LoadEntityReferenceInAttribute()
Definition Parser.cs:391
XmlAttribute LoadAttributeNode()
Definition Parser.cs:370
SchemaType Parse(XmlReader reader, string targetNamespace)
Definition Parser.cs:69
void ProcessAppInfoDocMarkup(bool root)
Definition Parser.cs:260
void StartParsing(XmlReader reader, string targetNamespace)
Definition Parser.cs:78
readonly XmlNameTable _nameTable
Definition Parser.cs:10
Parser(SchemaType schemaType, XmlNameTable nameTable, SchemaNames schemaNames, ValidationEventHandler eventHandler)
Definition Parser.cs:58
XmlNamespaceManager _annotationNSManager
Definition Parser.cs:42
bool CheckSchemaRoot(SchemaType rootType, [NotNullWhen(false)] out string code)
Definition Parser.cs:117
SchemaBuilder _builder
Definition Parser.cs:28
readonly ValidationEventHandler _eventHandler
Definition Parser.cs:14
XmlElement LoadElementNode(bool root)
Definition Parser.cs:298
bool ProcessElement(string prefix, string name, string ns)
void ProcessAttribute(string prefix, string name, string ns, string value)
void ProcessCData(string value)
void ProcessMarkup(XmlNode[] markup)
SchemaType SchemaTypeFromRoot(string localName, string ns)
XmlAttribute Append(XmlAttribute node)
override? XmlNode AppendChild(XmlNode newChild)
static bool IsOnlyWhitespace(string str)
virtual XmlText CreateTextNode(string? text)
virtual XmlCDataSection CreateCDataSection(string? data)
virtual XmlProcessingInstruction CreateProcessingInstruction(string target, string data)
virtual XmlSignificantWhitespace CreateSignificantWhitespace(string? text)
virtual XmlEntityReference CreateEntityReference(string name)
XmlElement CreateElement(string name)
virtual XmlComment CreateComment(string? data)
XmlAttribute CreateAttribute(string name)
static Exception UnexpectedNodeType(XmlNodeType nodetype)
Definition XmlLoader.cs:841
string Add(char[] array, int offset, int length)
virtual ? string LookupNamespace(string prefix)
virtual void AddNamespace(string prefix, string uri)
virtual XmlNodeList ChildNodes
Definition XmlNode.cs:100
virtual ? XmlNode AppendChild(XmlNode newChild)
Definition XmlNode.cs:739
virtual ? XmlNode ParentNode
Definition XmlNode.cs:76
virtual bool CanResolveEntity
Definition XmlReader.cs:118
virtual Task< bool > ReadAsync()
XmlNodeType NodeType
Definition XmlReader.cs:62
virtual ? XmlNamespaceManager NamespaceManager
Definition XmlReader.cs:126
virtual string Name
Definition XmlReader.cs:65
UriKind
Definition UriKind.cs:4