Module:siwa-noun/common: Difference between revisions

From Linguifex
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)

Latest revision as of 23:18, 9 September 2022



local gsub = mw.ustring.gsub

local export = {}

function export.lenition(word)
	--local word = frame:getParent().args[1] -- for testing
	local lenited = ""
	local v = "([aeiouyůõảẻỉỏủỷę·])"
	local lenition_patterns = {
	--geminated voiced stops
	["bb"] = "b", ["dd"] = "d", ["gg"] = "g", ["ġġ"] = "ġ",
	--long sonorants
	["gį"] = "į", ["mm"] = "m", ["ll"] = "l", ["nn"] = "n", ["rr"] = "r",
	--uvular stops
	["bġ"] = "p", ["pr"] = "p", ["dġ"] = "t", ["tr"] = "t",
	--glottalized stops
	["bm"] = "m", ["dn"] = "n", ["kn"] = "ng",
	--consonant clusters
	["dl"] = "l", ["([lr])pp"] = "%1p", ["([lr])tt"] = "%1t", ["([lrms])kk"] = "%1k",["ps"] = "bs", ["k([lvs])"] = "g%1",
	--voiced consonants (▫, arbitrary character to compute diphthongs further down)
	["vv"] = "ų", ["d([aảou])"] = "l%1", ["(.)[dġ]([ieůy])"] = "%1▫%2", [v.."[vųbhḥgd]"..v] = "%1▫%2", ["ġ([aou])"] = "vv%1", ["ġo̊"] = "vvo̊", 
	--Ci#
	["ri"] = "ṡi", ["nįi"] = "gįi", 	["hhį"] = "ṡ",
	--long voiceless consonants
	["ḍb"] = "p", ["ḍḍ"] = "hh", ["ḍg"] = "k",
	--semi-vowels
	["[ou]ų"] = "ů▫", ["ių"] = "y▫", ["[óú]ų"] = "ẻu▫", ["íų"] = "ỷ▫",
	}
	
	for regex, repl in pairs(lenition_patterns) do
		if word:match("·.*·") then
			lenited = gsub(word, "·" .. regex .. "·", repl, 1)
		else
			lenited = gsub(word, regex, repl, 1)
		end
		
		if lenited ~= word then return lenited end
	end
	
	return word
end

export.diphthongs = {
	["[aę]▫[aę]"] = "ả", ["e▫e"] = "ẻ", ["i▫i"] = "ỉ", ["u▫[yuů]"] = "ủ", ["[yů]▫u"] = "ủ",
	["a▫e"] = "ai", ["a▫o"] = "au", ["ę▫[uů]"] = "ay",
	["ę▫[ei]"] = "ei", ["ę▫o"] = "eu", 
	["e▫[aę]"] = "ia", ["e▫o"] = "io", ["i▫y"] = "iů",
	["[uo]▫e"] = "oi", ["o▫ů"] = "ou",
	["[yů]▫o"] = "uo", ["o▫o"] = "ỏ",
	["y▫y"] = "ỷ", ["ů▫ů"] = "ẻu",
	["ẻu▫i"] = "ůbi",
	["([ae])▫ů"] = "%1y", ["([iou])▫ę"] = "%1a", 
	["[yů]▫[aę]"] = "ůa", ["[yů]▫[ei]"] = "ůi", -- to screen out stressed vs. unstressed
}
	
function export.coalescence(word, stress)
	for regex, repl in pairs(export.diphthongs) do
		word = gsub(word, regex, repl)
	end
	
	if stress then
		word = gsub(word, "ů[aęei]", "ỷ")
	end
	
	word = gsub(word, "▫", "")
	
	--[[for regex, repl in pairs(export.triphthong_coalescence) do
		word = gsub(word, regex, repl)
	end]]
	
	return word
end

