[runtime] Disable some tests in full-aot mode which cannot be AOTed because of type...
[mono-project.git] / mcs / class / monodoc / Monodoc / generators / html / Addin2Html.cs
blob2cd5ea0366dd05ff4ad96d19d47f3b5f1eb7c160
1 using System;
2 using System.IO;
3 using System.Text;
4 using System.Xml;
5 using System.Xml.Xsl;
6 using System.Xml.XPath;
7 using System.Collections.Generic;
9 namespace Monodoc.Generators.Html
11 public class Addin2Html : IHtmlExporter
13 public string CssCode {
14 get {
15 return string.Empty;
19 public string Export (Stream stream, Dictionary<string, string> extraArgs)
21 using (var reader = new StreamReader (stream))
22 return Htmlize (GetAddin (reader, extraArgs["AddinID"]),
23 extraArgs["show"],
24 extraArgs["AddinID"],
25 extraArgs["FileID"],
26 extraArgs["NodeID"]);
29 public string Export (string input, Dictionary<string, string> extraArgs)
31 return Htmlize (GetAddin (new StringReader (input), extraArgs["AddinID"]),
32 extraArgs["show"],
33 extraArgs["AddinID"],
34 extraArgs["FileID"],
35 extraArgs["NodeID"]);
38 XmlElement GetAddin (TextReader reader, string addinId)
40 XmlDocument doc = new XmlDocument ();
41 doc.Load (reader);
42 XmlElement addin = (XmlElement) doc.SelectSingleNode ("Addins/Addin[@fullId='" + addinId + "']");
43 return addin != null ? addin : null;
46 public string Htmlize (XmlElement addin, string urlType, string addinId, string fileId, string path)
48 if (urlType == Monodoc.Providers.AddinsHelpSource.AddinPrefix)
49 return GetAddinTextFromUrl (addin, addinId, fileId);
50 else if (urlType == Monodoc.Providers.AddinsHelpSource.ExtensionPrefix)
51 return GetExtensionTextFromUrl (addin, addinId, fileId, path);
52 else if (urlType == Monodoc.Providers.AddinsHelpSource.ExtensionNodePrefix)
53 return GetExtensionNodeTextFromUrl (addin, addinId, fileId, path);
55 return null;
58 protected string GetAddinTextFromUrl (XmlElement addin, string addinId, string fileId)
60 if (addin == null)
61 return "<html>Add-in not found: " + addinId + "</html>";
63 StringBuilder sb = new StringBuilder ("<html>");
64 sb.Append ("<h1>").Append (addin.GetAttribute ("name")).Append ("</h1>");
65 XmlElement docs = (XmlElement) addin.SelectSingleNode ("Description");
66 if (docs != null)
67 sb.Append (docs.InnerText);
69 sb.Append ("<p><table border=\"1\" cellpadding=\"4\" cellspacing=\"0\">");
70 sb.AppendFormat ("<tr><td><b>Id</b></td><td>{0}</td></tr>", addin.GetAttribute ("addinId"));
71 sb.AppendFormat ("<tr><td><b>Namespace</b></td><td>{0}</td></tr>", addin.GetAttribute ("namespace"));
72 sb.AppendFormat ("<tr><td><b>Version</b></td><td>{0}</td></tr>", addin.GetAttribute ("version"));
73 sb.Append ("</table></p>");
74 sb.Append ("<p><b>Extension Points</b>:</p>");
75 sb.Append ("<ul>");
77 foreach (XmlElement ep in addin.SelectNodes ("ExtensionPoint")) {
78 sb.AppendFormat ("<li><a href=\"extension-point:{0}#{1}#{2}\">{3}</li>", fileId, addinId, ep.GetAttribute ("path"), ep.GetAttribute ("name"));
80 sb.Append ("</ul>");
82 sb.Append ("</html>");
83 return sb.ToString ();
86 protected string GetExtensionTextFromUrl (XmlElement addin, string addinId, string fileId, string path)
88 if (addin == null)
89 return "<html>Add-in not found: " + addinId + "</html>";
91 XmlElement ext = (XmlElement) addin.SelectSingleNode ("ExtensionPoint[@path='" + path + "']");
92 if (ext == null)
93 return "<html>Extension point not found: " + path + "</html>";
95 StringBuilder sb = new StringBuilder ("<html>");
96 sb.Append ("<h1>").Append (ext.GetAttribute ("name")).Append ("</h1>");
98 path = path.Replace ("/", " <b>/</b> ");
99 sb.Append ("<p><b>Path</b>: ").Append (path).Append ("</p>");
100 XmlElement desc = (XmlElement) ext.SelectSingleNode ("Description");
101 if (desc != null)
102 sb.Append (desc.InnerText);
104 sb.Append ("<p><b>Extension Nodes</b>:</p>");
105 sb.Append ("<table border=\"1\" cellpadding=\"4\" cellspacing=\"0\">");
107 foreach (XmlElement en in ext.SelectNodes ("ExtensionNode")) {
108 string nid = en.GetAttribute ("id");
109 string nname = en.GetAttribute ("name");
110 string sdesc = "";
111 desc = (XmlElement) en.SelectSingleNode ("Description");
112 if (desc != null)
113 sdesc = desc.InnerText;
115 sb.AppendFormat ("<tr><td><a href=\"extension-node:{0}#{1}#{2}\">{3}</td><td>{4}</td></tr>", fileId, addinId, nid, nname, sdesc);
117 sb.Append ("</table>");
119 sb.Append ("</html>");
120 return sb.ToString ();
123 protected string GetExtensionNodeTextFromUrl (XmlElement addin, string addinId, string fileId, string nodeId)
125 if (addin == null)
126 return "<html>Add-in not found: " + addinId + "</html>";
128 XmlElement node = (XmlElement) addin.SelectSingleNode ("ExtensionNodeType[@id='" + nodeId + "']");
129 if (node == null)
130 return "<html>Extension point not found: " + nodeId + "</html>";
132 StringBuilder sb = new StringBuilder ("<html>");
133 sb.Append ("<h1>").Append (node.GetAttribute ("name")).Append ("</h1>");
134 XmlElement desc = (XmlElement) node.SelectSingleNode ("Description");
135 if (desc != null)
136 sb.Append (desc.InnerText);
138 sb.Append ("<p><b>Attributes</b>:</p>");
139 sb.Append ("<table border=\"1\" cellpadding=\"4\" cellspacing=\"0\"><tr>");
140 sb.Append ("<td><b>Name</b></td>");
141 sb.Append ("<td><b>Type</b></td>");
142 sb.Append ("<td><b>Required</b></td>");
143 sb.Append ("<td><b>Localizable</b></td>");
144 sb.Append ("<td><b>Description</b></td>");
145 sb.Append ("<tr>");
146 sb.Append ("<td>id</td>");
147 sb.Append ("<td>System.String</td>");
148 sb.Append ("<td></td>");
149 sb.Append ("<td></td>");
150 sb.Append ("<td>Identifier of the node.</td>");
151 sb.Append ("</tr>");
153 foreach (XmlElement at in node.SelectNodes ("Attributes/Attribute")) {
154 sb.Append ("<tr>");
155 sb.AppendFormat ("<td>{0}</td>", at.GetAttribute ("name"));
156 sb.AppendFormat ("<td>{0}</td>", at.GetAttribute ("type"));
157 if (at.GetAttribute ("required") == "True")
158 sb.Append ("<td>Yes</td>");
159 else
160 sb.Append ("<td></td>");
161 if (at.GetAttribute ("localizable") == "True")
162 sb.Append ("<td>Yes</td>");
163 else
164 sb.Append ("<td></td>");
165 string sdesc = "";
166 desc = (XmlElement) at.SelectSingleNode ("Description");
167 if (desc != null)
168 sdesc = desc.InnerText;
170 sb.AppendFormat ("<td>{0}</td>", sdesc);
171 sb.Append ("</tr>");
173 sb.Append ("</table>");
175 XmlNodeList children = node.SelectNodes ("ChildNodes/ExtensionNode");
176 if (children.Count > 0) {
177 sb.Append ("<p><b>Child Nodes</b>:</p>");
178 sb.Append ("<table border=\"1\" cellpadding=\"4\" cellspacing=\"0\">");
180 foreach (XmlElement en in children) {
181 string nid = en.GetAttribute ("id");
182 string nname = en.GetAttribute ("name");
183 string sdesc = "";
184 desc = (XmlElement) en.SelectSingleNode ("Description");
185 if (desc != null)
186 sdesc = desc.InnerText;
188 sb.AppendFormat ("<tr><td><a href=\"extension-node:{0}#{1}#{2}\">{3}</td><td>{4}</td></tr>", fileId, addinId, nid, nname, sdesc);
190 sb.Append ("</table>");
193 sb.Append ("</html>");
194 return sb.ToString ();