Module:ábḫ-ipa

From Linguifex
Revision as of 20:39, 26 February 2020 by Thisimpliesthis (talk | contribs)
Jump to navigation Jump to search


local export = {}

function export.convert(frame)
	local word = type(frame) == "table" and frame.args[1] or frame
	
	word = string.gsub(word, "mb", "B")
	word = string.gsub(word, "nd", "D")
	word = string.gsub(word, "ng", "G")
	word = string.gsub(word, "mp", "P")
	word = string.gsub(word, "ntt", "Tt")
	word = string.gsub(word, "nkk", "Kk")
	word = string.gsub(word, "jh", "J")
	word = string.gsub(word, "ḫ", "H")
	
	word = string.gsub(word, "ii", "ī")
	word = string.gsub(word, "íi", "î")
	word = string.gsub(word, "ií", "ǐ")
	
	word = string.gsub(word, "ei", "ē")
	word = string.gsub(word, "éi", "ê")
	word = string.gsub(word, "eí", "ě")
	
	word = string.gsub(word, "ou", "ō")
	word = string.gsub(word, "óu", "ô")
	word = string.gsub(word, "oú", "ǒ")
	word = string.gsub(word, "oi", "I")
	word = string.gsub(word, "ói", "Í")
	
	word = string.gsub(word, "aai", "Ā")
	word = string.gsub(word, "áai", "Â")
	word = string.gsub(word, "aái", "Ǎ")
	word = string.gsub(word, "ai", "A")
	word = string.gsub(word, "ái", "Á")
	
	word = string.gsub(word, "aao", "Ō")
	word = string.gsub(word, "áao", "Ô")
	word = string.gsub(word, "aáo", "Ǒ")
	word = string.gsub(word, "ao", "O")
	word = string.gsub(word, "áo", "Ó")
	
	word = string.gsub(word, "aa", "ā")
	word = string.gsub(word, "áa", "â")
	word = string.gsub(word, "aá", "ǎ")
	
	length = string.len(word)
	
	word = mw.text.split(word, "", true)
	
	result = {}
	
	for i,val in ipairs(word) do
		if word[i-1] == nil or word[i+1] == nil then
			table.insert(result, val)
		elseif i == 2 then
			if mw.ustring.match(word[i], "[íîǐéêěóôǒÍáâǎÁÂǍÓÔǑ]") then
				table.insert(result, "ˈ")
				table.insert(result, val)
			elseif mw.ustring.match(word[i], "[mnjBDGPpTtKkbzdsJHhry]") and mw.ustring.match(word[i+1], "[íîǐéêěóôǒÍáâǎÁÂǍÓÔǑ]") then
				table.insert(result, "ˈ")
				table.insert(result, val)
			else
				table.insert(result, val)
			end
		elseif mw.ustring.match(word[i], "[iīeēoōIaāAĀOŌ]") then
			if mw.ustring.match(word[i-1], "[iīeēoōIaāAĀOŌíîǐéêěóôǒÍáâǎÁÂǍÓÔǑ]") then
				table.insert(result, ".")
				table.insert(result, val)
			else
				table.insert(result, val)
			end
		elseif mw.ustring.match(word[i], "[íîǐéêěóôǒÍáâǎÁÂǍÓÔǑ]") then
			if mw.ustring.match(word[i-1], "[iīeēoōIaāAĀOŌíîǐéêěóôǒÍáâǎÁÂǍÓÔǑ]") then
				table.insert(result, "ˈ")
				table.insert(result, val)
			else
				table.insert(result, val)
			end
		else
			if mw.ustring.match(word[i+1], "[iīeēoōIaāAĀOŌ]") then
				table.insert(result, ".")
				table.insert(result, val)
			elseif mw.ustring.match(word[i+1], "[íîǐéêěóôǒÍáâǎÁÂǍÓÔǑ]") then
				table.insert(result, "ˈ")
				table.insert(result, val)
			else
				table.insert(result, val)
			end
		end
	end
	
	return table.concat(result)
end

