using System.Text.RegularExpressions;
using System.Xml;
+using Monodoc;
using Mono.Options;
namespace Mono.Documentation {
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);
+ CreateMember (GetCref (type.DocumentElement), 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;
- }
-
+ string name = GetCref (memberdoc);
CreateMember(name, memberdoc, members);
}
}
AddNamespaceSummary(nsSummaries, basepath, nsnode.GetAttribute("Name"));
}
}
-
- 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;
+
+ 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.");
}
}
-
- private static void CreateMember(string name, XmlElement input, XmlElement output) {
- XmlElement member = output.OwnerDocument.CreateElement("member");
- output.AppendChild(member);
-
- member.SetAttribute("name", name);
-
- foreach (XmlNode docnode in input.SelectSingleNode("Docs"))
- member.AppendChild(output.OwnerDocument.ImportNode(docnode, true));
- }
-
- private static string MakeArgs (XmlElement member)
+
+ static string MakeArgs (XmlElement member)
{
XmlNodeList parameters = member.SelectNodes ("Parameters/Parameter");
if (parameters.Count == 0)
args.Append (")");
return args.ToString ();
}
+
+ private static void AddNamespaceSummary(XmlDocument nsSummaries, string basepath, string currentNs) {
+ 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;
+ }
+ }
+ }
+
+ private static void CreateMember(string name, XmlElement input, XmlElement output) {
+ XmlElement member = output.OwnerDocument.CreateElement("member");
+ output.AppendChild(member);
+
+ member.SetAttribute("name", name);
+
+ foreach (XmlNode docnode in input.SelectSingleNode("Docs"))
+ member.AppendChild(output.OwnerDocument.ImportNode(docnode, true));
+ }
private static void WriteXml(XmlElement element, System.IO.TextWriter output) {
XmlTextWriter writer = new XmlTextWriter(output);