You've already forked linux-packaging-mono
Imported Upstream version 5.2.0.179
Former-commit-id: a536d4f20e27294d8bbc2184d75f3a22364f7ba1
This commit is contained in:
parent
966bba02bb
commit
fad71374d0
197
external/api-doc-tools/monodoc/Monodoc/generators/html/Addin2Html.cs
vendored
Normal file
197
external/api-doc-tools/monodoc/Monodoc/generators/html/Addin2Html.cs
vendored
Normal file
@ -0,0 +1,197 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Xsl;
|
||||
using System.Xml.XPath;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Monodoc.Generators.Html
|
||||
{
|
||||
public class Addin2Html : IHtmlExporter
|
||||
{
|
||||
public string CssCode {
|
||||
get {
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public string Export (Stream stream, Dictionary<string, string> extraArgs)
|
||||
{
|
||||
using (var reader = new StreamReader (stream))
|
||||
return Htmlize (GetAddin (reader, extraArgs["AddinID"]),
|
||||
extraArgs["show"],
|
||||
extraArgs["AddinID"],
|
||||
extraArgs["FileID"],
|
||||
extraArgs["NodeID"]);
|
||||
}
|
||||
|
||||
public string Export (string input, Dictionary<string, string> extraArgs)
|
||||
{
|
||||
return Htmlize (GetAddin (new StringReader (input), extraArgs["AddinID"]),
|
||||
extraArgs["show"],
|
||||
extraArgs["AddinID"],
|
||||
extraArgs["FileID"],
|
||||
extraArgs["NodeID"]);
|
||||
}
|
||||
|
||||
XmlElement GetAddin (TextReader reader, string addinId)
|
||||
{
|
||||
XmlDocument doc = new XmlDocument ();
|
||||
doc.Load (reader);
|
||||
XmlElement addin = (XmlElement) doc.SelectSingleNode ("Addins/Addin[@fullId='" + addinId + "']");
|
||||
return addin != null ? addin : null;
|
||||
}
|
||||
|
||||
public string Htmlize (XmlElement addin, string urlType, string addinId, string fileId, string path)
|
||||
{
|
||||
if (urlType == Monodoc.Providers.AddinsHelpSource.AddinPrefix)
|
||||
return GetAddinTextFromUrl (addin, addinId, fileId);
|
||||
else if (urlType == Monodoc.Providers.AddinsHelpSource.ExtensionPrefix)
|
||||
return GetExtensionTextFromUrl (addin, addinId, fileId, path);
|
||||
else if (urlType == Monodoc.Providers.AddinsHelpSource.ExtensionNodePrefix)
|
||||
return GetExtensionNodeTextFromUrl (addin, addinId, fileId, path);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected string GetAddinTextFromUrl (XmlElement addin, string addinId, string fileId)
|
||||
{
|
||||
if (addin == null)
|
||||
return "<html>Add-in not found: " + addinId + "</html>";
|
||||
|
||||
StringBuilder sb = new StringBuilder ("<html>");
|
||||
sb.Append ("<h1>").Append (addin.GetAttribute ("name")).Append ("</h1>");
|
||||
XmlElement docs = (XmlElement) addin.SelectSingleNode ("Description");
|
||||
if (docs != null)
|
||||
sb.Append (docs.InnerText);
|
||||
|
||||
sb.Append ("<p><table border=\"1\" cellpadding=\"4\" cellspacing=\"0\">");
|
||||
sb.AppendFormat ("<tr><td><b>Id</b></td><td>{0}</td></tr>", addin.GetAttribute ("addinId"));
|
||||
sb.AppendFormat ("<tr><td><b>Namespace</b></td><td>{0}</td></tr>", addin.GetAttribute ("namespace"));
|
||||
sb.AppendFormat ("<tr><td><b>Version</b></td><td>{0}</td></tr>", addin.GetAttribute ("version"));
|
||||
sb.Append ("</table></p>");
|
||||
sb.Append ("<p><b>Extension Points</b>:</p>");
|
||||
sb.Append ("<ul>");
|
||||
|
||||
foreach (XmlElement ep in addin.SelectNodes ("ExtensionPoint")) {
|
||||
sb.AppendFormat ("<li><a href=\"extension-point:{0}#{1}#{2}\">{3}</li>", fileId, addinId, ep.GetAttribute ("path"), ep.GetAttribute ("name"));
|
||||
}
|
||||
sb.Append ("</ul>");
|
||||
|
||||
sb.Append ("</html>");
|
||||
return sb.ToString ();
|
||||
}
|
||||
|
||||
protected string GetExtensionTextFromUrl (XmlElement addin, string addinId, string fileId, string path)
|
||||
{
|
||||
if (addin == null)
|
||||
return "<html>Add-in not found: " + addinId + "</html>";
|
||||
|
||||
XmlElement ext = (XmlElement) addin.SelectSingleNode ("ExtensionPoint[@path='" + path + "']");
|
||||
if (ext == null)
|
||||
return "<html>Extension point not found: " + path + "</html>";
|
||||
|
||||
StringBuilder sb = new StringBuilder ("<html>");
|
||||
sb.Append ("<h1>").Append (ext.GetAttribute ("name")).Append ("</h1>");
|
||||
|
||||
path = path.Replace ("/", " <b>/</b> ");
|
||||
sb.Append ("<p><b>Path</b>: ").Append (path).Append ("</p>");
|
||||
XmlElement desc = (XmlElement) ext.SelectSingleNode ("Description");
|
||||
if (desc != null)
|
||||
sb.Append (desc.InnerText);
|
||||
|
||||
sb.Append ("<p><b>Extension Nodes</b>:</p>");
|
||||
sb.Append ("<table border=\"1\" cellpadding=\"4\" cellspacing=\"0\">");
|
||||
|
||||
foreach (XmlElement en in ext.SelectNodes ("ExtensionNode")) {
|
||||
string nid = en.GetAttribute ("id");
|
||||
string nname = en.GetAttribute ("name");
|
||||
string sdesc = "";
|
||||
desc = (XmlElement) en.SelectSingleNode ("Description");
|
||||
if (desc != null)
|
||||
sdesc = desc.InnerText;
|
||||
|
||||
sb.AppendFormat ("<tr><td><a href=\"extension-node:{0}#{1}#{2}\">{3}</td><td>{4}</td></tr>", fileId, addinId, nid, nname, sdesc);
|
||||
}
|
||||
sb.Append ("</table>");
|
||||
|
||||
sb.Append ("</html>");
|
||||
return sb.ToString ();
|
||||
}
|
||||
|
||||
protected string GetExtensionNodeTextFromUrl (XmlElement addin, string addinId, string fileId, string nodeId)
|
||||
{
|
||||
if (addin == null)
|
||||
return "<html>Add-in not found: " + addinId + "</html>";
|
||||
|
||||
XmlElement node = (XmlElement) addin.SelectSingleNode ("ExtensionNodeType[@id='" + nodeId + "']");
|
||||
if (node == null)
|
||||
return "<html>Extension point not found: " + nodeId + "</html>";
|
||||
|
||||
StringBuilder sb = new StringBuilder ("<html>");
|
||||
sb.Append ("<h1>").Append (node.GetAttribute ("name")).Append ("</h1>");
|
||||
XmlElement desc = (XmlElement) node.SelectSingleNode ("Description");
|
||||
if (desc != null)
|
||||
sb.Append (desc.InnerText);
|
||||
|
||||
sb.Append ("<p><b>Attributes</b>:</p>");
|
||||
sb.Append ("<table border=\"1\" cellpadding=\"4\" cellspacing=\"0\"><tr>");
|
||||
sb.Append ("<td><b>Name</b></td>");
|
||||
sb.Append ("<td><b>Type</b></td>");
|
||||
sb.Append ("<td><b>Required</b></td>");
|
||||
sb.Append ("<td><b>Localizable</b></td>");
|
||||
sb.Append ("<td><b>Description</b></td>");
|
||||
sb.Append ("<tr>");
|
||||
sb.Append ("<td>id</td>");
|
||||
sb.Append ("<td>System.String</td>");
|
||||
sb.Append ("<td></td>");
|
||||
sb.Append ("<td></td>");
|
||||
sb.Append ("<td>Identifier of the node.</td>");
|
||||
sb.Append ("</tr>");
|
||||
|
||||
foreach (XmlElement at in node.SelectNodes ("Attributes/Attribute")) {
|
||||
sb.Append ("<tr>");
|
||||
sb.AppendFormat ("<td>{0}</td>", at.GetAttribute ("name"));
|
||||
sb.AppendFormat ("<td>{0}</td>", at.GetAttribute ("type"));
|
||||
if (at.GetAttribute ("required") == "True")
|
||||
sb.Append ("<td>Yes</td>");
|
||||
else
|
||||
sb.Append ("<td></td>");
|
||||
if (at.GetAttribute ("localizable") == "True")
|
||||
sb.Append ("<td>Yes</td>");
|
||||
else
|
||||
sb.Append ("<td></td>");
|
||||
string sdesc = "";
|
||||
desc = (XmlElement) at.SelectSingleNode ("Description");
|
||||
if (desc != null)
|
||||
sdesc = desc.InnerText;
|
||||
|
||||
sb.AppendFormat ("<td>{0}</td>", sdesc);
|
||||
sb.Append ("</tr>");
|
||||
}
|
||||
sb.Append ("</table>");
|
||||
|
||||
XmlNodeList children = node.SelectNodes ("ChildNodes/ExtensionNode");
|
||||
if (children.Count > 0) {
|
||||
sb.Append ("<p><b>Child Nodes</b>:</p>");
|
||||
sb.Append ("<table border=\"1\" cellpadding=\"4\" cellspacing=\"0\">");
|
||||
|
||||
foreach (XmlElement en in children) {
|
||||
string nid = en.GetAttribute ("id");
|
||||
string nname = en.GetAttribute ("name");
|
||||
string sdesc = "";
|
||||
desc = (XmlElement) en.SelectSingleNode ("Description");
|
||||
if (desc != null)
|
||||
sdesc = desc.InnerText;
|
||||
|
||||
sb.AppendFormat ("<tr><td><a href=\"extension-node:{0}#{1}#{2}\">{3}</td><td>{4}</td></tr>", fileId, addinId, nid, nname, sdesc);
|
||||
}
|
||||
sb.Append ("</table>");
|
||||
}
|
||||
|
||||
sb.Append ("</html>");
|
||||
return sb.ToString ();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user