Module:rsk-IPA

local export = {}

local m_IPA = require("Module:IPA") local lang = require("Module:languages").getByCode("rsk") local rsub = mw.ustring.gsub local rlower = mw.ustring.lower local rlast = require("Module:string/replace last").replace_last

local phon = { ["а"]="a",	["б"]="b",	["в"]="v",	["г"]="ɦ",	["ґ"]="ɡ", ["д"]="d",	["е"]="ɛ",	["є"]="jɛ",	["ж"]="ʒ",	["з"]="z", ["и"]="i",	["ї"]="ji",	["к"]="k",	["л"]="l",	["м"]="m", ["н"]="n",	["о"]="ɔ",	["п"]="p",	["р"]="r",	["с"]="s", ["т"]="t",	["у"]="u",	["ф"]="f",	["х"]="x",	["ц"]="ts", ["ч"]="tʃ",	["ш"]="ʃ",	["щ"]="ʃtʃ",["ю"]="ju",	["я"]="ja", ["ь"]="ʲ",	["й"]="j", }

local function phonetic(text) text = rlower(text) -- general phonology text = rsub(text, "тш", "чш") text = rsub(text, "тс", "цс") text = rsub(text, ".", phon) -- palatalisation text = rsub(text, "([dtln])j([aɛiɔu])", "%1ʲ%2") -- voicing assimilation local i = 0 text = rsub(text, "b$", "p") text = rsub(text, "v$", "f") text = rsub(text, "d(ʲ?)$", "t%1") text = rsub(text, "z$", "s") text = rsub(text, "ʒ$", "ʃ") text = rsub(text, "ɡ$", "k") text = rsub(text, "ɦ$", "x") while i <= 5 do		text = rsub(text, "b([pftsʃkx])", "p%1") text = rsub(text, "v([pftsʃkx])", "f%1") text = rsub(text, "d([pftsʃkx])", "t%1") text = rsub(text, "z([pftsʃkx])", "s%1") text = rsub(text, "ʒ([pftsʃkx])", "ʃ%1") text = rsub(text, "ɡ([pftsʃkx])", "k%1") text = rsub(text, "ɦ([pftsʃkx])", "x%1") text = rsub(text, "p([bdzʒɡ])", "b%1") text = rsub(text, "f([bdzʒɡ])", "v%1") text = rsub(text, "t([bdzʒɡ])", "d%1") text = rsub(text, "s([bdzʒɡ])", "z%1") text = rsub(text, "ʃ([bdzʒɡ])", "ʒ%1") text = rsub(text, "k([bdzʒɡ])", "ɡ%1") text = rsub(text, "x([bdzʒɡ])", "ɦ%1") i = i + 1 end -- palatalisation text = rsub(text, "([dt])([ln])ʲ", "%1ʲ%2ʲ") text = rsub(text, "lnʲ", "lʲnʲ") text = rsub(text, "n([dt])ʲ", "nʲ%1ʲ") text = rsub(text, "n([dt])([ʃʒ])", "nʲ%1%2") text = rsub(text, "dʲ", "ɟ") text = rsub(text, "tʲ", "c") text = rsub(text, "lʲ", "ʎ") text = rsub(text, "nʲ", "ɲ") text = rsub(text, "ʲ", "") -- stress text = rlast(text, "([aɛiɔu])", "X%1", 1) text = rsub(text, "Xa", "A") text = rsub(text, "Xɛ", "E") text = rsub(text, "Xi", "I") text = rsub(text, "Xɔ", "O") text = rsub(text, "Xu", "U") text = rlast(text, "([aɛiɔu])", "ˈ%1", 1) text = rsub(text, "A", "a") text = rsub(text, "E", "ɛ") text = rsub(text, "I", "i") text = rsub(text, "O", "ɔ") text = rsub(text, "U", "u") text = rsub(text, "([bvɡdʒzjklmnprstfxɦʃɟcʎɲ])ˈ", "ˈ%1") text = rsub(text, "tˈ([sʃ])", "ˈt%1") text = rsub(text, "dˈ([zʒ])", "ˈd%1") text = rsub(text, "([sʃ])ˈ([pktcfx])", "ˈ%1%2") text = rsub(text, "([zʒ])ˈ([bɡdɟvɦ])", "ˈ%1%2") text = rsub(text, "([ptckbdɟɡ])ˈ([mnɲlʎrj])", "ˈ%1%2") text = rsub(text, "^([bvɡdʒzjklmnprstfxɦʃɟcʎɲ][bvɡdʒzjklmnprstfxɦʃɟcʎɲ]?[bvɡdʒzjklmnprstfxɦʃɟcʎɲ]?)ˈ", "ˈ%1") -- affricates text = rsub(text, "tʃ", "t͡ʃ") text = rsub(text, "dʒ", "d͡ʒ") text = rsub(text, "ts", "t͡s") text = rsub(text, "dz", "d͡z") -- final substitutions text = rsub(text, "'", "") text = rsub(text, "n([kɡ])", "ŋ%1") 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