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 = {
-- READ BEFORE EDITING:
-- 1. You must use colours from the palette so the template looks
-- good in dark mode. See ]
-- 2. These colours are duplicated in ].
-- Make sure the two lists are kept in sync.
= "var(--wikt-palette-grey-scarlet-1, #FAF0EC)",
= "var(--wikt-palette-grey-scarlet-1, #FAF0EC)",
= "var(--wikt-palette-grey-scarlet-1, #FAF0EC)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-amber-1, #FCFAF5)",
= "var(--wikt-palette-grey-cyan-1, #EBF3F5)", -- doubled up with Tuhua
= "var(--wikt-palette-grey-teal-1, #EAF4EF)", -- doubled up with Shehua/Waxiang
= "var(--wikt-palette-grey-red-1, #FBEFF0)",
= "var(--wikt-palette-grey-yellow-1, #FCFAF5)",
= "var(--wikt-palette-grey-orange-1, #F9F0E8)",
= "var(--wikt-palette-grey-magenta-1, #F7EFFA)",
= "var(--wikt-palette-grey-green-1, #EDF4EA)",
= "var(--wikt-palette-grey-green-1, #EDF4EA)",
= "var(--wikt-palette-grey-green-1, #EDF4EA)",
= "var(--wikt-palette-grey-green-1, #EDF4EA)",
= "var(--wikt-palette-grey-green-1, #EDF4EA)",
= "var(--wikt-palette-grey-green-1, #EDF4EA)",
= "var(--wikt-palette-grey-green-1, #EDF4EA)",
= "var(--wikt-palette-grey-indigo-1, #F1F1FB)",
= "var(--wikt-palette-grey-indigo-1, #F1F1FB)",
= "var(--wikt-palette-grey-teal-1, #EAF4EF)", -- doubled up with Gan
= "var(--wikt-palette-grey-teal-1, #EAF4EF)",
= "var(--wikt-palette-grey-purple-1, #F5F0FC)",
= "var(--wikt-palette-grey-blue-1, #ECF2FC)",
= "var(--wikt-palette-grey-cyan-1, #EBF3F5)", -- doubled up with Cantonese
= "var(--wikt-palette-grey-cyan-1, #EBF3F5)",
}
local special_note = {
= "]",
= "Formal <small>(])</small>",
= "Taxonomic name",
}
function export.main(frame)
local data = {}
local args = frame:getParent().args
local pagename = mw.title.getCurrentTitle().text
local target_page = args 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 and m_syndata ~= "" and m_syndata or target_page
local main_title = m_links.full_link( { term = title:gsub("", "") .. "//", lang = zh, tr = "-" } )
local syn_table = { [=[
<div class="NavFrame" data-toggle-category="dialectal synonyms" style="border:0; max-width: 40em; text-align:center;">
<div class="NavHead" style="font-size:105%; border:1px solid var(--border-color-base, #a2a9b1); background-color: var(--wikt-palette-indigo-3, #e0defa); text-align:center; margin:0;">Dialectal synonyms of ]=] ..
main_title .. ' (“' .. m_syndata .. '”) ' ..
"]\n' .. [=[</div>
<div class="NavContent" style="border-top:0">
{| class="wikitable" style="margin:0; text-align:center; width: 100%; border-top: 0"
|-
! style="background:var(--wikt-palette-indigo-3, #e0defa); border-top:0" | Variety
! style="background:var(--wikt-palette-indigo-3, #e0defa); border-top:0" | Location
! style="background:var(--wikt-palette-indigo-3, #e0defa); border-top:0" | Words]=] .. [=[
<div style="float: right; clear: right; font-size:60%"><span class="plainlinks">=] ..
tostring(mw.uri.fullUrl("Module:zh/data/dial-syn/" .. target_page, { = "edit" })) ..
' edit]</span></div>' }
local note = m_syndata
if m_syndata == "" then
m_syndata = { target_page }
elseif m_syndata == "-" then
m_syndata = 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 = 0
end
for i = 1,#m_dialdata,1 do
loc = m_dialdata
cur = m_syndata or {""}
if cur == "" then
exists = false
else
exists = true
variety = loc.group
variety_count = variety_count + 1
end
end
for i = 1,#exists,1 do
if exists then
loc = m_dialdata
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) do
local synonym_note = mw.text.split(synonym, ":")
local synonym_etym = mw.text.split(synonym_note, "_")
local syn, etym, note = synonym_etym, synonym_etym, synonym_note
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
table.insert(syn_table, "\n!rowspan=" .. variety_count .. (special_note and " colspan=2" or "") ..
' style="background:' .. colour .. '"| ' .. (special_note or variety))
end
table.insert(syn_table,
((location_name and not special_note) and ('\n|style="background:' .. colour .. '"| ' ..
']') or '') ..
'\n|style="background:' .. colour .. '"| ' ..
table.concat(formatted_synonyms, ", "))
end
end
if note and note ~= "" then
table.insert(syn_table, '\n|-\n! style="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