ข้ามไปเนื้อหา

มอดูล:mww-pron

จาก วิกิพจนานุกรม พจนานุกรมเสรี

local export = {}
local PAGENAME = mw.title.getCurrentTitle().text

local initials = {
	["hm"] = "m̥", ["hnl"] = "m̥ˡ", ["hn"] = "n̥", ["hny"] = "ɲ̊",
	["m"] = "m", ["nl"] = "mˡ", ["n"] = "n", ["ny"] = "ɲ", ["g"] = "ŋ",
	["p"] = "p", ["pl"] = "pˡ", ["t"] = "t", ["r"] = "ʈ", ["d"] = "d",
	["ph"] = "pʰ", ["plh"] = "pˡʰ", ["th"] = "tʰ", ["rh"] = "ʈʰ", ["dh"] = "dʱ",
	["np"] = "ᵐb", ["npl"] = "ᵐbˡ", ["nt"] = "ⁿd", ["nr"] = "ᶯɖ",
	["nph"] = "ᵐpʰ", ["nplh"] = "ᵐpˡʰ", ["nth"] = "ⁿtʰ", ["nrh"] = "ᶯʈʰ",
	["c"] = "c", ["k"] = "k", ["q"] = "q", [""] = "ʔ",
	["ch"] = "cʰ", ["kh"] = "kʰ", ["qh"] = "qʰ",
	["nc"] = "ᶮɟ", ["nk"] = "ᵑɡ", ["nq"] = "ᶰɢ",
	["nch"] = "ᶮcʰ", ["nkh"] = "ᵑkʰ", ["nqh"] = "ᶰqʰ",
	["tx"] = "t͡s", ["ts"] = "t͡ʂ", ["ntx"] = "ⁿd͡z", ["nts"] = "ᶯd͡ʐ",
	["txh"] = "t͡sʰ", ["tsh"] = "t͡ʂʰ", ["ntxh"] = "ⁿt͡sʰ", ["ntsh"] = "ᶯt͡ʂʰ",
	["f"] = "f", ["x"] = "s", ["hl"] = "ɬ", ["s"] = "ʂ", ["xy"] = "ç", ["h"] = "h",
	["v"] = "v", ["l"] = "l", ["z"] = "ʐ", ["y"] = "ʝ",
	["xy*"] = "ɕ", ["txy"] = "t͡ɕ", ["txhy"] = "t͡ɕʰ", ["ntxy"] = "ⁿd͡ʑ", ["ntxhy"] = "ⁿt͡ɕʰ", -- morphophonological rules
}

local vowels = {
	["a"] = "a", ["e"] = "e", ["i"] = "i", ["o"] = "ɒ", ["u"] = "u", ["w"] = "ɨ",
	["ee"] = "ẽ", ["oo"] = "ɒ̃", ["on"] = "ɒ̃", ["ww"] = "ɨ̃",
	["ai"] = "ai̯", ["au"] = "au̯", ["aw"] = "aɨ̯", ["ia"] = "i̯ə", ["ua"] = "u̯ə",
	[""] = "",
}

local tones = {
	["b"] = "˥", ["j"] = "˥˧", ["v"] = "˧˦", [""] = "˧",
	["s"] = "˩", ["g"] = "˧˩̤", ["m"] = "˩̰ˀ", ["d"] = "˨˩˧",
}

function export.show(frame)

	local args = frame:getParent().args
	local text = args[1] or PAGENAME -- supports only one pronunciation
	text = text:lower() -- ignores uppercases
	local debug = args["d"] or nil
	local qualifier = args["q"] or nil
	local ipa = {}

	for syl in mw.text.gsplit(text, "[ %.%-]") do
		local i, v, t = syl:match("([cdfghklmnpqrstvxyz]*)([aeiouw]+n?)([bjvsgmd]?)")
		if v == "i" or v == "e" or v == "ia" then
			if i == "x" or i == "xy" then
				i = "xy*"
			elseif i == "tx" or i == "txh" or i == "ntx" or i == "ntxh" then
				i = i .. "y"
			end
		end
		if debug then
			table.insert(ipa, "["..(i or "-").."]["..(v or "-").."]["..(t or "-").."]")
		else
			table.insert(ipa, initials[i] .. vowels[v] .. tones[t])
		end
	end

	return "* " .. (qualifier and frame:expandTemplate{title = "qualifier", args = {qualifier}} .. " " or "") .. "[[วิกิพจนานุกรม:สัทอักษรสากล|สัทอักษรสากล]]<sup>([[ภาคผนวก:การออกเสียงภาษาม้งขาว|คำอธิบาย]])</sup>: <span class=\"IPA\">/" .. table.concat(ipa, ".") .. "/</span>[[หมวดหมู่:ศัพท์ภาษาม้งขาวที่มีการออกเสียงไอพีเอ]]" .. (#ipa > 0 and "[[หมวดหมู่:ศัพท์ภาษาม้งขาวที่มี " .. #ipa .. " พยางค์]]" or "")

end

return export