Ejemplo n.º 1
0
        public List <string> GetOverloadSpecificationOptions()
        {
            var specs = new List <string>();

            using (var reader = XmlReader.Create(new StreamReader(GetCompoundFilePath())))
            {
                var doc = new XmlDocument();
                doc.Load(reader);
                var nav = doc.CreateNavigator();

                var nonQualifiedName = SymbolName.Substring(SymbolName.LastIndexOf("::", StringComparison.Ordinal) + 2);

                var members = nav.Select(string.Format("/doxygen/compounddef//memberdef/name[text()='{0}']", nonQualifiedName));

                while (members.MoveNext())
                {
                    var member = members.Current;

                    member.MoveToParent();

                    var templateTypeNodes = member.Select("templateparamlist/param/type");
                    var templateTypes     = new List <string>();

                    while (templateTypeNodes.MoveNext())
                    {
                        templateTypes.Add(templateTypeNodes.Current.Value.Trim());
                    }

                    var argsstring = member.SelectSingleNode("argsstring").Value;

                    specs.Add(SymbolName + GetOverloadSpecificationString(argsstring, templateTypes));
                }
            }

            return(specs);
        }
Ejemplo n.º 2
0
        private string GetTranslatedNode(XPathNavigator nav, string nodeName, string overloadSpecification = null)
        {
            if (IsOverloadedMember)
            {
                if (overloadSpecification == null)
                {
                    throw new DoxygenHelper.DoxygenAmbiguousSymbolException(SymbolName, GetOverloadSpecificationOptions());
                }

                var nonQualifiedName = SymbolName.Substring(SymbolName.LastIndexOf("::", StringComparison.Ordinal) + 2);

                var members = nav.Select(string.Format("/doxygen/compounddef//memberdef/name[text()='{0}']", nonQualifiedName));

                while (members.MoveNext())
                {
                    var member = members.Current;

                    member.MoveToParent();

                    var templateTypeNodes = member.Select("templateparamlist/param/type");
                    var templateTypes     = new List <string>();

                    while (templateTypeNodes.MoveNext())
                    {
                        templateTypes.Add(templateTypeNodes.Current.Value.Trim());
                    }

                    var argsstring = member.SelectSingleNode("argsstring").Value;

                    if (!overloadSpecification.Equals(GetOverloadSpecificationString(argsstring, templateTypes)))
                    {
                        continue;
                    }

                    var descNode = member.SelectSingleNode(nodeName);

                    Debug.Assert(descNode != null, "descNode != null");

                    return(DoxygenToMarkdownTranslator.Translate(descNode, RefLinkGenerator).Trim());
                }

                throw new DoxygenHelper.DoxygenAmbiguousSymbolException(SymbolName, GetOverloadSpecificationOptions());
            }

            if (IsDoxygenMember)
            {
                var nonQualifiedName = SymbolName.Substring(SymbolName.LastIndexOf("::", StringComparison.Ordinal) + 2);

                nav = nav.SelectSingleNode(
                    string.Format("/doxygen/compounddef//memberdef/name[text()='{0}']", nonQualifiedName));

                Debug.Assert(nav != null, "nav != null");

                nav.MoveToParent();
            }
            else
            {
                nav = nav.SelectSingleNode("/doxygen/compounddef");
            }

            Debug.Assert(nav != null, "nav != null");

            var description = nav.SelectSingleNode(nodeName);

            Debug.Assert(description != null, "desc != null");

            return(DoxygenToMarkdownTranslator.Translate(description, RefLinkGenerator).Trim());
        }