Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlPreloadedResolver.cs
Go to the documentation of this file.
2using System.IO;
3using System.Net;
5using System.Text;
7
9
11{
12 private abstract class PreloadedData
13 {
14 internal abstract Stream AsStream();
15
16 internal virtual TextReader AsTextReader()
17 {
19 }
20
21 internal virtual bool SupportsType(Type type)
22 {
23 if (type == null || type == typeof(Stream))
24 {
25 return true;
26 }
27 return false;
28 }
29 }
30
31 private sealed class XmlKnownDtdData : PreloadedData
32 {
33 internal string publicId;
34
35 internal string systemId;
36
37 private readonly string _resourceName;
38
45
46 internal override Stream AsStream()
47 {
48 Assembly assembly = GetType().Assembly;
49 return assembly.GetManifestResourceStream(_resourceName);
50 }
51 }
52
53 private sealed class ByteArrayChunk : PreloadedData
54 {
55 private readonly byte[] _array;
56
57 private readonly int _offset;
58
59 private readonly int _length;
60
61 internal ByteArrayChunk(byte[] array)
62 : this(array, 0, array.Length)
63 {
64 }
65
66 internal ByteArrayChunk(byte[] array, int offset, int length)
67 {
68 _array = array;
71 }
72
73 internal override Stream AsStream()
74 {
75 return new MemoryStream(_array, _offset, _length);
76 }
77 }
78
79 private sealed class StringData : PreloadedData
80 {
81 private readonly string _str;
82
83 internal StringData(string str)
84 {
85 _str = str;
86 }
87
88 internal override Stream AsStream()
89 {
90 return new MemoryStream(Encoding.Unicode.GetBytes(_str));
91 }
92
93 internal override TextReader AsTextReader()
94 {
95 return new StringReader(_str);
96 }
97
98 internal override bool SupportsType(Type type)
99 {
100 if (type == typeof(TextReader))
101 {
102 return true;
103 }
104 return base.SupportsType(type);
105 }
106 }
107
109
111
112 private readonly XmlKnownDtds _preloadedDtds;
113
114 private static readonly XmlKnownDtdData[] s_xhtml10_Dtd = new XmlKnownDtdData[6]
115 {
116 new XmlKnownDtdData("-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", "xhtml1-strict.dtd"),
117 new XmlKnownDtdData("-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1-transitional.dtd"),
118 new XmlKnownDtdData("-//W3C//DTD XHTML 1.0 Frameset//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd", "xhtml1-frameset.dtd"),
119 new XmlKnownDtdData("-//W3C//ENTITIES Latin 1 for XHTML//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent", "xhtml-lat1.ent"),
120 new XmlKnownDtdData("-//W3C//ENTITIES Symbols for XHTML//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent", "xhtml-symbol.ent"),
121 new XmlKnownDtdData("-//W3C//ENTITIES Special for XHTML//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent", "xhtml-special.ent")
122 };
123
124 private static readonly XmlKnownDtdData[] s_rss091_Dtd = new XmlKnownDtdData[1]
125 {
126 new XmlKnownDtdData("-//Netscape Communications//DTD RSS 0.91//EN", "http://my.netscape.com/publish/formats/rss-0.91.dtd", "rss-0.91.dtd")
127 };
128
129 public override ICredentials Credentials
130 {
131 set
132 {
133 if (_fallbackResolver != null)
134 {
136 }
137 }
138 }
139
141
143 : this(null)
144 {
145 }
146
151
156
161
179
180 public override Uri ResolveUri(Uri? baseUri, string? relativeUri)
181 {
182 if (relativeUri != null && relativeUri.StartsWith("-//", StringComparison.CurrentCulture))
183 {
184 if ((_preloadedDtds & XmlKnownDtds.Xhtml10) != 0 && relativeUri.StartsWith("-//W3C//", StringComparison.CurrentCulture))
185 {
186 for (int i = 0; i < s_xhtml10_Dtd.Length; i++)
187 {
188 if (relativeUri == s_xhtml10_Dtd[i].publicId)
189 {
190 return new Uri(relativeUri, UriKind.Relative);
191 }
192 }
193 }
194 if ((_preloadedDtds & XmlKnownDtds.Rss091) != 0 && relativeUri == s_rss091_Dtd[0].publicId)
195 {
196 return new Uri(relativeUri, UriKind.Relative);
197 }
198 }
199 return base.ResolveUri(baseUri, relativeUri);
200 }
201
202 public override object? GetEntity(Uri absoluteUri, string? role, Type? ofObjectToReturn)
203 {
204 if (absoluteUri == null)
205 {
206 throw new ArgumentNullException("absoluteUri");
207 }
209 {
210 if (_fallbackResolver != null)
211 {
213 }
215 }
216 if (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream) || ofObjectToReturn == typeof(object))
217 {
218 return value.AsStream();
219 }
221 {
222 return value.AsTextReader();
223 }
225 }
226
227 public override bool SupportsType(Uri absoluteUri, Type? type)
228 {
229 if (absoluteUri == null)
230 {
231 throw new ArgumentNullException("absoluteUri");
232 }
234 {
235 if (_fallbackResolver != null)
236 {
238 }
239 return base.SupportsType(absoluteUri, type);
240 }
241 return value.SupportsType(type);
242 }
243
244 public void Add(Uri uri, byte[] value)
245 {
246 if (uri == null)
247 {
248 throw new ArgumentNullException("uri");
249 }
250 if (value == null)
251 {
252 throw new ArgumentNullException("value");
253 }
254 Add(uri, new ByteArrayChunk(value, 0, value.Length));
255 }
256
257 public void Add(Uri uri, byte[] value, int offset, int count)
258 {
259 if (uri == null)
260 {
261 throw new ArgumentNullException("uri");
262 }
263 if (value == null)
264 {
265 throw new ArgumentNullException("value");
266 }
267 if (count < 0)
268 {
269 throw new ArgumentOutOfRangeException("count");
270 }
271 if (offset < 0)
272 {
273 throw new ArgumentOutOfRangeException("offset");
274 }
275 if (value.Length - offset < count)
276 {
277 throw new ArgumentOutOfRangeException("count");
278 }
279 Add(uri, new ByteArrayChunk(value, offset, count));
280 }
281
282 public void Add(Uri uri, Stream value)
283 {
284 if (uri == null)
285 {
286 throw new ArgumentNullException("uri");
287 }
288 if (value == null)
289 {
290 throw new ArgumentNullException("value");
291 }
292 checked
293 {
294 if (value.CanSeek)
295 {
296 int num = (int)value.Length;
297 byte[] array = new byte[num];
298 value.Read(array, 0, num);
299 Add(uri, new ByteArrayChunk(array));
300 return;
301 }
303 byte[] array2 = new byte[4096];
304 int count;
305 while ((count = value.Read(array2, 0, array2.Length)) > 0)
306 {
307 memoryStream.Write(array2, 0, count);
308 }
309 int num2 = (int)memoryStream.Position;
310 byte[] array3 = new byte[num2];
311 Array.Copy(memoryStream.ToArray(), array3, num2);
312 Add(uri, new ByteArrayChunk(array3));
313 }
314 }
315
316 public void Add(Uri uri, string value)
317 {
318 if (uri == null)
319 {
320 throw new ArgumentNullException("uri");
321 }
322 if (value == null)
323 {
324 throw new ArgumentNullException("value");
325 }
326 Add(uri, new StringData(value));
327 }
328
329 public void Remove(Uri uri)
330 {
331 if (uri == null)
332 {
333 throw new ArgumentNullException("uri");
334 }
335 _mappings.Remove(uri);
336 }
337
338 private void Add(Uri uri, PreloadedData data)
339 {
340 if (_mappings.ContainsKey(uri))
341 {
342 _mappings[uri] = data;
343 }
344 else
345 {
346 _mappings.Add(uri, data);
347 }
348 }
349
351 {
353 {
354 _mappings.Add(new Uri(xmlKnownDtdData.publicId, UriKind.RelativeOrAbsolute), xmlKnownDtdData);
355 _mappings.Add(new Uri(xmlKnownDtdData.systemId, UriKind.RelativeOrAbsolute), xmlKnownDtdData);
356 }
357 }
358
360 {
361 if (absoluteUri == null)
362 {
363 throw new ArgumentNullException("absoluteUri");
364 }
366 {
367 if (_fallbackResolver != null)
368 {
370 }
372 }
373 if (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream) || ofObjectToReturn == typeof(object))
374 {
375 return Task.FromResult((object)value.AsStream());
376 }
378 {
379 return Task.FromResult((object)value.AsTextReader());
380 }
382 }
383}
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)
void Add(TKey key, TValue value)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Xml_CannotResolveUrl
Definition SR.cs:148
static string Xml_UnsupportedClass
Definition SR.cs:278
Definition SR.cs:7
static Encoding Unicode
Definition Encoding.cs:519
XmlKnownDtdData(string publicId, string systemId, string resourceName)
XmlPreloadedResolver(XmlResolver? fallbackResolver)
override bool SupportsType(Uri absoluteUri, Type? type)
override Task< object > GetEntityAsync(Uri absoluteUri, string? role, Type? ofObjectToReturn)
static readonly XmlKnownDtdData[] s_rss091_Dtd
static readonly XmlKnownDtdData[] s_xhtml10_Dtd
void Add(Uri uri, PreloadedData data)
XmlPreloadedResolver(XmlResolver? fallbackResolver, XmlKnownDtds preloadedDtds, IEqualityComparer< Uri >? uriComparer)
readonly Dictionary< Uri, PreloadedData > _mappings
override? object GetEntity(Uri absoluteUri, string? role, Type? ofObjectToReturn)
void Add(Uri uri, byte[] value, int offset, int count)
override Uri ResolveUri(Uri? baseUri, string? relativeUri)
XmlPreloadedResolver(XmlResolver? fallbackResolver, XmlKnownDtds preloadedDtds)
object? GetEntity(Uri absoluteUri, string? role, Type? ofObjectToReturn)
virtual bool SupportsType(Uri absoluteUri, Type? type)
virtual Task< object > GetEntityAsync(Uri absoluteUri, string? role, Type? ofObjectToReturn)
UriKind
Definition UriKind.cs:4