Merge remote-tracking branch 'origin/master' into sdl

# Conflicts:
#	create_stub_pyray.py
#	docs/README.html
#	docs/genindex.html
#	docs/objects.inv
#	docs/pyray.html
#	docs/raylib.html
#	docs/searchindex.js
#	dynamic/raylib/defines.py
#	make_docs.sh
#	pyray/__init__.pyi
#	raylib/__init__.pyi
#	raylib/defines.py
#	version.py
This commit is contained in:
Richard Smith 2024-11-18 13:16:50 +00:00
commit 4e0a89162b
49 changed files with 2068 additions and 2163 deletions

View file

@ -29,6 +29,12 @@ for filename in (Path("raylib.json"), Path("raymath.json"), Path("rlgl.json"), P
for st in js["structs"]:
if st["name"] not in known_structs:
known_structs[st["name"]] = st
for e in js['enums']:
if e['name'] and e['values']:
print ("class "+e['name']+"(int):")
for value in e['values']:
print(" "+value['name']+" = "+str(value['value']))
print("")
def ctype_to_python_type(t):
@ -42,27 +48,39 @@ def ctype_to_python_type(t):
return "int"
elif t == "uint64_t":
return "int"
elif t == "short":
return "int"
elif t == "unsigned short":
return "int"
elif t == "double":
return "float"
elif "char * *" in t:
return "list[str]"
elif "char *" in t:
return "str"
elif "char" in t:
elif t == "char":
return "str" # not sure about this one
elif t == "unsigned char":
return "int"
elif "*" in t:
return "Any"
elif "[" in t:
return "list" # TODO FIXME type of items in the list
elif t.startswith("struct"):
return t.replace("struct ", "")
elif t.startswith("unsigned"):
return t.replace("unsigned ", "")
elif t.startswith("enum"):
return t.replace("enum ", "")
else:
return t
print("""from typing import Any
import _cffi_backend # type: ignore
ffi: _cffi_backend.FFI
""")
# These words can be used for c arg names, but not in python
@ -88,6 +106,8 @@ for name, attr in getmembers(rl):
if param_name in reserved_words:
param_name = param_name + "_" + str(i)
param_type = ctype_to_python_type(arg.cname)
if "struct" in arg.cname:
param_type += "|list|tuple"
sig += f"{param_name}: {param_type},"
return_type = ffi.typeof(attr).result.cname
@ -126,11 +146,14 @@ for struct in ffi.list_types()[0]:
print(f' """ struct """')
sig = ""
for arg in ffi.typeof(struct).fields:
sig += ", " + arg[0]
ptype = ctype_to_python_type(arg[1].type.cname)
if arg[1].type.kind == "struct":
ptype += "|list|tuple"
sig += f", {arg[0]}: {ptype}|None = None"
print(f" def __init__(self{sig}):")
for arg in ffi.typeof(struct).fields:
print(f" self.{arg[0]}={arg[0]}")
print(f" self.{arg[0]}:{ctype_to_python_type(arg[1].type.cname)} = {arg[0]} # type: ignore")
# elif ffi.typeof(struct).kind == "enum":
# print(f"{struct}: int")