You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.3 KiB
Lua
104 lines
3.3 KiB
Lua
-- import addon read namespace from global env
|
|
local _G = _G
|
|
local Grichelde = _G.Grichelde
|
|
|
|
local type, print, pairs, select, unpack, format, rep, toString
|
|
= Grichelde.functions.type, Grichelde.functions.print, Grichelde.functions.pairs, Grichelde.functions.select, Grichelde.functions.unpack, Grichelde.functions.format, Grichelde.functions.rep, Grichelde.functions.toString
|
|
|
|
function Grichelde:Format(message, ...)
|
|
local msg = message
|
|
local l = select("#", ...)
|
|
if l > 0 then
|
|
-- sanitize nil values in vararg
|
|
local packed = { ... }
|
|
for i = 1, l do
|
|
packed[i] = toString(packed[i]) or "nil"
|
|
end
|
|
-- print("packed = ", packed)
|
|
-- self:tPrint(packed)
|
|
-- cannot assign unpacked to a vararg variable and print it for debug
|
|
msg = format(message, unpack(packed))
|
|
end
|
|
return msg or "nil"
|
|
end
|
|
|
|
function Grichelde:Print(...)
|
|
print(self:Format(...))
|
|
end
|
|
|
|
local function prefixedPrint(colorCode, prefix, endClose, ...)
|
|
print(colorCode .. prefix .. endClose .. ": " .. ...)
|
|
end
|
|
|
|
function Grichelde:PrefixedPrint(...)
|
|
prefixedPrint(self.COLOR_CODES.PREFIX, self.L.AddonName, self.COLOR_CODES.CLOSE, self:Format(...))
|
|
end
|
|
|
|
function Grichelde:DebugPrint(...)
|
|
if (self.debug) then
|
|
prefixedPrint(self.COLOR_CODES.GRAY, self.L.AddonName, self.COLOR_CODES.CLOSE, self:Format(...))
|
|
end
|
|
end
|
|
|
|
local function tLen(t)
|
|
local count = 0
|
|
for _ in pairs(t) do count = count + 1 end
|
|
return count
|
|
end
|
|
|
|
-- show strings differently to distinguish them from numbers
|
|
function Grichelde:PlainValue(val)
|
|
if val == nil then
|
|
return "<nil>"
|
|
elseif type(val) == "string" then
|
|
return '"' .. val .. '"'
|
|
elseif type(val) == "table" then
|
|
if tLen(val) > 0 then
|
|
return toString(val)
|
|
else
|
|
return "{}"
|
|
end
|
|
else
|
|
return toString(val)
|
|
end
|
|
end
|
|
|
|
--- Prints any value to default channel, do NOT return a string.
|
|
function Grichelde:tPrint(val, indent, known)
|
|
if (not self.debug) then return end
|
|
|
|
indent = indent or 0
|
|
known = known or {}
|
|
|
|
if val == nil then
|
|
print(rep(" ", indent) .. "<nil>")
|
|
elseif type(val) == "string" then
|
|
print(rep(" ", indent) .. "\"" .. val .. "\"")
|
|
elseif type(val) == "table" then
|
|
if tLen(val) > 0 then
|
|
for key, value in pairs(val) do
|
|
if value == nil then
|
|
print(rep(" ", indent) .. self:PlainValue(key) .. "= <nil>")
|
|
elseif type(value) == "table" then
|
|
print(rep(" ", indent) .. self:PlainValue(key) .. "= {")
|
|
if tLen(value) > 0 then
|
|
if not known[value] then
|
|
self:tPrint(value, indent + 4, known)
|
|
known[value] = true
|
|
else
|
|
print("<known table> " .. self:PlainValue(value))
|
|
end
|
|
end
|
|
print(rep(" ", indent) .. "}")
|
|
else
|
|
print(rep(" ", indent) .. self:PlainValue(key) .. " = " .. self:PlainValue(value))
|
|
end
|
|
end
|
|
else
|
|
print(rep(" ", indent) .. "{}")
|
|
end
|
|
else
|
|
print(rep(" ", indent) .. toString(val))
|
|
end
|
|
end
|