function export.convertOld(frame)
	local word = type(frame) == "table" and frame.args[1] or frame
	
	word = mw.text.split(word, "", true)
	
	result = {}
	
	for i,val in ipairs(word) do
		if val == "a" then
			if mw.ustring.match(word[i-1], "[áa]") then
				table.insert(result, "ː")
			elseif mw.ustring.match(word[i+1], "[á]") then
				table.insert(result, "ǎ")
			else
				table.insert(result, "a")
			end
		elseif val == "á" then
			if mw.ustring.match(word[i-1], "[a]") then
				table.insert(result, "ː")
			elseif mw.ustring.match(word[i+1], "[a]") then
				table.insert(result, "â")
			else
				table.insert(result, "á")
			end
		elseif val == "b" then
			if mw.ustring.match(word[i-1], "[m]") then
				table.insert(result, "b")
			else
				table.insert(result, "β")
			end
		elseif val == "d" then
			table.insert(result, "ð")
		elseif val == "e" then
			if mw.ustring.match(word[i+1], "[í]") then
				table.insert(result, "ě")
			else
				table.insert(result, "e")
			end
		elseif val == "é" then
			if mw.ustring.match(word[i+1], "[i]") then
				table.insert(result, "ê")
			else
				table.insert(result, "é")
			end
		elseif val == "h" then
			if not mw.ustring.match(word[i-1], "[j]") then
				table.insert(result, "ɦ")
			end
		elseif val == "ḫ" then
			table.insert(result, "x")
		elseif val == "i" then
			if mw.ustring.match(word[i-1], "[ée]") then
				table.insert(result, "ːɪ̯")
			elseif mw.ustring.match(word[i-1], "[aáoó]") then
				table.insert(result, "ɪ̯")
			elseif mw.ustring.match(word[i-1], "[ií]") then
				table.insert(result, "ː")
			elseif mw.ustring.match(word[i+1], "[í]") then
				table.insert(result, "ǐ")
			end
		elseif val == "í" then
			if mw.ustring.match(word[i-1], "[e]") then
				table.insert(result, "ːɪ̯")
			elseif mw.ustring.match(word[i+1], "i") then
				table.insert(result, "î")
			else
				table.insert(result, "í")
			end
		elseif val == "j" then
			if mw.ustring.match(word[i+1], "[h]") then
				table.insert(result, "ʑ")
			elseif i == 2 then
				if mw.ustring.match(word[i+1], "[áéíó]") then
					table.insert(result, "ᶮɟ̟")
				elseif mw.ustring.match(word[i+1], "[iea]") and mw.ustring.match(word[i+2], "[íéá]") then
					table.insert(result, "ᶮɟ̟")
				elseif mw.ustring.match(word[i+1], "[o]") and mw.ustring.match(word[i+2], "[úí]") then
					table.insert(result, "ᶮɟ̟")
				else
					table.insert(result, "ɲ̟")
				end
			else
				if mw.ustring.match(word[i+1], "[áéíó]") then
					table.insert(result, "ɲ̟ɟ̟")
				elseif mw.ustring.match(word[i+1], "[iea]") and mw.ustring.match(word[i+2], "[íéá]") then
					table.insert(result, "ɲ̟ɟ̟")
				elseif mw.ustring.match(word[i+1], "[o]") and mw.ustring.match(word[i+2], "[úí]") then
					table.insert(result, "ɲ̟ɟ̟")
				else
					table.insert(result, "ɲ̟")
				end
			end
		elseif val == "k" then
			if mw.ustring.match(word[i-1], "[n]") then
				table.insert(result, "g")
			else
				table.insert(result, "k")
			end
		elseif val == "m" then
			if i == 2 and mw.ustring.match(word[i+1], "[b]") then
				table.insert(result, "ᵐ")
			else
				table.insert(result, "m")
			end
		elseif val == "n" then
			if i == 2 then
				if mw.ustring.match(word[i+1], "[t]") then
					table.insert(result, "ⁿ")
				elseif mw.ustring.match(word[i+1], "[k]") then
					table.insert(result, "ᵑ")
				else
					table.insert(result, "n̪")
				end
			else
				if mw.ustring.match(word[i+1], "[k]") then
					table.insert(result, "ŋ")
				else
					table.insert(result, "n̪")
				end
			end
		elseif val == "o" then
			if mw.ustring.match(word[i-1], "[a]") then
				table.insert(result, "o̯")
			elseif mw.ustring.match(word[i+1], "[ú]") then
				table.insert(result, "ɔ̌")
			else
				table.insert(result, "ɔ")
			end
		elseif val == "ó" then
			if mw.ustring.match(word[i+1], "[u]") then
				table.insert(result, "ô")
			else
				table.insert(result, "ɔ́")
			end
		elseif val == "r" then
			table.insert(result, "ɺ")
		elseif val == "s" then
			table.insert(result, "ɕ")
		elseif val == "t" then
			if mw.ustring.match(word[i-1], "[n]") and not mw.ustring.match(word[i+1], "[t]") then
				table.insert(result, "d̪")
			else
				table.insert(result, "t̪")
			end
		elseif val == "u" then
			table.insert(result, "ːʊ̯")
		elseif val == "ú" then
			table.insert(result, "ːʊ̯")
		elseif val == "y" then 
			table.insert(result, "j")
		elseif val == "z" then
			table.insert(result, "θ̱")
		else
			table.insert(result, val)
		end
	end
	
	return table.concat(result)
end

return export