Example #1
0
 /**
  * Parses Markdown from the children of a Doxygen code node
  *
  * @param Node			Xml node we want to parse into Markdown
  * @param Output		StringBuilder to receive the output
  * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
  */
 static void ParseXmlCodeLineChildren(XmlNode Node, StringBuilder Output, ResolveLinkDelegate ResolveLink)
 {
     foreach (XmlNode ChildNode in Node.ChildNodes)
     {
         ParseXmlCodeLine(ChildNode, Output, ResolveLink);
     }
 }
Example #2
0
        /**
         * Parses Markdown from a Doxygen code node
         *
         * @param Node			Xml node we want to parse into Markdown
         * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
         * @return				Converted text
         */
        public static string ParseXmlCodeLine(XmlNode Node, ResolveLinkDelegate ResolveLink)
        {
            StringBuilder Builder = new StringBuilder();

            ParseXmlCodeLine(Node, Builder, ResolveLink);
            return(Builder.ToString());
        }
Example #3
0
        /**
         * Parses Markdown from a Doxygen code node
         *
         * @param Node			Xml node we want to parse into Markdown
         * @param Output		StringBuilder to receive the output
         * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
         */
        static void ParseXmlCodeLine(XmlNode Node, StringBuilder Output, ResolveLinkDelegate ResolveLink)
        {
            switch (Node.Name)
            {
            case "sp":
                Output.Append(' ');
                return;

            case "ref":
                XmlAttribute RefAttribute = Node.Attributes["refid"];

                string LinkPath = (RefAttribute != null && ResolveLink != null)? ResolveLink(RefAttribute.Value) : null;
                if (LinkPath != null)
                {
                    Output.Append("[");
                }

                ParseXmlCodeLineChildren(Node, Output, ResolveLink);

                if (LinkPath != null)
                {
                    Output.AppendFormat("]({0})", LinkPath);
                }
                break;

            case "#text":
                Output.Append(EscapeText(Node.InnerText));
                break;

            default:
                ParseXmlCodeLineChildren(Node, Output, ResolveLink);
                break;
            }
        }
Example #4
0
        /**
         * Parses markdown text out of an XML node
         *
         * @param child			xml node we want to parse into Markdown
         * @param Indent		indenting prefix for each newline of text in the converted markdown
         * @param ResolveLink	delegate to call to resolve doxygen id's into link paths. may be null.
         * @return				a string containing the text from the child node
         */
        public static string ParseXml(XmlNode Node, string Indent, ResolveLinkDelegate ResolveLink)
        {
            MarkdownWriter Writer = new MarkdownWriter(Indent);

            ConvertNodeContents(Node, Writer, ResolveLink);
            return(Writer.ToString());
        }
Example #5
0
 /**
  * Converts all children of the given XML node
  *
  * @param Node			Xml node we want to parse all children into Markdown
  * @param Writer		Output for markdown text
  * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
  */
 static void ConvertNodeContents(XmlNode Node, MarkdownWriter Writer, ResolveLinkDelegate ResolveLink)
 {
     if (Node.HasChildNodes)
     {
         foreach (XmlNode ChildNode in Node.ChildNodes)
         {
             ConvertNode(ChildNode, Writer, ResolveLink);
         }
     }
     else
     {
         Writer.Write(EscapeXmlText(Node.InnerText));
     }
 }
