پودمان: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 .. "<u>nil</u>." end
   local ns=0
   local count=0
   for i,j in pairs(base) do
      containssomething="yes"
      output=output .. "<br />mw." .. tostring (i) .. ":" .. tostring(j)
      if tostring(j)~= "table" then j={} end
   for a,b in pairs(j) do
      output=output .. "<br />mw." .. tostring(i) .. "." .. tostring(a) .. ":" .. tostring(b)
      if tostring(b)~="table" then b={} end
   for x,y in pairs(b) do
      output=output .. "<br />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 ..  "<br />-->" .. tostring(w) .. ":" .. tostring(z)
             if tostring(z)~="table" then z={} end
             for u,v in pairs(z) do
                output=output .. "<br />----->" .. tostring(u) .. ":" .. tostring(v)
             end
      end
   end
   end
   end
   --local getc=mw.title.getcontent
   --output=output .. "<br />P.S.: mw.title.getcontent is:" .. tostring(getc)
   --if tostring(getc) == "function" then output = output .. "<br />" .. tostring (getc(mw.title)) end
   if containssomething then else output = output .. "<br />''No pairs(" .. tostring(dispvar) .. ") found!''" end
   return output
   
end
 
return p