Example #1
0
        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\"/>&nbsp;{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\"/>&nbsp;{1}</a>", filename, _languagePresentationString[availableLanguage], iconPath));
                }
                codeBuilder.AppendLine("|");
            }

            return(codeBuilder.ToString());
        }
Example #2
0
        /// <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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
 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()));
 }
Example #5
0
        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());
        }
Example #6
0
 /// <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));
 }
Example #7
0
        /// <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());
        }
Example #8
0
        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());
        }
Example #9
0
        /// <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());
        }