Modül:tr-ad

Merhaba, buraya Modül:tr-ad kelimesinin anlamını aramaya geldiniz. DICTIOUS'da Modül:tr-ad kelimesinin tüm sözlük anlamlarını bulmakla kalmayacak, aynı zamanda etimolojisini, özelliklerini ve Modül:tr-ad kelimesinin tekil ve çoğul olarak nasıl söylendiğini de öğreneceksiniz. Modül:tr-ad kelimesi hakkında bilmeniz gereken her şey burada. Modül:tr-ad 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

Bu modül şu şablonlarda kullanılmaktadır:

Modülün alt sayfaları:


--Gerekli modülleri yükle
local istisnaKontrol = require("Modül:tr-ad/istisnalar")
local istisnaYumusama = istisnaKontrol.istisnaYumusama
local istisnaIncelme = istisnaKontrol.istisnaIncelme
local istisnaDusme = istisnaKontrol.istisnaDusme
local istisnaBilesik = istisnaKontrol.istisnaBilesik
local istisnaIkizlesme = istisnaKontrol.istisnaIkizlesme
local istisnaI = istisnaKontrol.istisnaI

--[[
	Burası çekimler tablosu, tüm parametrelerin açıklamaları şu şekildedir:
	
	1: sözcüğün son ünlüsü "aıâ" harflerinden biriyse bundan sonra gelecek ek
	2: sözcüğün son ünlüsü "eiî" harflerinden biriyse bundan sonra gelecek ek
	3: sözcüğün son ünlüsü "ouû" harflerinden biriyse bundan sonra gelecek ek
	4: sözcüğün son ünlüsü "öü" harflerinden biriyse bundan sonra gelecek ek
	5 ve 6: çekimleme tipi
]]
cekimler = {}
cekimler = {"", "", "", "", "yalın", "yalın"}
cekimler = {"ı", "i", "u", "ü", "belirtme", "belirtme"}
cekimler = {"a", "e", "a", "e", "belirtme", "yönelme"}
cekimler = {"da", "de", "da", "de", "bulunma", "bulunma"}
cekimler = {"dan", "den", "dan", "den", "bulunma", "ayrılma"}
cekimler = {"ı", "i", "u", "ü", "tamlayan", "tamlayan"}

iyelik = {}
iyelik = {"m", "m", "m", "m", "1t"}
iyelik = {"n", "n", "n", "n", "2t"}
iyelik = {"ı", "i", "u", "ü", "3t"}
iyelik = {"mız", "miz", "muz", "müz", "1ç"}
iyelik = {"nız", "niz", "nuz", "nüz", "2ç"}
iyelik = {"ı", "i", "u", "ü", "3ç"}

--Stringleri ters çevirmeye yarayan fonksiyon, ünlü ikizleşmesinde gerekiyor
function terscevir(s)
	local uzunluk = mw.ustring.len( s )
	local harfler = {}
	
	u = 1
	repeat
		table.insert(harfler, mw.ustring.sub( s, -1 ))
		s = mw.ustring.sub( s, 1, -2 )
		u = u + 1
	until(u == uzunluk + 1)
	
	return table.concat(harfler, "")
end

