Module:siwa-pron: Difference between revisions

From Linguifex
Jump to navigation Jump to search
No edit summary
No edit summary
Line 25: Line 25:
["ɑ"] = "a", ["e"] = "ɛ", ["i"] = "ɪ", ["ɔ"] = "ɔ", ["u"] = "ʊ", ["y"] = "œ", ["ø"] = "œ",
["ɑ"] = "a", ["e"] = "ɛ", ["i"] = "ɪ", ["ɔ"] = "ɔ", ["u"] = "ʊ", ["y"] = "œ", ["ø"] = "œ",
}
}
local otc = {}
for vc in gmatch(v, ".") do
for vc in gmatch(v, ".") do
for regex, replacement in ipairs(switch) do
for regex, replacement in ipairs(switch) do
gsub(vc, regex, replacement)
gsub(vc, regex, replacement)
table.insert(otc, vc)
end
end
end
end
Line 38: Line 40:
end
end
return table.concat(tab)]]
return table.concat(tab)]]
return vc
return table.concat(otc)
end
end



Revision as of 12:45, 5 January 2021



local export = {}
	
local m_IPA = require("Module:IPA")
local m_su = require("Module:string utilities")
local m_table = require("Module:table")
local m_sm = mw.loadData('Module:siwa-pron/data')

local sub = mw.ustring.sub
local find = mw.ustring.find
local gmatch = mw.ustring.gmatch
local gsub = mw.ustring.gsub
local u = mw.ustring.char

local UNRELEASED = u(0x031A) -- COMBINING LEFT ANGLE ABOVE. ̚
local NASALIZED = u(0x0303) -- COMBINING TILDE. ̃

--obsolete ligatures and L with stroke used to remove two-character hassle. will replace later
local consonant = "[mnɲŋpbtdcɟkɡʔvðsɕxɣhʨʥɾlɬłʣjw]" .. UNRELEASED .. "?"
local front_vowel = "iɪyeøɛœæa"
local back_vowel = "uɔ" .. NASALIZED .. "?ɑʊ"
local vowel = "[" .. front_vowel .. back_vowel .. "]"

local function open_to_closed(v)
	local switch = {
		["ɑ"] = "a", ["e"] = "ɛ", ["i"] = "ɪ", ["ɔ"] = "ɔ", ["u"] = "ʊ", ["y"] = "œ", ["ø"] = "œ",
	}
	local otc = {}
	
	for vc in gmatch(v, ".") do
		for regex, replacement in ipairs(switch) do
			gsub(vc, regex, replacement)
			table.insert(otc, vc)
		end
	end
	--[[local tab={}
	for regex, replacement in ipairs(switch) do
		--for i=1,#v do
			 table.insert(tab, gsub(sub(v,i,i), regex, replacement))
		--end
	end
	return table.concat(tab)]]
	return table.concat(otc)
end

local rules = {
	{	--long consonants
		["mm"] = "mː",
		["bb"] = "pː",
		["vv"] = "wː",
		["nn"] = "nː",
		["dd"] = "tː",
		["ḍḍ"] = "ðː",
		["ss"] = "sː",
		["ṡṡ"] = "ɕː",
		["ddį"] = "ʥː",
		["rr"] = "rː",
		["ll"] = "lː",
		["gg"] = "kː",
		["ġġ"] = "xː",
		["ng"] = "ŋː",
		["hh"] = "hː",
		["ḥḥ"] = "ʔː",
	},
	{	--consonants not affected by stress
		["ṡ"] = "ɕ",
		["tṡ"] = "ʨ",
		["dį"] = "ʥ",
		["ḍ"] = "ð",
		["dl"] = "tɬ",
		["ng"] = "ŋː",
		["nį"] = "ɲ",
		["ġ"] = "x",
	},
	{	--all vowels as open (open-closed distinctions are computed later)
		["a"] = "ɑ", ["ả"] = "æː",
		["ę"] = "æ",
		["ẻ"] = "eː",
		["ỉ"] = "iː",
		["o"] = "ɔ", ["ỏ"] = "ʊː",
		["ủ"] = "uː",
		["ỷ"] = "yː",
		["ů"] = "ø", ["ẻu"] = "øː",
		["õ"] = "ɔ̃", ["õu"] = "ɔ̃ː̃",
	},
	{
		["^k([" .. front_vowel .. "])"] = "c%1", --word-initial [k] palatalizes before front-vowels
		["^([ptkc])"] = "%1ʰ", --voiceless stops word-initially become aspirated
		["^gį([" .. front_vowel .. "])"] = "ʣ%1", --<gį> word-initially and before front vowels is pronounced [d͡z]
		
	},
	{
		["([ieuɔ][ɑeuɔ][eiu])(" .. consonant .. consonant .. ")"] = open_to_closed("%1") .. "%2",
	},
	{
		["(" .. vowel .. ")t$"] = "%1ʔ%1" -- -Vt becomes -VʔV (or -Vht, not considered)
	},
}

--[[function export.syllable(frame)
	local word = mw.title.getCurrentTitle().text
	local pattern = "^[" .. initial .. "]?[" .. vocalic .. "]{1}[" .. internal .. "]?"
	x = m_su.capturing_split(word, pattern)
	return x[1]
end]]

function export.crux(term)
	local IPA = {}
	
	term=mw.ustring.lower(term)
	
	for _, rule in ipairs(rules) do
		for regex, replacement in pairs(rule) do
			term = gsub(term, regex, replacement)
		end
	end
	
	if not find(term, "·") then
		table.insert(IPA, "ˈ")
	end
	
	table.insert(IPA, term)
	
	--[[if find(term, "·") then
		morphemes = {}
		morphemes = mw.text.split(term, "·")
		for _, morpheme in ipairs(morphemes) do
			print(morphemes[morpheme])
		end
	end]]
	
	IPA = table.concat(IPA)
	
	return IPA
end

function export.show(frame)
	local parent_args = frame:getParent().args
	local params = {
		[1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and "uįo·sauṡṡi" or mw.title.getCurrentTitle().text },
	}
	local args = require("Module:parameters").process(parent_args, params)
	local term = args[1]
	
	local ipa = export.crux(term)
	
	local IPA_key = "IPA for Siwa"
	local key_link = "[[".. IPA_key .."|key]]"

	local prefix = "[[w:IPA chart|IPA]]<sup>(" .. key_link .. ")</sup>:&#32;"
	local accent="(\''Aingo\'') "
	
	ipa = "<span style=\"font-size:110%;font-family:Gentium,'DejaVu Sans','Segoe UI',sans-serif>[" .. ipa .. "]</span>"
	ipa = accent..prefix..ipa
	
	return ipa
end

return export