Module:families/data/hierarchy

local p = {}

local fam = mw.loadData("Module:families/data")

local function format(code) if code == "sgn" then return " " elseif code == "sgn-fsl" then return " " elseif code == "sgn-gsl" then return " " elseif code == "sgn-jsl" then return " " else return " " end end

local function dump(data, prefix) if type(data) == "string" then return format(data) else local result = "" local branch = "├───" local next_level = prefix .. "│　　　　"		local current = "" for i,val in ipairs(data) do			if i == #data then branch = "└───" next_level = prefix .. "　　　 　"			end if #val == 0 then result = result .. prefix .. branch .. dump(val.name) .. " "			else result = result .. "{| class=mw-collapsible style=border-collapse:collapse\n|" result = result .. prefix .. branch .. dump(val.name) result = result .. "\n|-\n|" result = result .. dump(val, next_level) result = result .. "\n|}\n" end end return result end end

local function deep_sort(current) local result = {} local is_table = {} for key,val in pairs(current) do		if type(key) == "number" then table.insert(result, val) else is_table[key] = true table.insert(result, key) end end table.sort(result, function(a,b)		return (fam[a] or error(a))[1] < (fam[b] or error(b))[1]	end) local i = 2 while i<#result do		while fam[result[i-1]] == fam[result[i]] do			table.remove(result,i) end i = i + 1 end for i=1,#result do		if is_table[result[i]] then local name = result[i] result[i] = deep_sort(current[result[i]]) result[i].name = name else result[i] = {name = result[i]} end end return result end

function p.show(frame) local children = {} for key,val in pairs(fam) do		if val[3] and val[3] ~= "qfa-not" and val[3] ~= "qfa-und" then if children[val[3]] then table.insert(children[val[3]], key) else children[val[3]] = {key} end end end local function make_nested(data) local make_nil = {} for key,val in pairs(data) do			if type(key) == "number" then if children[val] then data[val] = make_nested(children[val]) table.insert(make_nil, key) children[val] = nil end else data[key] = make_nested(val) end end for _,key in ipairs(make_nil) do			data[key] = nil end return data end children = make_nested(children) children = deep_sort(children) local result = "" for i=1,#children do result = result .. "\n\n\n{| class=mw-collapsible style=border-collapse:collapse\n|" .. format(children[i].name) .. "\n|-\n|" result = result .. dump(children[i], "　　") result = result .. "\n|}" end return frame:preprocess(result) end

return p