From ac4a2f13c07f6166177b2ae1bd7ad41c80fd64b3 Mon Sep 17 00:00:00 2001 From: sonoro1234 Date: Thu, 19 Jul 2018 11:14:26 +0200 Subject: [PATCH] add typedefs_dict --- generator/generated/typedefs_dict.json | 1 + generator/generated/typedefs_dict.lua | 40 ++++++++++++++++++++++++++ generator/generator.lua | 29 +++++++++++++++---- 3 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 generator/generated/typedefs_dict.json create mode 100644 generator/generated/typedefs_dict.lua diff --git a/generator/generated/typedefs_dict.json b/generator/generated/typedefs_dict.json new file mode 100644 index 0000000..dbe277d --- /dev/null +++ b/generator/generated/typedefs_dict.json @@ -0,0 +1 @@ +{"ImDrawCornerFlags":"int","ImWchar":"unsigned short","ImGuiColumnsFlags":"int","ImGuiTextEditCallback":"int(*)(ImGuiTextEditCallbackData *data);","ImGuiTreeNodeFlags":"int","ImGuiFocusedFlags":"int","ImGuiSizeCallback":"void(*)(ImGuiSizeCallbackData* data);","ImU64":"unsigned long long","ImS64":"signed long long","ImDrawListFlags":"int","ImGuiBackendFlags":"int","ImGuiMouseCursor":"int","ImDrawIdx":"unsigned short","ImGuiColorEditFlags":"int","ImDrawCallback":"void(*)(const ImDrawList* parent_list,const ImDrawCmd* cmd);","const_iterator":"const value_type*","ImGuiDir":"int","ImGuiSelectableFlags":"int","value_type":"T","ImGuiCond":"int","ImU32":"unsigned int","ImS32":"signed int","ImGuiDragDropFlags":"int","ImGuiID":"unsigned int","ImGuiNavInput":"int","ImGuiCol":"int","ImTextureID":"void*","ImGuiStyleVar":"int","ImFontAtlasFlags":"int","ImGuiConfigFlags":"int","ImGuiDataType":"int","ImGuiInputTextFlags":"int","iterator":"value_type*","ImGuiKey":"int","ImGuiHoveredFlags":"int","ImGuiWindowFlags":"int","ImGuiComboFlags":"int"} \ No newline at end of file diff --git a/generator/generated/typedefs_dict.lua b/generator/generated/typedefs_dict.lua new file mode 100644 index 0000000..9de82b0 --- /dev/null +++ b/generator/generated/typedefs_dict.lua @@ -0,0 +1,40 @@ +local defs = {} +defs["ImDrawCornerFlags"] = "int" +defs["ImWchar"] = "unsigned short" +defs["ImGuiColumnsFlags"] = "int" +defs["ImGuiTextEditCallback"] = "int(*)(ImGuiTextEditCallbackData *data);" +defs["ImGuiTreeNodeFlags"] = "int" +defs["ImGuiFocusedFlags"] = "int" +defs["ImGuiSizeCallback"] = "void(*)(ImGuiSizeCallbackData* data);" +defs["ImU64"] = "unsigned long long" +defs["ImS64"] = "signed long long" +defs["ImDrawListFlags"] = "int" +defs["ImGuiBackendFlags"] = "int" +defs["ImGuiMouseCursor"] = "int" +defs["ImDrawIdx"] = "unsigned short" +defs["ImGuiColorEditFlags"] = "int" +defs["ImDrawCallback"] = "void(*)(const ImDrawList* parent_list,const ImDrawCmd* cmd);" +defs["const_iterator"] = "const value_type*" +defs["ImGuiDir"] = "int" +defs["ImGuiSelectableFlags"] = "int" +defs["value_type"] = "T" +defs["ImGuiCond"] = "int" +defs["ImU32"] = "unsigned int" +defs["ImS32"] = "signed int" +defs["ImGuiDragDropFlags"] = "int" +defs["ImGuiID"] = "unsigned int" +defs["ImGuiNavInput"] = "int" +defs["ImGuiCol"] = "int" +defs["ImTextureID"] = "void*" +defs["ImGuiStyleVar"] = "int" +defs["ImFontAtlasFlags"] = "int" +defs["ImGuiConfigFlags"] = "int" +defs["ImGuiDataType"] = "int" +defs["ImGuiInputTextFlags"] = "int" +defs["iterator"] = "value_type*" +defs["ImGuiKey"] = "int" +defs["ImGuiHoveredFlags"] = "int" +defs["ImGuiWindowFlags"] = "int" +defs["ImGuiComboFlags"] = "int" + +return defs \ No newline at end of file diff --git a/generator/generator.lua b/generator/generator.lua index c5eb65e..a109693 100644 --- a/generator/generator.lua +++ b/generator/generator.lua @@ -539,6 +539,7 @@ local function gen_structs_and_enums_table(cdefs) local enumnames = {} local enums_re = "^%s*enum%s+([^%s;]+)" local outtab = {structs={},enums={}} + local typedefs_dict = {} for i,line in ipairs(cdefs) do repeat -- simulating continue with break @@ -546,7 +547,23 @@ local function gen_structs_and_enums_table(cdefs) local linecom = line local line, comment = split_comment(line) line = clean_spaces(line) - + --typedefs dictionary + if line:match("typedef") then + local value,key = line:match("typedef%s+(.+)%s+([%w_]+);") + if key and value then + typedefs_dict[key] = value + else --try function typedef + local key = line:match("%(%*([%w_]+)%)%([^%(%)]*%)") + if key then + local linet = line + linet = linet:gsub("typedef ","") + linet = linet:gsub("%(%*("..key..")%)","(*)") + typedefs_dict[key] = linet + else + print(key,value,line) + end + end + end if line:match(namespace_re) then in_namespace = true end @@ -617,7 +634,7 @@ local function gen_structs_and_enums_table(cdefs) end until true end - return outtab + return outtab, typedefs_dict end @@ -632,6 +649,7 @@ local function gen_structs_and_enums(cdefs) local structnames = {} local innerstructs = {} local typedefs_table = {} + local outtab = {} -- Output the file --table.insert(outtab,"/////////////// BEGIN AUTOGENERATED SEGMENT\n") @@ -644,7 +662,7 @@ local function gen_structs_and_enums(cdefs) local desired_linelen = (linelen==0) and 0 or math.max(math.ceil(linelen/10)*10,40) local spaces_to_add = 0 --desired_linelen - linelen local linecom = line..string.rep(" ",spaces_to_add)..comment - + if line:match(namespace_re) then in_namespace = true end @@ -943,9 +961,9 @@ end save_data("./generated/definitions.lua",serializeTable("defs",pFP.defsT),"\nreturn defs") ----------save struct and enums lua table in structs_and_enums.lua for using in bindings -local structs_and_enums_table = gen_structs_and_enums_table(pSTP.lines) +local structs_and_enums_table,typedefs_dict = gen_structs_and_enums_table(pSTP.lines) save_data("./generated/structs_and_enums.lua",serializeTable("defs",structs_and_enums_table),"\nreturn defs") - +save_data("./generated/typedefs_dict.lua",serializeTable("defs",typedefs_dict),"\nreturn defs") --=================================Now implementations local iFP,iSTP @@ -1005,6 +1023,7 @@ end local json = require"json" save_data("./generated/definitions.json",json.encode(json_prepare(pFP.defsT))) save_data("./generated/structs_and_enums.json",json.encode(structs_and_enums_table)) +save_data("./generated/typedefs_dict.json",json.encode(typedefs_dict)) if iFP then save_data("./generated/impl_definitions.json",json.encode(json_prepare(iFP.defsT))) end