မဝ်ဂျူ:blt-pron

နူ ဝိက်ရှေန်နရဳ

Documentation for this module may be created at မဝ်ဂျူ:blt-pron/doc

local export = {}
local PAGENAME = mw.title.getCurrentTitle().text
local find = mw.ustring.find
local gsub = mw.ustring.gsub
local rhyme

local pre = {
	[1] = {"([ꪀ-ꪯ]ꪫ?)ꪚꪾ", "%1ꪰꪚ"}, -- no tone mark
	[2] = {"([ꪀ-ꪯ]ꪫ?)ꪾꪚ", "%1ꪰꪚ"}, -- no tone mark
	[3] = {"ꫛ", "ꪶꪁꪙ"},
	[4] = {"ꫜ", "ꪙꪳ꪿ꪉ"},
	[5] = {"([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ]ꪫ?)", "%2%1"}, -- for easier processing
	[6] = {"(.*)([꪿꫁])(.*)", "%1%3%2"}, -- for easier processing
}

local initials = {
	["ꪀ"] = "k", ["ꪁ"] = "k", ["ꪂ"] = "kʰ", ["ꪃ"] = "kʰ",
	["ꪄ"] = "x", ["ꪅ"] = "x", ["ꪆ"] = "ɡ", ["ꪇ"] = "ɡ", ["ꪈ"] = "ŋ", ["ꪉ"] = "ŋ",
	["ꪊ"] = "t͡ɕ", ["ꪋ"] = "t͡ɕ", ["ꪌ"] = "t͡ɕʰ", ["ꪍ"] = "t͡ɕʰ",
	["ꪎ"] = "s", ["ꪏ"] = "s", ["ꪐ"] = "ɲ", ["ꪑ"] = "ɲ",
	["ꪒ"] = "d", ["ꪓ"] = "d", ["ꪔ"] = "t", ["ꪕ"] = "t",
	["ꪖ"] = "tʰ", ["ꪗ"] = "tʰ", ["ꪘ"] = "n", ["ꪙ"] = "n",
	["ꪚ"] = "b", ["ꪛ"] = "b", ["ꪜ"] = "p", ["ꪝ"] = "p",
	["ꪞ"] = "pʰ", ["ꪟ"] = "pʰ", ["ꪠ"] = "f", ["ꪡ"] = "f", ["ꪢ"] = "m", ["ꪣ"] = "m",
	["ꪤ"] = "j", ["ꪥ"] = "j", ["ꪦ"] = "r", ["ꪧ"] = "r", ["ꪨ"] = "l", ["ꪩ"] = "l",
	["ꪪ"] = "v", ["ꪫ"] = "v", ["ꪬ"] = "h", ["ꪭ"] = "h", ["ꪮ"] = "ʔ", ["ꪯ"] = "ʔ",
	["ꪀꪫ"] = "kʷ", ["ꪁꪫ"] = "kʷ", ["ꪂꪫ"] = "kʷʰ", ["ꪃꪫ"] = "kʷʰ",
	["ꪄꪫ"] = "xʷ", ["ꪅꪫ"] = "xʷ", ["ꪆꪫ"] = "ɡʷ", ["ꪇꪫ"] = "ɡʷ", ["ꪈꪫ"] = "ŋʷ", ["ꪉꪫ"] = "ŋʷ",
}

local vowels = {
	["ꪰ"] = "a", ["ꪱ"] = "aː", ["ꪲ"] = "i", ["ꪳ"] = "ɨ", ["ꪴ"] = "u",
	["ꪵ"] = "ɛ", ["ꪶ"] = "o", ["ꪮ"] = "ɔ", ["ꪷ"] = "ɔ",
	["ꪸ"] = "iə̯", ["ꪹ"] = "ɨə̯", ["ꪺ"] = "uə̯",
	["ꪻ"] = "aɰ", ["ꪼ"] = "aj", ["ꪽ"] = "an", ["ꪾ"] = "am",
	["ꪹꪱ"] = "aw", ["ꪹꪷ"] = "ə", ["ꪹꪸ"] = "e", [""] = "#",
}

local finals = {
	[""] = "", ["ꪀ"] = "ʔ", ["ꪒ"] = "t̚", ["ꪚ"] = "p̚",
	["ꪉ"] = "ŋ", ["ꪙ"] = "n", ["ꪣ"] = "m", ["ꪥ"] = "j", ["ꪫ"] = "w",
	["+ꪀ"] = "k̚", ["+ꪫ"] = "w", --force final -k and -w
}

-- Checked syllables have no tone mark
-- and they already sound like "mai ek"
-- per [http://www.amritas.com/141122.htm#11212354]
local tones = {
	[""] = {"˨", "˥"}, -- L 22, H 55
	["꪿"] = {"˦˥", "˦"}, -- L 45, H 44
	["꫁"] = {"˨˩ˀ", "˧˩ˀ"}, -- L 21, H 31
	["ꫀ"] = {"˦˥", "˦"},
	["ꫂ"] = {"˨˩ˀ", "˧˩ˀ"},
}


function export.show(frame)

	local output = {}

	table.insert(output, toIPA(frame))

	-- reduced hyphenetion
	table.insert(output, "* မပါ်ခြာသ္ဂောံပ္တိတ်ရမျာင်: <span class='Tavt blt-reading' lang='blt'>" .. (frame:getParent().args[1] or PAGENAME) .. "</span>")

	-- global var trick
	table.insert(output, "* " .. frame:expandTemplate{title = "rhymes", args = {"blt", rhyme}})

	return table.concat(output, "\n")

end

function toIPA(frame)

	local args = frame:getParent().args
	local text = args[1] or PAGENAME -- supports only one pronunciation
	local debug = args["d"] or nil
	local ipa = {}

	for syl in mw.text.gsplit(text, "[ %.%-]") do
		for _, v in ipairs(pre) do
			syl = gsub(syl, v[1], v[2])
		end

		local i, v, f, t = mw.ustring.match(syl, "^([ꪀ-ꪯ]ꪫ?)([ꪰ-ꪾꪮ]*)(%+?[ꪀꪒꪚꪉꪙꪣꪥꪫ]?)([꪿ꫀ꫁ꫂ]?)$")

		if find(i, "^([ꪀꪂꪄꪆꪈꪊꪌꪎꪐꪒꪔꪖꪘꪚꪜꪞꪠꪢꪤꪦꪨꪪꪬꪮ]ꪫ?)$") then --low class
			tn = 1
		else --high class
			tn = 2
		end
		if find(f, "^(%+?[ꪀꪒꪚ])$") then --checked final
			t = "ꫀ"
		end
		longer = (f == "" and find(vowels[v], "^([iɨuɛoɔəe])$")) -- if no final, make it longer

		if debug then
			table.insert(ipa, "["..(i or "-").."]["..(v or "-").."]["..(f or "-").."]["..(t or "-").."]")
		else
			table.insert(ipa, initials[i] .. vowels[v] .. (longer and "ː" or "") .. finals[f] .. tones[t][tn])
			rhyme = vowels[v] .. (longer and "ː" or "") .. finals[f] -- It becomes rhyme after the last iteration
		end
	end

	local ipa_final = table.concat(ipa, ".")
	ipa_final = "[" .. ipa_final .. "]"

	return "* " .. frame:expandTemplate{title = "IPA", args = {"blt", ipa_final}} .. (#ipa > 0 and " " or "")

end

return export