mirror of
https://github.com/cimgui/cimgui.git
synced 2025-08-13 21:28:30 +01:00
generator.lua: add function to repair default values
This commit is contained in:
@@ -113,6 +113,7 @@ local function strsplit(str, pat)
|
|||||||
end
|
end
|
||||||
return t,t2
|
return t,t2
|
||||||
end
|
end
|
||||||
|
M.strsplit = strsplit
|
||||||
local function split_comment(line)
|
local function split_comment(line)
|
||||||
local comment = line:match("(%s*//.*)") --or ""
|
local comment = line:match("(%s*//.*)") --or ""
|
||||||
line = line:gsub("%s*//.*","")
|
line = line:gsub("%s*//.*","")
|
||||||
|
@@ -178,6 +178,77 @@ local function DefsByStruct(FP)
|
|||||||
FP.defsBystruct = structs
|
FP.defsBystruct = structs
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- function for repairing funcdefs default values
|
||||||
|
local function repair_defaults(defsT,str_and_enu)
|
||||||
|
local enumsvalues = {}
|
||||||
|
for k,enu in pairs(str_and_enu.enums) do
|
||||||
|
for i,v in ipairs(enu) do
|
||||||
|
assert(v.calc_value)
|
||||||
|
enumsvalues[v.name] = v.calc_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local function deleteOuterPars(def)
|
||||||
|
local w = def:match("^%b()$")
|
||||||
|
if w then
|
||||||
|
w = w:gsub("^%((.+)%)$","%1")
|
||||||
|
return w
|
||||||
|
else
|
||||||
|
return def
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local function CleanImU32(def)
|
||||||
|
def = def:gsub("%(ImU32%)","")
|
||||||
|
--quitar () de numeros
|
||||||
|
def = def:gsub("%((%d+)%)","%1")
|
||||||
|
def = deleteOuterPars(def)
|
||||||
|
local bb=cpp2ffi.strsplit(def,"|")
|
||||||
|
for i=1,#bb do
|
||||||
|
local val = deleteOuterPars(bb[i])
|
||||||
|
if val:match"<<" then
|
||||||
|
local v1,v2 = val:match("(%d+)%s*<<%s*(%d+)")
|
||||||
|
val = v1*2^v2
|
||||||
|
bb[i] = val
|
||||||
|
end
|
||||||
|
assert(type(bb[i])=="number")
|
||||||
|
end
|
||||||
|
local res = 0
|
||||||
|
for i=1,#bb do res = res + bb[i] end
|
||||||
|
return res
|
||||||
|
end
|
||||||
|
for k,defT in pairs(defsT) do
|
||||||
|
for i,def in ipairs(defT) do
|
||||||
|
for k,v in pairs(def.defaults) do
|
||||||
|
--do only if not a c string
|
||||||
|
local is_cstring = v:sub(1,1)=='"' and v:sub(-1,-1) =='"'
|
||||||
|
if not is_cstring then
|
||||||
|
if v:match"::" then --could be nested enum
|
||||||
|
local enumname = v:gsub("[%w:]-::([%w]+)","%1")
|
||||||
|
local ok,val = pcall(cpp2ffi.parse_enum_value,enumname,enumsvalues)
|
||||||
|
if ok then
|
||||||
|
def.defaults[k] = val
|
||||||
|
else
|
||||||
|
print("deleting default ",v)
|
||||||
|
def.defaults[k] = nil
|
||||||
|
end
|
||||||
|
elseif enumsvalues[v] then
|
||||||
|
def.defaults[k] = enumsvalues[v]
|
||||||
|
else
|
||||||
|
local ok,val = pcall(cpp2ffi.parse_enum_value,v,enumsvalues,true)
|
||||||
|
if ok then
|
||||||
|
def.defaults[k] = val
|
||||||
|
else
|
||||||
|
def.defaults[k] = def.defaults[k]:gsub("%(%(void%s*%*%)0%)","NULL")
|
||||||
|
if def.defaults[k]:match"%(ImU32%)" then
|
||||||
|
def.defaults[k] = CleanImU32(def.defaults[k])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
----------custom ImVector templates
|
----------custom ImVector templates
|
||||||
local table_do_sorted = cpp2ffi.table_do_sorted
|
local table_do_sorted = cpp2ffi.table_do_sorted
|
||||||
local function generate_templates(code,codeimpool,templates)
|
local function generate_templates(code,codeimpool,templates)
|
||||||
@@ -364,19 +435,17 @@ parser1:do_parse()
|
|||||||
save_data("./output/overloads.txt",parser1.overloadstxt)
|
save_data("./output/overloads.txt",parser1.overloadstxt)
|
||||||
cimgui_generation(parser1)
|
cimgui_generation(parser1)
|
||||||
|
|
||||||
----------save fundefs in definitions.lua for using in bindings
|
|
||||||
--DefsByStruct(pFP)
|
|
||||||
set_defines(parser1.defsT)
|
|
||||||
save_data("./output/definitions.lua",serializeTableF(parser1.defsT))
|
|
||||||
|
|
||||||
----------save struct and enums lua table in structs_and_enums.lua for using in bindings
|
----------save struct and enums lua table in structs_and_enums.lua for using in bindings
|
||||||
|
|
||||||
local structs_and_enums_table = parser1:gen_structs_and_enums_table()
|
local structs_and_enums_table = parser1:gen_structs_and_enums_table()
|
||||||
|
|
||||||
-----------------------
|
|
||||||
save_data("./output/structs_and_enums.lua",serializeTableF(structs_and_enums_table))
|
save_data("./output/structs_and_enums.lua",serializeTableF(structs_and_enums_table))
|
||||||
save_data("./output/typedefs_dict.lua",serializeTableF(parser1.typedefs_dict))
|
save_data("./output/typedefs_dict.lua",serializeTableF(parser1.typedefs_dict))
|
||||||
|
|
||||||
|
----------save fundefs in definitions.lua for using in bindings
|
||||||
|
--DefsByStruct(pFP)
|
||||||
|
set_defines(parser1.defsT)
|
||||||
|
repair_defaults(parser1.defsT, structs_and_enums_table)
|
||||||
|
save_data("./output/definitions.lua",serializeTableF(parser1.defsT))
|
||||||
|
|
||||||
--check every function has ov_cimguiname
|
--check every function has ov_cimguiname
|
||||||
-- for k,v in pairs(parser1.defsT) do
|
-- for k,v in pairs(parser1.defsT) do
|
||||||
|
Reference in New Issue
Block a user