Example #6
0
        /**
         * Parses markdown text out of an XML node
         *
         * @param child			xml node we want to parse into Markdown
         * @param Indent		indenting prefix for each newline of text in the converted markdown
         * @param Output		storage for the output string
         * @param ResolveLink	delegate to call to resolve doxygen id's into link paths. may be null.
         */
        static void ConvertNode(XmlNode Node, MarkdownWriter Writer, ResolveLinkDelegate ResolveLink)
        {
            switch (Node.Name)
            {
            case "ulink":
                string LinkText = Node.InnerText;
                string LinkUrl  = Node.Attributes.GetNamedItem("url").InnerText;

                const string WebPrefix    = "docs.unrealengine.com/latest/INT/";
                int          WebPrefixIdx = LinkUrl.IndexOf(WebPrefix);
                if (WebPrefixIdx != -1 && LinkText.Contains("docs.unrealengine.com"))
                {
                    LinkText = "";
                    LinkUrl  = LinkUrl.Substring(WebPrefixIdx + WebPrefix.Length);

                    int AnchorIdx = LinkUrl.LastIndexOf('#');
                    if (AnchorIdx == -1)
                    {
                        LinkUrl = RemoveDefaultPageName(LinkUrl);
                    }
                    else
                    {
                        LinkUrl = RemoveDefaultPageName(LinkUrl.Substring(0, AnchorIdx)) + LinkUrl.Substring(AnchorIdx);
                    }
                }
                Writer.WriteLink(LinkText, LinkUrl);
                break;

            case "ref":
                XmlAttribute RefAttribute = Node.Attributes["refid"];
                if (RefAttribute != null && ResolveLink != null)
                {
                    string LinkPath = ResolveLink(RefAttribute.Value);
                    if (LinkPath != null)
                    {
                        Writer.WriteLink(Node.InnerText, LinkPath);
                        break;
                    }
                }
                Writer.Write(Node.InnerText);
                break;

            case "bold":
                Writer.Write("**");
                ConvertNodeContents(Node, Writer, ResolveLink);
                Writer.Write("**");
                break;

            case "emphasis":
                Writer.Write("_");
                ConvertNodeContents(Node, Writer, ResolveLink);
                Writer.Write("_");
                break;

            case "computeroutput":
                Writer.Write("`");
                ConvertNodeContents(Node, Writer, ResolveLink);
                Writer.Write("_");
                break;

            case "parameterlist":
                break;

            case "parameteritem":
                break;

            case "parameternamelist":
                break;

            case "parameterdescription":
                ConvertNodeContents(Node, Writer, ResolveLink);
                break;

            case "xrefsect":
                break;

            case "simplesect":
                XmlAttribute KindAttribute = Node.Attributes["kind"];
                if (KindAttribute == null || KindAttribute.Value != "see")
                {
                    ConvertNodeContents(Node, Writer, ResolveLink);
                }
                break;

            case "para":
                Writer.WriteParagraph();
                ConvertNodeContents(Node, Writer, ResolveLink);
                break;

            case "itemizedlist":
                Writer.WriteLine();
                foreach (XmlNode ListItemNode in Node.SelectNodes("listitem"))
                {
                    XmlNodeList ParaNodes = ListItemNode.SelectNodes("para");
                    if (ParaNodes.Count > 0)
                    {
                        // Write the first node
                        Writer.Write("* ");
                        Writer.AddIndent(" ");
                        ConvertNodeContents(ParaNodes[0], Writer, ResolveLink);

                        // Write anything else as an actual paragraph
                        for (int Idx = 1; Idx < ParaNodes.Count; Idx++)
                        {
                            Writer.WriteLine();
                            ConvertNodeContents(ParaNodes[Idx], Writer, ResolveLink);
                        }

                        // Finish the line
                        Writer.RemoveIndent();
                        Writer.WriteLine();
                    }
                }
                break;

            default:
                ConvertNodeContents(Node, Writer, ResolveLink);
                break;
            }
        }
Example #7
0
		/** 
		 * Parses Markdown from the children of a Doxygen code node
		 * 
		 * @param Node			Xml node we want to parse into Markdown 
		 * @param Output		StringBuilder to receive the output
		 * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
		 */
		static void ParseXmlCodeLineChildren(XmlNode Node, StringBuilder Output, ResolveLinkDelegate ResolveLink)
		{
			foreach(XmlNode ChildNode in Node.ChildNodes)
			{
				ParseXmlCodeLine(ChildNode, Output, ResolveLink);
			}
		}
Example #8
0
		/** 
		 * Parses Markdown from a Doxygen code node
		 * 
		 * @param Node			Xml node we want to parse into Markdown 
		 * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
		 * @return				Converted text
		 */
		public static string ParseXmlCodeLine(XmlNode Node, ResolveLinkDelegate ResolveLink)
		{
			StringBuilder Builder = new StringBuilder();
			ParseXmlCodeLine(Node, Builder, ResolveLink);
			return Builder.ToString();
		}
Example #9
0
		/** 
		 * Parses Markdown from a Doxygen code node
		 * 
		 * @param Node			Xml node we want to parse into Markdown 
		 * @param Output		StringBuilder to receive the output
		 * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
		 */
		static void ParseXmlCodeLine(XmlNode Node, StringBuilder Output, ResolveLinkDelegate ResolveLink)
		{
			switch(Node.Name)
			{
				case "sp":
					Output.Append(' ');
					return;
				case "ref":
					XmlAttribute RefAttribute = Node.Attributes["refid"];

					string LinkPath = (RefAttribute != null && ResolveLink != null)? ResolveLink(RefAttribute.Value) : null;
					if(LinkPath != null)
					{
						Output.Append("[");
					}

					ParseXmlCodeLineChildren(Node, Output, ResolveLink);

					if(LinkPath != null)
					{
						Output.AppendFormat("]({0})", LinkPath);
					}
					break;
				case "#text":
					Output.Append(EscapeText(Node.InnerText));
					break;
				default:
					ParseXmlCodeLineChildren(Node, Output, ResolveLink);
					break;
			}
		}
