private static string GenerateLanguageSelectionCode(EntityDocumentationPage entityDocumentationPage, IEnumerable <string> availableLanguages, string lang) { var codeBuilder = new StringBuilder(); foreach (var availableLanguage in availableLanguages) { var iconPath = ""; for (int i = 0; i < entityDocumentationPage.DocDirPath.Split(Path.PathSeparator).Count(); i++) { iconPath = Path.Combine("..", iconPath); } iconPath = Path.Combine(iconPath, _languagePresentationIcon[availableLanguage]); if (availableLanguage == lang) { codeBuilder.AppendLine(string.Format("<img src=\"{1}\" border=\"0\"/> {0}", _languagePresentationString[lang], iconPath)); } else { var filename = Path.GetFileName(entityDocumentationPage.Localizations[availableLanguage].FilePath); codeBuilder.AppendLine(string.Format("<a href=\"{0}\"><img src=\"{2}\" border=\"0\"/> {1}</a>", filename, _languagePresentationString[availableLanguage], iconPath)); } codeBuilder.AppendLine("|"); } return(codeBuilder.ToString()); }
/// <summary> /// Adds a documentation page for the given entity to generate in all available localizations. /// </summary> /// <param name="entityDocumentationPage">The class with all informations about the entity</param> public void AddDocumentationPage(EntityDocumentationPage entityDocumentationPage) { DocPages.Add(entityDocumentationPage); foreach (var lang in entityDocumentationPage.AvailableLanguages) { AvailableLanguages.Add(lang); } }
private string GetEntityName(EntityDocumentationPage docPage) { var lang = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName; if (docPage.AvailableLanguages.Contains(lang)) { return(docPage.Localizations[lang].Name); } else { return(docPage.Localizations["en"].Name); } return(null); }
private static string GetDocumentationTemplate(EntityDocumentationPage entityDocPage) { if (entityDocPage is EditorDocumentationPage) { return(Properties.Resources.TemplateEditorDocumentationPage); } if (entityDocPage is ComponentDocumentationPage) { return(Properties.Resources.TemplateComponentDocumentationPage); } if (entityDocPage is TemplateDocumentationPage) { return(Properties.Resources.TemplateTemplateDocumentationPage); } if (entityDocPage is CommonDocumentationPage) { return(Properties.Resources.TemplateCommonDocumentationPage); } throw new Exception(string.Format("Unknown documentation page type {0}!", entityDocPage.GetType())); }
public string Convert(object theObject, EntityDocumentationPage docPage) { if (theObject == null) { return(Resources.Not_available); } if (theObject is XElement) { var elementString = ConvertXElement((XElement)theObject, docPage); if (string.IsNullOrWhiteSpace(elementString)) { return(Convert(null, docPage)); } return(elementString); } if (theObject is BitmapFrame) { return(ConvertImageSource((BitmapFrame)theObject, docPage.Name, docPage.CurrentLocalization.Name)); } if (theObject is ComponentTemplateList) { return(ConvertTemplateList((ComponentTemplateList)theObject, docPage)); } if (theObject is Reference.ReferenceList) { return(((Reference.ReferenceList)theObject).ToLaTeX(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName)); } if (theObject is PropertyInfoAttribute[]) { return(ConvertConnectorList((PropertyInfoAttribute[])theObject)); } if (theObject is TaskPaneAttribute[]) { return(ConvertSettingsList((TaskPaneAttribute[])theObject)); } return(theObject.ToString()); }
/// <summary> /// Converts the given imageSource parameter to a file in the doc directory and returns an html string referencing this. /// </summary> /// <param name="imageSource">The ImageSource containing the image to convert.</param> /// <param name="filename">The wished filename (withouth the extension)</param> /// <param name="entityType"></param> /// <returns></returns> private string ConvertImageSource(BitmapFrame imageSource, string filename, EntityDocumentationPage entityDocumentationPage) { filename = filename + ".png"; if (!_createdImages.Contains(filename)) { var dir = Path.Combine(Path.Combine(_outputDir, OnlineHelp.HelpDirectory), entityDocumentationPage.DocDirPath); //create image file: if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var file = Path.Combine(dir, filename); using (var fileStream = new FileStream(file, FileMode.Create)) { var encoder = new PngBitmapEncoder(); encoder.Frames.Add(imageSource); encoder.Save(fileStream); } } _createdImages.Add(filename); return(string.Format("<img src=\"{0}\" />", filename)); }
/// <summary> /// Converts the given xelement, which is from the xml doc file, into a LaTeX formatted representation. /// </summary> /// <param name="xelement"></param> /// <param name="entityDocumentationPage"></param> /// <returns></returns> private string ConvertXElement(XElement xelement, EntityDocumentationPage entityDocumentationPage) { var result = new StringBuilder(); foreach (var node in xelement.Nodes()) { if (node is XText) { string text = ((XText)node).Value; text = Regex.Replace(text, "[\r\n]+", "\n"); text = Regex.Replace(text, "[\t ]+\n", "\n"); text = Regex.Replace(text, "[\t ]+\\\\\n", "\\\\\n"); result.Append(Helper.EscapeLaTeX(text)); } else if (node is XElement) { var nodeName = ((XElement)node).Name.ToString(); switch (nodeName) { case "b": case "i": case "u": var fontDict = new Dictionary <string, string> { { "b", "\\textbf" }, { "i", "\\textit" }, { "u", "\\underline" } }; var nodeRep = ConvertXElement((XElement)node, entityDocumentationPage); result.Append(fontDict[nodeName] + "{" + nodeRep + "}"); break; case "ref": var idAtt = ((XElement)node).Attribute("id"); if (idAtt != null) { if (entityDocumentationPage is PluginDocumentationPage) { result.Append("TODO: REF HERE"); //var htmlLinkToRef = entityDocumentationPage.References.GetHTMLinkToRef(idAtt.Value); //if (htmlLinkToRef != null) //{ // result.Append(htmlLinkToRef); //} } } break; case "img": var srcAtt = ((XElement)node).Attribute("src"); if (srcAtt != null) { int sIndex = srcAtt.Value.IndexOf('/'); var image = BitmapFrame.Create(new Uri(string.Format("pack://application:,,,/{0};component/{1}", srcAtt.Value.Substring(0, sIndex), srcAtt.Value.Substring(sIndex + 1)))); var filename = string.Format("{0}_{1}", entityDocumentationPage.Name, Path.GetFileNameWithoutExtension(srcAtt.Value)); var captionAtt = ((XElement)node).Attribute("caption"); var caption = (captionAtt != null) ? captionAtt.Value : Path.GetFileNameWithoutExtension(srcAtt.Value); result.Append(ConvertImageSource(image, filename, caption)); } break; case "newline": result.Append("\\\\\n"); break; case "section": var headline = ((XElement)node).Attribute("headline"); if (headline != null) { result.AppendLine("\\subsubsection*{" + headline.Value + "}"); result.AppendLine(ConvertXElement((XElement)node, entityDocumentationPage)); } break; case "enum": case "list": var t = (nodeName == "enum") ? "enumerate" : "itemize"; result.AppendLine("\\begin{" + t + "}"); foreach (var item in ((XElement)node).Elements("item")) { result.AppendLine(string.Format("\\item {0}", ConvertXElement(item, entityDocumentationPage))); } result.AppendLine("\\end{" + t + "}"); break; case "external": var reference = ((XElement)node).Attribute("ref"); if (reference != null) { var linkText = ConvertXElement((XElement)node, entityDocumentationPage); if (string.IsNullOrEmpty(linkText)) { linkText = reference.Value; } result.Append(Helper.EscapeLaTeX(linkText)); } break; case "docRef": var itemAttribute = ((XElement)node).Attribute("item"); if (itemAttribute != null) { var linkText = ConvertXElement((XElement)node, entityDocumentationPage); var docPage = GetEntityDocPage(itemAttribute.Value); if (string.IsNullOrEmpty(linkText)) { if (docPage != null) { linkText = GetEntityName(docPage); } else { linkText = itemAttribute.Value; } } result.Append(linkText); } break; default: continue; } } } return(result.ToString()); }
private string ConvertTemplateList(ComponentTemplateList componentTemplateList, EntityDocumentationPage entityDocumentationPage) { if (componentTemplateList.Templates.Count == 0) { return(Resources.NoContent); } var codeBuilder = new StringBuilder(); codeBuilder.AppendLine(string.Format("<p>{0}</p>", Resources.Templates_description)); codeBuilder.AppendLine("<table width=\"100%\" border=\"1\">"); codeBuilder.AppendLine(string.Format("<tr> <th>{0}</th> <th>{1}</th> </tr>", Resources.File, Resources.Description)); foreach (var template in componentTemplateList.Templates) { //var link = Path.Combine(Path.Combine("..\\..", DocGenerator.TemplateDirectory), template.TemplateFile); var link = template.CurrentLocalization.FilePath; codeBuilder.AppendLine(string.Format("<tr> <td><a href=\"..\\{0}\">{1}</a></td> <td>{2}</td> </tr>", link, template.CurrentLocalization.Name, ConvertXElement(template.CurrentLocalization.Description, entityDocumentationPage))); } codeBuilder.AppendLine("</table>"); return(codeBuilder.ToString()); }
/// <summary> /// Converts the given xelement, which is from the xml doc file, into an html formated representation. /// </summary> /// <param name="xelement"></param> /// <param name="entityDocumentationPage"></param> /// <returns></returns> private string ConvertXElement(XElement xelement, EntityDocumentationPage entityDocumentationPage) { var result = new StringBuilder(); foreach (var node in xelement.Nodes()) { if (node is XText) { result.Append(HttpUtility.HtmlEncode(((XText)node).Value)); } else if (node is XElement) { var nodeName = ((XElement)node).Name.ToString(); switch (nodeName) { case "b": case "i": case "u": var nodeRep = ConvertXElement((XElement)node, entityDocumentationPage); result.Append(string.Format("<{0}>{1}</{0}>", nodeName, nodeRep)); break; case "ref": var idAtt = ((XElement)node).Attribute("id"); if (idAtt != null) { if (entityDocumentationPage is PluginDocumentationPage) { var htmlLinkToRef = entityDocumentationPage.References.GetHTMLinkToRef(idAtt.Value); if (htmlLinkToRef != null) { result.Append(htmlLinkToRef); } } } break; case "img": var srcAtt = ((XElement)node).Attribute("src"); if (srcAtt != null) { int sIndex = srcAtt.Value.IndexOf('/'); var image = BitmapFrame.Create(new Uri(string.Format("pack://application:,,,/{0};component/{1}", srcAtt.Value.Substring(0, sIndex), srcAtt.Value.Substring(sIndex + 1)))); var filename = string.Format("{0}_{1}", entityDocumentationPage.Name, Path.GetFileNameWithoutExtension(srcAtt.Value)); result.Append(ConvertImageSource(image, filename, entityDocumentationPage)); } break; case "newline": result.Append("<br/>"); break; case "section": var headline = ((XElement)node).Attribute("headline"); if (headline != null) { result.AppendLine(string.Format("<h2>{0}</h2>", headline.Value)); result.AppendLine(ConvertXElement((XElement)node, entityDocumentationPage)); } break; case "enum": case "list": var t = (nodeName == "enum") ? "ol" : "ul"; result.AppendLine(string.Format("<{0}>", t)); foreach (var item in ((XElement)node).Elements("item")) { result.AppendLine(string.Format("<li>{0}</li>", ConvertXElement(item, entityDocumentationPage))); } result.AppendLine(string.Format("</{0}>", t)); break; case "table": var borderAtt = ((XElement)node).Attribute("border"); if (borderAtt != null) { int border; if (int.TryParse(borderAtt.Value, out border)) { result.Append(ConvertTable((XElement)node, border)); continue; } } result.Append(ConvertTable((XElement)node, null)); break; case "external": var reference = ((XElement)node).Attribute("ref"); if (reference != null) { var linkText = ConvertXElement((XElement)node, entityDocumentationPage); if (string.IsNullOrEmpty(linkText)) { linkText = reference.Value; } result.Append(string.Format("<a href=\"{0}?external\"><img src=\"../external_link.png\" border=\"0\">{1}</a>", reference.Value, linkText)); } break; case "internal": var reference_internal = ((XElement)node).Attribute("ref"); if (reference_internal != null) { var linkText = ConvertXElement((XElement)node, entityDocumentationPage); if (string.IsNullOrEmpty(linkText)) { linkText = reference_internal.Value; } result.Append(string.Format("<a href=\"{0}\">{1}</a>", reference_internal.Value, linkText)); } break; case "docRef": var itemAttribute = ((XElement)node).Attribute("item"); if (itemAttribute != null) { var linkText = ConvertXElement((XElement)node, entityDocumentationPage); var docPage = GetEntityDocPage(itemAttribute.Value); if (string.IsNullOrEmpty(linkText)) { if (docPage != null) { linkText = GetEntityName(docPage); } else { linkText = itemAttribute.Value; } } int dirLevel = entityDocumentationPage.DocDirPath.Split(Path.PathSeparator).Length; var d = ""; for (int i = 0; i < dirLevel; i++) { d += Path.Combine(d, ".."); } var entityLink = GetEntityLink(docPage); if (entityLink != null) { result.Append(string.Format("<a href=\"{0}\">{1}</a>", Path.Combine(d, entityLink), linkText)); } else { result.Append(string.Format("<i>{0}</i>", linkText)); } } break; default: continue; } } } return(result.ToString()); }