File: ecmauncompiled-provider.cs

package info (click to toggle)
mono 6.12.0.199%2Bds-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,192 kB
  • sloc: cs: 11,181,844; xml: 2,850,076; ansic: 689,413; cpp: 123,344; perl: 59,361; javascript: 30,841; asm: 21,845; makefile: 19,951; sh: 15,030; python: 4,771; pascal: 925; sql: 859; sed: 16; php: 1
file content (68 lines) | stat: -rw-r--r-- 1,789 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Collections.Generic;

using Lucene.Net.Index;
using Lucene.Net.Documents;

using Monodoc.Ecma;
using Monodoc.Storage;
using Mono.Utilities;

namespace Monodoc.Providers
{
	public class EcmaUncompiledHelpSource : EcmaHelpSource
	{
		readonly DirectoryInfo basedir;
		readonly string basedoc;

		public readonly string BasePath;

		public new string Name {
			get;
			private set;
		}
	
		/* base_file: the directory containing the index.xml file, usually in Mono land .../Documentation/en
		 * markName: if true, we encase the node caption with [] to clearly mark it's from an uncompiled source
		 */
		public EcmaUncompiledHelpSource (string base_file, bool markName = true) : base ()
		{
			basedir = new DirectoryInfo (base_file);
			BasePath = basedir.FullName;
		
			basedoc = Path.Combine (basedir.FullName, "index.xml");
		
			Name = ((string)XDocument.Load (basedoc).Root.Element ("Title")) ?? "UnnamedUncompiledSource";
			if (markName)
				Name = '[' + Name + ']';
			Tree.RootNode.Caption = Name;

			Func<XElement, string> indexGenerator = type => {
				var nsName = (string)type.Parent.Attribute ("Name");
				var typeName = (string)type.Attribute ("Name");
				return Path.ChangeExtension (nsName + '/' + typeName, ".xml");
			};

			this.Storage = new UncompiledDocStorage (BasePath);

			EcmaDoc.PopulateTreeFromIndexFile (basedoc, UriPrefix, Tree, null, null, indexGenerator);
		}

		protected override string UriPrefix {
			get {
				return "uncompiled:";
			}
		}

		public override Stream GetImage (string url)
		{
			var path = Path.Combine (BasePath, "_images", url);
			return File.Exists (path) ? File.OpenRead (path) : (Stream)null;
		}
	}
}