function getName(name)
if type(name) ~= "string" then
return ""
elseif string.match(name, '^[a-zA-z_][a-zA-Z0-9_]*$') then
return name .. " = "
end
return "['".. string.gsub(name, "'", "\\'") .. "'] = "
end
function serialize(val, name, depth)
depth = depth or ""
local prefix = depth .. getName(name)
if type(val) == "number" then
return prefix .. tostring(val)
elseif type(val) == "string" then
return prefix .. string.format("%q", val)
elseif type(val) == "boolean" then
return prefix .. (val and "true" or "false")
elseif type(val) == "nil" then
return prefix .. "nil"
elseif type(val) == "table" then
local tmp = prefix .. "{\n"
for k, v in pairs(val) do
tmp = tmp .. depth .. serialize(v, k, depth .. " ") .. ",\n"
end
return tmp .. depth .. "}"
end
return depth .. "\"[inserializeable datatype:" .. type(val) .. "]\""
end