69 lines
1.3 KiB
Lua
69 lines
1.3 KiB
Lua
|
function color(index, str)
|
||
|
return "\x1b[" .. index .. "m" .. str .. "\x1b[00m"
|
||
|
end
|
||
|
|
||
|
function nocolor(index, str)
|
||
|
return str
|
||
|
end
|
||
|
|
||
|
function sp(count)
|
||
|
local spaces = ""
|
||
|
while count > 0 do
|
||
|
spaces = spaces .. " "
|
||
|
count = count - 1
|
||
|
end
|
||
|
return spaces
|
||
|
end
|
||
|
|
||
|
function print_rr(p, indent, c, wr)
|
||
|
local i = 0
|
||
|
local nl = ""
|
||
|
|
||
|
if type(p) == "table" then
|
||
|
wr(c("33", "(table)") .. " " .. c("34", tostring(p)) .. " [")
|
||
|
|
||
|
mt = getmetatable(p)
|
||
|
if mt ~= nil then
|
||
|
wr("\n" .. sp(indent+1) .. c("31", "METATABLE") .. ": ")
|
||
|
print_rr(mt, indent+1, c, wr)
|
||
|
end
|
||
|
|
||
|
for k,v in pairs(p) do
|
||
|
if i > 0 then
|
||
|
nl = "\n"
|
||
|
else
|
||
|
wr("\n")
|
||
|
end
|
||
|
wr(nl .. sp(indent+1))
|
||
|
if type(k) == "number" then
|
||
|
wr(c("32", tostring(k)))
|
||
|
else
|
||
|
wr("\"" .. c("32", tostring(k)) .. "\"")
|
||
|
end
|
||
|
wr(": ")
|
||
|
print_rr(v, indent+1, c, wr)
|
||
|
i = i + 1
|
||
|
end
|
||
|
if i == 0 then
|
||
|
wr(" " .. c("35", "/* empty */") .. " ]")
|
||
|
else
|
||
|
wr("\n" .. sp(indent) .. "]")
|
||
|
end
|
||
|
elseif type(p) == "string" then
|
||
|
wr(c("33", "(string)") .. " \"" .. c("34", p) .. "\"")
|
||
|
else
|
||
|
wr(c("33", "(" .. type(p) .. ")") .. " " .. c("34", tostring(p)))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function print_r(p, col, wr)
|
||
|
if col == nil then col = true end
|
||
|
if wr == nil then wr = function(msg) io.stdout:write(msg) end end
|
||
|
if col == true then
|
||
|
print_rr(p, 0, color, wr)
|
||
|
else
|
||
|
print_rr(p, 0, nocolor, wr)
|
||
|
end
|
||
|
wr("\n")
|
||
|
end
|