------------------------------------------------
--tr-ad-tablo şablonuna yardımcı olan fonksiyon
------------------------------------------------
function adTablo(frame)
	--Ana parametreler
	local ad = frame:getParent().args or frame:getParent().args or mw.title.getCurrentTitle()
	local it = frame:getParent().args
	local k = frame:getParent().args or frame:getParent().args
	
	local tablo = {}
	
	table.insert(tablo, "<div class='NavFrame' style='width:65%'>"
		.. "<div class='NavHead' style='' >''" .. ad .. "'' adının çekimi</div>"
		.. "<div class='NavContent'>"
		.. "\n{| style='background:#F9F9F9; text-align:center; width:100%' class='çekim inflection-table'"
		.. "\n|-"
		.. "\n! style='background:#DEDEDE' colspan='2' |"
		.. "\n! style='background:#DEDEDE' |''']'''"
		.. "\n! style='background:#DEDEDE' |''']'''"
		.. "\n|-")
	
	local function tumDurumlar(say, say2, ozel, cogul3)
		for _, c in ipairs(cekimler) do
			table.insert(tablo, "\n! style='background:#EFEFEF'"
				..(ozel and "" or "colspan='2'").." |'''" .. c .. "'''"
				.. "\n| style='color:black' ".. (cogul3 and "colspan='2'" or "") .."|[["
				.. ayarla(say, it, "tekil", c, c, c, c, c, k) .. "]]"
				.. (cogul3 and "<br>" or "\n| style='color:black' |")
				.. (k == "1" and "—" or "[["
				.. ayarla((ozel and say2 or say), it, (ozel and "tekil" or "çoğul"), c, c, c, c, c, k) .. "]]")
				.. "\n|-")
		end
	end
	
	tumDurumlar(ad)
	
	table.insert(tablo, "\n! colspan='4' style='background:#DEDEDE' |''']'''"
		.. "\n|-"
		.. "\n! style='background:#DEDEDE' colspan='2' |"
		.. "\n! style='background:#DEDEDE' |''']'''"
		.. "\n! style='background:#DEDEDE' |''']'''"
		.. "\n|-")
	
	for s, c in ipairs(iyelik) do
		local sira = s >= 4 and tostring(s-3) or tostring(s)
		local sen = s >= 4 and "çoğul" or "tekil"
		local tekil = ayarla(ad, it, "tekil", c, c, c, c, "iyelik", k)
		local cogul = ayarla(ad, it, "çoğul", c, c, c, c, "iyelik", k)
		
		table.insert(tablo, "\n! style='background:#DEDEDE' rowspan='6' |'''".. sira .. ". "..sen.."'''")
			tumDurumlar(tekil, cogul, true)
		table.insert(tablo, "\n|-")
	end
	
	table.insert(tablo, "\n|}" .. "</div></div>")
	
	return table.concat(tablo)
end

