Add autoconf checks for platforms without IPv6
[mono.git] / mcs / tools / mdoc / Mono.Documentation / monodocs2slashdoc.cs
index 54c1e24e9c03199449c7115e1f8435172a800173..b818401eca1644e5845841dffac17d22bb4bdeb6 100644 (file)
@@ -119,10 +119,10 @@ public class MDocToMSXDocConverter : MDocCommand {
                                XmlElement members = outputfiles [assemblyname];
                                if (members == null) continue; // assembly is strangely not listed in the index
                                
-                               CreateMember(EcmaDoc.GetCref (type.DocumentElement), type.DocumentElement, members);
+                               CreateMember (GetCref (type.DocumentElement), type.DocumentElement, members);
                                        
                                foreach (XmlElement memberdoc in type.SelectNodes("Type/Members/Member")) {
-                                       string name = EcmaDoc.GetCref (memberdoc);
+                                       string name = GetCref (memberdoc);
                                        CreateMember(name, memberdoc, members);
                                }
                        }
@@ -131,16 +131,61 @@ public class MDocToMSXDocConverter : MDocCommand {
                        AddNamespaceSummary(nsSummaries, basepath, nsnode.GetAttribute("Name"));
                }
        }
+
+       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.");
+               }
+       }
+
+       static string MakeArgs (XmlElement member)
+       {
+               XmlNodeList parameters = member.SelectNodes ("Parameters/Parameter");
+               if (parameters.Count == 0)
+                       return "";
+               StringBuilder args = new StringBuilder ();
+               args.Append ("(");
+               args.Append (XmlDocUtils.ToTypeName (parameters [0].Attributes ["Type"].Value, member));
+               for (int i = 1; i < parameters.Count; ++i) {
+                       args.Append (",");
+                       args.Append (XmlDocUtils.ToTypeName (parameters [i].Attributes ["Type"].Value, member));
+               }
+               args.Append (")");
+               return args.ToString ();
+       }
        
        private static void AddNamespaceSummary(XmlDocument nsSummaries, string basepath, string currentNs) {
-               string filename = Path.Combine(basepath, currentNs + ".xml");
-               if (File.Exists(filename))      {
-                       XmlDocument nsSummary = new XmlDocument();
-                       nsSummary.Load(filename);
-                       XmlElement ns = nsSummaries.CreateElement("namespace");
-                       nsSummaries.DocumentElement.AppendChild(ns);
-                       ns.SetAttribute("name", currentNs);
-                       ns.InnerText = nsSummary.SelectSingleNode("/Namespace/Docs/summary").InnerText;
+               foreach (var filename in new [] {
+                               Path.Combine(basepath, currentNs + ".xml"),
+                               Path.Combine(basepath, "ns-" + currentNs + ".xml")}) {
+                       if (File.Exists(filename))      {
+                               XmlDocument nsSummary = new XmlDocument();
+                               nsSummary.Load(filename);
+                               XmlElement ns = nsSummaries.CreateElement("namespace");
+                               nsSummaries.DocumentElement.AppendChild(ns);
+                               ns.SetAttribute("name", currentNs);
+                               ns.InnerText = nsSummary.SelectSingleNode("/Namespace/Docs/summary").InnerText;
+                       }
                }
        }