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);
}
}
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;
+ }
}
}