static VkStruct CreatePlatformStruct(string name) { var vkStruct = new VkStruct(); vkStruct.Name = vkStruct.SpecName = name; return(vkStruct); }
static VkStruct CreateImportStruct(string name) { var vkStruct = new VkStruct(); vkStruct.Name = vkStruct.SpecName = name; vkStruct.IsImportedType = true; return(vkStruct); }
void RewriteStructDefinition(VkStruct vkStruct) { var name = vkStruct.Name; if (structNameOverride.ContainsKey(name)) { name = structNameOverride[name]; } if (name.StartsWith("Vk")) { name = name.Remove(0, 2); // trim `Vk` } vkStruct.Name = name; for (var x = 0; x < vkStruct.Members.Length; x++) { var member = vkStruct.Members[x]; var memberName = member.Name; if (member.PointerRank != 0) { memberName = memberName.TrimStart(new[] { 'p' }); } if (memberName.StartsWith("pfn")) { memberName = memberName.Remove(0, 3); } memberName = char.ToUpper(memberName[0]) + memberName.Substring(1); member.Name = memberName; if (member.IsFixedSize) { if (constantMap.ContainsKey(member.FixedSize)) { member.FixedSize = constantMap[member.FixedSize]; } } if (!string.IsNullOrEmpty(member.XMLComment)) { var comment = member.XMLComment; comment = char.ToUpper(comment[0]) + comment.Substring(1, comment.Length - 1); comment = comment.Replace("\r", string.Empty); comment = comment.Replace("\n", " "); Regex regex = new Regex("[ ]{2,}", RegexOptions.None); comment = regex.Replace(comment, " "); member.XMLComment = comment; } } }
VkStruct CreateBasetypeStruct(string name, string type) { var vkStruct = new VkStruct(); vkStruct.Name = vkStruct.SpecName = name; var vkMember = new VkMember(); vkMember.Name = vkMember.SpecName = "value"; vkMember.Type = GetOrAddType(type); vkStruct.Members = new[] { vkMember }; return(vkStruct); }
void RewriteStructMemberLen(VkStruct vkStruct, VkStruct[] allStructs) { for (var x = 0; x < vkStruct.Members.Length; x++) { var member = vkStruct.Members[x]; if (member.Len.Length > 0) { if (member.Len[0] == @"latexmath:[$codeSize \over 4$]" && member.Type.Name == "UInt32") { member.Len[0] = "codeSize"; member.Type = allStructs.First(y => y.Name == "Byte"); } member.Len[0] = ToFirstUppercase(member.Len[0]); } } }
VkStruct ReadStruct(XElement xstruct, VkStruct vkStruct) { if (xstruct.Name != "type") { throw new ArgumentException("Not a type element", nameof(xstruct)); } var xcategory = xstruct.Attribute("category"); if (xcategory == null || xcategory.Value != "struct") { throw new ArgumentException("Invalid category", nameof(xstruct)); } var xattributes = xstruct.Attributes(); if (xattributes.Any()) { foreach (var xattrib in xattributes) { switch (xattrib.Name.ToString()) { case "name": vkStruct.Name = vkStruct.SpecName = xattrib.Value; break; case "returnedonly": vkStruct.ReturnedOnly = xattrib.Value == "true"; break; case "category": break; default: throw new NotImplementedException(xattrib.Name.ToString()); } } } var memberList = new List <VkMember>(); foreach (var xmember in xstruct.Elements("member")) { var vkMember = ReadMember(xmember); // Why... WHY is this important data encoded as an xml comment?! if (xmember.NextNode is XComment) { vkMember.XMLComment = ((XComment)xmember.NextNode).Value.Trim(); } memberList.Add(vkMember); } vkStruct.Members = memberList.ToArray(); var xvalidity = xstruct.Element("validity"); if (xvalidity != null) { vkStruct.Validity = xvalidity.Elements() .Select(x => x.Value) .ToArray(); } return(vkStruct); }