Files
leonwww/flumi/Scripts/Utils/Lua/Function.gd

73 lines
2.2 KiB
GDScript

class_name LuaFunctionUtils
extends RefCounted
# Core Lua handler functions that extend Lua functionality
static func table_tostring_handler(vm: LuauVM) -> int:
vm.luaL_checktype(1, vm.LUA_TTABLE)
var table_string = LuaPrintUtils.table_to_string(vm, 1)
vm.lua_pushstring(table_string)
return 1
static func setup_gurt_api(vm: LuauVM, lua_api, dom_parser: HTMLParser) -> void:
# override global print
# This makes print() behave like gurt.log()
vm.lua_pushcallable(LuaPrintUtils.lua_print, "print")
vm.lua_setglobal("print")
# Add table.tostring utility
vm.lua_getglobal("table")
if vm.lua_isnil(-1):
vm.lua_pop(1)
vm.lua_newtable()
vm.lua_setglobal("table")
vm.lua_getglobal("table")
vm.lua_pushcallable(LuaFunctionUtils.table_tostring_handler, "table.tostring")
vm.lua_setfield(-2, "tostring")
vm.lua_pop(1) # Pop table from stack
vm.lua_newtable()
vm.lua_pushcallable(LuaPrintUtils.lua_print, "gurt.log")
vm.lua_setfield(-2, "log")
vm.lua_pushcallable(lua_api._gurt_select_handler, "gurt.select")
vm.lua_setfield(-2, "select")
vm.lua_pushcallable(lua_api._gurt_select_all_handler, "gurt.select_all")
vm.lua_setfield(-2, "select_all")
vm.lua_pushcallable(lua_api._gurt_create_handler, "gurt.create")
vm.lua_setfield(-2, "create")
vm.lua_pushcallable(lua_api._gurt_set_timeout_handler, "gurt.set_timeout")
vm.lua_setfield(-2, "set_timeout")
vm.lua_pushcallable(lua_api._gurt_clear_timeout_handler, "gurt.clear_timeout")
vm.lua_setfield(-2, "clear_timeout")
# Add body element access
var body_element = dom_parser.find_first("body")
if body_element:
vm.lua_newtable()
vm.lua_pushstring("body")
vm.lua_setfield(-2, "_element_id")
# NOTE: same code as add_element_methods, but lazy to handle body.xxxx prop
vm.lua_pushcallable(lua_api._element_set_text_handler, "body.set_text")
vm.lua_setfield(-2, "set_text")
vm.lua_pushcallable(lua_api._element_get_text_handler, "body.get_text")
vm.lua_setfield(-2, "get_text")
vm.lua_pushcallable(lua_api._body_on_event_handler, "body.on")
vm.lua_setfield(-2, "on")
vm.lua_pushcallable(lua_api._element_append_handler, "body.append")
vm.lua_setfield(-2, "append")
vm.lua_setfield(-2, "body")
vm.lua_setglobal("gurt")