--------------------------------------------
--adların tüm hallerini ayarlayan fonksiyon
--------------------------------------------
function ayarla(ad, it, tekil, h1, h2, h3, h4, tip, k)
	--sözcüğün son harfini tut
    local sonHarf = mw.ustring.sub( ad, -1 )
    --sözcüğün son ünlü harfini tut
    local sonUnlu = mw.ustring.sub( require("Modül:tr-araçlar").harfAyikla(ad, "sessiz"), -1 )
    --sonAd string'ini başlat, olabilecek hatalara karşı
    local sonAd = ad
    
    --eğer bir sözcük grubu ise, sondaki sözcüğü yakala
    local sonKelime = mw.ustring.sub( ad, -3, -3 )
    local ciftKelime
    if sonKelime ~= " " then
	    if sonUnlu == sonHarf and mw.ustring.find(sonUnlu, "$") then
	    	ciftKelime = mw.ustring.match( ad, "")
	    end
    end
    
	if k == "1" and not mw.ustring.find(ad, "'") then
		sonAd = ad .. "'"
	end
	
	if sonHarf == "'" then
		sonHarf = mw.ustring.sub( ad, -2, -2 )
	end
    
    local ik = istisnaIkizlesme or it == "ikizleşme"
    local iy = istisnaYumusama or it == "yumuşama"
    local ii = istisnaIncelme or it == "incelme"
    local id = istisnaDusme or it == "düşme"
    local ix = istisnaI or it == "i"
    local ib = ciftKelime or istisnaBilesik or it == "bileşik"
    
    if it == "çoğulsuz" then
    	tekil = "tekil"
    end
    
    --Tekil hal buradan başlıyor
    if tekil == "tekil" then
		--Bazı durumlarda gerçekleşen ses olayları
		--
    	if tip == "belirtme" or tip == "tamlayan" or tip == "iyelik" then
			if tip == "iyelik" then
				if ib and sonAd ~= "su" then
					if mw.ustring.find(sonAd, "s$") and not mw.ustring.find(h1, "$") then
						sonAd = mw.ustring.sub( sonAd, 1, -3 )
					elseif mw.ustring.find(sonAd, "$") and mw.ustring.find(h1, "$") then
						h1, h2, h3, h4 = "", "", "", ""
					end
				elseif mw.ustring.sub( ad, -2 ) == "su" then
					h3 = "yu" .. (mw.ustring.sub( h3, -1 ) ~= "u" and h3 or "")
				elseif sonHarf ~= sonUnlu and not mw.ustring.find(h1, "$") then
					h1, h2, h3, h4 = "ı" .. h1, "i" .. h2, "u" .. h3, "ü" .. h4
				elseif sonHarf == sonUnlu and mw.ustring.find(h1, "$") and not ib then
					h1, h2, h3, h4 = "s" .. h1, "s" .. h2, "s" .. h3, "s" .. h4
				end
			else
				--İSTİSNA: Kelime grubu ya da birleşik kelime ise ve tamlama şeklindeyse "n" ünsüzü ekten önce gelir
				if ib and sonAd ~= "su" then
					--İSTİSNA: Burada suyu istisnası mevcut; suyuyu değil suyunu olacak çünkü
					sonAd = sonAd .. ((tip ~= "tamlayan" and mw.ustring.sub( ad, -4 ) ~= "suyu" and mw.ustring.find(sonAd, "$")) and "y" or "n")
				--İSTİSNA: Kelime grubu ya da birleşik kelime dışındaki sözcüklerde son harf ünlü ise "y" ünsüzü ekten önce gelir
				elseif sonUnlu == sonHarf then
					if mw.ustring.sub( ad, -2 ) == "su" then
						sonAd = sonAd .. "y"
					else
						sonAd = sonAd
							.. ((tip == "tamlayan"
								or not ix and mw.ustring.find(ad, "$"))
								and "n" or "y")
					end
				end
			end
		    --İSTİSNA: Bazı istisnalar dışında sözcüklerin sonlarındaki "k, t, ç, p" harfleri incelerek "ğ, d, c, b" harflerine dönüşür
		    if iy or k == "1" then else
		    	if mw.ustring.sub( ad, -2 ) == "nk" then
		    		sonAd = mw.ustring.sub( sonAd, 1, -2 ) .. "g"
		    	elseif mw.ustring.find(sonHarf, "$") then
				    sonAd = mw.ustring.sub( sonAd, 1, -2 )
				    .. (sonHarf == "k" and "ğ" or sonHarf == "t" and "d" or sonHarf == "ç" and "c" or sonHarf == "p" and "b" or "")
			    end
			end
			--İSTİSNA: Bazı kelimelerin belirtme, yönelme, tamlayan hâllerinde sonraki ünsüz ikizleşir
			if ik then
				sonAd = sonAd .. mw.ustring.sub( sonAd, -1 )
			end
			--İSTİSNA: Bazı kelimelerde yönelme, belirtme, tamlayan hâllerinde ortadaki ünlü düşebilir ama çoğullarda düşmez
			if id then
				--YAPILACAK: Buradaki kod yalnızca UTF-8 karakterleri ile çalıştığı için "ı, İ" harfleri bu duruma dahil olamıyor.
				sonAd = terscevir( sonAd )
				sonAd = mw.ustring.gsub( sonAd, "", "", 1)
				sonAd = terscevir( sonAd )
			end
    	end
		if tip == "bulunma" then
			if ib and sonAd ~= "su" then
				if sonHarf == sonUnlu then
					-- İSTİSNA: suyu istisnası
					sonAd = sonAd .. (mw.ustring.sub( ad, -4 ) ~= "suyu" and mw.ustring.find(sonAd, "$") and "" or "n")
				else
					sonAd = require("Modül:tr-araçlar").unluUyumu(sonAd, ((ii) and "in" or "ın"), "in", ((ii) and "ün" or "un"), "ün")
				end
			else
				--İSTİSNA: Sonu "f, s, t, k, ç, ş, h, p" harfleri ile biten sözcüklerden sonra "de, da, den, dan" ekleri geldiği zaman bu eklerdeki
				--"d" harfleri sertleşerek "t" harfine dönüşür
				if mw.ustring.find(sonHarf, "$") then
					h1 = "t" .. mw.ustring.sub( h1, 2, -1 )
					h2 = "t" .. mw.ustring.sub( h2, 2, -1 )
					h3 = "t" .. mw.ustring.sub( h1, 2, -1 )
					h4 = "t" .. mw.ustring.sub( h2, 2, -1 )
				end
				
				sonAd = sonAd .. (not ix and ( mw.ustring.find(ad, "$"))
						and "n" or "")
			end
		end
		if tip == "bulunma" or tip == "ayrılma" then
			sonAd = sonAd .. (mw.ustring.find(sonAd, "ş$") and "n" or "")
		end
		
		--Sonuç
		sonAd = require("Modül:tr-araçlar").unluUyumu(sonAd, ((ii) and h2 or h1), h2, ((ii) and h4 or h3), h4)
	--Çoğul hal burada başlıyor
	else
		--Bazı durumlarda olan ses olayları
		--
		--Tamlama şeklinde olan sözcüklerde son ek düşer
		if mw.ustring.len( ad ) ~= 2 and mw.ustring.find(mw.ustring.sub( sonAd, -2 ), "s$")
		and not mw.ustring.find(sonAd, "ksi$") then
			sonAd = mw.ustring.sub( ad, 1, -2 )
		end
		if ib and sonAd ~= "su" and not mw.ustring.find(sonAd, "şu$") and sonHarf == sonUnlu and not mw.ustring.find(ad, "$") then
			if k == "1" then
				sonAd = mw.ustring.sub( sonAd, 1, -3 ) .. "'"
			else
				sonAd = mw.ustring.sub( sonAd, 1, -2 )
			end
		end
		sonHarf = mw.ustring.sub( sonAd, -1 )
		--Son harfi "ğ" ile biten söczüklerde bu harf kalınlaşarak "k" harflerine dönüşür
		if ib then
			if mw.ustring.find(sonHarf, "$") and mw.ustring.find(ad, "$") then
				sonAd = mw.ustring.sub( sonAd, 1, -2 )
				.. (sonHarf == "ğ" and "k" or (sonHarf == "c" and "ç" or (sonHarf == "b" and "p" or "")))
			end
		end
		if tip == "iyelik" and not mw.ustring.find(mw.ustring.sub( h1, 1 ), "$") then
			h1, h2, h3, h4 = "ı" .. h1, "i" .. h2, "u" .. h3, "ü" .. h4
		end
		if ib then
			if ii then
				sonAd = sonAd .. "leri" .. (tip == "yalın" and "" or "n") .. h2
			elseif tip == "iyelik" or mw.ustring.find(ad, "$") then
				if mw.ustring.sub( ad, -4 ) == "suyu" then
					sonAd = mw.ustring.sub( ad, 1, -3 )
					if tip == "yalın" then h1 = h1.. "ı" end
					if tip == "bulunma" then h1 = "ın"..h1 end
				end
				sonAd = require("Modül:tr-araçlar").unluUyumu(sonAd, "lar" .. h1, "ler" .. h2)
			else
				sonAd = require("Modül:tr-araçlar").unluUyumu(sonAd, "ları" .. (tip == "yalın" and "" or "n") .. h1, "leri" .. (tip == "yalın" and "" or "n") .. h2)
			end
		else
			if ii then
				sonAd = sonAd .. "ler" .. h2
			else
				sonAd = require("Modül:tr-araçlar").unluUyumu(sonAd, "lar" .. h1, "ler" .. h2)
			end
		end
		sonAd = mw.ustring.sub( mw.ustring.gsub(sonAd, "()()zl()r", "l%3r%2%1%2z"), 1, -1 )
	end
	if tip == "tamlayan" then
		sonAd = sonAd .. "n"
	end
	if mw.ustring.sub(sonAd, -1) == "'" then
		sonAd = mw.ustring.sub(sonAd, 0, -2)
	end
	
	return sonAd
