Module:zh-dial-syn
Appearance
- The following documentation is located at Module:zh-dial-syn/documentation. [edit]
- Useful links: subpage list • links • 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",
"Northeastern Mandarin", "Jilu Mandarin", "Jiaoliao Mandarin",
"Central Plains Mandarin", "Lanyin Mandarin",
"Southwestern Mandarin", "Jianghuai Mandarin",
"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", "Xiangnan Tuhua", "Yuebei Tuhua"
}
local variety_colour = {
["Classical"] = "FAF0F2",
["Formal"] = "FAF0F2",
["Taxonomic"] = "FAF0F2",
["Northeastern Mandarin"] = "FAF5F0",
["Jilu Mandarin"] = "FAF5F0",
["Jiaoliao Mandarin"] = "FAF5F0",
["Central Plains Mandarin"] = "FAF5F0",
["Lanyin Mandarin"] = "FAF5F0",
["Southwestern Mandarin"] = "FAF5F0",
["Jianghuai Mandarin"] = "FAF5F0",
["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",
["Xiangnan Tuhua"] = "F0F9FA",
["Yuebei Tuhua"] = "F0F9FA",
}
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
--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" data-toggle-category="dialectal synonyms" style="border:0px; max-width: 40em; text-align:center;"><div class="NavHead" style="font-size:105%; border:1px solid #aaaaaa; 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
m_syndata["Formal"] = { target_page }
elseif m_syndata["Formal"][1] == "-" then
m_syndata["Formal"] = nil
end
local m_dialdata = require("Module:zh/data/dial")
local variety = ""
local current_variety = ""
local location_name = ""
local location_link = ""
local colour = ""
local exists = {}
local variety_count = {}
local formatted_synonyms = {}
local loc = {}
local cur = {}
for i, v in pairs(variety_list) do
variety_count[v] = 0
end
for i = 1,#m_dialdata,1 do
loc = m_dialdata[i]
cur = m_syndata[loc.key] or {""}
if cur[1] == "" then
exists[i] = false
else
exists[i] = true
variety = loc.group
variety_count[variety] = variety_count[variety] + 1
end
end
for i = 1,#exists,1 do
if exists[i] then
loc = m_dialdata[i]
variety = loc.group
location_name = (loc.english or loc.key):gsub("(%(.*%))", "<small>%1</small>")
location_link = loc.link or loc.key
formatted_synonyms = {}
for i, synonym in ipairs(m_syndata[loc.key]) 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
table.insert(syn_table, "\n|-")
if variety ~= current_variety then
current_variety = variety
colour = variety_colour[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,
((location_name and not special_note[variety]) and ('\n|style="background:#' .. colour .. '"| ' ..
'[[w:' .. location_link .. '|' .. location_name .. ']]') or '') ..
'\n|style="background:#' .. colour .. '"| ' ..
table.concat(formatted_synonyms, ", "))
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