ScrapHacks/ScrapHacks/utils/make_D3D8_VMT.py

29 lines
990 B
Python

import os
import sys
import re
outfile,infile=sys.argv[1:]
re_interface=re.compile(r"^DECLARE_INTERFACE_{0,1}\((.*?)\)$")
re_method=re.compile(r"^\w*STDMETHOD_{0,1}\((.*?)\)\((.*?)\).*;")
name=None
idx=0
VMTs={}
with open(infile,"r") as infh:
for line in infh:
line=line.strip()
interf=re_interface.match(line)
meth=re_method.match(line)
if interf:
idx=0
name="VMT_"+"_".join([name for name in interf.groups()[0].split(", ") if name!="IUnknown"])
VMTs[name]={}
if meth:
meth_name,meth_args=meth.groups()
meth_name=meth_name.split(",")[-1].strip()
VMTs[name][meth_name]=idx
idx+=1
with open(outfile,"w") as ofh:
for name in sorted(VMTs.keys()):
print(f"namespace {name} {{",file=ofh)
for method,idx in sorted(VMTs[name].items(),key=lambda v:v[1]):
print(f" const size_t m_{method} = {idx};",file=ofh)
print("}",file=ofh)