Module:ltg-IPA

local export = {}

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

local c = mw.ustring.char(0x0302) local g = mw.ustring.char(0x0300) local s = mw.ustring.char(0x032F)

local V = "[aeėiouy]" local R = "[lļr]" local F = "[iìîɛæ]" .. c .. "?" .. g .. "?u?" .. s .. "?ː?" local C = "[bdfɡxjklmnprvʃʒz]" local X = "ˈ?[bcdfghjklmnprstvzčģķļņšž]"

local di = { ["aî"]="aqi̯",	["ai"]="awi̯", ["eî"]="æqi̯",	["ei"]="æwi̯", ["ėî"]="ɛqi̯",	["ėi"]="ɛwi̯", ["oî"]="ɔqi̯",	["oi"]="ɔwi̯", ["uî"]="uqi̯",	["ui"]="uwi̯", ["aû"]="aqu̯",	["au"]="awu̯", ["iû"]="iqu̯",	["iu"]="iwu̯", ["yû"]="ɨqu̯",	["yu"]="ɨwu̯", ["oû"]="ɔqu̯",	["ou"]="ɔwu̯", ["uô"]="uqɔ̯",	["uo"]="uwɔ̯", ["iê"]="iqɛ̯",	["ie"]="iwɛ̯", }

local phon = { -- non-tonal ["a"]="a",	["b"]="b",	["c"]="ts",	["d"]="d", ["e"]="æ",	["ė"]="ɛ",	["f"]="f",	["g"]="ɡ", ["h"]="x",	["i"]="i",	["j"]="j",	["k"]="k", ["l"]="l",	["m"]="m",	["n"]="n",	["o"]="ɔ", ["p"]="p",	["r"]="r",	["s"]="s",	["t"]="t", ["u"]="u",	["v"]="v",	["y"]="ɨ",	["č"]="tʃ", ["ģ"]="ɡʲ",	["ķ"]="kʲ",	["ļ"]="lʲ",	["ņ"]="nʲ", ["š"]="ʃ",	["ž"]="ʒ",	["'"]="ʲ", -- tonal ["â"]="âː",	["ê"]="æ̂ː", ["î"]="îː", ["û"]="ûː", ["ā"]="àː",	["ē"]="æ̀ː", ["ī"]="ìː", ["ū"]="ùː", }

local function phonetic(text) text = rlower(text) -- basic phonology text = rsub(text, "..", di) text = rsub("1" .. text, "..", di) text = rsub(text, "1", "") text = rsub(text, "(" .. V .. ")(" .. R .. ")" .. c, "%1q%2") text = rsub(text, "(" .. V .. ")(" .. R .. X .. ")", "%1w%2") text = rsub(text, "(" .. V .. ")(" .. R .. ")$", "%1w%2") text = rsub(text, ".", phon) text = rsub(text, "q", c)	text = rsub(text, "w", g)	-- palatalisation text = rsub(text, "([pbfvtdszkɡmnl])(" .. F .. ")", "%1ʲ%2") local i = 0 while i <= 3 do		text = rsub(text, "([ts])ʲ([ts])", "%1ʲ%2ʲ") i = i + 1 end i = 0 while i <= 5 do		text = rsub(text, "([pbvtdszkɡmnl])(.)ʲ", "%1ʲ%2ʲ") i = i + 1 end i = 0 -- v > w	text = rsub(text, "vʲ?(" .. X .. ")", "w%1") -- devoicing text = rsub(text, "b$", "p") text = rsub(text, "d$", "t") text = rsub(text, "ɡ(ʲ?)$", "k%1") text = rsub(text, "z$", "s") text = rsub(text, "v$", "f") text = rsub(text, "ʒ$", "ʃ") while i <= 5 do		text = rsub(text, "b(ʲ?)([pstkxfʃ])", "p%1%2") text = rsub(text, "d(ʲ?)([pstkxfʃ])", "t%1%2") text = rsub(text, "ɡ(ʲ?)([pstkxfʃ])", "k%1%2") text = rsub(text, "z(ʲ?)([pstkxfʃ])", "s%1%2") text = rsub(text, "v(ʲ?)([pstkxfʃ])", "f%1%2") text = rsub(text, "ʒ(ʲ?)([pstkxfʃ])", "ʃ%1%2") text = rsub(text, "p(ʲ?)([bzdɡʒ])", "b%1%2") text = rsub(text, "t(ʲ?)([bzdɡʒ])", "d%1%2") text = rsub(text, "k(ʲ?)([bzdɡʒ])", "ɡ%1%2") text = rsub(text, "s(ʲ?)([bzdɡʒ])", "z%1%2") text = rsub(text, "ʃ(ʲ?)([bzdɡʒ])", "ʒ%1%2") i = i + 1 end i = 0 -- affrication text = rsub(text, "n(ʲ?)([sʃzʒ]ʲ?)$", "n%1t%2%1") text = rsub(text, "tʲ?([sʃ])", "t͡%1") text = rsub(text, "dʲ?([zʒ])", "d͡%1") text = rsub(text, "([ʃʒ])ʲ", "%1") text = rsub(text, "ʃsʲ?", "ʃs") text = rsub(text, "ʒzʲ?", "ʒz") -- stress if mw.ustring.find(text, "ˈ") == nil then text = "ˈ" .. text end text = rsub(text, "^ˈ%f[-]", "") text = rsub(text, "%.", "") 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