模組:Families/data/hierarchy
Arai-Samaia (paa-asa)
|
└───Left May (qfa-mal) |
Arnhem (aus-arn)
|
└───Gunwinyguan (aus-gun) |
Harákmbut-Katukinan (sai-hkt)
|
├───Harákmbut (sai-har) └─── Katukinan (sai-ktk) |
Hokan (hok)
|
├───Jicaquean (nai-jcq) ├─── Pakawan (nai-pak) ├─── Shastan (nai-shs) ├─── Tequistlatecan (nai-tqn) └─── 波莫語族 (nai-pom) |
Mataco-Guaicuru (sai-mgc)
|
├───Guaicuruan (sai-guc) └─── Matacoan (sai-mtc) |
Pano-Tacanan (sai-pat)
|
├───Panoan (sai-pan) └─── Tacanan (sai-tac) |
Plateau Penutian (nai-plp)
|
└───Sahaptian (nai-shp) |
Yok-Utian (nai-you)
|
├───Utian (nai-utn) └─── Yokuts (yok) |
亞非語系 (afa)
| ||||||||||||||||||||||
├───
├───
|
加勒比語族 (sai-car)
| ||||
├───
└─── |
北高加索語系 (ccn)
| ||||||||||||||
|
南亞語系 (aav)
| ||||||||
├─── |
南高加索語系 (ccs)
| ||
|
印歐語系 (ine)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
├───亞美尼亞語族 (hyx)
├───
├───
└─── |
圖皮語系 (tup)
|
└───圖皮-瓜拉尼語族 (tup-gua) |
壯侗語系 (qfa-tak)
| ||||||||||
├───
└─── |
大奇布查語系 (qfa-mch)
|
├───Misumalpan (nai-min) └─── 奇布查語族 (cba) |
大安達曼語系 (qfa-adm)
|
├───中部大安達曼語族 (qfa-adc) ├─── 北部大安達曼語族 (qfa-adn) └─── 南部大安達曼語族 (qfa-ads) |
尼日爾-剛果語系 (nic)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
├───Ijoid (ijo) ├─── Katloid (nic-ktl)
├───
|
尼羅-撒哈拉語系 (ssa)
| ||||||||||||||||||||||||
├───Koman (ssa-kom) ├─── Kuliak (ssa-klk)
├───
└─── |
巴布亞灣語支 (paa-pag)
|
└───Kutubuan (paa-kut) |
帕馬-恩永甘語系 (aus-pam)
| ||
├───Arandic (aus-rnd) ├─── Dyirbalic (aus-dyb) ├─── Karnic (aus-kar) ├─── Paman (aus-pmn) ├─── Yidinyic (aus-yid) ├─── Yolngu (aus-yol) ├─── 中新南威爾士語族 (aus-cww) ├─── 尤因-庫里克語族 (aus-yuk)
|
德內-葉尼塞語門 (qfa-dny)
| ||||||||
|
愛斯基摩-阿留申語系 (esx)
| ||
|
手語(sgn)
|
├───德國手語語族(sgn) ├─── 日本手語語族(sgn) └─── 法國手語語族(sgn) |
日本-琉球語系 (jpx)
|
└───琉球語族 (jpx-ryu) |
易洛魁語系 (iro)
|
└───北易洛魁語族 (iro-nor) |
楚科奇-堪察加語系 (qfa-cka)
|
└───楚科奇語族 (qfa-ckn) |
歐托-曼格語系 (omq)
| ||||||||
├───奇南特克語族 (omq-chi)
├───
└─── |
滿-通古斯語系 (tuw)
|
├───滿語支 (tuw-jrc) ├─── 烏德蓋語支 (tuw-udg) ├─── 赫哲語支 (tuw-nan) └─── 鄂溫語支 (tuw-ewe) |
漢藏語系 (sit)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
├───Ao (sit-aao)
├───
├───
├───
├───
├───
├───
├─── |
烏拉爾語系 (urj)
| ||||
├───彼爾姆語支 (urj-prm)
├───
└─── |
熱語門 (sai-mje)
| ||||
|
猶他-阿茲特克語系 (azc)
| ||
├─── |
科伊-科瓦迪語系 (khi-kkw)
| ||
|
突厥語族 (trk)
| ||||
├───
|
苗瑤語族 (hmx)
|
├───瑤語支 (hmx-mie) └─── 苗語支 (hmn) |
蘇-卡托巴語系 (nai-sca)
| ||||
├───卡托巴語族 (nai-cat)
|
西巴布亞語支 (paa-wpa)
|
├───Sentani (paa-sen) └─── 北哈馬黑拉語支 (paa-nha) |
跨新幾內亞語系 (ngf)
|
├───Kainantu-Goroka (paa-kag) ├─── Madang (ngf-mad) ├─── Ok (ngf-okk) ├─── 南多貝拉伊語族 (ngf-sbh) └─── 菲尼斯特雷語族 (ngf-fin) |
達羅毗荼語系 (dra)
| ||||||||||||||||||||||||
|
阿拉瓦克語族 (awd)
|
├───Nawiki (awd-nwk) └─── 泰諾-阿拉瓦克語支 (awd-taa) |
阿爾吉克語系 (aql)
| ||||
|
鮮卑-蒙古語系 (qfa-xgs)
| ||||||
├───旁蒙古語族 (qfa-xgx)
|
local p = {}
local fam = mw.loadData("Module:families/data")
local function format(code)
if code == "sgn" then
return "<code>[[:Category:手語|手語<span style=\"color:green;\">(sgn)</span>]]</code>"
elseif code == "sgn-fsl" then
return "<code>[[:Category:法國手語語族|法國手語語族<span style=\"color:green;\">(sgn)</span>]]</code>"
elseif code == "sgn-gsl" then
return "<code>[[:Category:德國手語語族|德國手語語族<span style=\"color:green;\">(sgn)</span>]]</code>"
elseif code == "sgn-jsl" then
return "<code>[[:Category:日本手語語族|日本手語語族<span style=\"color:green;\">(sgn)</span>]]</code>"
else
return "<code>[[:Category:" .. fam[code][1] .. "|" .. fam[code][1] .. " <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))[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