Module:ofs-IPA

local export = {}

local m_IPA = require("Module:IPA") local lang = require("Module:languages").getByCode("ofs") local m_a = require("Module:accent qualifier") local rsub = mw.ustring.gsub local rlower = mw.ustring.lower

local V = "[aeiou]ː?" local Vs = "[aeioumnrlwj]ː?"

local phon = { -- vowels ["a"]="a",	["e"]="e",	["i"]="i",	["o"]="o",	["u"]="u", ["ê"]="εː",	["ô"]="ɔː", -- consonants ["p"]="p",	["b"]="b",	["f"]="f",	["v"]="v",	["m"]="m", ["t"]="t",	["d"]="d",	["s"]="s",	["n"]="n",	["z"]="dz", ["k"]="k",	["g"]="ɡ",	["l"]="l",	["r"]="r",	["h"]="h", }

local function phonetic(text) text = rlower(text) -- long vowels text = rsub(text, "ā", "aM") text = rsub(text, "ē", "eM") text = rsub(text, "ī", "iM") text = rsub(text, "ō", "oM") text = rsub(text, "ū", "uM") text = rsub(text, "(" .. V .. ")M", "%1ː") -- consonant digraphs text = rsub(text, "th", "θ") text = rsub(text, "ch", "χ") -- general phonology text = rsub(text, '.', phon) text = rsub(text, "([iu])ː", "%1%1") text = rsub(text, "(" .. V .. ")i(" .. V .. ")", "%1j%2") text = rsub(text, "(" .. V .. ")u(" .. V .. ")", "%1w%2") text = rsub(text, "([iu])%1", "%1ː") text = rsub(text, "([pbtdkɡfθsχmnlr])%1", "%1ː") text = rsub(text, "n([ɡkχ])", "ŋ%1") -- intervocalic consonants text = rsub(text, "(" .. Vs .. ")ɡ(" .. Vs .. ")", "%1ɣ%2") text = rsub(text, "(" .. Vs .. ")θ(" .. Vs .. ")", "%1ð%2") text = rsub(text, "(" .. Vs .. ")f(" .. Vs .. ")", "%1v%2") text = rsub(text, "(" .. Vs .. ")s(" .. Vs .. ")", "%1z%2") -- affricates text = rsub(text, "ts", "t͡s") text = rsub(text, "dz", "d͡z") -- diphthongs text = rsub(text, "i([auoe])ː", "j%1ː") text = rsub(text, "i([uo])", "j%1") text = rsub(text, "e(ː?)i", "e%1i̯") text = rsub(text, "a(ː?)u", "a%1u̯") 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_a.format_qualifiers(lang, {"13th CE"}) .. " " .. m_IPA.format_IPA_full { lang = lang, items = IPA_results } end

return export