Modül:cdo-söyleniş

Merhaba, buraya Modül:cdo-söyleniş kelimesinin anlamını aramaya geldiniz. DICTIOUS'da Modül:cdo-söyleniş kelimesinin tüm sözlük anlamlarını bulmakla kalmayacak, aynı zamanda etimolojisini, özelliklerini ve Modül:cdo-söyleniş kelimesinin tekil ve çoğul olarak nasıl söylendiğini de öğreneceksiniz. Modül:cdo-söyleniş kelimesi hakkında bilmeniz gereken her şey burada. Modül:cdo-söyleniş kelimesinin tanımı, konuşurken veya metinlerinizi yazarken daha kesin ve doğru olmanıza yardımcı olacaktır. XXX'in ve diğer kelimelerin tanımını bilmek, kelime dağarcığınızı zenginleştirir ve size daha fazla ve daha iyi dilsel kaynaklar sağlar.
Modül belgelemesi
local export = {}

local gsub = mw.ustring.gsub
local sub = mw.ustring.sub
local len = mw.ustring.len
local match = mw.ustring.match
local lower = mw.ustring.lower

local split_tone = {
	 = "a".."̆",  = "e".."̆",  = "i".."̆",  = "o".."̆",  = "u".."̆",
	 = "a".."̄",  = "e".."̄",  = "i".."̄",  = "o".."̄",  = "u".."̄",
	 = "a".."́",  = "e".."́",  = "i".."́",  = "o".."́",  = "u".."́",
	 = "a".."̀",  = "e".."̀",  = "i".."̀",  = "o".."̀",  = "u".."̀",
	 = "a".."̂",  = "e".."̂",  = "i".."̂",  = "o".."̂",  = "u".."̂",
}

local tone_from_mark = {
	 = 1,  = 1,  = 7,  = 7,
	 = 2,
	 = 3,
	 = "4A",  = "4B",
	 = 5,
	 = 6
}

local initial_ipa = {
	 = {  = "p",  = "<sup>(p-)</sup>β",  = "<sup>(p-)</sup>m" },
	 = {  = "pʰ",  = "<sup>(pʰ-)</sup>β",  = "<sup>(pʰ-)</sup>m" },
	 = {  = "m",  = "m",  = "m" },
	 = {  = "t",  = "<sup>(t-)</sup>l",  = "<sup>(t-)</sup>n" },
	 = {  = "tʰ",  = "<sup>(tʰ-)</sup>l",  = "<sup>(tʰ-)</sup>n" },
	 = {  = "nˡ",  = "nˡ",  = "nˡ" },
	 = {  = "l̃",  = "l̃",  = "<sup>(l-)</sup>nˡ" },
	 = {  = "k",  = "<sup>(k-)</sup>",  = "<sup>(k-)</sup>ŋ" },
	 = {  = "kʰ",  = "<sup>(kʰ-)</sup>",  = "<sup>(kʰ-)</sup>ŋ" },
	 = {  = "ŋ",  = "ŋ",  = "ŋ" },
	 = {  = "h",  = "<sup>(h-)</sup>",  = "<sup>(h-)</sup>ŋ" },
	 = {  = "t͡s",  = "<sup>(t͡s-)</sup>ʒ",  = "<sup>(t͡s-)</sup>ʒ" },
	 = {  = "t͡sʰ",  = "<sup>(t͡sʰ-)</sup>ʒ",  = "<sup>(t͡sʰ-)</sup>ʒ" },
	 = {  = "s",  = "<sup>(s-)</sup>l",  = "<sup>(s-)</sup>n" },
	 = {  = "",  = "",  = "<sup>(Ø-)</sup>ŋ" },
}

