1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| local function __tostring(value, indent, vmap) local str = '' indent = indent or '' vmap = vmap or {}
if (type(value) ~= 'table') then if (type(value) == 'string') then str = string.format("[[%s]]", value) else str = tostring(value) end else if type(vmap) == 'table' then if vmap[value] then return '('..tostring(value)..')' end vmap[value] = true end
local auxTable = {} local iauxTable = {} local iiauxTable = {} table.foreach(value, function(i, v) if type(i) == 'number' then if i == 0 then table.insert(iiauxTable, i) else table.insert(iauxTable, i) end elseif type(i) ~= 'table' then table.insert(auxTable, i) end end) table.sort(iauxTable)
str = str..'{\n' local separator = "" local entry = "\n" local barray = true local kk,vv table.foreachi (iauxTable, function (i, k) if i == k and barray then entry = __tostring(value[k], indent..' \t', vmap) str = str..separator..indent..' \t'..entry separator = ", \n" else barray = false table.insert(iiauxTable, k) end end) table.sort(iiauxTable)
table.foreachi (iiauxTable, function (i, fieldName)
kk = tostring(fieldName) if type(fieldName) == "number" then kk = '['..kk.."]" end entry = kk .. " = " .. __tostring(value[fieldName],indent..' \t',vmap)
str = str..separator..indent..' \t'..entry separator = ", \n" end) table.sort(auxTable)
table.foreachi (auxTable, function (i, fieldName)
kk = tostring(fieldName) if type(fieldName) == "number" then kk = '['..kk.."]" end vv = value[fieldName] entry = kk .. " = " .. __tostring(value[fieldName],indent..' \t',vmap)
str = str..separator..indent..' \t'..entry separator = ", \n" end)
str = str..'\n'..indent..'}' end
return str end
ccmlog = function(m,fmt,...) local args = {...} for k,arg in ipairs(args) do if type(arg) == 'table' or type(arg) == 'boolean' or type(arg) == 'function' or type(arg) == 'userdata' then args[k] = __tostring(arg) end end
args[#args+1] = "nil" args[#args+1] = "nil" args[#args+1] = "nil" local str = string.format("[%s]:"..fmt.." %s", m, unpack(args)) print(str)
local off = 1 local p = CCLOGWARN if m == 'error' then p = CCLOGERROR elseif m == 'warn' then p = CCLOGWARN end while off <= #str do local subStr = string.sub(str, off, off+1024) off = off + #subStr end end
|