Пример #1
0
        static VkStruct CreatePlatformStruct(string name)
        {
            var vkStruct = new VkStruct();

            vkStruct.Name = vkStruct.SpecName = name;
            return(vkStruct);
        }
Пример #2
0
        static VkStruct CreateImportStruct(string name)
        {
            var vkStruct = new VkStruct();

            vkStruct.Name           = vkStruct.SpecName = name;
            vkStruct.IsImportedType = true;
            return(vkStruct);
        }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
 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]);
         }
     }
 }
Пример #6
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);
        }