From e41d6fb1e819ba536905062b702735bc5199ec0f Mon Sep 17 00:00:00 2001 From: sonoro1234 Date: Tue, 24 Feb 2026 10:23:36 +0100 Subject: [PATCH] constants work 1 --- cimgui.h | 1 - generator/cpp2ffi.lua | 4 +- generator/generator.lua | 9 +-- generator/output/constants.json | 124 ++++++++++++++++++++++++++++++++ generator/output/constants.lua | 124 ++++++++++++++++++++++++++++++++ 5 files changed, 256 insertions(+), 6 deletions(-) create mode 100644 generator/output/constants.json create mode 100644 generator/output/constants.lua diff --git a/cimgui.h b/cimgui.h index cc10a69..ca875a2 100644 --- a/cimgui.h +++ b/cimgui.h @@ -1856,7 +1856,6 @@ typedef int ImGuiWindowBgClickFlags; typedef int ImGuiWindowRefreshFlags; typedef ImS16 ImGuiTableColumnIdx; typedef ImU16 ImGuiTableDrawChannelIdx; -extern ImGuiContext* GImGui; typedef enum { ImDrawTextFlags_None = 0, ImDrawTextFlags_CpuFineClip = 1 << 0, diff --git a/generator/cpp2ffi.lua b/generator/cpp2ffi.lua index 3e7a656..d18f9ca 100644 --- a/generator/cpp2ffi.lua +++ b/generator/cpp2ffi.lua @@ -1624,6 +1624,7 @@ function M.Parser() --try to guess a compiler error assert(not errstr:match" error") os.remove(errfile) + self.constants = defines return defines end function par:do_parse() @@ -2917,7 +2918,8 @@ local function location(file,locpathT,defines,COMPILER,keepemptylines) if name and val then --while defines[val] do val = defines[val] end --if val:match(number_re) or val:match(hex_re) then - table.insert(defines,{name , val}) + --table.insert(defines,{name , val}) + defines[name] = val --end end end diff --git a/generator/generator.lua b/generator/generator.lua index ea43028..0927e19 100644 --- a/generator/generator.lua +++ b/generator/generator.lua @@ -39,10 +39,10 @@ if FREETYPE_GENERATION then end if COMPILER == "gcc" or COMPILER == "clang" or COMPILER == "zig cc" then - CPRE = COMPILER..[[ -E -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS -DIMGUI_API="" -DIMGUI_IMPL_API="" ]] .. CFLAGS + CPRE = COMPILER..[[ -E -dD -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS -DIMGUI_API="" -DIMGUI_IMPL_API="" ]] .. CFLAGS CTEST = COMPILER.." --version" elseif COMPILER == "cl" then - CPRE = COMPILER..[[ /E /DIMGUI_DISABLE_OBSOLETE_FUNCTIONS /DIMGUI_DEBUG_PARANOID /DIMGUI_API="" /DIMGUI_IMPL_API="" ]] .. CFLAGS + CPRE = COMPILER..[[ /E /d1PP /DIMGUI_DISABLE_OBSOLETE_FUNCTIONS /DIMGUI_DEBUG_PARANOID /DIMGUI_API="" /DIMGUI_IMPL_API="" ]] .. CFLAGS CTEST = COMPILER else print("Working without compiler ") @@ -398,7 +398,7 @@ local function parseImGuiHeader(header,names) parser.custom_function_post = custom_function_post parser.header_text_insert = header_text_insert local defines = parser:take_lines(CPRE..header,names,COMPILER) - + --cpp2ffi.prtable("defines",defines) return parser end --generation @@ -441,7 +441,7 @@ structs_and_enums_table.templates_done = parser1.templates_done 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/constants.lua",serializeTableF(parser1.constants)) ----------save fundefs in definitions.lua for using in bindings --DefsByStruct(pFP) set_defines(parser1.defsT) @@ -556,6 +556,7 @@ save_data("./output/definitions.json",json.encode(json_prepare(parser1.defsT),{d --structs_and_enums_table.templates_done = nil save_data("./output/structs_and_enums.json",json.encode(structs_and_enums_table)) save_data("./output/typedefs_dict.json",json.encode(parser1.typedefs_dict)) +save_data("./output/constants.json",json.encode(parser1.constants)) if parser2 then save_data("./output/impl_definitions.json",json.encode(json_prepare(parser2.defsT),{dict_on_empty={defaults=true}})) end diff --git a/generator/output/constants.json b/generator/output/constants.json new file mode 100644 index 0000000..2d9da3f --- /dev/null +++ b/generator/output/constants.json @@ -0,0 +1,124 @@ +{ + "DOCKING_HOST_DRAW_CHANNEL_BG": "0", + "DOCKING_HOST_DRAW_CHANNEL_FG": "1", + "IMGUI_CHECKVERSION()": "ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))", + "IMGUI_DEBUG_LOG(...)": "ImGui::DebugLog(__VA_ARGS__)", + "IMGUI_DEBUG_LOG_ACTIVEID(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_CLIPPER(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventClipper) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_DOCKING(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventDocking) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_ERROR(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventError) IMGUI_DEBUG_LOG(__VA_ARGS__); else g.DebugLogSkippedErrors++; } while (0)", + "IMGUI_DEBUG_LOG_FOCUS(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_FONT(...)": "do { ImGuiContext* g2 = GImGui; if (g2 && g2->DebugLogFlags & ImGuiDebugLogFlags_EventFont) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_INPUTROUTING(...)": "do{if (g.DebugLogFlags & ImGuiDebugLogFlags_EventInputRouting)IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_IO(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_NAV(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_POPUP(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_SELECTION(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_VIEWPORT(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventViewport) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_PRINTF(_FMT,...)": "printf(_FMT, __VA_ARGS__)", + "IMGUI_FONT_SIZE_MAX": "(512.0f)", + "IMGUI_FONT_SIZE_THRESHOLD_FOR_LOADADVANCEXONLYMODE": "(128.0f)", + "IMGUI_PAYLOAD_TYPE_COLOR_3F": "\"_COL3F\"", + "IMGUI_PAYLOAD_TYPE_COLOR_4F": "\"_COL4F\"", + "IMGUI_PAYLOAD_TYPE_WINDOW": "\"_IMWINDOW\"", + "IMGUI_TABLE_MAX_COLUMNS": "512", + "IMGUI_TEST_ENGINE_ITEM_ADD(_ID,_BB,_ITEM_DATA)": "((void)0)", + "IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS)": "((void)g)", + "IMGUI_VERSION": "\"1.92.6\"", + "IMGUI_VERSION_NUM": "19261", + "IMGUI_WINDOW_HARD_MIN_SIZE": "4.0f", + "IMSTB_TEXTEDIT_CHARTYPE": "char", + "IMSTB_TEXTEDIT_GETWIDTH_NEWLINE": "(-1.0f)", + "IMSTB_TEXTEDIT_STRING": "ImGuiInputTextState", + "IMSTB_TEXTEDIT_UNDOCHARCOUNT": "999", + "IMSTB_TEXTEDIT_UNDOSTATECOUNT": "99", + "IM_ALLOC(_SIZE)": "ImGui::MemAlloc(_SIZE)", + "IM_ARRAYSIZE": "IM_COUNTOF", + "IM_ASSERT(_EXPR)": "assert(_EXPR)", + "IM_ASSERT_USER_ERROR(_EXPR,_MSG)": "do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } } } while (0)", + "IM_ASSERT_USER_ERROR_RET(_EXPR,_MSG)": "do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return; } } while (0)", + "IM_ASSERT_USER_ERROR_RETV(_EXPR,_RETV,_MSG)": "do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return _RETV; } } while (0)", + "IM_BITARRAY_CLEARBIT(_ARRAY,_N)": "((_ARRAY[(_N) >> 5] &= ~((ImU32)1 << ((_N) & 31))))", + "IM_BITARRAY_TESTBIT(_ARRAY,_N)": "((_ARRAY[(_N) >> 5] & ((ImU32)1 << ((_N) & 31))) != 0)", + "IM_COL32(R,G,B,A)": "(((ImU32)(A)<=0 ? 0.5f : -0.5f)))", + "IM_FMTARGS(FMT)": "__attribute__((format(gnu_printf, FMT, FMT+1)))", + "IM_FMTLIST(FMT)": "__attribute__((format(gnu_printf, FMT, 0)))", + "IM_FREE(_PTR)": "ImGui::MemFree(_PTR)", + "IM_MEMALIGN(_OFF,_ALIGN)": "(((_OFF) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1))", + "IM_NEW(_TYPE)": "new(ImNewWrapper(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE", + "IM_NEWLINE": "\"\\r\\n\"", + "IM_PI": "3.14159265358979323846f", + "IM_PLACEMENT_NEW(_PTR)": "new(ImNewWrapper(), _PTR)", + "IM_PRIX64": "\"llX\"", + "IM_PRId64": "\"lld\"", + "IM_PRIu64": "\"llu\"", + "IM_ROUND(_VAL)": "((float)(int)((_VAL) + 0.5f))", + "IM_ROUNDUP_TO_EVEN(_V)": "((((_V) + 1) / 2) * 2)", + "IM_STATIC_ASSERT(_COND)": "static_assert(_COND, \"\")", + "IM_STRINGIFY(_EXPR)": "IM_STRINGIFY_HELPER(_EXPR)", + "IM_STRINGIFY_HELPER(_EXPR)": "#_EXPR", + "IM_TABSIZE": "(4)", + "IM_TRUNC(_VAL)": "((float)(int)(_VAL))", + "IM_UNICODE_CODEPOINT_INVALID": "0xFFFD", + "IM_UNICODE_CODEPOINT_MAX": "0xFFFF", + "IM_UNUSED(_VAR)": "((void)(_VAR))", + "ImAcos(X)": "acosf(X)", + "ImAtan2(Y,X)": "atan2f((Y), (X))", + "ImAtof(STR)": "atof(STR)", + "ImCeil(X)": "ceilf(X)", + "ImCos(X)": "cosf(X)", + "ImDrawCallback_ResetRenderState": "(ImDrawCallback)(-8)", + "ImFabs(X)": "fabsf(X)", + "ImFmod(X,Y)": "fmodf((X), (Y))", + "ImFontAtlasRectId_GenerationMask_": "(0x3FF00000)", + "ImFontAtlasRectId_GenerationShift_": "(20)", + "ImFontAtlasRectId_IndexMask_": "(0x0007FFFF)", + "ImFontAtlasRectId_Invalid": "-1", + "ImGuiKeyOwner_Any": "((ImGuiID)0)", + "ImGuiKeyOwner_NoOwner": "((ImGuiID)-1)", + "ImGuiKey_Aliases_BEGIN": "(ImGuiKey_Mouse_BEGIN)", + "ImGuiKey_Aliases_END": "(ImGuiKey_Mouse_END)", + "ImGuiKey_Gamepad_BEGIN": "(ImGuiKey_GamepadStart)", + "ImGuiKey_Gamepad_END": "(ImGuiKey_GamepadRStickDown + 1)", + "ImGuiKey_Keyboard_BEGIN": "(ImGuiKey_NamedKey_BEGIN)", + "ImGuiKey_Keyboard_END": "(ImGuiKey_GamepadStart)", + "ImGuiKey_LegacyNativeKey_BEGIN": "0", + "ImGuiKey_LegacyNativeKey_END": "512", + "ImGuiKey_Mouse_BEGIN": "(ImGuiKey_MouseLeft)", + "ImGuiKey_Mouse_END": "(ImGuiKey_MouseWheelY + 1)", + "ImGuiKey_NavGamepadActivate": "(g.IO.ConfigNavSwapGamepadButtons ? ImGuiKey_GamepadFaceRight : ImGuiKey_GamepadFaceDown)", + "ImGuiKey_NavGamepadCancel": "(g.IO.ConfigNavSwapGamepadButtons ? ImGuiKey_GamepadFaceDown : ImGuiKey_GamepadFaceRight)", + "ImGuiKey_NavGamepadInput": "ImGuiKey_GamepadFaceUp", + "ImGuiKey_NavGamepadMenu": "ImGuiKey_GamepadFaceLeft", + "ImGuiKey_NavGamepadTweakFast": "ImGuiKey_GamepadR1", + "ImGuiKey_NavGamepadTweakSlow": "ImGuiKey_GamepadL1", + "ImGuiKey_NavKeyboardTweakFast": "ImGuiMod_Shift", + "ImGuiKey_NavKeyboardTweakSlow": "ImGuiMod_Ctrl", + "ImGuiSelectionUserData_Invalid": "((ImGuiSelectionUserData)-1)", + "ImMemchr": "memchr", + "ImSin(X)": "sinf(X)", + "ImSqrt(X)": "sqrtf(X)", + "ImStrlen": "strlen", + "ImTextureID_Invalid": "((ImTextureID)0)" +} \ No newline at end of file diff --git a/generator/output/constants.lua b/generator/output/constants.lua new file mode 100644 index 0000000..eb6c4e0 --- /dev/null +++ b/generator/output/constants.lua @@ -0,0 +1,124 @@ +local t={ + DOCKING_HOST_DRAW_CHANNEL_BG="0", + DOCKING_HOST_DRAW_CHANNEL_FG="1", + ["IMGUI_CHECKVERSION()"]="ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))", + ["IMGUI_DEBUG_LOG(...)"]="ImGui::DebugLog(__VA_ARGS__)", + ["IMGUI_DEBUG_LOG_ACTIVEID(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_CLIPPER(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventClipper) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_DOCKING(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventDocking) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_ERROR(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventError) IMGUI_DEBUG_LOG(__VA_ARGS__); else g.DebugLogSkippedErrors++; } while (0)", + ["IMGUI_DEBUG_LOG_FOCUS(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_FONT(...)"]="do { ImGuiContext* g2 = GImGui; if (g2 && g2->DebugLogFlags & ImGuiDebugLogFlags_EventFont) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_INPUTROUTING(...)"]="do{if (g.DebugLogFlags & ImGuiDebugLogFlags_EventInputRouting)IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_IO(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_NAV(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_POPUP(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_SELECTION(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_VIEWPORT(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventViewport) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_PRINTF(_FMT,...)"]="printf(_FMT, __VA_ARGS__)", + IMGUI_FONT_SIZE_MAX="(512.0f)", + IMGUI_FONT_SIZE_THRESHOLD_FOR_LOADADVANCEXONLYMODE="(128.0f)", + IMGUI_PAYLOAD_TYPE_COLOR_3F="\"_COL3F\"", + IMGUI_PAYLOAD_TYPE_COLOR_4F="\"_COL4F\"", + IMGUI_PAYLOAD_TYPE_WINDOW="\"_IMWINDOW\"", + IMGUI_TABLE_MAX_COLUMNS="512", + ["IMGUI_TEST_ENGINE_ITEM_ADD(_ID,_BB,_ITEM_DATA)"]="((void)0)", + ["IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS)"]="((void)g)", + IMGUI_VERSION="\"1.92.6\"", + IMGUI_VERSION_NUM="19261", + IMGUI_WINDOW_HARD_MIN_SIZE="4.0f", + IMSTB_TEXTEDIT_CHARTYPE="char", + IMSTB_TEXTEDIT_GETWIDTH_NEWLINE="(-1.0f)", + IMSTB_TEXTEDIT_STRING="ImGuiInputTextState", + IMSTB_TEXTEDIT_UNDOCHARCOUNT="999", + IMSTB_TEXTEDIT_UNDOSTATECOUNT="99", + ["IM_ALLOC(_SIZE)"]="ImGui::MemAlloc(_SIZE)", + IM_ARRAYSIZE="IM_COUNTOF", + ["IM_ASSERT(_EXPR)"]="assert(_EXPR)", + ["IM_ASSERT_USER_ERROR(_EXPR,_MSG)"]="do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } } } while (0)", + ["IM_ASSERT_USER_ERROR_RET(_EXPR,_MSG)"]="do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return; } } while (0)", + ["IM_ASSERT_USER_ERROR_RETV(_EXPR,_RETV,_MSG)"]="do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return _RETV; } } while (0)", + ["IM_BITARRAY_CLEARBIT(_ARRAY,_N)"]="((_ARRAY[(_N) >> 5] &= ~((ImU32)1 << ((_N) & 31))))", + ["IM_BITARRAY_TESTBIT(_ARRAY,_N)"]="((_ARRAY[(_N) >> 5] & ((ImU32)1 << ((_N) & 31))) != 0)", + ["IM_COL32(R,G,B,A)"]="(((ImU32)(A)<