Module:kjp-IPA

local find = mw.ustring.find local rsub = mw.ustring.gsub local u = require("Module:string/char")

local export = {}

local m_IPA = require("Module:IPA") local lang = require("Module:languages").getByCode("kjp")

local V = "[ɑaæɒɔəɘʊeoɪiɨɯ]" local S = u(0x032F) 		-- diphthong marker local B = u(0x0324)			-- breathy voice

local phonemic = { ["à"]="a1",	["ā"]="a2",	["á"]="a3",	["â"]="a4", ["è"]="e1",	["ē"]="e2",	["é"]="e3",	["ê"]="e4", ["ò"]="o1",	["ō"]="o2",	["ó"]="o3",	["ô"]="o4", ["ɛ"]="æ",	["ɔ"]="ɒ",	["ə"]="ə",	["ʊ"]="ʊ", ["ì"]="i1",	["ī"]="i2",	["í"]="i3",	["î"]="i4", ["ɨ"]="ɨ",	["ɯ"]="ɯ", }

local function phonetic(text) text = require("Module:kjp-translit").tr(text, lang, 'Mymr') -- vowels text = rsub(text, ".", phonemic) text = rsub(text, "([kcpt])h", "%1ʰ") text = rsub(text, "b", "ɓ") text = rsub(text, "d", "ɗ") text = rsub(text, "c", "t͡ɕ") -- tone 1 text = rsub(text, "̀", "1") text = rsub(text, "̄", "2") text = rsub(text, "́", "3") text = rsub(text, "̂", "4") text = rsub(text, "ə([1234])", "ɘ%1") text = rsub(text, "([1234])" .. u(0x0331), u(0x0331) .. "%1") text = rsub(text, "i" .. u(0x0331), "ɪ") -- diphthong text = rsub(text, "(" .. V .. ")([1234])(" .. V .. "ɴ?)", "%1%3" .. S .. "%2") -- nasals text = rsub(text, "ɴ" .. S, S .. "ɴ") text = rsub(text, "(" .. V .. ")(" .. V .. S .. ")ɴ", "%1ɴ%2ɴ") text = rsub(text, "([1234])ɴ", "ɴ%1") text = rsub(text, S .. "ɴ", "ɴ" .. S)	-- tone 2 text = rsub(text, "1", "˩˩") text = rsub(text, "2", B .. "˧˧") text = rsub(text, "3", "˥˥") text = rsub(text, "4", "˥˩") -- phonetics text = rsub(text, "aɴ(" .. V .. ")", "ã%1") text = rsub(text, "aɴ", "ɑɴɔɴ" .. S) text = rsub(text, S .. B, B .. S) text = rsub(text, "ɴ" .. B, B .. "ɴ") text = rsub(text, "(" .. V .. "ɴ?)(" .. V .. B .. ")", "%1" .. B .. "%2") text = rsub(text, "ɴ", "̃") return text end

function export.IPA(frame) local words = {} for _, word in ipairs(frame:getParent.args) do		table.insert(words, word) end if #words == 0 then words = {mw.title.getCurrentTitle.text} end local IPA_results = {} for _, word in ipairs(words) do table.insert(IPA_results, { pron = "[" .. phonetic(word) .. "]" }) end return m_IPA.format_IPA_full { lang = lang, items = IPA_results } end

return export