Module:mnc-IPA

local export = {}

local lang = require("Module:languages").getByCode("mnc") local sc = require("Module:scripts").getByCode("mnc-Mong") local m_IPA = require("Module:IPA")

local gsub = mw.ustring.gsub local sub = mw.ustring.sub local gmatch = mw.ustring.gmatch local find = mw.ustring.find local len = mw.ustring.len

local correspondences = { ["ñ"] = "ɲ", ["y"] = "j", ["š"] = "ʃ", ["h"] = "χ", ["t"] = "tʰ", ["d"] = "t", ["g"] = "k", ["b"] = "p", ["j"] = "t͡ʃ", ["k"] = "kʰ", ["p"] = "pʰ", ["c"] = "t͡ʃʰ", ["e"] = "ə", ["o"] = "ɔ", ["ū"] = "ʊ", }

local function transliterate(text) return (lang:transliterate(text, sc)) end

local dialects = { [1] = { name = "peking", link = "Peking" }, [2] = { name = "alcuka", link = "Alcuka" }, [3] = { name = "sibe", link = "Sibe" }, [4] = { name = "ningguta", link = "Ningguta" }, [5] = { name = "mukden", link = "Mukden" }, [6] = { name = "sanjiazi", link = "Sanjiazi" }, }

function export.link(term) if find(term, "[A-Za-z]") then term = require("Module:mnc-Latn-translit").tr(term) end return require("Module:links").full_link{ term = term, lang = lang, sc = sc } end

local function syllabify(term) for i = 1, 2 do		term = gsub(term, "([aeiouū])([^aeiouū%.]+)([aeiouū])", function(a, b, c)			return len(b) > 1 and a .. sub(b, 1, 1) .. "." .. sub(b, 2, -1) .. c or a .. "." .. b .. c end) end return term end

function export.toIPA(text, style) text = gsub(text, "[᠋᠌᠍]", "") local text = transliterate(text) text = mw.ustring.lower(text) text = gsub(text, "niy", "ñ") text = gsub(text, "uw", "w") text = gsub(text, "ūw", "w") text = gsub(text, "iya", "ya") text = gsub(text, "iye", "ye") text = gsub(text, "iyo", "yo") text = gsub(text, "iyoo", "yoo") --iy + V need to be specified since there are Chinese loanwords that use a different approach in transliteration for original in gmatch(text, "[a-zñšū]+") do		word = gsub(original, "ng", "ŋ") word = syllabify(word) word = gsub(word, ".", correspondences) word = gsub(word, "ɔɔ", "oː") word = gsub(word, "ŋ%.k", "ŋ.ŋ") word = gsub(word, "ŋ%.ŋʰ", "ŋ.kʰ") word = gsub(word, "χi", "xi") word = gsub(word, "[sʃ](ʰ?)([ij])", "ɕ%1%2") word = gsub(word, "k(ʰ?)([aɔʊ])", "q%1%2") word = gsub(word, "tʰ([s'])", "t͡sʰ") word = gsub(word, "t([z])", "t͡s") text = gsub(text, "k'", "k") text = gsub(text, "s'", "s") text = gsub(text, "h'", "x") text = gsub(text, "ž", "ʐ") text = gsub(text, original, word, 1) end text = gsub(text, "%.? %.?", ".") text = gsub(text, "χj", "xj") text = gsub(text, "t͡ɕj", "ʈ͡ʂʐ.") text = gsub(text, "ɕj", "sz̩.") text = gsub(text, "t.z", ".t͡s") text = gsub(text, ".t͡sj", ".t͡sz̩") text = gsub(text, "t͡ʃ.j", ".t͡ɕi") text = gsub(text, "iɔi", "y") text = gsub(text, "\n", "") return text end

function export.make(frame) local args = frame:getParent.args local pagetitle = mw.title.getCurrentTitle.text local p, output_t = {}, {} local results = { ["standard"] = {}, ["peking"] = {}, ["alcuka"] = {}, ["sibe"] = {}, ["ningguta"] = {}, ["mukden"] = {}, ["sanjiazi"] = {}, }	if args[1] then for index, item in ipairs(args) do			table.insert(p, (item ~= "") and item or nil) end else p = { pagetitle } end for _, Manchu in ipairs(p) do table.insert(results["standard"], { pron = "[" .. export.toIPA(Manchu, "standard") .. "]" }) end table.insert(output_t, "* (standard) " .. m_IPA.format_IPA_full { lang = lang, items = results["standard"] }) for _, data in pairs(dialects) do		if args[data.name] then for dial_pronunciation in mw.text.gsplit(args[data.name], "/") do table.insert(results[data.name], { pron = "[" .. dial_pronunciation .. "]" }) end table.insert(output_t, "* (''" .. data.link .. "'') " .. m_IPA.format_IPA_full { lang = lang, items = results[data.name] }) end end return table.concat(output_t, "\n") end

return export