Module:families/data/hierarchy
< Module:families | data
- De neikommende dokumintaasje stiet op Module:families/data/hierarchy/dokumintaasje. [bewurkje]
Oernommen fan en:Module:families/data/hierarchy.
local p = {}
local fam = mw.loadData("Module:families/data")
local function format(code)
if code == "sgn" then
return "<code>[[:Category:Sign languages|sign <span style=\"color:green;\">(sgn)</span>]]</code>"
elseif code == "sgn-fsl" then
return "<code>[[:Category:French Sign Languages|French Sign Languages <span style=\"color:green;\">(sgn)</span>]]</code>"
elseif code == "sgn-gsl" then
return "<code>[[:Category:German Sign Languages|German Sign Languages <span style=\"color:green;\">(sgn)</span>]]</code>"
elseif code == "sgn-jsl" then
return "<code>[[:Category:Japanese Sign Languages|Japanese Sign Languages <span style=\"color:green;\">(sgn)</span>]]</code>"
else
return "<code>[[:Category:" .. fam[code].canonicalName .. " languages|" .. fam[code].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[key] = true
table.insert(result, key)
end
end
table.sort(result, function(a,b)
return (fam[a] or error(a)).canonicalName < (fam[b] or error(b)).canonicalName
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.family and val.family ~= "qfa-not" and val.family ~= "qfa-und" then
if children[val.family] then
table.insert(children[val.family], key)
else
children[val.family] = {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