export.stressed_vowels = {
	["a"] = "a", ["ả"] = "a", ["au"] = "a",  ["ai"] = "a", ["oa"] = "a",
	["e"] = "e", ["ẻ"] = "e", ["ę"] = "e", ["ei"] = "e", ["ay"] = "e", ["eu"] = "e",
	["i"] = "i", ["ỉ"] = "i", ["ia"] = "i", ["ie"] = "i", ["io"] = "i", ["iu"] = "i",
	["o"] = "o", ["ỏ"] = "o", ["õ"] = "o", ["õu"] = "o", ["oi"] = "o", ["ou"] = "o",
	["u"] = "u", ["ủ"] = "u", ["uo"] = "u", ["ui"] = "u",
	["y"] = "y", ["ỷ"] = "y", ["ů"] = "y", ["ẻu"] = "y", ["ey"] = "y", ["ůa"] = "y", ["ůi"] = "y",
}

export.digraphs_to_single = {
	["ts"] = "ʦ", ["tṡ"] = "ʨ", ["dį"] = "ʥ", ["ng"] = "ŋ", ["nį"] = "ɲ",
	["kį"] = "c", ["gį"] = "ɟ", ["hh"] = "ħ", ["ḍḍ"] = "ð", ["dl"] = "ɬ", ["o̊"] = "ȯ",
	["õu"] = "ở", ["ẻu"] = "ử",
}

export.triphthong_coalescence = { 
	["([aoue])i([aoue])"] = "%1į%2", ["([aoue])ii"] = "%1gįi", ["([aoue])ỉ"] = "%1gįi", ["ai[yů]"] = "ey", 
	["([eo])i[yů]"] = "%1įů",
	["ue([aoue])"] = "uį%1", ["uẻ"] = "uįe", ["uei"] = "ugįi", ["u[ei][yů]"] = "ůgįů",
	["ie([aouy])"] = "igį%1", ["iee"] = "iẻ", ["ieů"] = "igįů",
	["ůi([aoe])"] = "ůį%1", ["ůi[uyů]"] = "ůgįů", ["ůii"] = "ůgįi", ["ůỉ"] = "ugįi",
	["ay([ae])"] = "ęm%1", ["ay([oi])"] = "ęb%1", ["ay[uyů]"] = "ębů", ["aỷ"] = "ębů",
	["uo([aue])"] = "um%1", ["uo([oi])"] = "ub%1", ["uỏ"] = "ubo", ["uo[yů]"] = "ůbů",
	["au([aueů])"] = "am%1", ["aủ"] = "amu", ["au([oi])"] = "ab%1", ["auy"] = "amů",
	["o[ua]([aueů])"] = "om%1", ["oả"] = "oma", ["oủ"] = "omu", ["o[ua]([oi])"] = "ob%1", ["o[ua]y"] = "omů",
	["e[uy]([ae])"] = "ům%1", ["e[uy]([oi])"] = "ůb%1", ["e[uy][uyů]"] = "ůbů", ["e[ủỷ]"] = "ůbů",
	["iu([aeů])"] = "ivv%1", ["iu([oui])"] = "ib%1", ["iủ"] = "ibu", ["iuy"] = "ivvů",
	["ả([aoue])"] = "ęį%1", ["ải"] = "ęgįi", ["[ảẻ][yů]"] = "ey",
	["ỏ([aueů])"] = "om%1", ["ỏ([oi])"] = "ob%1", ["ỏy"] = "omů",
	["ủ([ae])"] = "um%1", ["ủ([oui])"] = "ub%1", ["ủ[ůy]"] = "ůbů",
	["ẻu([ae])"] = "ům%1", ["ẻu([oi])"] = "ůb%1", ["ẻu[uyů]"] = "ůbů", ["ẻủ"] = "ůbů",
	["ẻ([ao])"] = "evv%1", ["ẻ([ei])"] = "egį%1",
	["ỉ([aou])"] = "ivv%1", ["ỉ([ey])"] = "igį%1", ["ỉi"] = "iddįi", ["iỉ"] = "iddįi", ["ỉů"] = "igįy",
	["ỷ([ae])"] = "ym%1", ["ỷ([oi])"] = "yb%1", ["ỷ[uůy]"] = "yby", ["yỷ"] = "yby",
}

return export