public static RootTree LoadTree (string indexDir, XmlDocument docTree, IEnumerable<string> sourceFiles) { if (docTree == null) { docTree = new XmlDocument (); using (var defTree = typeof(RootTree).Assembly.GetManifestResourceStream ("monodoc.xml")) docTree.Load (defTree); } sourceFiles = sourceFiles ?? new string [0]; // // Load the layout // RootTree root = new RootTree (); root.basedir = indexDir; XmlNodeList nodes = docTree.SelectNodes ("/node/node"); root.name_to_node ["root"] = root; root.name_to_node ["libraries"] = root; root.Populate (root, nodes); Node third_party = root.LookupEntryPoint ("various"); if (third_party == null) { Console.Error.WriteLine ("No 'various' doc node! Check monodoc.xml!"); third_party = root; } // // Load the sources // foreach (var sourceFile in sourceFiles){ root.AddSourceFile (sourceFile); } foreach (string path in UncompiledHelpSources) { EcmaUncompiledHelpSource hs = new EcmaUncompiledHelpSource(path); hs.RootTree = root; root.help_sources.Add (hs); string epath = "extra-help-source-" + hs.Name; Node hsn = root.CreateNode (hs.Name, "root:/" + epath); root.name_to_hs [epath] = hs; hsn.EnsureNodes (); foreach (Node n in hs.Tree.Nodes){ hsn.AddNode (n); } } // Clean the tree PurgeNode(root); root.Sort (); return root; }