2010-06-04 Jb Evain <jbevain@novell.com>
[mcs.git] / tools / monodoc / Mono.Documentation / ManifestResourceResolver.cs
blob402d137e06fc0b22354998cd86f18dc4bdd18896
1 using System;
2 using System.IO;
3 using System.Reflection;
4 using System.Xml;
6 namespace Mono.Documentation {
7 public class ManifestResourceResolver : XmlUrlResolver {
8 private string[] dirs;
10 public ManifestResourceResolver (params string[] dirs)
12 this.dirs = (string[]) dirs.Clone ();
15 public override Uri ResolveUri (Uri baseUri, string relativeUri)
17 if (Array.IndexOf (
18 Assembly.GetExecutingAssembly ().GetManifestResourceNames (),
19 relativeUri) >= 0)
20 return new Uri ("x-resource:///" + relativeUri);
21 foreach (var dir in dirs) {
22 if (File.Exists (Path.Combine (dir, relativeUri)))
23 return base.ResolveUri (new Uri ("file://" + new DirectoryInfo (dir).FullName + "/"),
24 relativeUri);
26 return base.ResolveUri (baseUri, relativeUri);
29 public override object GetEntity (Uri absoluteUri, string role, Type ofObjectToReturn)
31 if (ofObjectToReturn == null)
32 ofObjectToReturn = typeof(Stream);
33 if (ofObjectToReturn != typeof(Stream))
34 throw new XmlException ("This object type is not supported.");
35 if (absoluteUri.Scheme != "x-resource")
36 return base.GetEntity (absoluteUri, role, ofObjectToReturn);
37 return Assembly.GetExecutingAssembly().GetManifestResourceStream (
38 absoluteUri.Segments [1]);