public static void Main(string[] args) { var spec = new Specification.Specification(); { var specParserXml = new SpecificationReaderXml(spec); foreach (var xml in Directory.GetFiles(InputDirectoryXml)) { if (xml.EndsWith(".xml", StringComparison.OrdinalIgnoreCase)) { specParserXml.Read(XDocument.Load(xml)); } } } SpecificationOverrides.OverrideSpecification(spec); { var specParserTxt = new SpecificationReaderTxt(spec); foreach (var txt in Directory.EnumerateFiles(InputDirectoryText, "*.txt", SearchOption.AllDirectories)) { using (var stream = File.OpenText(txt)) specParserTxt.Read(stream); } } using (var gen = new OutputGenerator(spec, OutputDirectory, "VulkanLibrary")) gen.Write(); }
public static void OverrideSpecification(Specification.Specification spec) { for (var i = 0; i < ExtraParents.GetLength(0); i++) { if (spec.TypeDefs.TryGetValue(ExtraParents[i, 0], out var type) && type is VkHandle h && !h.ParentHandles.Contains(ExtraParents[i, 1])) { ((IList <string>)h.ParentHandles).Add(ExtraParents[i, 1]); } } foreach (var alias in spec.TypeDefs.Values.OfType <VkTypeAlias>()) { if (alias.TypeName.Contains("Flag") && (spec.TypeDefs.TryGetValue(alias.TypeName.Replace("Flags", "Bits"), out VkType mapped) || spec.TypeDefs.TryGetValue(alias.TypeName.Replace("Flags", "FlagBits"), out mapped) || spec.TypeDefs.TryGetValue(alias.TypeName.Replace("Flag", "Bits"), out mapped) || spec.TypeDefs.TryGetValue(alias.TypeName.Replace("Flag", "FlagBits"), out mapped)) && mapped is VkEnum @enum) { @enum.BackingType = alias.ActualType; alias.ActualType = @enum.TypeName; } } }
public SpecificationReaderTxt(Specification.Specification spec) { _spec = spec; }
public SpecificationReaderXml(Specification.Specification dest) { _spec = dest; }