Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XPathDocument.cs
Go to the documentation of this file.
3using System.IO;
5
6namespace System.Xml.XPath;
7
9{
10 internal enum LoadFlags
11 {
12 None,
15 }
16
18
20
22
23 private int _idxText;
24
25 private int _idxRoot;
26
27 private int _idxXmlNmsp;
28
30
31 private bool _hasLineInfo;
32
34
36
38
39 internal bool HasLineInfo => _hasLineInfo;
40
41 internal XPathDocument()
42 {
43 _nameTable = new NameTable();
44 }
45
47 {
48 if (nameTable == null)
49 {
50 throw new ArgumentNullException("nameTable");
51 }
53 }
54
55 public XPathDocument(XmlReader reader)
56 : this(reader, XmlSpace.Default)
57 {
58 }
59
61 {
62 if (reader == null)
63 {
64 throw new ArgumentNullException("reader");
65 }
66 LoadFromReader(reader, space);
67 }
68
69 public XPathDocument(TextReader textReader)
70 {
72 try
73 {
75 }
76 finally
77 {
78 xmlTextReaderImpl.Close();
79 }
80 }
81
83 {
85 try
86 {
88 }
89 finally
90 {
91 xmlTextReaderImpl.Close();
92 }
93 }
94
95 public XPathDocument(string uri)
96 : this(uri, XmlSpace.Default)
97 {
98 }
99
100 public XPathDocument(string uri, XmlSpace space)
101 {
103 try
104 {
106 }
107 finally
108 {
109 xmlTextReaderImpl.Close();
110 }
111 }
112
113 internal XmlRawWriter LoadFromWriter(LoadFlags flags, string baseUri)
114 {
115 return new XPathDocumentBuilder(this, null, baseUri, flags);
116 }
117
118 [MemberNotNull("_nameTable")]
119 internal void LoadFromReader(XmlReader reader, XmlSpace space)
120 {
121 if (reader == null)
122 {
123 throw new ArgumentNullException("reader");
124 }
126 if (xmlLineInfo == null || !xmlLineInfo.HasLineInfo())
127 {
128 xmlLineInfo = null;
129 }
130 _hasLineInfo = xmlLineInfo != null;
131 _nameTable = reader.NameTable;
133 try
134 {
135 bool flag = reader.ReadState == ReadState.Initial;
136 int depth = reader.Depth;
137 string text = _nameTable.Get("http://www.w3.org/2000/xmlns/");
138 if (flag && !reader.Read())
139 {
140 return;
141 }
142 while (flag || reader.Depth >= depth)
143 {
144 switch (reader.NodeType)
145 {
146 case XmlNodeType.Element:
147 {
148 bool isEmptyElement = reader.IsEmptyElement;
149 xPathDocumentBuilder.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI, reader.BaseURI);
150 while (reader.MoveToNextAttribute())
151 {
152 string namespaceURI = reader.NamespaceURI;
153 if ((object)namespaceURI == text)
154 {
155 if (reader.Prefix.Length == 0)
156 {
157 xPathDocumentBuilder.WriteNamespaceDeclaration(string.Empty, reader.Value);
158 }
159 else
160 {
161 xPathDocumentBuilder.WriteNamespaceDeclaration(reader.LocalName, reader.Value);
162 }
163 }
164 else
165 {
166 xPathDocumentBuilder.WriteStartAttribute(reader.Prefix, reader.LocalName, namespaceURI);
167 xPathDocumentBuilder.WriteString(reader.Value, TextBlockType.Text);
168 xPathDocumentBuilder.WriteEndAttribute();
169 }
170 }
171 if (isEmptyElement)
172 {
173 xPathDocumentBuilder.WriteEndElement(allowShortcutTag: true);
174 }
175 break;
176 }
177 case XmlNodeType.EndElement:
178 xPathDocumentBuilder.WriteEndElement(allowShortcutTag: false);
179 break;
180 case XmlNodeType.Text:
181 case XmlNodeType.CDATA:
182 xPathDocumentBuilder.WriteString(reader.Value, TextBlockType.Text);
183 break;
184 case XmlNodeType.SignificantWhitespace:
185 if (reader.XmlSpace == XmlSpace.Preserve)
186 {
187 xPathDocumentBuilder.WriteString(reader.Value, TextBlockType.SignificantWhitespace);
188 break;
189 }
190 goto case XmlNodeType.Whitespace;
191 case XmlNodeType.Whitespace:
192 if (space == XmlSpace.Preserve && (!flag || reader.Depth != 0))
193 {
194 xPathDocumentBuilder.WriteString(reader.Value, TextBlockType.Whitespace);
195 }
196 break;
197 case XmlNodeType.Comment:
198 xPathDocumentBuilder.WriteComment(reader.Value);
199 break;
200 case XmlNodeType.ProcessingInstruction:
201 xPathDocumentBuilder.WriteProcessingInstruction(reader.LocalName, reader.Value, reader.BaseURI);
202 break;
203 case XmlNodeType.EntityReference:
204 reader.ResolveEntity();
205 break;
206 case XmlNodeType.DocumentType:
207 {
208 IDtdInfo dtdInfo = reader.DtdInfo;
209 if (dtdInfo != null)
210 {
211 xPathDocumentBuilder.CreateIdTables(dtdInfo);
212 }
213 break;
214 }
215 }
216 if (!reader.Read())
217 {
218 break;
219 }
220 }
221 }
222 finally
223 {
224 xPathDocumentBuilder.Close();
225 }
226 }
227
229 {
230 return new XPathDocumentNavigator(_pageRoot, _idxRoot, null, 0);
231 }
232
234 {
236 return _idxText;
237 }
238
240 {
243 }
244
246 {
248 return _idxRoot;
249 }
250
251 internal void SetRootNode(XPathNode[] pageRoot, int idxRoot)
252 {
255 }
256
258 {
260 return _idxXmlNmsp;
261 }
262
268
270 {
271 if (_mapNmsp == null)
272 {
274 }
276 }
277
279 {
281 if (_mapNmsp == null || !_mapNmsp.ContainsKey(key))
282 {
283 pageNmsp = null;
284 return 0;
285 }
286 key = _mapNmsp[key];
287 pageNmsp = key.Page;
288 return key.Index;
289 }
290
291 internal void AddIdElement(string id, XPathNode[] pageElem, int idxElem)
292 {
293 if (_idValueMap == null)
294 {
296 }
297 if (!_idValueMap.ContainsKey(id))
298 {
300 }
301 }
302
303 internal int LookupIdElement(string id, out XPathNode[] pageElem)
304 {
305 if (_idValueMap == null || !_idValueMap.ContainsKey(id))
306 {
307 pageElem = null;
308 return 0;
309 }
311 pageElem = xPathNodeRef.Page;
312 return xPathNodeRef.Index;
313 }
314
316 {
317 reader.EntityHandling = EntityHandling.ExpandEntities;
319 return reader;
320 }
321}
void Add(TKey key, TValue value)
XPathDocument(XmlNameTable nameTable)
void SetRootNode(XPathNode[] pageRoot, int idxRoot)
int GetRootNode(out XPathNode[] pageRoot)
XPathDocument(XmlReader reader, XmlSpace space)
Dictionary< XPathNodeRef, XPathNodeRef > _mapNmsp
int LookupNamespaces(XPathNode[] pageElem, int idxElem, out XPathNode[] pageNmsp)
int GetXmlNamespaceNode(out XPathNode[] pageXmlNmsp)
Dictionary< string, XPathNodeRef > _idValueMap
XPathDocument(string uri, XmlSpace space)
void AddIdElement(string id, XPathNode[] pageElem, int idxElem)
int LookupIdElement(string id, out XPathNode[] pageElem)
void AddNamespace(XPathNode[] pageElem, int idxElem, XPathNode[] pageNmsp, int idxNmsp)
void SetCollapsedTextNode(XPathNode[] pageText, int idxText)
XmlTextReaderImpl SetupReader(XmlTextReaderImpl reader)
XmlRawWriter LoadFromWriter(LoadFlags flags, string baseUri)
void LoadFromReader(XmlReader reader, XmlSpace space)
void SetXmlNamespaceNode(XPathNode[] pageXmlNmsp, int idxXmlNmsp)
XPathDocument(TextReader textReader)
XPathDocument(XmlReader reader)
int GetCollapsedTextNode(out XPathNode[] pageText)
string? Get(char[] array, int offset, int length)
virtual XmlSpace XmlSpace
Definition XmlReader.cs:96
virtual ? IDtdInfo DtdInfo
Definition XmlReader.cs:145
XmlNodeType NodeType
Definition XmlReader.cs:62
XmlNameTable NameTable
Definition XmlReader.cs:116