* Mono.Documentation/monodocs2slashdoc.cs: Code refactor; use
authorJonathan Pryor <jpryor@novell.com>
Thu, 16 Apr 2009 18:59:05 +0000 (18:59 -0000)
committerJonathan Pryor <jpryor@novell.com>
Thu, 16 Apr 2009 18:59:05 +0000 (18:59 -0000)
  EcmaDoc.GetCref() to generate //member/@name values.
* Mono.Documentation/dump.cs: Add -f=FORMAT support, so that we can
  load an appropriate HelpSource (if supplied) so that an appropriate
  Node.PublicUrl can be displayed in the output.

svn path=/trunk/mcs/; revision=131927

mcs/tools/mdoc/ChangeLog
mcs/tools/mdoc/Mono.Documentation/dump.cs
mcs/tools/mdoc/Mono.Documentation/monodocs2slashdoc.cs

index 4059924a9b12eef0322384a34de085c65570ec70..b58d8cc5764dc013dcc305d6312d34f7733b1345 100644 (file)
@@ -1,3 +1,11 @@
+2009-04-16  Jonathan Pryor <jpryor@novell.com>
+
+       * Mono.Documentation/monodocs2slashdoc.cs: Code refactor; use
+         EcmaDoc.GetCref() to generate //member/@name values.
+       * Mono.Documentation/dump.cs: Add -f=FORMAT support, so that we can
+         load an appropriate HelpSource (if supplied) so that an appropriate
+         Node.PublicUrl can be displayed in the output.
+
 2009-04-15  Jonathan Pryor <jpryor@novell.com>
 
        * Mono.Documentation/webdoc.cs: Remove console debug spew.  If you run
index dbfa90cc170f95e337fd6939248c15996e90ee68..49033d4a832911ce9ecf59a3618c51ce5ec9c010 100644 (file)
@@ -10,18 +10,51 @@ namespace Mono.Documentation {
 
                public override void Run (IEnumerable<string> args)
                {
+                       var validFormats = RootTree.GetSupportedFormats ();
+                       string cur_format = "";
+                       var formats = new Dictionary<string, List<string>> ();
                        var options = new OptionSet () {
+                               { "f|format=",
+                                       "The documentation {FORMAT} used in FILES.  " + 
+                                               "Valid formats include:\n  " +
+                                               string.Join ("\n  ", validFormats) + "\n" +
+                                               "If not specified, no HelpSource is used.  This may " +
+                                               "impact the PublicUrls displayed for nodes.",
+                                       v => {
+                                               if (Array.IndexOf (validFormats, v) < 0)
+                                                       Error ("Invalid documentation format: {0}.", v);
+                                               cur_format = v;
+                                       } },
+                               { "<>", v => AddFormat (formats, cur_format, v) },
                        };
                        List<string> files = Parse (options, args, "dump-tree", 
                                        "[OPTIONS]+ FILES",
-                                       "Print out the nodes within the assembled .tree file FILES.");
+                                       "Print out the nodes within the assembled .tree FILES,\n" + 
+                                       "as produced by 'mdoc assemble'.");
                        if (files == null)
                                return;
 
-                       foreach (var file in files) {
-                               Tree t = new Tree (null, file);
-                               Node.PrintTree (t);
+                       foreach (string format in formats.Keys) {
+                               foreach (string file in formats [format]) {
+                                       HelpSource hs = format == ""
+                                               ? null
+                                               : RootTree.GetHelpSource (format, file.Replace (".tree", ""));
+                                       Tree t = new Tree (hs, file);
+                                       Node.PrintTree (t);
+                               }
                        }
                }
+
+               private void AddFormat (Dictionary<string, List<string>> d, string format, string file)
+               {
+                       if (format == null)
+                               format = "";
+                       List<string> l;
+                       if (!d.TryGetValue (format, out l)) {
+                               l = new List<string> ();
+                               d.Add (format, l);
+                       }
+                       l.Add (file);
+               }
        }
 }
index d4528418d7e898fe686820847f1927c9918b2e8c..54c1e24e9c03199449c7115e1f8435172a800173 100644 (file)
@@ -6,6 +6,7 @@ using System.Text;
 using System.Text.RegularExpressions;
 using System.Xml;
 
+using Monodoc;
 using Mono.Options;
 
 namespace Mono.Documentation {
@@ -118,31 +119,10 @@ public class MDocToMSXDocConverter : MDocCommand {
                                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(EcmaDoc.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 = EcmaDoc.GetCref (memberdoc);
                                        CreateMember(name, memberdoc, members);
                                }
                        }
@@ -173,22 +153,6 @@ public class MDocToMSXDocConverter : MDocCommand {
                foreach (XmlNode docnode in input.SelectSingleNode("Docs"))
                        member.AppendChild(output.OwnerDocument.ImportNode(docnode, true));
        }
-       
-       private 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 WriteXml(XmlElement element, System.IO.TextWriter output) {
                XmlTextWriter writer = new XmlTextWriter(output);