Module:Sandbox/Wnt/DisplayLuaTableContents

local p={} local debuglog = "" function p.flat(t) local todo = {t} local pointer = 1 local flat = {} local marked = {} marked[t] = true while todo[pointer] do		for i, j in pairs(todo[pointer]) do		   if ((type(j) == table) and (not marked[j])) then debuglog = debuglog .. "marking" .. tostring(j) marked[j] = true table.insert(todo, j)		   end if (not flat[i]) then debuglog = debuglog .. "new item" .. tostring(i) flat[i] = {j = true} else if (not flat[i][j]) then flat[i][j] = true end end end pointer = pointer + 1 end debuglog = debuglog .. tostring(#flat) return flat end

function p.tostring(t, delimiter) if not delimiter then delimiter = "" end local flat = p.flat(t) local outarray = {} for i, j in pairs(flat) do debuglog = debuglog .. tostring(i) .. tostring(j) local kk = {} for k in pairs(j) do			table.insert(kk, k)		end table.insert(outarray, table.concat(kk, delimiter)) end return table.concat(outarray, delimiter) end

function p.demo(frame) local a = {j=1, 2, 3} table.insert(a,a) -- a[a] = a -- (this may be just too crazy; getting "attempt to call a table value") return p.tostring(a)..debuglog end function p.main(frame) local args=frame.args local pargs=frame.getParent(frame) local dispvar="mw" if pargs then dispvar=pargs.dispvar or pargs[1] or dispvar end if args then dispvar=args.dispvar or args[1] or dispvar end local base=_G[dispvar] local novar, containssomething if base then else base={};novar=yes end local output="Contents of the array '''" .. tostring(dispvar) .. "''':"  if novar then output = output .. " nil ." end local ns=0 local count=0 for i,j in pairs(base) do     containssomething="yes" output=output .. " mw." .. tostring (i) .. ":" .. tostring(j) if tostring(j)~= "table" then j={} end for a,b in pairs(j) do     output=output .. " mw." .. tostring(i) .. "." .. tostring(a) .. ":" .. tostring(b) if tostring(b)~="table" then b={} end for x,y in pairs(b) do     output=output .. " mw." .. tostring(i) .. "." .. tostring(a) .. "." .. tostring(x) .. ":" .. tostring(y) if tostring(y)~="table" then y={} end for w,z in pairs(y) do         output=output .. " -->" .. tostring(w) .. ":" .. tostring(z) if tostring(z)~="table" then z={} end for u,v in pairs(z) do               output=output .. " ->" .. tostring(u) .. ":" .. tostring(v) end end end end end --local getc=mw.title.getcontent --output=output .. " P.S.: mw.title.getcontent is:" .. tostring(getc) --if tostring(getc) == "function" then output = output .. " " .. tostring (getc(mw.title)) end if containssomething then else output = output .. " No pairs(" .. tostring(dispvar) .. ") found!" end return output end return p