Module:Test: Difference between revisions
From Allocosm
| No edit summary | No edit summary | ||
| Line 1: | Line 1: | ||
| export = {} | export = {} | ||
| VOWELS = "aeiouw" | |||
| DEVOICED = "ktfsθʧqʃ" | |||
| VOICED = "gdvzðʤ" | |||
| DEVOICING = { | |||
| 	["g"] = "k", | |||
| 	["d"] = "t", | |||
| 	["v"] = "f", | |||
| 	["z"] = "s", | |||
| 	["ð"] = "θ", | |||
| 	["ʤ"] = "ʧ", | |||
| } | |||
| H_DEVOICING = { | |||
| 	["g"] = "k", | |||
| 	["d"] = "t", | |||
| 	["v"] = "f", | |||
| 	["z"] = "z", | |||
| 	["ð"] = "θ", | |||
| } | |||
| VvC = { | |||
| 	["a"] = "au", | |||
| 	["e"] = "ef", | |||
| 	["i"] = "if", | |||
| 	["o"] = "uu", | |||
| 	["u"] = "uu", | |||
| } | |||
| function export.compress_consonants(str) | function export.compress_consonants(str) | ||
Revision as of 20:51, 5 March 2024
Documentation for this module may be created at Module:Test/doc
export = {}
VOWELS = "aeiouw"
DEVOICED = "ktfsθʧqʃ"
VOICED = "gdvzðʤ"
DEVOICING = {
	["g"] = "k",
	["d"] = "t",
	["v"] = "f",
	["z"] = "s",
	["ð"] = "θ",
	["ʤ"] = "ʧ",
}
H_DEVOICING = {
	["g"] = "k",
	["d"] = "t",
	["v"] = "f",
	["z"] = "z",
	["ð"] = "θ",
}
VvC = {
	["a"] = "au",
	["e"] = "ef",
	["i"] = "if",
	["o"] = "uu",
	["u"] = "uu",
}
function export.compress_consonants(str)
	
	str = str or ''
	
	replace = {{"ssh","ʃʃ"},
				{"ddh","ðð"},
				{"tth","θθ"}, 
				{"cch","ʧʧ"},
				{"sh","ʃ"},
				{"dh","ð"},
				{"th","θ"},
				{"j","ʤ"},
				{"ch","ʧ"},
				{"'",""},
	}
	
	for _,v in ipairs(replace) do
		str = mw.ustring.gsub(str,v[1],v[2])
	end
	
	return str
end
function export.expand_consonants(str)
	replace = {
				{"s'h","sh"},
				{"s'sh","sʃ"},
				{"d'h","dh"},
				{"d'dh","dð"},
				{"t'h","th"},
				{"t'th","tθ"},
				{"ssh","ʃʃ"},
				{"ddh","ðð"},
				{"tth","θθ"}, 
				{"cch","ʧʧ"},
				{"sh","ʃ"},
				{"dh","ð"},
				{"th","θ"},
				{"j","ʤ"},
				{"ch","ʧ"},
	}
	
	for _,v in ipairs(replace) do
		str = mw.ustring.gsub(str,v[2],v[1])
	end
	
	return str
end
function export.assimilate(str)
	output = export.compress_consonants(str)
	if str and str ~= '' then
			--VvC assimilition FIXME - should not happen if v is geminate. Disabling for now.
			-- output = string.gsub(output,"(["..VOWELS.."])v([^"..VOWELS.."])","%1~v%2"):gsub("(.)~v",{VvC)
			--Nasal Assimilation
			output = mw.ustring.gsub(output,"m([tdszkgθðl])","n%1")
			output = mw.ustring.gsub(output,"n([bfv])","m%1")
			--General Devoicing
			output = mw.ustring.gsub(output,"(["..DEVOICED.."])(["..VOICED.."])","%1~%2")
			output = mw.ustring.gsub(output,"~(.)",DEVOICING)
			output = mw.ustring.gsub(output,"(["..VOICED.."])(["..DEVOICED.."])","~%1%2")
			output = mw.ustring.gsub(output,"~(.)",DEVOICING)
			--H devoicing
			output = mw.ustring.gsub(output,"h(["..VOICED.."])","h~%1")
			output = mw.ustring.gsub(output,"~(.)",H_DEVOICING)
			output = mw.ustring.gsub(output,"(["..VOICED.."])h","~%1h")
			output = mw.ustring.gsub(output,"~(.)",H_DEVOICING)	
			output = mw.ustring.gsub(output,"hj","hʧ")	
			--Misc
			output = mw.ustring.gsub(output,"qk","kk")
			output = mw.ustring.gsub(output,"kq","kk")
			output = mw.ustring.gsub(output,"ao","au")
			output = mw.ustring.gsub(output,"ae","ai")
			output = mw.ustring.gsub(output,"aw","au")
			output = mw.ustring.gsub(output,"ua","wa")
		
			
	end
	
	return export.expand_consonants(output)
end
return export
