Exemple #1
0
        static string GetCref(XmlElement member)
        {
            string typeName = XmlDocUtils.ToEscapedTypeName(member.SelectSingleNode("/Type/@FullName").InnerText);

            if (member.Name == "Type")
            {
                return("T:" + typeName);
            }
            string memberType = member.SelectSingleNode("MemberType").InnerText;

            switch (memberType)
            {
            case "Constructor":
                return("C:" + typeName + MakeArgs(member));

            case "Event":
                return("E:" + typeName + "." + XmlDocUtils.ToEscapedMemberName(member.GetAttribute("MemberName")));

            case "Field":
                return("F:" + typeName + "." + XmlDocUtils.ToEscapedMemberName(member.GetAttribute("MemberName")));

            case "Method": {
                string name = "M:" + typeName + "." + XmlDocUtils.ToEscapedMemberName(member.GetAttribute("MemberName")) + MakeArgs(member);
                if (member.GetAttribute("MemberName") == "op_Implicit" || member.GetAttribute("MemberName") == "op_Explicit")
                {
                    name += "~" + XmlDocUtils.ToTypeName(member.SelectSingleNode("ReturnValue/ReturnType").InnerText, member);
                }
                return(name);
            }

            case "Property":
                return("P:" + typeName + "." + XmlDocUtils.ToEscapedMemberName(member.GetAttribute("MemberName")) + MakeArgs(member));

            default:
                throw new NotSupportedException("MemberType '" + memberType + "' is not supported.");
            }
        }
Exemple #2
0
        private static void Process(string basepath, Dictionary <string, XmlElement> outputfiles, XmlDocument nsSummaries, bool implicitFiles)
        {
            if (System.Environment.CurrentDirectory == System.IO.Path.GetFullPath(basepath) && implicitFiles)
            {
                Console.WriteLine("Don't run this tool from your documentation directory, since some files could be accidentally overwritten.");
                return;
            }

            XmlDocument index_doc = new XmlDocument();

            index_doc.Load(Path.Combine(basepath, "index.xml"));
            XmlElement index = index_doc.DocumentElement;

            foreach (XmlElement assmbly in index.SelectNodes("Assemblies/Assembly"))
            {
                string assemblyName = assmbly.GetAttribute("Name");
                if (outputfiles.ContainsKey(assemblyName))
                {
                    continue;
                }
                XmlDocument output      = new XmlDocument();
                XmlElement  output_root = output.CreateElement("doc");
                output.AppendChild(output_root);

                XmlElement output_assembly = output.CreateElement("assembly");
                output_root.AppendChild(output_assembly);
                XmlElement output_assembly_name = output.CreateElement("name");
                output_assembly.AppendChild(output_assembly_name);
                output_assembly_name.InnerText = assemblyName;

                XmlElement members = output.CreateElement("members");
                output_root.AppendChild(members);

                outputfiles.Add(assemblyName, members);
            }

            foreach (XmlElement nsnode in index.SelectNodes("Types/Namespace"))
            {
                string ns = nsnode.GetAttribute("Name");
                foreach (XmlElement typedoc in nsnode.SelectNodes("Type"))
                {
                    string      typename = typedoc.GetAttribute("Name");
                    XmlDocument type     = new XmlDocument();
                    type.Load(Path.Combine(Path.Combine(basepath, ns), typename) + ".xml");

                    string     assemblyname = type.SelectSingleNode("Type/AssemblyInfo/AssemblyName").InnerText;
                    XmlElement members      = outputfiles [assemblyname];
                    if (members == null)
                    {
                        continue;                              // assembly is strangely not listed in the index
                    }
                    string typeName = XmlDocUtils.ToEscapedTypeName(type.SelectSingleNode("Type/@FullName").InnerText);
                    CreateMember("T:" + typeName, type.DocumentElement, members);

                    foreach (XmlElement memberdoc in type.SelectNodes("Type/Members/Member"))
                    {
                        string name = typeName;
                        switch (memberdoc.SelectSingleNode("MemberType").InnerText)
                        {
                        case "Constructor":
                            name = "C:" + name + MakeArgs(memberdoc);
                            break;

                        case "Method":
                            name = "M:" + name + "." + XmlDocUtils.ToEscapedMemberName(memberdoc.GetAttribute("MemberName")) + MakeArgs(memberdoc);
                            if (memberdoc.GetAttribute("MemberName") == "op_Implicit" || memberdoc.GetAttribute("MemberName") == "op_Explicit")
                            {
                                name += "~" + XmlDocUtils.ToTypeName(memberdoc.SelectSingleNode("ReturnValue/ReturnType").InnerText, memberdoc);
                            }
                            break;

                        case "Property":
                            name = "P:" + name + "." + XmlDocUtils.ToEscapedMemberName(memberdoc.GetAttribute("MemberName")) + MakeArgs(memberdoc);
                            break;

                        case "Field":
                            name = "F:" + name + "." + XmlDocUtils.ToEscapedMemberName(memberdoc.GetAttribute("MemberName"));
                            break;

                        case "Event":
                            name = "E:" + name + "." + XmlDocUtils.ToEscapedMemberName(memberdoc.GetAttribute("MemberName"));
                            break;
                        }

                        CreateMember(name, memberdoc, members);
                    }
                }
            }
            foreach (XmlElement nsnode in index.SelectNodes("Types/Namespace"))
            {
                AddNamespaceSummary(nsSummaries, basepath, nsnode.GetAttribute("Name"));
            }
        }