Files
aux-addon-ClassicAPI/libs/inspect.lua
T
Manuel Simon Hirsig fcdbe9cb2c module refactoring
2016-10-14 02:25:37 +02:00

77 lines
1.4 KiB
Lua

local format_key, format_value, print, print_pair, print_table
function print(msg)
DEFAULT_CHAT_FRAME:AddMessage(msg, 1, 0, 0)
end
function format_key(k)
return type(k) == 'string' and k or '[' .. tostring(k) .. ']'
end
function format_value(v)
return type(v) == 'string' and '"' .. v .. '"' or tostring(v)
end
function print_table(t, depth)
for i = 1, getn(t) do
print_pair(i, t[i], depth)
end
for k, v in t do
if type(k) ~= 'number' or k < 1 or k > getn(t) then
print_pair(k, v, depth)
end
end
end
local max_depth
function print_pair(k, v, depth)
local padding = strrep(' ', depth * 4)
print(padding .. format_key(k) .. ' = ' .. format_value(v))
if type(v) == 'table' then
if next(v) then
print(padding .. '{')
if depth == max_depth then
print(padding .. ' ...')
else
print_table(v, depth + 1)
end
print(padding .. '}')
end
end
end
function inspect(_, ...)
local n = arg.n
arg.n = nil
table.setn(arg, n)
max_depth = max_depth or 2
print_table(arg, 0)
max_depth = nil
return unpack(arg)
end
local function setting(v)
if type(v) == 'number' then
max_depth = v
elseif type(v) == 'function' then
print('#' .. v())
else
print('#' .. v)
end
end
local mt = {__metatable=false, __call=inspect, __div=inspect}
function mt:__index(key)
setting(key)
return self
end
function mt:__newindex(key, value)
setting(key)
self(value)
return self
end
p = setmetatable({}, mt)