Prepping for monodoc move from monodoc/engine to mcs/class/monodoc...
[mono.git] / mcs / class / monodoc / ManifestResourceResolver.cs
1 using System;
2 using System.IO;
3 using System.Reflection;
4 using System.Xml;
5
6 namespace Mono.Documentation {
7         class ManifestResourceResolver : XmlUrlResolver {
8                 private string dir;
9
10                 public ManifestResourceResolver (string dir)
11                 {
12                         this.dir = dir;
13                 }
14
15                 public override Uri ResolveUri (Uri baseUri, string relativeUri)
16                 {
17                         using (Stream s = Assembly.GetExecutingAssembly ().GetManifestResourceStream (relativeUri)) {
18                                 if (s != null)
19                                         return new Uri ("x-resource:///" + relativeUri);
20                         }
21                         return base.ResolveUri (
22                                         new Uri ("file://" + new DirectoryInfo (dir).FullName + "/"), 
23                                         relativeUri);
24                 }
25
26                 public override object GetEntity (Uri absoluteUri, string role, Type ofObjectToReturn)
27                 {
28                         if (ofObjectToReturn == null)
29                                 ofObjectToReturn = typeof(Stream);
30                         if (ofObjectToReturn != typeof(Stream))
31                                 throw new XmlException ("This object type is not supported.");
32                         if (absoluteUri.Scheme != "x-resource")
33                                 return base.GetEntity (absoluteUri, role, ofObjectToReturn);
34                         return Assembly.GetExecutingAssembly().GetManifestResourceStream (
35                                         absoluteUri.Segments [1]);
36                 }
37         }
38 }
39