Module:ar-dial-syn

local export = {} local m_links = require("Module:links") local m_scs = require("Module:scripts") local m_languages = require("Module:languages") local ar = m_languages.getByCode("ar")

--TODO separate classical, modern standard into different groups? local variety_list = { "special","Algerian","Andalusian","Baharna","Central Asian","Chadian","Cypriot","Dhofari","Egyptian","Gulf","Hassaniya","Hijazi","Libyan","Maltese","Moroccan","Najdi","North Levantine","North Mesopotamian","Omani","Shihhi","South Levantine","South Mesopotamian","Sudanese","Tunisian","Yemeni","Pidgins and creoles" }

--TODO rm, and actually make into proper lua --local iso_codes = { 'Algerian':'arq','Baharna':'abv','Chadian':'shu','Cypriot':'acy','Dhofari':'adf','Egyptian':'arz','Gulf':'afb','Hassaniya':'mey','Hijazi':'acw','Libyan':'ayl','Maltese':'mt','Moroccan':'ary','Najdi':'ars','North Levantine':'apc','North Mesopotamian':'ayp','Omani':'acx','Shihhi':'ssh','South Levantine':'ajp','Sudanese':'apd','Tunisian':'aeb','Juba':'pga','Nubi (Kenya)':'kcn','Nubi (Uganda)':'kcn'}

--TODO add colours local variety_colour={} --local variety_colour = { --"special","Algerian","Andalusian","Baharna","Central Asian","Chadian","Cypriot","Dhofari","Egyptian","Gulf","Hassaniya","Hijazi","Libyan","Maltese","Moroccan","Najdi","North Levantine","North Mesopotamian","Omani","Shihhi","South Levantine","South Mesopotamian","Sudanese","Tunisian","Yemeni","Pidgins and creoles" --}

--TODO needed? local special_note={} --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:ar/data/dial-syn/" .. target_page local variety_data = require("Module:ar/data/dial") local m_syndata if mw.title.new(resource_page).exists then m_syndata = require(resource_page).list else return frame:expandTemplate{ title = "Template:ar-dial/uncreated", args = { target_page } } end

local template = { ["special"]={}, ["Algerian"]={}, ["Andalusian"]={}, ["Baharna"]={}, ["Central Asian"]={}, ["Chadian"]={}, ["Cypriot"]={}, ["Dhofari"]={}, ["Egyptian"]={}, ["Gulf"]={}, ["Hassaniya"]={}, ["Hijazi"]={}, ["Libyan"]={}, ["Maltese"]={}, ["Moroccan"]={}, ["Najdi"]={}, ["North Levantine"]={}, ["North Mesopotamian"]={}, ["Omani"]={}, ["Shihhi"]={}, ["South Levantine"]={}, ["South Mesopotamian"]={}, ["Sudanese"]={}, ["Tunisian"]={}, ["Yemeni"]={}, ["Pidgins and creoles"]={} }

local main_title = mw.ustring.gsub(m_links.full_link( { term = target_page, lang = ar } ), "[0-9%-]", "") 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" | Location (in Arabic) ! style="background:#E8ECFA" | Words]=] .. [=[	 []=] ..	tostring(mw.uri.fullUrl("Module:ar/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 --TODO hm	--if m_syndata["Formal"][1] == "" then --m_syndata["Formal"] = { target_page } --elseif m_syndata["Formal"][1] == "-" then --m_syndata["Formal"] = nil --end

for location, synonym_set in pairs(m_syndata) do		if synonym_set[1] ~= "" then local formatted_synonyms = {} local location_data = variety_data[location] or error("No data for the location " .. location .. "!") local location_lang = m_languages.getByCanonicalName(location_data.group)or m_languages.getByCanonicalName(location_data.group..' Arabic') or ar			local location_sc = m_scs.getByCode(location_data.script,1>0)

for i, synonym in ipairs(synonym_set) do				local splat = mw.text.split(synonym, ':') --local synonym_note = mw.text.split(synonym, ":") --local synonym_etym = mw.text.split(synonym_note[1], "_") --local synonym_trsc = mw.text.split(synonym_etym[1], "|") --local syn, trsc, etym, note = synonym_trsc[1], synonym_trsc[2], synonym_etym[2], synonym_note[2] local syn, trsc, etym, note = splat[1], splat[2], splat[3], splat[4] --TODO: fancify error assert(m_scs.findBestScriptWithoutLang(syn):getCode == location_data.script, "Invalid script for term "..syn.." of lang "..location)

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)),					tr = trsc,					lang = location_lang,					sc = location_sc				} )

note = note and ' ''' .. note .. ''' ' or "" table.insert(formatted_synonyms, synonym_link .. note) end

local location_name = mw.ustring.gsub(location, "(%(.*%))", " %1 ") local location_name_ar = mw.wikibase.getLabelByLang(location_data.wikidata, 'ar') --TODO: s/link=""// in ar/data/dial script local location_link = location_data.link or mw.wikibase.getSitelink(location_data.wikidata, 'enwiki') or location --T-O-D-O: ar names table.insert(template[location_data.group],			{ location_data.order, location_name, location_name_ar, location_link, formatted_synonyms, location_lang }) end end

for _, variety in ipairs(variety_list) do		--TODO: tmp local colour = variety_colour[variety]or"F0F0FF" if #template[variety] > 0 then table.sort(template[variety], function(first, second) return first[1] < second[1] end) for i, point_data in ipairs(template[variety]) do				table.insert(syn_table, "\n|-") if i == 1 then table.insert(syn_table, "\n!rowspan=" .. #template[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 .. '"| ' .. point_data[3] ..				'\n|style="background:#' .. colour .. '"| ' ..				table.concat(point_data[5], ", ")) end 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