Added ufbx warper

This commit is contained in:
2026-03-15 02:19:40 +09:00
parent cce1cf7256
commit 3e4084c42a
232 changed files with 10989 additions and 55 deletions

View File

@@ -0,0 +1,49 @@
using Ghost.NativeWrapperGen.Config;
namespace Ghost.NativeWrapperGen.Transform;
public sealed class NamingConventions
{
private readonly WrapperConfig _config;
public NamingConventions(WrapperConfig config)
{
_config = config;
}
public string GetWrapperTypeName(string nativeTypeName)
{
if (_config.TypeNameOverrides.TryGetValue(nativeTypeName, out var overrideName))
{
return overrideName;
}
return ToPascalCase(StripKnownPrefix(nativeTypeName));
}
public string GetPropertyName(string nativeName)
{
return ToPascalCase(nativeName);
}
private string StripKnownPrefix(string nativeTypeName)
{
if (nativeTypeName.StartsWith(_config.NativeTypePrefix, StringComparison.Ordinal))
{
return nativeTypeName[_config.NativeTypePrefix.Length..];
}
return nativeTypeName;
}
public static string ToPascalCase(string value)
{
var parts = value.Split('_', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
if (parts.Length == 0)
{
return value;
}
return string.Concat(parts.Select(static part => char.ToUpperInvariant(part[0]) + part[1..]));
}
}

View File

@@ -0,0 +1,56 @@
using Ghost.NativeWrapperGen.Config;
using Ghost.NativeWrapperGen.Model;
using Ghost.NativeWrapperGen.Parsing;
namespace Ghost.NativeWrapperGen.Transform;
public sealed class PublicTypeResolver
{
private readonly NativeLibrary _library;
private readonly WrapperConfig _config;
private readonly NamingConventions _naming;
public PublicTypeResolver(NativeLibrary library, WrapperConfig config, NamingConventions naming)
{
_library = library;
_config = config;
_naming = naming;
}
public string GetPublicType(string nativeTypeName)
{
if (string.Equals(nativeTypeName, "void", StringComparison.Ordinal))
{
return "void*";
}
if (_config.PublicTypeOverrides.TryGetValue(nativeTypeName, out var overrideType))
{
return overrideType;
}
var pointerDepth = BindingParser.GetPointerDepth(nativeTypeName);
var baseType = BindingParser.TrimPointers(nativeTypeName);
if (pointerDepth == 0)
{
return baseType;
}
if (_library.StructsByName.ContainsKey(baseType))
{
return pointerDepth switch
{
1 => _naming.GetWrapperTypeName(baseType),
_ => nativeTypeName,
};
}
return nativeTypeName;
}
public bool HasWrapper(string nativeTypeName)
{
return _library.StructsByName.ContainsKey(nativeTypeName);
}
}