Pergi ke kandungan

Modul:mnc-IPA

Daripada Wikikamus
local export = {}

local lang = require("Module:languages").getByCode("mnc")
local sc = require("Module:scripts").getByCode("Mong")
local m_translit = require("Module:mnc-translit").tr
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"] = "χ",
	["d"] = "t", ["g"] = "k", ["b"] = "p", ["j"] = "t͡ʃ", 
	["t"] = "tʰ", ["k"] = "kʰ", ["p"] = "pʰ", ["c"] = "t͡ʃʰ",
	["e"] = "ə", ["o"] = "ɔ", ["ū"] = "ʊ",
}

local function transliterate(text)
	return m_translit(text, lang, "Mong")
end

local dialects = {
	[1] = { name = "peking", link = "[[w:Peking|Peking]]" },
	[2] = { name = "alcuka", link = "[[w:Daerah Acheng|Alcuka]]" },
	[3] = { name = "sibe", link = "[[w:Bahasa Xibe|Sibe]]" },
	[4] = { name = "ningguta", link = "[[w:Ningguta|Ningguta]]" },
	[5] = { name = "mukden", link = "[[w:Mukden|Mukden]]" },
	[6] = { name = "sanjiazi", link = "[[w:Sanjiazi|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, "iy", "y")
	
	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")
        text = gsub(text, "k'", "k")
        text = gsub(text, "h'", "x")
		text = gsub(text, original, word, 1)
	end
	
	text = gsub(text, "%.? %.?", ".")
	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, "* (''[[w:Bahasa Manchu|baku]]'') " .. m_IPA.format_IPA_full(lang, 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, results[data.name]))
		end
	end
	
	return table.concat(output_t, "\n")
end

return export