Modul:families/data/hierarchy

Üdvözlöm, Ön a Modul:families/data/hierarchy szó jelentését keresi. A DICTIOUS-ban nem csak a Modul:families/data/hierarchy szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a Modul:families/data/hierarchy szót egyes és többes számban mondani. Minden, amit a Modul:families/data/hierarchy szóról tudni kell, itt található. A Modul:families/data/hierarchy szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. AModul:families/data/hierarchy és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

A modult a Modul:families/data/hierarchy/doc lapon tudod dokumentálni

local p = {}

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

local function format(code)
	if code == "sgn" then
		return "<code>]</code>"
	elseif code == "sgn-fsl" then
		return "<code>]</code>"
	elseif code == "sgn-gsl" then
		return "<code>]</code>"
	elseif code == "sgn-jsl" then
		return "<code>]</code>"
	else
		return "<code>.canonicalName .. " languages|" .. fam.canonicalName .. " <span style=\"color:green;\">(" .. code .. ")</span>]]</code>"
	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) .. "<br/>"
			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 = true
			table.insert(result, key)
		end
	end
	
	table.sort(result, function(a,b)
		return (fam or error(a)).canonicalName < (fam or error(b)).canonicalName
	end)
	
	local i = 2
	while i<#result do
		while fam] == fam] do
			table.remove(result,i)
		end
		i = i + 1
	end
	
	for i=1,#result do
		if is_table] then
			local name = result
			result = deep_sort(current])
			result.name = name
		else
			result = {name = result}
		end
	end
	
	return result
end

function p.show(frame)
	local children = {}
	
	for key,val in pairs(fam) do
		if val.family and val.family ~= "qfa-not" and val.family ~= "qfa-und" then
			if children then
				table.insert(children, key)
			else
				children = {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 then
					data = make_nested(children)
					table.insert(make_nil, key)
					children = nil
				end
			else
				data = make_nested(val)
			end
		end
		for _,key in ipairs(make_nil) do
			data = 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.name) .. "\n|-\n|"
		result = result .. dump(children, "  ")
		result = result .. "\n|}"
	end
	return frame:preprocess(result)
end

return p