Example #10
0
		/** 
		 * Converts all children of the given XML node
		 * 
		 * @param Node			Xml node we want to parse all children into Markdown 
		 * @param Writer		Output for markdown text
		 * @param ResolveLink	Delegate to call to resolve doxygen id's into link paths. may be null.
		 */
		static void ConvertNodeContents(XmlNode Node, MarkdownWriter Writer, ResolveLinkDelegate ResolveLink)
		{
			if (Node.HasChildNodes)
			{
				foreach (XmlNode ChildNode in Node.ChildNodes)
				{
					ConvertNode(ChildNode, Writer, ResolveLink);
				}
			}
			else
			{
				Writer.Write(EscapeXmlText(Node.InnerText));
			}
		}
Example #11
0
		/** 
		 * Parses markdown text out of an XML node 
		 * 
		 * @param child			xml node we want to parse into Markdown 
		 * @param Indent		indenting prefix for each newline of text in the converted markdown
		 * @param Output		storage for the output string
		 * @param ResolveLink	delegate to call to resolve doxygen id's into link paths. may be null.
		 */
		static void ConvertNode(XmlNode Node, MarkdownWriter Writer, ResolveLinkDelegate ResolveLink)
		{
			switch (Node.Name)
			{
				case "ulink":
					string LinkText = Node.InnerText;
					string LinkUrl = Node.Attributes.GetNamedItem("url").InnerText;

					const string WebPrefix = "docs.unrealengine.com/latest/INT/";
					int WebPrefixIdx = LinkUrl.IndexOf(WebPrefix);
					if (WebPrefixIdx != -1 && LinkText.Contains("docs.unrealengine.com"))
					{
						LinkText = "";
						LinkUrl = LinkUrl.Substring(WebPrefixIdx + WebPrefix.Length);

						int AnchorIdx = LinkUrl.LastIndexOf('#');
						if(AnchorIdx == -1)
						{
							LinkUrl = RemoveDefaultPageName(LinkUrl);
						}
						else
						{
							LinkUrl = RemoveDefaultPageName(LinkUrl.Substring(0, AnchorIdx)) + LinkUrl.Substring(AnchorIdx);
						}
					}
					Writer.WriteLink(LinkText, LinkUrl);
					break;
				case "ref":
					XmlAttribute RefAttribute = Node.Attributes["refid"];
					if (RefAttribute != null && ResolveLink != null)
					{
						string LinkPath = ResolveLink(RefAttribute.Value);
						if (LinkPath != null)
						{
							Writer.WriteLink(Node.InnerText, LinkPath);
							break;
						}
					}
					Writer.Write(Node.InnerText);
					break;
				case "bold":
					Writer.Write("**");
					ConvertNodeContents(Node, Writer, ResolveLink);
					Writer.Write("**");
					break;
				case "emphasis":
					Writer.Write("_");
					ConvertNodeContents(Node, Writer, ResolveLink);
					Writer.Write("_");
					break;
				case "computeroutput":
					Writer.Write("`");
					ConvertNodeContents(Node, Writer, ResolveLink);
					Writer.Write("_");
					break;
				case "parameterlist":
					break;
				case "parameteritem":
					break;
				case "parameternamelist":
					break;
				case "parameterdescription":
					ConvertNodeContents(Node, Writer, ResolveLink);
					break;
				case "xrefsect":
					break;
				case "simplesect":
					XmlAttribute KindAttribute = Node.Attributes["kind"];
					if (KindAttribute == null || KindAttribute.Value != "see")
					{
						ConvertNodeContents(Node, Writer, ResolveLink);
					}
					break;
				case "para":
					Writer.WriteParagraph();
					ConvertNodeContents(Node, Writer, ResolveLink);
					break;
				case "itemizedlist":
					Writer.WriteLine();
					foreach (XmlNode ListItemNode in Node.SelectNodes("listitem"))
					{
						XmlNodeList ParaNodes = ListItemNode.SelectNodes("para");
						if (ParaNodes.Count > 0)
						{
							// Write the first node
							Writer.Write("* ");
							Writer.AddIndent(" ");
							ConvertNodeContents(ParaNodes[0], Writer, ResolveLink);

							// Write anything else as an actual paragraph
							for (int Idx = 1; Idx < ParaNodes.Count; Idx++)
							{
								Writer.WriteLine();
								ConvertNodeContents(ParaNodes[Idx], Writer, ResolveLink);
							}

							// Finish the line
							Writer.RemoveIndent();
							Writer.WriteLine();
						}
					}
					break;
				default:
					ConvertNodeContents(Node, Writer, ResolveLink);
					break;
			}
		}
