Assamese IPA pronunciation module. See {{as-IPA}}.

Testcases edit

Module:as-IPA/testcases:

4 of 21 tests failed. (refresh)

TextExpectedActualComments
test_all:
Passedমই (moi)mɔɪmɔɪ
Passedদেশ (dex)dɛxdɛx
Passedমোৰ (mür)mʊɹmʊɹ
Passedশক্তি (xokti)xɔk.tixɔk.ti
Passedঔষধ (ouxodh)oʊ.xɔdʱoʊ.xɔdʱ
Failedপৰিয়াল (porial)po.ɹialpɔ.ɹial
Passedসোঁফালে (xü̃phale)xʊ̃.pʰa.lɛxʊ̃.pʰa.lɛ
Passedস্পৰ্শ (sporxo)spɔɹ.xɔspɔɹ.xɔ
Passedনাঙল (naṅol)na.ŋɔlna.ŋɔl
Passedহিংসা (hiṅxa)ɦiŋ.xaɦiŋ.xa
Passedঐতিহাসিক (oitihaxik)oɪ.ti.ɦa.xikoɪ.ti.ɦa.xik
Failedশহা পহু (xoha pohu)xɔ.ɦa po.ɦuxɔ.ɦa pɔ.ɦu
Passedসম্পূৰ্ণ (xompurno)xɔm.puɹ.nɔxɔm.puɹ.nɔ
Failedমগজু (mogozu)mo.ɡo.zumɔ.ɡɔ.zu
Passedবিৱৰণ (biworon)bi.wɔ.ɹɔnbi.wɔ.ɹɔn
Passedৰাজ্য (raizzo)ɹaɪd.ʑɔɹaɪd.ʑɔ
Passedজ্বৰ (zor)zɔɹzɔɹ
Failedঅধিকাৰ (odhikar)o.dʱi.kaɹɔ.dʱi.kaɹ
Passedথকা (thoka)tʰɔ.katʰɔ.ka
Passedখেল (khel)kʰɛlkʰɛl
Passedমানুহ (manuh)ma.nuʱma.nuʱ

local export = {}

local lang = require("Module:languages").getByCode("as")
local sc = require("Module:scripts").getByCode("Beng")
local m_translit = require("Module:as-translit").tr
local m_IPA = require("Module:IPA")

local gsub = mw.ustring.gsub
local gmatch = mw.ustring.gmatch

local correspondences = {
    ["g"] = "ɡ", 
    ["ñ"] = "n",
    ["ṗ"] = "pʰ", ["ḃ"] = "bʱ", 
    ["y"] = "j", ["r"] = "ɹ", 
    ["h"] = "ɦ",
    ["ḱ"] = "kʰ", ["ǵ"] = "ɡʱ", 
    ["ź"] = "zʱ", ["ṫ"] = "tʰ", ["ḋ"] = "dʱ", 
    ["ŕ"] = "ɹʱ", ["ṙ"] = "ɹi",
    ["o"] = "ɔ", ["e"] = "ɛ", ["ü"] = "ʊ",
    ["ë"] = "e", ["ö"] = "o", ["ʏ"] = "oɪ", 
    ["ɵ"] = "oʊ",
    ["õ"] = "ɔ̃", ["e͂"] = "ɛ̃", ["ü͂"] = "ʊ",
    ["ë̃"] = "ẽ", ["ö̃"] = "ɔ̃", ["a͂"] = "a", ["ĩ"] = "i", ["u͂"] = "u"
}

local vowels = "aiueoüóéʏɵ"
local syllabify_pattern = "([" .. vowels .. "])([^" .. vowels .. " %.]+)([" .. vowels .. "])"

local function syllabify(text)
	for count = 1, 2 do
		text = gsub(text, syllabify_pattern, function(a, b, c)
			return a .. gsub(gsub(b, "(.)(.+)", "%1.%2"), "^([^%.]+)$", ".%1") .. c end)
	end
	return text
end

function export.link(term)
	return require("Module:links").full_link{ term = term, lang = lang, sc = sc }
end

function export.toIPA(text)
	local result = {}
	
	local translit = m_translit(text, lang, sc, "IPA")
	if not translit then
		error('The term "' .. text .. '" could not be transliterated.')
	end
	
    local translit = syllabify(translit)
	
	for character in gmatch(translit, ".") do
		table.insert(result, correspondences[character] or character)
	end
	
	result = table.concat(result)
	result = gsub(result, "([aɔ])i", "%1ɪ")
	result = gsub(result, "z%.z", "d.ʑ")
	result = gsub(result, "([" .. vowels .. "])ɦ", "%1ʱ")
	
	return result
end

function export.make(frame)
	local args = frame:getParent().args
	local pagetitle = mw.title.getCurrentTitle().text
	
	local p, results = {}, {}
	
	if args[1] then
		for index, item in ipairs(args) do
			table.insert(p, (item ~= "") and item or nil)
		end
	else
		p = { pagetitle }
	end
	
	for _, Assamese in ipairs(p) do
		table.insert(results, { pron = "/" .. export.toIPA(Assamese) .. "/" })
	end
	
	return '* ' ..   m_IPA.format_IPA_full(lang, results)
end

return export