6 using System
.Xml
.XPath
;
7 using System
.Collections
.Generic
;
9 namespace Monodoc
.Generators
.Html
11 public class Addin2Html
: IHtmlExporter
13 public string CssCode
{
19 public string Export (Stream stream
, Dictionary
<string, string> extraArgs
)
21 using (var reader
= new StreamReader (stream
))
22 return Htmlize (GetAddin (reader
, extraArgs
["AddinID"]),
29 public string Export (string input
, Dictionary
<string, string> extraArgs
)
31 return Htmlize (GetAddin (new StringReader (input
), extraArgs
["AddinID"]),
38 XmlElement
GetAddin (TextReader reader
, string addinId
)
40 XmlDocument doc
= new XmlDocument ();
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
);
58 protected string GetAddinTextFromUrl (XmlElement addin
, string addinId
, string fileId
)
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");
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>");
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"));
82 sb
.Append ("</html>");
83 return sb
.ToString ();
86 protected string GetExtensionTextFromUrl (XmlElement addin
, string addinId
, string fileId
, string path
)
89 return "<html>Add-in not found: " + addinId
+ "</html>";
91 XmlElement ext
= (XmlElement
) addin
.SelectSingleNode ("ExtensionPoint[@path='" + path
+ "']");
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");
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");
111 desc
= (XmlElement
) en
.SelectSingleNode ("Description");
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
)
126 return "<html>Add-in not found: " + addinId
+ "</html>";
128 XmlElement node
= (XmlElement
) addin
.SelectSingleNode ("ExtensionNodeType[@id='" + nodeId
+ "']");
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");
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>");
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>");
153 foreach (XmlElement at
in node
.SelectNodes ("Attributes/Attribute")) {
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>");
160 sb
.Append ("<td></td>");
161 if (at
.GetAttribute ("localizable") == "True")
162 sb
.Append ("<td>Yes</td>");
164 sb
.Append ("<td></td>");
166 desc
= (XmlElement
) at
.SelectSingleNode ("Description");
168 sdesc
= desc
.InnerText
;
170 sb
.AppendFormat ("<td>{0}</td>", sdesc
);
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");
184 desc
= (XmlElement
) en
.SelectSingleNode ("Description");
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 ();