end

--bu fonksiyon ] tarafından kullanılmaktadır
--burada yapacağınız değişiklikler sadece o modülü ilgilendirir
--Türkçe dilindeki adlara gelen ekleri ayırt eden fonksiyon
function cekim_tr(args)
	--çekimlemesi yapılan sözcüğün yalın hali
	local ad = args
	--asıl çekimleme, bu modül sadece çekimlemenin yapıldığı asıl
	--maddede kullanılacağı için direk sayfa adını alıyoruz
	local cekim = mw.title.getCurrentTitle()
	--çekimleme yapılırken bir istisnai durum gerçekleşti mi,
	--ilk parametrede girilen yalın hale ek gelirken bir istisna olduysa
	--o girilmeli, bu istisnalar ] sayfasında bulunabilir
	local it = args
	--ekten önce bir kesme işareti gelecek mi? özel adlarda genellikle
	--kesme işareti gelir, bu parametreye herhangi bir değer girilmesi
	--bu durumu aktif hale getirir
	local k = args or args
	
	--eğer çekimde ' varsa, bu bir özel ad çekimidir
	if mw.ustring.find(cekim, "'") then k = "1" end
	
	--otomatik çekimlemeler arasına virgül ekleyen fonksiyon
	local function virgul(tablo)
		if tablo then
			table.insert(tablo, ";")
		end
	end
	
	--tek tek tüm çekimlemeleri karşılaştırdığımız kısım
	--burada Modül:tr-ad'ın ayarla() fonksiyonu sayesinde
	--ilk parametrede girilen yalın sözcüğün tüm çekimlemelerini
	--çağırıp karşılaştırma yapabiliyoruz ve sonuç olarak ilgili açıklamaları ekliyoruz
	--ayarla() fonksiyonunun nasıl çalıştığını daha iyi anlamak için
	--ilgili modüle bakabilirsiniz
	local function tumDurumlar(say, kisi, ozel)
		for i, c in ipairs(cekimler) do
			if cekim == ayarla(say, it, "tekil", c, c, c, c, c, k) then
				--eğer başka otomatik bir çekim saptandıysa başa virgül eklemeliyiz
				virgul(args)
				if ozel then table.insert(args, kisi) if c == "yalın" then c = "iyelik" end end
				table.insert(args, c)
				if ozel and mw.ustring.find(say, "lr") then table.insert(args, "ç")
				else table.insert(args, "t") end
			end
			if cekim == ayarla(say, it, "çoğul", c, c, c, c, c, k) then
				--eğer başka otomatik bir çekim saptandıysa başa virgül eklemeliyiz
				virgul(args)
				table.insert(args, c)
				table.insert(args, "ç")
			end
		end
	end
	
	tumDurumlar(ad)

	for i, s in ipairs(iyelik) do
		local tekil = ayarla(ad, it, "tekil", s, s, s, s, "iyelik", k)
		local cogul = ayarla(ad, it, "çoğul", s, s, s, s, "iyelik", k)
		tumDurumlar(tekil, s, true)
		tumDurumlar(cogul, s, true)
	end
	
	if args then else table.insert(args, "belirtilmemiş") end
	
end

return {
	ayarla = ayarla,
	adTablo = adTablo,
	cekim_tr = cekim_tr,
}