Exemple #1
0
        public CXChildVisitResult VisitStruct(CXCursor cursor, CXCursor parent, IntPtr data)
        {
            if (clang.Location_isInSystemHeader(clang.getCursorLocation(cursor)) != 0)
            {
                return(CXChildVisitResult.CXChildVisit_Continue);
            }

            if (clang.getCursorKind(cursor) != CXCursorKind.CXCursor_StructDecl)
            {
                return(CXChildVisitResult.CXChildVisit_Continue);
            }

            if (!clang.getCursorSpelling(cursor).ToString().Contains("Entry"))
            {
                return(CXChildVisitResult.CXChildVisit_Continue);
            }

            var structure = new CStructureInfo();

            structure.Name           = clang.getCursorSpelling(cursor).ToString();
            structure.NormalizedName = structure.Name
                                       .Replace("GameObject", "Gameobject")
                                       .Replace("PvP", "Pvp")
                                       .Replace("PVP", "Pvp")
                                       .Replace("QuestXP", "QuestXp")
                                       .Replace("WMO", "Wmo")
                                       .Replace("AddOn", "Addon")
                                       .Replace("LFG", "Lfg")
                                       .Replace("POI", "Poi")
                                       .Replace("UI", "Ui")
                                       .Replace("_", "");

            var suffixIndex = structure.NormalizedName.LastIndexOf("Entry");

            if (suffixIndex != -1)
            {
                structure.NormalizedName = structure.NormalizedName.Remove(suffixIndex);
            }

            var handle = GCHandle.Alloc(structure);

            clang.visitChildren(cursor, VisitField, new CXClientData(GCHandle.ToIntPtr(handle)));
            handle.Free();

            structure.Members.Add(new CStructureMemberInfo()
            {
                TypeName = "int32",
                Name     = "VerifiedBuild"
            });

            Structures.Add(structure);
            var localeStruct = structure.CreateLocaleTable();

            if (localeStruct != null)
            {
                Structures.Add(localeStruct);
            }

            return(CXChildVisitResult.CXChildVisit_Continue);
        }
Exemple #2
0
        public CXChildVisitResult VisitStruct(CXCursor cursor, CXCursor parent, IntPtr data)
        {
            if (clang.Location_isInSystemHeader(clang.getCursorLocation(cursor)) != 0)
            {
                return(CXChildVisitResult.CXChildVisit_Continue);
            }

            if (clang.getCursorKind(cursor) != CXCursorKind.CXCursor_StructDecl)
            {
                return(CXChildVisitResult.CXChildVisit_Continue);
            }

            if (!clang.getCursorSpelling(cursor).ToString().Contains("Entry"))
            {
                return(CXChildVisitResult.CXChildVisit_Continue);
            }

            var structure = new CStructureInfo();

            structure.Name = clang.getCursorSpelling(cursor).ToString().Replace("Entry", "")
                             .Replace("GameObject", "Gameobject")
                             .Replace("PvP", "Pvp")
                             .Replace("QuestXP", "QuestXp")
                             .Replace("WMO", "Wmo")
                             .Replace("AddOn", "Addon");

            var handle = GCHandle.Alloc(structure);

            clang.visitChildren(cursor, VisitField, new CXClientData(GCHandle.ToIntPtr(handle)));
            handle.Free();

            var id = structure.Members.Find(m => m.Name.Equals("ID"));

            if (id == null)
            {
                structure.Members.Insert(0, new CStructureMemberInfo()
                {
                    TypeName = "uint32",
                    Name     = "ID"
                });
            }

            structure.Members.Add(new CStructureMemberInfo()
            {
                TypeName = "int16",
                Name     = "VerifiedBuild"
            });

            Structures.Add(structure);
            var localeStruct = structure.CreateLocaleTable();

            if (localeStruct != null)
            {
                Structures.Add(localeStruct);
            }

            return(CXChildVisitResult.CXChildVisit_Continue);
        }
        public void ParseStructure(string name)
        {
            var structure = new CStructureInfo();
            structure.Name = name.Replace("Entry", "");
            structure.Members = new List<CStructureMemberInfo>();
            _stream.ReadLine();
            var line = _stream.ReadLine();
            while (line != "};")
            {
                line = line.Trim();
                var comment = line.IndexOf("//");
                if (comment != -1)
                    line = line.Substring(0, comment);

                if (!line.Contains('('))
                {
                    var tokens = line.Split(' ', ';', '/').Where(t => t.Length != 0).ToArray();
                    if (tokens.Length >= 2)
                    {
                        var member = new CStructureMemberInfo();
                        member.TypeName = tokens[0];
                        member.Name = tokens[1].Replace("_lang", "").Replace("_loc", "");
                        structure.Members.Add(member);
                    }
                }

                line = _stream.ReadLine();
            }

            if (name.Contains("Entry"))
            {
                structure.Members.Add(new CStructureMemberInfo()
                {
                    TypeName = "int16",
                    Name = "VerifiedBuild"
                });
                Structures.Add(structure);
                var localeStruct = structure.CreateLocaleTable();
                if (localeStruct != null)
                    Structures.Add(localeStruct);
            }
        }