Module:zh-dial-syn
Appearance
- පහත දැක්වෙන උපදෙස්, Module:zh-dial-syn/documentation හි පිහිටා ඇත. Module:zh-dial-syn/documentation]]. [සංස්කරණය]
- ප්රයෝජනවත් සබැඳි: උප පිටු ලැයිස්තුව • සබැඳි • transclusions • testcases • sandbox
Chinese dialectal synonyms module. See {{zh-dial}}
.
local export = {}
local m_links = require("Module:links")
local zh = require("Module:languages").getByCode("zh")
local variety_list = {
"Classical", "Formal", "Taxonomic",
"Mandarin", "Cantonese", "Gan", "Hakka", "Huizhou", "Jin", "Jiuxing Yumin",
"Northern Min", "Eastern Min", "Southern Min", "Puxian Min", "Central Min", "Shaojiang Min", "Zhongshan Min",
"Southern Pinghua", "Northern Pinghua", "Shehua", "Waxiang", "Wu", "Xiang"
}
local variety_colour = {
["Classical"] = "FAF0F2",
["Formal"] = "FAF0F2",
["Taxonomic"] = "FAF0F2",
["Mandarin"] = "FAF5F0",
["Cantonese"] = "F0F5FA",
["Gan"] = "F0FAF3",
["Hakka"] = "FAF0F6",
["Huizhou"] = "FAF9F0",
["Jin"] = "FAF5F0",
["Jiuxing Yumin"] = "FAF0FE",
["Northern Min"] = "F7FAF0",
["Eastern Min"] = "F7FAF0",
["Southern Min"] = "F7FAF0",
["Puxian Min"] = "F7FAF0",
["Central Min"] = "F7FAF0",
["Shaojiang Min"] = "F7FAF0",
["Zhongshan Min"] = "F7FAF0",
["Southern Pinghua"]= "F0F5FA",
["Northern Pinghua"]= "F0F5FA",
["Shehua"] = "FAF0F6",
["Waxiang"] = "F0FAF6",
["Wu"] = "F4F0FA",
["Xiang"] = "F0F2FA",
}
local special_note = {
["Classical"] = "[[w:Classical Chinese|Classical Chinese]]",
["Formal"] = "Formal <small>([[w:Written vernacular Chinese|Written Standard Chinese]])</small>",
["Taxonomic"] = "Taxonomic name",
}
function export.main(frame)
local data = {}
local args = frame:getParent().args
local pagename = mw.title.getCurrentTitle().text
local target_page = args[1] or pagename
local resource_page = "Module:zh/data/dial-syn/" .. target_page
local m_syndata
if mw.title.new(resource_page).exists then
m_syndata = require(resource_page).list
else
return frame:expandTemplate{ title = "Template:zh-dial/uncreated", args = { target_page } }
end
local ordered_list = {}
--allow alternative title linking for sum-of-parts tables
local title = m_syndata["title"] and m_syndata["title"] ~= "" and m_syndata["title"] or target_page
local main_title = m_links.full_link( { term = title:gsub("[0-9%-]", "") .. "//", lang = zh, tr = "-" } )
local syn_table = { [=[
<div class="NavFrame" style="border:0px; max-width: 40em; text-align:center;"><div class="NavHead" style="font-size:105%; border:1px solid #aaaaaa; margin-left:-1px; background-color:#CCCCFF; text-align:center;" cellpadding="3">Dialectal synonyms of ]=] ..
main_title .. ' (“' .. m_syndata["meaning"] .. '”) ' ..
"[[Template:zh-dial-map/" .. target_page .. '|<small>[map]</small>]]\n' .. [=[</div><div class="NavContent">
{| class="wikitable" style="margin:0; text-align:center; width: 100%"
|-
! style="background:#E8ECFA" | Variety
! style="background:#E8ECFA" | Location
! style="background:#E8ECFA" | Words]=] .. [=[
<div style="float: right; clear: right; font-size:60%"><span class="plainlinks">[]=] ..
tostring(mw.uri.fullUrl("Module:zh/data/dial-syn/" .. target_page, { ["action"] = "edit" })) ..
' edit]</span></div>' }
local note = m_syndata["note"]
if m_syndata["Formal"][1] == "" then
data["Formal"] = { target_page }
elseif m_syndata["Formal"][1] == "-" then
data["Formal"] = nil
else
data["Formal"] = m_syndata["Formal"]
end
local variety_count = {}
for i, v in pairs(variety_list) do
variety_count[v] = 0
end
for i, val in pairs(m_syndata) do
if i ~= "title" and i ~= "meaning" and i ~= "note" and i ~= "Formal" then
data[i] = data[i] or m_syndata[i]
end
end
local last = 0
for location, synonym_set in pairs(data) do
if synonym_set[1] ~= "" then
local formatted_synonyms = {}
for i, synonym in ipairs(synonym_set) do
local synonym_note = mw.text.split(synonym, ":")
local synonym_etym = mw.text.split(synonym_note[1], "_")
local syn, etym, note = synonym_etym[1], synonym_etym[2], synonym_note[2]
local synonym_link = m_links.full_link( {
term = syn .. (etym and string.format("#Etymology %s", etym) or "") .. "//",
alt = etym and (syn .. string.format("<sub>%s</sub>", etym)) .. "//",
lang = zh,
tr = "-"
} )
if note == "GT" then
require('Module:debug/track')("zh-dial-GT")
end
note = note and ' <span style="font-size:60%"><i>' .. note .. '</i></span>' or ""
table.insert(formatted_synonyms, synonym_link .. note)
end
local location_data = mw.loadData("Module:zh/data/dial")[location] or error("No data for the location " .. location .. "!")
local location_name = (location_data.english or location):gsub("(%(.*%))", "<small>%1</small>")
local location_link = location_data.link or location_name
local variety = location_data.group
variety_count[variety] = variety_count[variety] + 1
ordered_list[location_data.order] = { variety, location_name, location_link, formatted_synonyms }
last = location_data.order > last and location_data.order or last
end
end
local current_variety = ''
local colour = ''
-- do not use `for _, point_data in ordered_list do`
-- as there are gaps in ordered_list
for i = 1, last do
if ordered_list[i] then
local point_data = ordered_list[i] --if some time in the future we have a lot of point_data then move this line before the if
local variety = point_data[1]
table.insert(syn_table, "\n|-")
if variety ~= current_variety then
current_variety = variety
colour = variety_colour[current_variety]
table.insert(syn_table, "\n!rowspan=" .. variety_count[variety] .. (special_note[variety] and " colspan=2" or "") ..
' style="background:#' .. colour .. '"| ' .. (special_note[variety] or variety))
end
table.insert(syn_table, ((point_data[2] and not special_note[variety]) and ('\n|style="background:#' .. colour .. '"| ' ..
'[[w:' .. point_data[3] .. '|' .. point_data[2] .. ']]') or '') ..
'\n|style="background:#' .. colour .. '"| ' ..
table.concat(point_data[4], ", "))
end
end
if note and note ~= "" then
table.insert(syn_table, '\n|-\n! style="background:#FFF7FB; padding-top:5px; padding-bottom: 5px" | ' ..
"<small>Note</small>\n| colspan=2|<small><i>" .. note .. "</i></small>")
end
table.insert(syn_table, '\n|}</div></div>')
return table.concat(syn_table, "")
end
return export