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); }
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); } }