コード例 #1
0
ファイル: Docs.cs プロジェクト: xydoublez/doxygen-net
        public void LoadTypesMembers(Type t, bool forceReload)
        {
            if (!forceReload && t.Members.Count > 0)
            {
                return;
            }

            FileInfo typeXmlFile = XmlFiles.Find(
                file => file.Name.Remove(file.Name.LastIndexOf(file.Extension)) == t.ID);

            if (typeXmlFile == null || !typeXmlFile.Exists)
            {
                return;
            }

            XmlDocument typeDoc = new XmlDocument();

            typeDoc.Load(typeXmlFile.FullName);

            t.Description = typeDoc.SelectSingleNode("/doxygen/compounddef/detaileddescription").InnerXml.Replace("preformatted", "pre");

            XmlNodeList baseTypes = typeDoc.SelectNodes("/doxygen/compounddef/basecompoundref");

            if (baseTypes != null)
            {
                foreach (XmlNode baseType in baseTypes)
                {
                    t.BaseTypes.Add(baseType.Attributes["refid"].Value);
                }
            }

            XmlNodeList members = typeDoc.SelectNodes("/doxygen/compounddef/sectiondef/memberdef");

            if (members == null)
            {
                return;
            }

            foreach (XmlNode member in members)
            {
                string kind = member.Attributes["kind"].Value;
                string name = GetElementInnerText(member, "name");
                string args = GetElementInnerText(member, "argsstring").Replace("(", "").Replace(")", "").Trim();

                List <Parameter> parameters = new List <Parameter>();

                if (!string.IsNullOrEmpty(args) && kind == "function")
                {
                    string[] argsSplits = args.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string arg in argsSplits)
                    {
                        string[]  argParts = arg.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        Parameter p        = new Parameter {
                            Type = argParts[0].Trim(), Name = argParts[1].Trim()
                        };
                        parameters.Add(p);
                    }
                }

                if (kind == "function" && name == t.Name)
                {
                    kind = "ctor";
                }

                Member m = CreateNewMember(kind);

                if (parameters.Count > 0)
                {
                    ((Method)m).Parameters = parameters;
                }

                m.ID             = member.Attributes["id"].Value;
                m.FullName       = string.Format("{0}.{1}", t.FullName, name);
                m.Name           = name;
                m.Kind           = kind;
                m.Description    = GetElementInnerXml(member, "detaileddescription").Replace("preformatted", "pre");
                m.AccessModifier = member.Attributes["prot"].Value;
                m.Parent         = t;
                m.ReturnType     = GetElementInnerText(member, "type");
                if (m.ReturnType.EndsWith("."))
                {
                    m.ReturnType += m.Name;
                }
                t.Members.Add(m);
            }
        }