Jump to content

Module:User:Lunabunn/jje-pron

From Wiktionary, the free dictionary


local export = {}

local ko_translit = require("Module:User:Lunabunn/ko-translit")
local gsub = ko_translit.gsub
local ko_pron = require("Module:User:Lunabunn/ko-pron")
local shallowCopy = require("Module:table").shallowCopy
local lang_jje = require("Module:languages").getByCode("jje")
local pagename = mw.loadData("Module:headword/data").pagename

function export.phonetic(text, params)
	local forms = ko_pron.phonetic(text, params)
	for i = #forms,1,-1 do
		local remove = false
		-- remove forms with wo(a)y
		local start = mw.ustring.find(forms[i], "woa?y")
		if start then remove = true end
		-- remove forms with yay
		start = mw.ustring.find(forms[i], "yay")
		if start then remove = true end
		if remove then table.remove(forms, i) end
	end
	return forms
end

function export.ipa_morphophonemic(text)
	-- consonants
	text = gsub(text, "^G", "^")
	text = gsub(text, "G$", "ŋ$")
	text = gsub(text, "([ptck])h", "%1ʰ")
	text = gsub(text, "([ptks])%1", "%1͈")
	text = gsub(text, "cc", "t͈͡ɕ")
	text = gsub(text, "c", "t͡ɕ")
	-- vowels
	text = gsub(text, "e", "ə")
	text = gsub(text, "əy", "e")
	text = gsub(text, "ay", "æ")
	text = gsub(text, "u", "ɨ")
	text = gsub(text, "wɨ", "u")
	text = gsub(text, "ɨy", "ɰi")
	text = gsub(text, "o", "ɒ")
	text = gsub(text, "wɒ", "o")
	text = gsub(text, "uy", "wi")
	text = gsub(text, "ue", "we")
	text = gsub(text, "y", "j")
	-- cleanup
	text = ko_translit.strip_separators(text)
	text = { { pron = "⫽" .. text .. "⫽" } }
	return text
end

function export.ipa_jeju_city(og)
	local forms = shallowCopy(og)
	for i = 1,#forms do
		-- consonants
		forms[i] = gsub(forms[i], "^G", "^")
		forms[i] = gsub(forms[i], "G$", "ŋ$")
		forms[i] = gsub(forms[i], "([ptck])h", "%1ʰ")
		forms[i] = gsub(forms[i], "([ptks])%1", "%1͈")
		forms[i] = gsub(forms[i], "cc", "t͈͡ɕ")
		forms[i] = gsub(forms[i], "c", "t͡ɕ")
		forms[i] = gsub(forms[i], "s([aeiouyw])", "sʰ")
		-- initial allophony
		forms[i] = gsub(forms[i], "^^([ptk])([aeiouyw])", "^%1⁽ʰ⁾%2")
		forms[i] = gsub(forms[i], "^^t͡ɕ([aeiouyw])", "^t͡ɕʰ%2")
		-- medial allophony
		forms[i] = gsub(forms[i], "(#)k([aeiouyw])", "%1g%2")
		forms[i] = gsub(forms[i], "(#)t([aeiouyw])", "%1d%2")
		forms[i] = gsub(forms[i], "(#)p([aeiouyw])", "%1b%2")
		forms[i] = gsub(forms[i], "(#)t͡ɕ([aeiouyw])", "%1d͡ʑ%2")
		-- final allophony
		forms[i] = gsub(forms[i], "([ptk])$", "%1$̚")
		-- l allophony
		forms[i] = gsub(forms[i], "^l", "^ɾ")
		forms[i] = gsub(forms[i], "l(#)h", "ɾ%1h")
		-- h allophony
		forms[i] = gsub(forms[i], "hw", "ɸw")
		forms[i] = gsub(forms[i], "h([iy])", "ç%1")
		forms[i] = gsub(forms[i], "([aeiouywɾ]#)h", "%1ɦ")
		-- vowels
		forms[i] = gsub(forms[i], "e", "ə")
		forms[i] = gsub(forms[i], "əy", "e")
		forms[i] = gsub(forms[i], "ay", "æ")
		forms[i] = gsub(forms[i], "u", "ɨ")
		forms[i] = gsub(forms[i], "wɨ", "u")
		forms[i] = gsub(forms[i], "ɨy", "ɰi")
		forms[i] = gsub(forms[i], "o", "ɒ")
		forms[i] = gsub(forms[i], "wɒ", "o")
		forms[i] = gsub(forms[i], "uy", "wi")
		forms[i] = gsub(forms[i], "ue", "we")
		forms[i] = gsub(forms[i], "y", "j")
		-- cleanup
		forms[i] = ko_translit.strip_separators(forms[i])
		forms[i] = { pron = "[" .. forms[i] .. "]" }
	end
	return forms
end

function export.make(frame)
	local parent_args = frame:getParent().args
	local args = require("Module:parameters").process(parent_args, {
		[1] = { default = pagename },
		["a"] = {},
	})
	local params = ko_pron.parse_params(parent_args)
	
	local raw = ko_translit.raw(args[1])
	local forms = export.phonetic(raw, params)
	return ko_pron.format(
		lang_jje,
		raw,
		forms,
		{
			{ items = export.ipa_morphophonemic(raw), q = { "Morphophonemic" } },
			{ items = export.ipa_jeju_city(forms), a = { "Jeju City" }, audio = args["a"] }
		},
		{
			{ "Revised Romanization", ko_translit.rr(args[1], false) },
			{ "Revised Romanization (translit.)", ko_translit.rr(args[1], true) },
			{ "Yale Romanization", ko_translit.yale(args[1], true, false) }
		}
	)
end

return export