Example #12
0
		/** 
		 * Parses markdown text out of an XML node 
		 * 
		 * @param child			xml node we want to parse into Markdown 
		 * @param Indent		indenting prefix for each newline of text in the converted markdown
		 * @param ResolveLink	delegate to call to resolve doxygen id's into link paths. may be null.
		 * @return				a string containing the text from the child node 
		 */
		public static string ParseXml(XmlNode Node, string Indent, ResolveLinkDelegate ResolveLink)
		{
			MarkdownWriter Writer = new MarkdownWriter(Indent);
			ConvertNodeContents(Node, Writer, ResolveLink);
			return Writer.ToString();
		}
Example #13
0
        /** Parses markdown text out of an XML node
         *
         * @param child			xml node we want to parse into Markdown
         * @param Indent		indenting prefix for each newline of text in the converted markdown
         * @param ResolveLink	delegate to call to resolve doxygen id's into link paths. may be null.
         * @return				a string containing the text from the child node
         */
        public static string ParseXml(XmlNode child, string Indent, ResolveLinkDelegate ResolveLink)
        {
            string output = "";

            XmlNode parent = child.ParentNode;
            if (child.HasChildNodes)
            {
                switch (child.Name)
                {
                    case "para":
                        if (parent.Name != "listitem" && parent.Name != "parameterdescription" && parent.Name != "simplesect")
                        {
                            output += Environment.NewLine;
                            output += ParseChildren(child, Indent, ResolveLink);
                        }
                        else if (parent.Name == "listitem")
                        {
                            output += Environment.NewLine;
                            if (child == parent.FirstChild)
                            {
                                output += Indent + "* " + ParseChildren(child, Indent, ResolveLink);
                            }
                            else
                            {
                                output += Environment.NewLine + Indent + "\t" + ParseChildren(child, Indent, ResolveLink);
                            }
                        }
                        else if (parent.Name == "parameterdescription" || parent.Name == "simplesect")
                        {
                            output += ParseChildren(child, Indent, ResolveLink);
                        }
                        break;
                    case "ulink":
                        if (bDocToolCanParseExternalLinks)
                        {
                            output += Indent + String.Format("[{0}]({1})", ParseChildren(child, Indent, ResolveLink), child.Attributes.GetNamedItem("url").InnerText);
                        }
                        else
                        {
                            output += Indent + EscapeText(child.Attributes.GetNamedItem("url").InnerText);
                        }
                        break;
                    case "ref":
                        XmlAttribute RefAttribute = child.Attributes["refid"];
                        if (RefAttribute != null && ResolveLink != null)
                        {
                            string LinkPath = ResolveLink(RefAttribute.Value);
                            if(LinkPath != null)
                            {
                                output += String.Format("[{0}]({1})", ParseChildren(child, Indent, ResolveLink), LinkPath);
                                break;
                            }
                        }
                        output += ParseChildren(child, Indent, ResolveLink);
                        break;
                    case "bold":
                        output += Indent + String.Format("**{0}**", ParseChildren(child, Indent, ResolveLink));
                        break;
                    case "emphasis":
                        output += Indent + String.Format("_{0}_", ParseChildren(child, Indent, ResolveLink));
                        break;
                    case "computeroutput":
                        output += Indent + String.Format("`{0}`", ParseChildren(child, Indent, ResolveLink));
                        break;
                    case "itemizedlist":
                        if (parent.ParentNode.Name == "listitem")
                        {
                            output += ParseChildren(child, Indent + "\t", ResolveLink);
                        }
                        else
                        {
                            output += Environment.NewLine + ParseChildren(child, Indent, ResolveLink) + Environment.NewLine + Environment.NewLine;
                        }
                        break;
                    case "parameterlist":
                        break;
                    case "parameteritem":
                        break;
                    case "parameternamelist":
                        break;
                    case "simplesect":
                        break;
                    case "xrefsect":
                        break;
                    default:
                        output += ParseChildren(child, Indent, ResolveLink);
                        break;
                }
            }
            else
            {
                output += Indent + EscapeText(child.InnerText);
            }

            return output;
        }
Example #14
0
        /** Class ParseXML for all child nodes of the given child
         *
         * @param child xml node we want to parse all children into Markdown
         * @return a string containing the text from the child node
         */
        static String ParseChildren(XmlNode child, string Indent, ResolveLinkDelegate ResolveLink)
        {
            String output = "";

            foreach (XmlNode childNode in child.ChildNodes)
            {
                if (output.Length > 0 && output[output.Length - 1] != ' ') output += " ";
                output += ParseXml(childNode, Indent, ResolveLink);
            }

            return output;
        }