Module:siwa-noun/common: Difference between revisions

From Linguifex
Jump to navigation Jump to search
No edit summary
No edit summary
 
(99 intermediate revisions by the same user not shown)
Line 1: Line 1:
local data = {}
local gsub = mw.ustring.gsub


data.stressed_vowels = {
local export = {}
["ả"] = "a", ["a[ui]"] = "a", ["oa"] = "a", ["[eẻę]"] = "e", ["e[iu]"] = "e",
["ay"] = "e", ["[iỉ]"] = "i", ["i[aeou]"] = "i", ["[oỏõ]"] = "o", ["[oõ]u"] = "o",
["oi"] = "o", ["[uủ]"] = "u", ["u[oi]"] = "u", ["[yỷ]"] = "y", ["ů[ai]?"] = "y", ["ẻu"] = "y", ["ey"] = "y",
}


data.digraphs_to_single = {
function export.lenition(word)
["ts"] = "ʦ", ["tṡ"] = "ʨ", [""] = "ʥ", ["ng"] = "ŋ", [""] = "ɲ",
--local word = frame:getParent().args[1] -- for testing
[""] = "c", [""] = "ɟ", ["hh"] = "ħ", ["ḍḍ"] = "ð", ["dl"] = "ɬ", [""] = "ȯ"
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
[""] = "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


data.lenition_patterns = {
export.diphthongs = {
["bb"] = "b", ["dd"] = "d", ["gg"] = "g", ["ɟ"] = "į", ["mm"] = "m", ["ll"] = "l", ["nn"] = "n",
["[aę][aę]"] = "", ["e▫e"] = "", ["i▫i"] = "", ["u▫[yuů]"] = "", ["[yů]▫u"] = "",
["rr"] = "r", [""] = "p", ["pr"] = "p", ["dġ"] = "t", ["tr"] = "t", ["ḍb"] = "p", ["ð"] = "hh",
["a▫e"] = "ai", ["a▫o"] = "au", ["ę▫[uů]"] = "ay",
["ḍg"] = "k", ["bm"] = "m", ["dn"] = "n", ["kn"] = "ng", ["([lr])pp"] = "%1p", ["([lr])tt"] = "%1t", ["([lrms])kk"] = "%1k",
["ę▫[ei]"] = "ei", ["ę▫o"] = "eu",  
["k([lvs])"] = "g%1", ["ps"] = "bs", ["[vųbhḥg]"] = "", ["d[aou]"] = "l", ["ġ[aou]"] = "vv", ["[dġ][eůy]"] = "", ["[]i"] = "ṡi",
["e▫[]"] = "ia", ["e▫o"] = "io", ["i▫y"] = "",
["di"] = "", ["ɲi"] = "ɟi", ["ħį"] = "", ["[ou]ų"] = "ů", ["ɬ"] = "l",
["[uo]▫e"] = "oi", ["o▫ů"] = "ou",
["[]▫o"] = "uo", ["o▫o"] = "",
["y▫y"] = "", ["ů▫ů"] = "ẻu",
["ẻu▫i"] = "ůbi",
["([ae])▫ů"] = "%1y", ["([iou])▫ę"] = "%1a",  
["[yů][]"] = "ůa", ["[]▫[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


data.endings = {}
export.stressed_vowels = {
 
["a"] = "a", [""] = "a", ["au"] = "a", ["ai"] = "a", ["oa"] = "a",
endings.a = {
["e"] = "e", ["ẻ"] = "e", ["ę"] = "e", ["ei"] = "e", ["ay"] = "e", ["eu"] = "e",
["m"] = "i-a-mV", ["n"] = "i-a-nV", ["p"] = "i-a-pV", ["b"] = "i-a-bV", ["t"] = "i-a-tV",
["i"] = "i", ["ỉ"] = "i", ["ia"] = "i", ["ie"] = "i", ["io"] = "i", ["iu"] = "i",
["r"] = "i-a-rV", ["vv"] = "i-a-vvV", ["lk"] = "i-a-CkV", ["rk"] = "i-a-CkV", ["sk"] = "i-a-CkV",
["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",
}
}


endings.e = {
export.digraphs_to_single = {
["na"] = "i-e-na/e", ["ne"] = "i-e-na/e", ["ba"] = "i-e-ba/e", ["be"] = "i-e-ba/e",
["ts"] = "ʦ", ["tṡ"] = "ʨ", [""] = "ʥ", ["ng"] = "ŋ", [""] = "ɲ",
["ka"] = "i-e-ka/e", ["ke"] = "i-e-ka/e", ["ma"] = "i-e-ma/e", ["me"] = "i-e-ma/e",
[""] = "c", [""] = "ɟ", ["hh"] = "ħ", ["ḍḍ"] = "ð", ["dl"] = "ɬ", [""] = "ȯ",
["va"] = "i-e-va/e", ["ve"] = "i-e-va/e", ["tsa"] = "i-e-tsa/e", ["tse"] = "i-e-tsa/e",
["õu"] = "", ["ẻu"] = "",
["ta"] = "i-e-ta/e", ["te"] = "i-e-ta/e", ["sa"] = "i-e-sa/e", ["se"] = "i-e-sa/e",
["la"] = "i-e-la/e", ["le"] = "i-e-la/e", ["ha"] = "i-e-ha/e", ["he"] = "i-e-ha/e",
["ġa"] = "i-e-ha/e", ["ġe"] = "i-e-ha/e", ["a"] = "i-e-a/e", ["e"] = "i-e-a/e",
["mi"] = "i-e-mi", ["pi"] = "i-e-p/bi", ["bi"] = "i-e-p/bi", ["vi"] = "i-e-vi",
["ni"] = "i-e-ni", ["ri"] = "i-e-ri", ["li"] = "i-e-li", ["ki"] = "i-e-k/gi",
["gi"] = "i-e-k/gi", ["i"] = "i-e-i", ["o"] = "i-e-o",
["mu"] = "i-e-m/nU", ["my"] = "i-e-m/nU", ["mů"] = "i-e-m/nU", -- U = front vowel
["nu"] = "i-e-m/nU", ["ny"] = "i-e-m/nU", ["nů"] = "i-e-m/nU",
["ku"] = "i-e-kU", ["ky"] = "i-e-kU", ["ků"] = "i-e-kU",
["u"] = "i-e-U", ["y"] = "i-e-U", ["ů"] = "i-e-U",
}
 
endings.i = {
["m"] = "i-i-mV", ["n"] = "i-i-nV", ["um"] = "i-i-u/om/n", ["om"] = "i-i-u/om/n", ["un"] = "i-i-u/om/n", ["on"] = "i-i-u/om/n",
["v"] = "i-i-vV", ["g"] = "i-i-gV", ["s"] = "i-i-gV", ["r"] = "i-i-rV", ["h"] = "i-i-hV", ["k"] = "i-i-kV",
["l"] = "i-i-lV", ["i"] = "i-i-i", -- else -V
}
}


endings.o = {
export.triphthong_coalescence = {  
["ba"] = "i-o-b/ta/e", ["be"] = "i-o-b/ta/e", ["ta"] = "i-o-b/ta/e", ["te"] = "i-o-b/ta/e",
["([aoue])i([aoue])"] = "%1į%2", ["([aoue])ii"] = "%1gįi", ["([aoue])ỉ"] = "%1gįi", ["ai[yů]"] = "ey",
["va"] = "i-o-v/m/na/e", ["ve"] = "i-o-v/m/na/e", ["ma"] = "i-o-v/m/na/e",
["([eo])i[yů]"] = "%1įů",
["me"] = "i-o-v/m/na/e", ["na"] = "i-o-v/m/na/e", ["ne"] = "i-o-v/m/na/e",
["ue([aoue])"] = "uį%1", ["uẻ"] = "uįe", ["uei"] = "ugįi", ["u[ei][yů]"] = "ůgįů",
["ra"] = "i-o-r/h/ga/e", ["re"] = "i-o-r/h/ga/e", ["ha"] = "i-o-r/h/ga/e", ["he"] = "i-o-r/h/ga/e",
["ie([aouy])"] = "igį%1", ["iee"] = "iẻ", ["ieů"] = "igįů",
["ga"] = "i-o-r/h/ga/e", ["ge"] = "i-o-r/h/ga/e", ["ka"] = "i-o-ka/e", ["ke"] = "i-o-ka/e", ["la"] = "i-o-la/e",
["ůi([aoe])"] = "ůį%1", ["ůi[uyů]"] = "ůgįů", ["ůii"] = "ůgįi", ["ůỉ"] = "ugįi",
["le"] = "i-o-la/e", ["mi"] = "i-o-m/n/k/gi", ["ni"] = "i-o-m/n/k/gi", ["ki"] = "i-o-m/n/k/gi", ["gi"] = "i-o-m/n/k/gi",
["ay([ae])"] = "ęm%1", ["ay([oi])"] = "ęb%1", ["ay[uyů]"] = "ębů", ["aỷ"] = "ębů",
["lki"] = "i-o-lki", ["rki"] = "i-o-rki", ["ski"] = "i-o-ski", ["sġi"] = "i-o-ski", ["li"] = "i-o-li",
["uo([aue])"] = "um%1", ["uo([oi])"] = "ub%1", ["uỏ"] = "ubo", ["uo[yů]"] = "ůbů",
["ri"] = "i-o-r/hi", ["hi"] = "i-o-r/hi", ["ṡi"] = "i-o-ṡi", ["hhįi"] = "i-o-ṡi",
["au([aueů])"] = "am%1", ["aủ"] = "amu", ["au([oi])"] = "ab%1", ["auy"] = "amů",
["b"] = "i-o-b/p/t/dV", ["p"] = "i-o-b/p/t/dV", ["t"] = "i-o-b/p/t/dV", ["d"] = "i-o-b/p/t/dV", ["v"] = "i-o-v/m/nV",
["o[ua]([aueů])"] = "om%1", ["oả"] = "oma", ["oủ"] = "omu", ["o[ua]([oi])"] = "ob%1", ["o[ua]y"] = "omů",
["m"] = "i-o-v/m/nV", ["n"] = "i-o-v/m/nV", ["r"] = "i-o-r/h/g/kV", ["h"] = "i-o-r/h/g/kV", ["g"] = "i-o-r/h/g/kV",
["e[uy]([ae])"] = "ům%1", ["e[uy]([oi])"] = "ůb%1", ["e[uy][uyů]"] = "ůbů", ["e[ủỷ]"] = "ůbů",
["k"] = "i-o-r/h/g/kV", ["l"] = "i-o-lV", ["a"] = "i-o-a/e", ["e"] = "i-o-a/e", ["i"] = "i-o-i", --else -u/o/y/ů
["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 data
return export

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