local final_ipa = {
		= {  = "a",		 = "ɑ"	}, 
		= {  = "ɛ",		 = "ɑ"	}, 
		= {  = "œ",		 = "ɔ"	}, 
		= {  = "øyʔ",	 = "ɔyʔ"	},--see ]
		= {  = "øyʔ",	 = "ɔyʔ"	},
		= {  = "øyŋ",	 = "ɔyŋ"	}, 
		= {  = "aʔ",	 = "ɑʔ"	}, 
		= {  = "ɛʔ",	 = "ɑʔ"	}, 
		= {  = "ai",	 = "ɑi"	}, 
		= {  = "ɛiʔ",	 = "aiʔ"	}, 
		= {  = "ɛiŋ",	 = "aiŋ"	}, 
		= {  = "ɛu",	 = "ɑu"	}, 
		= {  = "aʔ",	 = "ɑʔ"	}, 
		= {  = "aŋ",	 = "ɑŋ"	}, 
		= {  = "au",	 = "ɑu"	}, 
		= {  = "ouʔ",	 = "ɑuʔ"	}, 
		= {  = "ouŋ",	 = "ɑuŋ"	}, 
		= {  = "i",		 = "ɛi"	}, 
		= {  = "œ",		 = "ɔ"	}, 
		= {  = "ɛiʔ",	 = "ɛiʔ"	},--see ]
		= {  = "œʔ",	 = "œʔ"	}, 
		= {  = "ɛiʔ",	 = "aiʔ"	}, 
		= {  = "iʔ",	 = "ɛiʔ"	}, 
		= {  = "øyʔ",	 = "ɔyʔ"	}, 
		= {  = "ɛiŋ",	 = "aiŋ"	}, 
		= {  = "iŋ",	 = "ɛiŋ"	}, 
		= {  = "øyŋ",	 = "ɔyŋ"	}, 
		= {  = "ɛu",	 = "ɑu"	}, 
		= {  = "ieu",	 = "iɛu"	}, 
		= {  = "y",		 = "øy"	}, 
		= {  = "yʔ",	 = "øyʔ"	}, 
		= {  = "yŋ",	 = "øyŋ"	}, 
		= {  = "i",		 = "ɛi"	}, 
		= {  = "ia",	 = "iɑ"	}, 
		= {  = "iaʔ",	 = "iɑʔ"	}, 
		= {  = "iaʔ",	 = "iɑʔ"	}, 
		= {  = "iaŋ",	 = "iɑŋ"	}, 
		= {  = "iau",	 = "iau"	}, 
		= {  = "ie",	 = "iɛ"	}, 
		= {  = "ieʔ",	 = "iɛʔ"	}, 
		= {  = "ieʔ",	 = "iɛʔ"	}, 
		= {  = "ieŋ",	 = "iɛŋ"	}, 
		= {  = "ieu",	 = "iɛu"	}, 
		= {  = "iʔ",	 = "ɛiʔ"	}, 
		= {  = "iʔ",	 = "ɛiʔ"	}, 
		= {  = "iŋ",	 = "ɛiŋ"	}, 
		= {  = "yo",	 = "yɔ"	}, 
		= {  = "yoʔ",	 = "yɔʔ"	}, 
		= {  = "yoʔ",	 = "yɔʔ"	}, 
		= {  = "yoŋ",	 = "yɔŋ"	}, 
		= {  = "ieu",	 = "iɛu"	}, 
		= {  = "ŋ̍",		 = "ŋ̍"	},
		= {  = "u",		 = "ou"	}, 
		= {  = "o",		 = "ɔ"	}, 
		= {  = "oʔ",	 = "ɔʔ"	}, 
		= {  = "øy",	 = "ɔy"	}, 
		= {  = "ui",	 = "ui"	}, 
		= {  = "øy",	 = "ɔy"	}, 
		= {  = "ouʔ",	 = "ɔuʔ"	}, 
		= {  = "uʔ",	 = "ouʔ"	}, 
		= {  = "oʔ",	 = "ɔʔ"	}, --see ]
		= {  = "ouŋ",	 = "ɔuŋ"	}, 
		= {  = "uŋ",	 = "ouŋ"	}, 
		= {  = "u",		 = "ou"	}, 
		= {  = "y",		 = "øy"	}, 
		= {  = "ua",	 = "uɑ"	}, 
		= {  = "uaʔ",	 = "uɑʔ"	}, 
		= {  = "uai",	 = "uɑi"	}, 
		= {  = "uaʔ",	 = "uɑʔ"	}, 
		= {  = "uaŋ",	 = "uɑŋ"	}, 
		= {  = "ui",	 = "ui"	}, 
		= {  = "uʔ",	 = "ouʔ"	}, 
		= {  = "yʔ",	 = "øyʔ"	}, 
		= {  = "uŋ",	 = "ouŋ"	}, 
		= {  = "yŋ",	 = "øyŋ"	}, 
		= {  = "uo",	 = "uɔ"	}, 
		= {  = "uoʔ",	 = "uɔʔ"	}, 
		= {  = "ui",	 = "ui"	}, 
		= {  = "uoʔ",	 = "uɔʔ"	}, 
		= {  = "uoŋ",	 = "uɔŋ"	}, 
}

