Module:zlw-slv-IPA

From Wiktionary, the free dictionary
Jump to navigation Jump to search

local export = {}

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

local C = "[bdfɡjklmnprstvzʒxɣʃr̝]"
local V = "[aãɛəi̯iɔoõɵuʉyɪăĭŏŭy̆]"
local T = "[ptkfsʃx]"
local D = "[bdɡzʒɣ]"

local di = {
	["ch"]="x",	["cz"]="tʃ", ["gh"]="ɣ", ["rz"]="r̝", ["sz"]="ʃ",
}

local phon = {
	["a"]="a",	["ą"]="õ",	["õ"]="õ",	["b"]="b",
	["c"]="ts", ["d"]="d",	["e"]="ɛ",	["é"]="e", ["ê"]="E",
	["ë"]="ə",	["f"]="f",	["g"]="ɡ",	["h"]="x",
	["i"]="i",	["j"]="j",	["k"]="k",	["l"]="l",
	["m"]="m",	["n"]="n",	["ń"]="nj",
	["o"]="ɔ",	["ó"]="o",	["ô"]="ɵ",
	["p"]="p",	["r"]="r",	["s"]="s",	["t"]="t",
	["u"]="u",	["ù"]="y",	["ú"]="ʉ",	["w"]="v",	["y"]="ɪ",
	["z"]="z",	["ż"]="ʒ",
	["ă"]="ă",	["ĭ"]="ĭ", ["ŏ"]="ŏ", ["ŭ"]="ŭ", ["ù̆"]="y̆", ["ā"]="aː",	
}

local function phonemic(text)
	text = rlower(text)
	-- basic phonology
	text = rsub(text, "ts", "tss")
	text = rsub(text, "..", di)
	text = rsub("1" .. text, "..", di)
	text = rsub("1" .. text, "..", di)
	text = rsub(text, "1", "")
	text = rsub(text, ".", phon)
	-- voicing
	text = rsub(text, "b$", "p")
	text = rsub(text, "d$", "t")
	text = rsub(text, "ɡ$", "k")
	text = rsub(text, "z$", "s")
	text = rsub(text, "v$", "f")
	text = rsub(text, "ʒ$", "ʃ")
	text = rsub(text, "ɣ$", "x")
	text = rsub(text, "br̝$", "pr̝")
	text = rsub(text, "dr̝$", "tr̝")
	text = rsub(text, "ɡr̝$", "kr̝")
	text = rsub(text, "zr̝$", "sr̝")
	text = rsub(text, "vr̝$", "fr̝")
	text = rsub(text, "ʒr̝$", "ʃr̝")
	text = rsub(text, "ɣr̝$", "xr̝")
	local i = 0
	while i <= 5 do
		text = rsub(text, "b(" .. T .. ")", "p%1")
		text = rsub(text, "d(" .. T .. ")", "t%1")
		text = rsub(text, "ɡ(" .. T .. ")", "k%1")
		text = rsub(text, "z(" .. T .. ")", "s%1")
		text = rsub(text, "v(" .. T .. ")", "f%1")
		text = rsub(text, "ʒ(" .. T .. ")", "ʃ%1")
		text = rsub(text, "ɣ(" .. T .. ")", "x%1")
		text = rsub(text, "p(" .. D .. ")", "b%1")
		text = rsub(text, "t(" .. D .. ")", "d%1")
		text = rsub(text, "k(" .. D .. ")", "ɡ%1")
		text = rsub(text, "s(" .. D .. ")", "z%1")
		text = rsub(text, "f(" .. D .. ")", "v%1")
		text = rsub(text, "ʃ(" .. D .. ")", "ʒ%1")
		text = rsub(text, "x(" .. D .. ")", "ɣ%1")
		i = i + 1
	end
	text = rsub(text, "(" .. T .. ")v", "%1f")
	-- stress
	if mw.ustring.find(text, "'") == nil then
		text = "ˈ" .. text
	end
	text = rsub(text, "'", "ˈ")
	-- ń
	text = rsub(text, "nj$", "n")
	text = rsub(text, "nj(" .. T .. ")", "n%1")
	-- ê
	text = rsub(text, "ˈ(" .. C .. "*)E", "ˈ%1i̯ɛ")
	text = rsub(text, "E", "ɛ")
	-- final ê e
	text = rsub(text, "ˈ(" .. C .. "*)ɛ$", "ˈ%1A")
	text = rsub(text, "ɛ$", "ə")
	text = rsub(text, "i̯ə",  "i̯ɛ")
	text = rsub(text, "A$", "ɛ")
	-- affricates
	text = rsub(text, "t([sɕʃ])", "t͡%1")
	text = rsub(text, "d([zʑʒ])", "d͡%1")
	-- suffixes
	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 = "/" .. phonemic(word) .. "/" })
	end
	
	return m_IPA.format_IPA_full(lang, IPA_results)
end

return export