Module:yux-IPA

local export = {}

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

local V = "ʲ?[aeiouøəɨɪ]" local C = "[bvɡʁdʒzjklmnŋprstfqcʃɕɟʎɲyʔ]ʲ?" local X = "ʲ?[aeiouøəɨɪbvɡʁdʒzjklmnŋprstfqcʃɕɟʎɲyʔ]ʲ?" local U = "ʲ?[aeiouøɨɪ]"

local phon = { ["а"]="a",	["б"]="b",	["в"]="v",	["г"]="ɡ",	["ҕ"]="ʁ", ["д"]="d",	["е"]="ʲe",	["ж"]="ʒ",	["з"]="z",	["и"]="ɪ", ["й"]="j",	["к"]="k",	["л"]="l",	["м"]="m",	["н"]="n", ["ҥ"]="ŋ",	["о"]="o",	["ө"]="ø",	["п"]="p",	["р"]="r", ["с"]="s",	["т"]="t",	["у"]="u",	["ф"]="f",	["х"]="q", ["ц"]="y",	["ч"]="c",	["ш"]="ʃ",	["щ"]="ɕ",	["ы"]="ɨ", ["ь"]="ʲ",	["э"]="e",	["ю"]="ʲu",	["я"]="ʲa" }

local function phonetic(text) text = rlower(text) text = rsub(text, "([сдлн])%1ь", "%1ь%1ь") text = rsub(text, "сь", "ɕ") text = rsub(text, "дь", "ɟ") text = rsub(text, "ль", "ʎ") text = rsub(text, "нь", "ɲ") text = rsub(text, "ɕи", "ɕi") text = rsub(text, "ɟи", "ɟi") text = rsub(text, "ʎи", "ʎi") text = rsub(text, "ɲи", "ɲi") text = rsub(text, "чи", "чi") -- general phonology text = rsub(text, ".", phon) -- initial glide (borrowings only) text = rsub(text, "^ʲ", "j") text = rsub(text, "(" .. V .. ")ʲ", "%1j") -- stress (1) text = rsub(text, "(" .. V .. ")(" .. X .. ")$", "ˈ%1%2") if rfind(text, "ˈ") == nil then text = rlast(text, "(" .. V .. ")(" .. X .. ")(" .. C .. ")", "ˈ%1%2%3", 1) end if rfind(text, "ˈ") == nil then text = rlast(text, "(" .. U .. ")", "ˈ%1", 1) end -- schwa text = rsub(text, "(" .. C .. ")([eo])$", "%1ə") -- stress (2) text = rsub(text, "(" .. V .. ")ˈ(" .. V .. ")", "ˈ%1%2") text = rsub(text, "(" .. V .. ")(" .. C .. ")ˈ", "%1ˈ%2") text = rsub(text, "(" .. V .. ")(" .. C .. ")(" .. C .. ")ˈ", "%1%2ˈ%3") text = rsub(text, "(" .. V .. ")(" .. C .. C .. ")(" .. C .. ")ˈ", "%1%2ˈ%3") text = rsub(text, "^(" .. C .. ")ˈ", "ˈ%1") text = rsub(text, "^(" .. C .. C .. ")ˈ", "ˈ%1") if rfind(text, "^-") ~= nil then text = rsub(text, "ˈ", "") end -- allophones text = rsub(text, "ŋʁ", "ɴɢ") text = rsub(text, "(" .. V .. "ˈ?)b(" .. V .. ")", "%1w%2") text = rsub(text, "(" .. V .. "ˈ?)c(" .. V .. ")", "%1(t)ɕ%2") text = rsub(text, "(" .. V .. "ˈ?)c$", "%1(t)ɕ") -- diphthongs text = rsub(text, "ie", "ie̯") text = rsub(text, "ɪe", "ie̯") text = rsub(text, "uo", "uo̯") text = rsub(text, "uø", "uø̯") text = rsub(text, "([aeioø])u", "%1u̯") text = rsub(text, "([aeouø])i", "%1i̯") text = rsub(text, "(" .. V .. ")j$", "%1i̯") text = rsub(text, "(" .. V .. ")j(ˈ?" .. C .. ")", "%1i̯%2") text = rsub(text, "(" .. V .. ")%1", "%1ː") text = rsub(text, "ɪː", "iː") text = rsub(text, "iɪ", "iː") -- affricates text = rsub(text, "c", "t͡ɕ") text = rsub(text, "ɟ", "d͡ʑ") text = rsub(text, "y", "t͡s") 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