local tone_ipa = {
	 = "⁵⁵", --陰平
	 = "³³", --上聲
	 = "²¹³", --陰去
	 = "²⁴", --陰入-甲 (-k)
	 = "²⁴", --陰入-乙 (-h)
	 = "⁵³", --陽平
	 = "²⁴²", --陽去
	 = "⁵", --陽入
	 = "²¹", --半陰去
	 = "³⁵", --半陽去
	 = "⁻",
	 = "⁽",
	 = "⁾",
}

local tone_sandhi = {
	 = "1",  = "1",  = "5",  = "5",
	 = "8",  = "8",  = "9",  = "1",
	 = "1",  = "2",  = "2",  = "8",

	 = "8-1",  = "8-1",  = "8-5",  = "8-5",
	 = "8-8",  = "8-8",  = "8-9",  = "8-1",
	
	 = "8-1",  = "8-1",  = "8-5",  = "8-5",
	 = "8-8",  = "8-8",  = "8-9",  = "8-1",
	
	 = "8-1",  = "8-1",  = "8-5",  = "8-5",
	 = "8-8",  = "8-8",  = "8-9",  = "8-1",
	
	 = "1-1",  = "1-1",  = "5-2",  = "5-8",
	 = "9-2",  = "9-2",  = "9-2",  = "1-8",
	 = "2-2",  = "2-2",  = "2-2",  = "8-8",
}

local sylcat = {
	 = {
		 = "A",  = "A",  = "A",  = "A",
		 = "B",  = "B",
		 = "C",  = "C"
	},
	 = {
		 = "I", 
		 = "II",  = "II",
		 = "III",
		 = "IV",  = "IV",  = "IV",  = "IV"
	}
}

local diminutive_sandhi = {
	 = "2",  = "2",  = "2",
	 = "8",  = "8",  = "8",  = "8",
	 = "7"
}

local dual_rimes = {
	 = true,  = true,
	 = true,  = true,
	 = true,
	 = true,
}

local neg_assim = {
	 = "<sup>(ŋ̍-)</sup>m̩",
	 = "<sup>(ŋ̍-)</sup>n̩",
	 = "<sup>(ŋ̍-)</sup>ŋ̍",
	 = "<sup>(ŋ̍-)</sup>ŋ̍/m̩/n̩",
}

local neg_type = {
	 = "labial",  = "labial",  = "labial",
	 = "dental",  = "dental",  = "dental",  = "dental",  = "dental",  = "dental",
	 = "alone",
}

local initial_string = "^(??)"

function export.rom(text)
	text = gsub(text, "/", " / ")
	text = gsub(text, "\>(+)", "<sup>→%1</sup>")
	return text
end

function export.sentence(text)
	local sentence = {}
	text = gsub(text, "", "")
	for word in mw.text.gsplit(lower(text), " ", true) do
		table.insert(sentence, export.ipa(word))
	end
	return table.concat(sentence, " ")
