mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-03-29 21:07:01 +00:00
Explicitly merge functions
Some functions are part of multiple features or extensions. For documentation purposes, we need to correctly merge their attributes.
This commit is contained in:
parent
6185059adc
commit
faa3330375
|
@ -34,6 +34,14 @@ using System.Xml.Linq;
|
||||||
|
|
||||||
namespace CHeaderToXML
|
namespace CHeaderToXML
|
||||||
{
|
{
|
||||||
|
static class Extension
|
||||||
|
{
|
||||||
|
public static string ValueOrDefault(this XAttribute a)
|
||||||
|
{
|
||||||
|
return a != null ? a.Value : String.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class GLXmlParser : Parser
|
class GLXmlParser : Parser
|
||||||
{
|
{
|
||||||
static readonly Regex ExtensionRegex = new Regex(
|
static readonly Regex ExtensionRegex = new Regex(
|
||||||
|
@ -204,7 +212,9 @@ namespace CHeaderToXML
|
||||||
foreach (var command in feature.Elements("require").Elements("command"))
|
foreach (var command in feature.Elements("require").Elements("command"))
|
||||||
{
|
{
|
||||||
var cmd_name = TrimName(command.Attribute("name").Value);
|
var cmd_name = TrimName(command.Attribute("name").Value);
|
||||||
var cmd_extension = ExtensionRegex.Match(cmd_name).Value;
|
var cmd_extension =
|
||||||
|
ExtensionRegex.Match(cmd_name).Value ??
|
||||||
|
(feature.Name == "extension" ? category.Substring(0, category.IndexOf("_")) : "Core");
|
||||||
if (String.IsNullOrEmpty(cmd_extension))
|
if (String.IsNullOrEmpty(cmd_extension))
|
||||||
cmd_extension = "Core";
|
cmd_extension = "Core";
|
||||||
|
|
||||||
|
@ -214,7 +224,7 @@ namespace CHeaderToXML
|
||||||
if (!String.IsNullOrEmpty(cmd_version))
|
if (!String.IsNullOrEmpty(cmd_version))
|
||||||
function.Add(new XAttribute("version", cmd_version));
|
function.Add(new XAttribute("version", cmd_version));
|
||||||
|
|
||||||
api.Add(function);
|
Merge(api, function);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark all deprecated functions as such
|
// Mark all deprecated functions as such
|
||||||
|
@ -236,6 +246,29 @@ namespace CHeaderToXML
|
||||||
return APIs.Values;
|
return APIs.Values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Merge(XElement api, XElement function)
|
||||||
|
{
|
||||||
|
var type = function.Name.LocalName;
|
||||||
|
var name = function.Attribute("name").Value;
|
||||||
|
var f = api.Elements(type).FirstOrDefault(p => p.Attribute("name").Value == name);
|
||||||
|
if (f != null)
|
||||||
|
{
|
||||||
|
f.SetAttributeValue("category", String.Join("|",
|
||||||
|
new string[] { f.Attribute("category").Value, function.Attribute("category").Value }));
|
||||||
|
f.SetAttributeValue("version",
|
||||||
|
(f.Attribute("version") ?? function.Attribute("version")).ValueOrDefault());
|
||||||
|
|
||||||
|
// Sanity check: one function cannot belong to two different extensions
|
||||||
|
if (f.Attribute("extension").Value != function.Attribute("extension").Value)
|
||||||
|
throw new InvalidOperationException("Different extensions for the same function");
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
api.Add(function);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private XElement TranslateCommand(XElement command)
|
private XElement TranslateCommand(XElement command)
|
||||||
{
|
{
|
||||||
XElement function = new XElement("function");
|
XElement function = new XElement("function");
|
||||||
|
|
Loading…
Reference in a new issue