Module:xsl-IPA

local export = {}

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

local C = "ʰ?ⁿ?ᵐ?[ðθbdʒʃɣtkpsɬɮxwɾjmnzh]ʰ?ʼ?" local V = "[aeiouɛɪ]M?L?H?"

local di = { ["dh"]="ð",		["th"]="θ",		["mb"]="ᵐB",	["nd"]="ⁿd", ["dz"]="ds",	["ts"]="dsʰ",	["dl"]="dɬ",	["tl"]="dɬʰ", ["ch"]="dʃʰ",	["zh"]="ʒ",		["sh"]="ʃ",		["gh"]="ɣ", }

local mo = { ["d"]="t",		["g"]="k",		["b"]="p",		["j"]="tʃ", ["t"]="tʰ",		["k"]="kʰ",		["ɂ"]="ʔ",		["h"]="h", ["s"]="s",		["ł"]="ɬ",		["l"]="ɮ",		["x"]="x", ["w"]="w",		["r"]="ɾ",		["y"]="j",		["ʼ"]="ʼ", ["m"]="m",		["n"]="n",		["z"]="z",		["B"]="b", ["i"]="iL",		["e"]="eL",		["a"]="aL",		["o"]="oL", ["u"]="uL", ["í"]="iH",		["é"]="eH",		["á"]="aH",		["ó"]="oH", ["ú"]="uH", ["į"]="iML",   ["ę"]="eML",	["ą"]="aML",	["ǫ"]="oML", ["ų"]="uML", ["I"]="i",		["E"]="e",		["A"]="a",		["O"]="o", ["U"]="u", ["-"]="D" }

local function phonetic(text) text = rlower(text) if mw.ustring.find(text, "~") == nil then text = "~" .. text end -- double diacritics text = rsub(text, "į́", "IMH") text = rsub(text, "ę́", "EMH") text = rsub(text, "ą́", "AMH") text = rsub(text, "ǫ́", "OMH") text = rsub(text, "ų́", "UMH") -- digraphs local i = 0 while i <= 10 do		text = rsub(text, "..", di) text = rsub("Q" .. text, "..", di) text = rsub(text, "Q", "") i = i + 1 end -- monographs text = rsub(text, ".", mo) text = rsub(text, "tʰθ", "tθʰ") text = rsub(text, "ʰʼ", "ʼ") -- pre-aspiration text = rsub(text, "h(" .. C .. ")", "ʰ%1") -- syllable splits (twice?) text = rsub(text, "(" .. V .. ")(" .. V .. ")", "%1.%2")	text = rsub(text, "(" .. V .. ")([ʰⁿᵐʔðθbdʒʃɣtkpsɬɮxwɾjmnzhʰʼ]*" .. V .. ")", "%1.%2")	text = rsub(text, "(" .. V .. ")(" .. V .. ")", "%1.%2")	text = rsub(text, "(" .. V .. ")([ʰⁿᵐʔðθbdʒʃɣtkpsɬɮxwɾjmnzhʰʼ]*" .. V .. ")", "%1.%2")	-- /e/ text = rsub(text, "%~([ʰⁿᵐʔðθbdʒʃɣtkpsɬɮxwɾjmnzhʰʼaeiouɛɪMHL%.]*)i(M?L?H?)%.", "~%1ɪ%2.") text = rsub(text, "e", "ɛ") text = rsub(text, "ɛ(M?L?H?%~[ʰⁿᵐʔðθbdʒʃɣtkpsɬɮxwɾjmnzhʰʼ]*[iu]M?L?H?)", "e%1") text = rsub(text, "([ʒj])ɛ", "%1e") text = rsub(text, "eM", "ɛM") -- /i/ text = rsub(text, "ɪM", "iM") -- vowel thingies text = rsub(text, "%~", ".") text = rsub(text, "([aeiouɛɪ])(M?)L?H?%.%1(M?L?H?)", "%1%2%3ː") text = rsub(text, "(" .. V .. ")$", "%1(ʔ)") -- /o/ text = rsub(text, "o", "o̞") text = rsub(text, "MM", "M") text = rsub(text, "M", "̃") text = rsub(text, "L", "̀") text = rsub(text, "H", "́") text = rsub(text, "t([θsʃɬ])", "t͡%1") text = rsub(text, "^%.", "") text = rsub(text, "ʰʼ", "ʼ") text = rsub(text, "^D", "-") text = rsub(text, "D", "") text = rsub(text, "h$", "(h)") 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