32 lines
749 B
Lua
32 lines
749 B
Lua
local function quote(str, lvl)
|
|
--lvl = lvl or
|
|
local rp = "]"..(lvl or "").."]"
|
|
if string.match(str, rp) then
|
|
return quote(str, (lvl or "") .. "=")
|
|
end
|
|
|
|
return "["..(lvl or "").."["..str..rp
|
|
end
|
|
|
|
function serialize_lua_value(val)
|
|
if type(val) == "number" then
|
|
return tostring(val)
|
|
elseif type(val) == "string" then
|
|
-- TODO: use different quotes if ']]' appears in the value
|
|
return quote(val)
|
|
elseif type(val) == "table" then
|
|
local r = "{"
|
|
for k, v in pairs(val) do
|
|
r = r .. "[ "..serialize_lua_value(k).." ]="..serialize_lua_value(v)..","
|
|
end
|
|
return r .. "}"
|
|
elseif val == nil then
|
|
return "nil"
|
|
elseif val == false then
|
|
return "false"
|
|
elseif val == true then
|
|
return "true"
|
|
end
|
|
error("serialization failed")
|
|
end
|