Module:User:ND381/sinosphere-dial-syn

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", "Min Bei", "Min Dong", "Min Nan", "Puxian Min", "Min Zhong", "Shaojiang Min", "Zhongshan Min", "Southern Pinghua", "Northern Pinghua", "Shehua", "Waxiang", "Wu", "Xiang" }

local variety_colour = { ["Classical"]		= "FAF0F2", ["Formal"]			= "FAF0F2", ["Taxonomic"]		= "FAF0F2", ["Mandarinic"]		= "FAF5F0", ["Cantonese"]		= "F0F5FA", ["Gan"]				= "FFF3E4", ["Hakka"]			= "E2FFE1", ["Huizhou"]			= "E3EFB5", ["Jin"]				= "F0F5FA", ["Jiuxing Yumin"]	= "F0F0F0", ["Min Bei"]			= "F7FAF0", ["Min Dong"]		= "F7FAF0", ["Min Nan"]			= "F7FAF0", ["Puxian Min"]		= "F7FAF0", ["Min Zhong"]		= "F7FAF0", ["Shaojiang Min"]	= "F7FAF0", ["Zhongshan Min"]	= "F7FAF0", ["Southern Pinghua"]= "E3E6F4", ["Northern Pinghua"]= "E3E6F4", ["Shehua"]			= "F0F0F0", ["Waxiang"]			= "F0F0F0", ["Wu"]				= "F8F4D2", ["Xiang"]			= "F9F0FA", ["Korean"]			= "F0E8EE", ["Japonic"]			= "DDF1EC", ["Vietnamese"]		= "F1DDE3", ["Zhuang"]			= "EEFBFF", }

local special_note = { ["Classical"] = "Classical Chinese", ["Formal"] = "Formal (Written Standard Chinese) ", ["Taxonomic"] = "Taxonomic name", }

function export.main(frame) local args = frame:getParent.args local pagename = mw.title.getCurrentTitle.text local target_page = args[1] or pagename local resource_page = "Module:User:ND381/sinosphere-dialsyn/" .. target_page local variety_data = mw.loadData("Module:User:ND381/sinosphere-dial-data") 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"] or "" if title == "" then title = target_page end m_syndata["title"] = nil local main_title = m_links.full_link( { term = mw.ustring.gsub(title, "[0-9%-]", ""), lang = zh } ) local syn_table = { [=[ Dialectal synonyms of ]=] .. main_title .. ' (“' .. m_syndata["meaning"] .. '”) ' .. " &#91;map&#93; \n' .. [=[ 	{| class="wikitable" style="margin:0; text-align:center; width: 100%" |-	! style="background:#E8ECFA" | Variety ! style="background:#E8ECFA" | Location ! style="background:#E8ECFA" | Words]=] .. [=[	 []=] ..		tostring(mw.uri.fullUrl("Module:zh/data/dial-syn/" .. target_page, { ["action"] = "edit" })) .. ' edit] ' } m_syndata["meaning"] = nil if m_syndata["note"] then note = m_syndata["note"] m_syndata["note"] = nil end if m_syndata["Formal"][1] == "" then m_syndata["Formal"] = { target_page } elseif m_syndata["Formal"][1] == "-" then m_syndata["Formal"] = nil end

local variety_count = {} for i, v in pairs(variety_list) do		variety_count[v] = 0 end for location, synonym_set in pairs(m_syndata) 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("%s", etym)),						lang = zh					} ) note = note and ' ''' .. note .. ''' ' or "" table.insert(formatted_synonyms, synonym_link .. note) end local location_data = variety_data[location] or error("No data for the location " .. location .. "!") local location_name = mw.ustring.gsub(location_data.english or location, "(%(.*%))", " %1 ") 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 } end end local current_variety = '' local colour = '' -- do not use `for _, point_data in ordered_list do` -- as there are gaps in ordered_list -- the order number should be between 1-9999 otherwise it won't show -- 9999 dialect points should be sufficient for i=1,9999 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 .. '"| ' .. 				 .. 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" | ' ..			" Note \n| colspan=2| " .. note .. " ") end table.insert(syn_table, '\n|} ') return table.concat(syn_table, "") end

return export