end

local function determ_tone(text)
	local tone = gsub(gsub(text, ".", split_tone), "^*(?)*(?)$", function(tone_symbol, coda)
		return tone_from_mark end)
	return tone
end

function export.ipa(text, feature)
	if type(text) == "table" then
		text = text.args
	end
	text = lower(text)
	local phrase_result = {}
	local words = mw.text.split(text, "/")
	for _, word in ipairs(words) do
		local word_result = {}
		local parts = mw.text.split(word, " ")
		for _, part in ipairs(parts) do
			local initial, final, tone, tone_conv, ipa, exc = {}, {}, {}, {}, {}, {}
			local lenition_blocked, ablaut_blocked, diminutive = {}, {}, {}
			local syllables = mw.text.split(part, "-")
			for index, syllable in ipairs(syllables) do
				syllable = gsub(syllable, "\\$", function(diminutive_syllable) diminutive = true return "" end)
				syllable = gsub(syllable, "\!$", function(ablaut_syllable) ablaut_blocked = true return "" end)
				syllable = gsub(syllable, "\*", function(captured_initial) lenition_blocked = true return "" end)
				if match(syllable, "\>") then
					tone = determ_tone(gsub(gsub(gsub(syllable, "\>+$", ""), initial_string, ""), ".", split_tone))
					syllable = gsub(syllable, "+\>", "")
					exc = determ_tone(gsub(syllable, initial_string, ""))
				end
				initial = match(syllable, initial_string)
				final = sub(syllable, len(initial) + 1, -1)
				final = gsub(final, ".", split_tone)
				tone = exc and tone or determ_tone(final)
				final = gsub(final, "", "")
				if dual_rimes] and match(tostring(tone), "") then
					final = final .. "2"
				end
				final = match(initial .. final, "h?io") and gsub(final, "io", "uo") or final
				if (initial .. final) == "ng" then
					initial, final = "", "ng"
				end
			end
			
			if #syllables == 1 or feature == "no_sandhi" then
				tone_conv = tone
			
			elseif #syllables == 2 then
				tone_conv = {
					tone.."-"..(tone_sandhi or tone].."-"..sylcat]]),
					tone
				}
		
			elseif #syllables == 3 then
				sandhi = mw.text.split(tone_sandhi or tone].."-"..
					sylcat or tone].."-"..sylcat]], "-")
				tone_conv = {
					tone.."-"..sandhi,
					tone.."-"..sandhi,
					tone
				}
		
			elseif #syllables == 4 then
				tone_conv = {
					tone.."-"..tone_sandhi or tone].."-"..sylcat]],
					tone.."(-8)",
					tone.."-"..tone_sandhi or tone].."-"..sylcat]],
					tone
				}
				
			end
			
			for index = 1, #syllables do
				if diminutive then tone_conv = gsub(tone_conv, "\-.+$", "-" .. diminutive_sandhi]) end
				if (match(tostring(tone_conv), "?$") and (#syllables == 1 or index == #syllables)) or ablaut_blocked then
					final = final_ipa]
				else
					final = final_ipa]
				end
				local initial_state = (index == 1 or match(syllables, "k\!?\\?$") or lenition_blocked)
					and "değiştirilmemiş" or (match(final, "$") and "nasal" or "yeniden")
					
				initial = initial_ipa]
				if final == "ŋ̍" then
					final = neg_assim or "✘", 1, 1)] or "velar"]
				end
				tone_conv = gsub(tone_conv, "(+)\-(+)", function(original, sandhi)
					if original == sandhi then
						return original
					end end)
				tone_conv = gsub(tone_conv, "(.?)", tone_ipa)
				ipa = initial .. final .. tone_conv
			end
			table.insert(word_result, table.concat(ipa, " "))
		end
		table.insert(phrase_result, table.concat(word_result, " "))
	end
	return table.concat(phrase_result, "/, /")
end

return export