Modül:tr-eylem

Merhaba, buraya Modül:tr-eylem kelimesinin anlamını aramaya geldiniz. DICTIOUS'da Modül:tr-eylem kelimesinin tüm sözlük anlamlarını bulmakla kalmayacak, aynı zamanda etimolojisini, özelliklerini ve Modül:tr-eylem kelimesinin tekil ve çoğul olarak nasıl söylendiğini de öğreneceksiniz. Modül:tr-eylem kelimesi hakkında bilmeniz gereken her şey burada. Modül:tr-eylem 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 araclar = require("Modül:tr-araçlar")
local istisnaKontrol = require("Modül:tr-eylem/istisnalar")
local istisnaGenis = istisnaKontrol.istisnaGenis
local istisnaIncelme = istisnaKontrol.istisnaIncelme

----------------------------------------
--sahiplik eklerini ayarlayan fonksiyon
----------------------------------------
function sahiplik(ad, sahip, durum)
	if araclar.sonHarfUnluMu(ad) and durum then
		--Son harf ünlü ise
		if sahip == "ben" then
			ad = ad .. "m"
		elseif sahip == "sen" then
			ad = ad .. "n"
		elseif sahip == "o" then
			ad = ad
		elseif sahip == "biz" then
			ad = ad .. "k"
		elseif sahip == "siz" then
		    ad = araclar.unluUyumu(ad, "nız", "niz", "nuz", "nüz")
		end
	else
		--Son harf ünsüz ise
		if sahip == "ben" then
		    ad = araclar.unluUyumu(ad, "ım", "im", "um", "üm")
		elseif sahip == "sen" then
		    ad = araclar.unluUyumu(ad, "sın", "sin", "sun", "sün")
		elseif sahip == "o" then
			ad = ad
		elseif sahip == "biz" then
		    ad = araclar.unluUyumu(ad, "ız", "iz", "uz", "üz")
		elseif sahip == "siz" then
		    ad = araclar.unluUyumu(ad, "sınız", "siniz", "sunuz", "sünüz")
		end
	end
	if sahip == "onlar" then
	    ad = araclar.unluUyumu(ad, "lar", "ler")
	end
    
    return ad
end

function bilesikZaman(ad, zaman, cVar, tablo, sahip, durum)
    local ad2 = nil
    
	local function olmama(bir,iki)
		return (cVar == "yok" or cVar == bir) and "—" or iki
	end
	
	if zaman == "hikaye" then
		local ek = mw.ustring.find(mw.ustring.sub( ad, -1 ), "$") and "t" or "d"
		if araclar.sonHarfUnluMu(ad) then
			ad = ad .. "y"
		end
		if sahip == "sen" or sahip == "siz" then durum = true end
		ad = olmama("h-yok", araclar.unluUyumu(ad, ek.."ı", ek.."i", ek.."u", ek.."ü"))
	elseif zaman == "rivayet" then
		if araclar.sonHarfUnluMu(ad) then
			ad = ad .. "y"
		end
		ad = olmama("r-yok", araclar.unluUyumu(ad, "mış", "miş", "muş", "müş"))
	elseif zaman == "şart" then
		if sahip == "onlar" then
			ad2 = olmama("ş-yok", araclar.unluUyumu(ad, "larsa", "lerse"))
		end
		if araclar.sonHarfUnluMu(ad) then
			ad = ad .. "y"
		end
		if sahip == "sen" or sahip == "siz" then durum = true end
		ad = olmama("ş-yok", araclar.unluUyumu(ad, "sa", "se"))
	end
	
	table.insert(tablo, sahiplik(ad, sahip, durum))
	if ad2 and ad2 ~= "—" then table.insert(tablo, ad2) end
end

---------------------------------------------------------
--bildirme kipi belirli geçmiş zamanı ayarlayan fonksiyon
---------------------------------------------------------
function belirliGecmis(ad, olumlu, sahip, zaman)
	local tablo = {}
    local ek = "d"
    
    if olumlu == "olumlu" then
    	--Bazı durumlarda olan ses olayları
	    if mw.ustring.find(mw.ustring.sub( ad, -1 ), "$") then
			ek = "t"
		end
		ad = araclar.unluUyumu(ad, ek .. "ı", ek .. "i", ek .. "u", ek .. "ü")
	else
		ad = araclar.unluUyumu(ad, "ma" .. ek .. "ı", "me" .. ek .. "i")
	end
	
	durum = true
	bilesikZaman(ad, zaman, "r-yok", tablo, sahip, durum)
	
	return tablo
end

-----------------------------------------------------------
--bildirme kipi belirsiz geçmiş zamanı ayarlayan fonksiyon
-----------------------------------------------------------
function belirsizGecmis(ad, olumlu, sahip, zaman)
	local tablo = {}

    if olumlu == "olumlu" then
		ad = araclar.unluUyumu(ad, "mış", "miş", "muş", "müş")
	else
		ad = araclar.unluUyumu(ad, "mamış", "memiş")
	end
	
	durum = true
	bilesikZaman(ad, zaman, "var", tablo, sahip, durum)
	
	return tablo
end

-------------------------------------------------
--bildirme kipi geniş zamanı ayarlayan fonksiyon
-------------------------------------------------
function genis(ad, olumlu, sahip, zaman)
	local tablo = {}
    local sonSozcuk = mw.ustring.gsub( ad, ".*", "")
    local sonHarfUnluMu = araclar.sonHarfUnluMu(ad)

    if olumlu == "olumlu" then
		--Bazı durumlarda sondaki "t", "d"ye dönüşür
		if istisnaIncelme then
			ad = mw.ustring.sub( ad, 1, -2 ) .. "d"
		end
    	--Biçim olarak olumsuz olan eylemler için
		if mw.ustring.sub( ad, -2 ) == "me" or mw.ustring.sub( ad, -2 ) == "ma" then
			if sahip == "ben" then
				ad = ad
			elseif sahip == "biz" then
				ad = ad .. "y"
			else
				ad = ad .. "z"
			end
		--Bazı tek heceli sözcükler istisna durumlarıdır
		elseif istisnaGenis then
			ad = ad .. istisnaGenis
		else
    	--Eğer ünlü harf ile bitiyorsa sonuna "-r" eki gelir
	    	if sonHarfUnluMu then
	    		ad = ad .. "r"
	    	--Eğer ünlü ile bitmiyorsa
	    	else
	    		--Eğer tek heceli ise sonuna "-ar, -er" ekleri gelir
	    		if mw.ustring.len(araclar.harfAyikla(sonSozcuk, "sessiz")) == 1 then
					ad = araclar.unluUyumu(ad, "ar", "er")
				else
	    		--Eğer tek heceli değil ise sonuna "-ır, -ir, -ur, -ür" ekleri gelir
					ad = araclar.unluUyumu(ad, "ır", "ir", "ur", "ür")
				end
			end
		end
	else
		ad = araclar.unluUyumu(ad, "ma", "me")
	    
		if sahip == "ben" then
		elseif sahip == "biz" then
			ad = ad .. "y"
		else
			ad = ad .. "z"
		end
	end
	
	durum = true
	bilesikZaman(ad, zaman, "var", tablo, sahip, durum)
	
	return tablo
end

---------------------------------------------------
--bildirme kipi şimdiki zamanı ayarlayan fonksiyon
---------------------------------------------------
function simdiki(ad, olumlu, sahip, zaman)
	local tablo = {}
    local sonSozcuk = mw.ustring.gsub( ad, ".*", "")
    local sonHarfUnluMu = araclar.sonHarfUnluMu(ad)

    if olumlu == "olumlu" then
    	--Ünlü bir harfle biten eylemlerde son ünlü düşer
    	if sonHarfUnluMu then
    		ad = mw.ustring.sub( ad, 1, -2 )
    	end
		--Bazı durumlarda sondaki "t", "d"ye dönüşür
		if istisnaIncelme then
			ad = mw.ustring.sub( ad, 1, -2 ) .. "d"
		end
    	--demek ve yemek fiillerinde e harfi i'ye dönüşür
    	if sonSozcuk == "de" or sonSozcuk == "ye" then
    		ad = mw.ustring.sub( ad, 1, -1 ) .. "iyor"
    	else
			ad = araclar.unluUyumu(ad, "ıyor", "iyor", "uyor", "üyor")
			ad = sonSozcuk == "yu" and ad.."uyor" or ad
	    end
    else
		ad = araclar.unluUyumu(ad, "mıyor", "miyor", "muyor", "müyor")
    end
	
	durum = true
	bilesikZaman(ad, zaman, "var", tablo, sahip, durum)
	
	return tablo
end

---------------------------------------------------
--bildirme kipi gelecek zamanı ayarlayan fonksiyon
---------------------------------------------------
function gelecek(ad, olumlu, sahip, zaman)
	local tablo = {}
    local sonSozcuk = mw.ustring.gsub( ad, ".*", "")
    local sonHarfUnluMu = araclar.sonHarfUnluMu(ad)

    if olumlu == "olumlu" then
    	--Ünlü bir harfle biten eylemlerde araya "y" harfi girer
    	if sonHarfUnluMu then
    		ad = ad .. "y"
    	end
		--Bazı durumlarda sondaki "t", "d"ye dönüşür
		if istisnaIncelme then
			ad = mw.ustring.sub( ad, 1, -2 ) .. "d"
		end
    	--demek ve yemek fiillerinde e harfi i'ye dönüşür
    	if sonSozcuk == "de" or sonSozcuk == "ye" then
    		ad = mw.ustring.sub( ad, 1, -3 ) .. "iyece"
    	else
			ad = araclar.unluUyumu(ad, "aca", "ece")
	    end
    else
		ad = araclar.unluUyumu(ad, "mayaca", "meyece")
	end
	
	if zaman == "basit" and (sahip == "ben" or sahip == "biz") then
		ad = ad .. "ğ"
	else
		ad = ad .. "k"
	end
	
	durum = true
	bilesikZaman(ad, zaman, "var", tablo, sahip, durum)
	
	return tablo
end

----------------------------------------------
--dilek kipi istek kipini ayarlayan fonksiyon
----------------------------------------------
function istek(ad, olumlu, sahip, zaman)
	local tablo = {}
    local sonSozcuk = mw.ustring.gsub( ad, ".*", "")
    local sonHarfUnluMu = araclar.sonHarfUnluMu(ad)

    if olumlu == "olumlu" then
    	--Ünlü bir harfle biten eylemlerde araya "y" harfi girer
    	if sonHarfUnluMu then
    		ad = ad .. "y"
    	end
		--Bazı durumlarda sondaki "t", "d"ye dönüşür
		if istisnaIncelme then
			ad = mw.ustring.sub( ad, 1, -2 ) .. "d"
		end
    	--demek ve yemek fiillerinde e harfi i'ye dönüşür
    	if sonSozcuk == "de" or sonSozcuk == "ye" then
    		ad = mw.ustring.sub( ad, 1, -3 ) .. "iye"
    	else
			ad = araclar.unluUyumu(ad, "a", "e")
	    end
    else
		ad = araclar.unluUyumu(ad, "maya", "meye")
    end
	    
	if sahip == "ben" then
		ad = ad .. "y"
	elseif sahip == "sen" or sahip == "siz" then
		durum = nil
	else
		durum = true
	end
	
	bilesikZaman(ad, zaman, "ş-yok", tablo, sahip, durum)
	
	return tablo
end

---------------------------------------------
--dilek kipi şart kipini ayarlayan fonksiyon
---------------------------------------------
function sart(ad, olumlu, sahip, zaman)
	local tablo = {}

    if olumlu == "olumlu" then
    	ad = araclar.unluUyumu(ad, "sa", "se")
    else
		ad = araclar.unluUyumu(ad, "masa", "mese")
    end
	
	durum = true
	bilesikZaman(ad, zaman, "ş-yok", tablo, sahip, durum)
	
	return tablo
end

--------------------------------------------------
--dilek kipi gereklilik kipini ayarlayan fonksiyon
--------------------------------------------------
function gereklilik(ad, olumlu, sahip, zaman)
	local tablo = {}

    if olumlu == "olumlu" then
    	ad = araclar.unluUyumu(ad, "malı", "meli")
    else
		ad = araclar.unluUyumu(ad, "mamalı", "memeli")
    end
	    
	if sahip == "ben" or sahip == "biz" then
		ad = ad .. "y"
	elseif sahip == "sen" or sahip == "siz" then
		durum = nil
	else
		durum = true
	end
	
	bilesikZaman(ad, zaman, "var", tablo, sahip, durum)
	
	return tablo
end

---------------------------------------------
--dilek kipi emir kipini ayarlayan fonksiyon
---------------------------------------------
function emir(ad, olumlu, sahip, zaman)
	local tablo = {}
    local sonSozcuk = mw.ustring.gsub( ad, ".*", "")
    local sonHarfUnluMu = araclar.sonHarfUnluMu(ad)

    if olumlu == "olumlu" then
    	if sahip == "siz" then
			--Bazı durumlarda sondaki "t", "d"ye dönüşür
			if istisnaIncelme then
				ad = mw.ustring.sub( ad, 1, -2 ) .. "d"
			end
			if sonHarfUnluMu then
				ad = araclar.unluUyumu(ad, "yı", "yi")
			else
				ad = araclar.unluUyumu(ad, "ı", "i", "u", "ü")
			end
			if zaman == "basit" then table.insert(tablo, ad.."n") end
		end
	else
		ad = araclar.unluUyumu(ad, "ma", "me")
		if sahip == "siz" then
			ad = araclar.unluUyumu(ad, "yı", "yi")
			if zaman == "basit" then table.insert(tablo, ad.."n") end
		end
	end
	
	if sahip == "onlar" then
		ad = araclar.unluUyumu(ad, "sın", "sin", "sun", "sün")
	end
	    
	if sahip == "ben" or sahip == "biz" then
		ad = "—"
	elseif sahip == "sen" then
		sahip = "o"
	elseif sahip == "o" then
		sahip = "sen"
		durum = nil
	else
		durum = true
	end
	
	bilesikZaman(ad, zaman, "yok", tablo, sahip, durum)
	
	return tablo
end

local kisiler = {{"ben","1t"}, {"sen","2t"}, {"o","3t"}, {"biz","1ç"}, {"siz","2ç"}, {"onlar","3ç"}}
local tipler = {"olumlu", "olumsuz"}
local fonksiyonlar = {belirliGecmis, belirsizGecmis, genis, simdiki, gelecek, istek, sart, gereklilik, emir}
local degerler = {"belirli geçmiş","belirsiz geçmiş","geniş","şimdiki","gelecek", "istek", "şart", "gereklilik", "emir"}
local zamanlar = {"basit", "hikaye", "rivayet", "şart"}

--------------------------------------------------
--tr-eylem-tablo şablonuna yardımcı olan fonksiyon
--------------------------------------------------
function eylemTablo(frame)
	--Ana parametreler
	local eylem = frame.args or frame:getParent():getTitle()
	
	local tablo = {}
	
	table.insert(tablo, 
		"<div class='NavFrame' style='width:100%'>"
		.. "<div class='NavHead' style='' >''" .. eylem .. "'' eyleminin çekimi</div>"
		.. "<div class='NavContent'>"
		.. "\n{| style='background:#F9F9F9; text-align:center; width:100%' class='çekim inflection-table'")
	
	--yalın yapma işlemini buraya aldık, çünkü şablonun açılır kutusunda
	--eylemin "mek, mak" hali gözükmeli
	local eylem = araclar.yalinYap(eylem)
	
	--eğer eylemin son hecesi "me, ma" ise bu olumsuz bir eylemdir
	--bu nedenle de bu eylemin olumlu versiyonunun tam tersine
	--çevrilmesi gerekir
	if mw.ustring.find(mw.ustring.sub( eylem, -2 ), "m") then
		tipler = {"olumsuz", "olumlu"}
		eylem = mw.ustring.sub( eylem, 1, -3 )
		olumsuz = true
	end
	
	for _,tip in ipairs(tipler) do
		--eğer eylemin son hecesi "me, ma" ise bu olumsuz bir eylemdir
		--bu nedenle de bu eylemin olumlu versiyonunun tam tersine
		--çevrilmesi gerekir
		if olumsuz then gorunumTip = tip == "olumsuz" and "olumlu" or "olumsuz" else gorunumTip = tip end
		table.insert(tablo, 
			"\n|-"
			.. "\n! style='background:#DEDEDE;' colspan='9' |" .. gorunumTip .. " çekimler"
			.. "\n|-"
			.. "\n! style='background:#DEDEDE' colspan='3' rowspan='2' |"
			.. "\n! style='background:#DEDEDE' colspan='3' |''']'''"
			.. "\n! style='background:#DEDEDE' colspan='3' |''']'''"
			.. "\n|-"
			.. "\n! style='background:#EFEFEF' |'''ben'''"
			.. "\n! style='background:#EFEFEF' |'''sen'''"
			.. "\n! style='background:#EFEFEF' |'''o'''"
			.. "\n! style='background:#EFEFEF' |'''biz'''"
			.. "\n! style='background:#EFEFEF' |'''siz'''"
			.. "\n! style='background:#EFEFEF' |'''onlar'''"
			.. "\n|-")
		for x, fonk in ipairs(fonksiyonlar) do
			if x == 1 then table.insert(tablo, "\n! style='background:#DEDEDE' rowspan='20' |'''bildirme (haber)<br>kipleri'''") end
			if x == 6 then table.insert(tablo, "\n! style='background:#DEDEDE' rowspan='16' |'''dilek (tasarlama)<br>kipleri'''") end
			table.insert(tablo, "\n! style='background:#EFEFEF' rowspan='4' |'''" .. degerler .. "'''")
			for y, zaman in ipairs(zamanlar) do
				table.insert(tablo, "\n! style='background:#EFEFEF' |'''" .. zaman .. "'''")
				for z, kisi in ipairs(kisiler) do
					table.insert(tablo, "\n| style='color:black' |, zaman), "]]<br>]")
				end
				table.insert(tablo, "\n|-")
			end
			table.insert(tablo, "\n|-")
		end
	end
	
	table.insert(tablo, "\n|}"
		.. "</div></div>")
	
	return table.concat(tablo, "")
end

--bu fonksiyon ] tarafından kullanılmaktadır
--burada yapacağınız değişiklikler sadece o modülü ilgilendirir
--Türkçe dilindeki eylemlere gelen ekleri ayırt eden fonksiyon
function cekim_tr(args)
	--çekimlemesi yapılan sözcüğün yalın hali
	local eylem = araclar.yalinYap(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()
	
	--eğer eylemin son hecesi "me, ma" ise bu olumsuz bir eylemdir
	--bu nedenle de bu eylemin olumlu versiyonunun tam tersine
	--çevrilmesi gerekir
	if mw.ustring.find(mw.ustring.sub( eylem, -2 ), "m") then
		tipler = {"olumsuz", "olumlu"}
		ilkEylem = eylem
		eylem = mw.ustring.sub( eylem, 1, -3 )
		olumsuz = true
	end
	
	--otomatik çekimlemeler arasına virgül ekleyen fonksiyon
	local function virgul(tablo)
		if tablo then
			table.insert(tablo, ";")
		end
	end
	
	--çekimleme fonksiyonlarının sonuç çıktıları her zaman
	--bir tablodur, bu nedenle de tablonun içerisindeki
	--her bir çekimle tek tek karşılaştırma yapılması gerek
	local function durumCoz(tablo, cekim)
		if tablo then
			return tablo == cekim or tablo == cekim
		elseif tablo then
			return tablo == cekim
		end
	end
	
	--burası asıl tüm karşılaştırmanın yapıldığı ve çekim
	--saptandığında {{tr-çekim}} şablonuna ilgili etiketlerin
	--eklendiği kısım
	for _, kisi in ipairs(kisiler) do
		for _, tip in ipairs(tipler) do
			for _, zaman in ipairs(zamanlar) do
				for z, fonk in ipairs(fonksiyonlar) do
					if durumCoz(fonk(eylem, tip, kisi, zaman), cekim) then
						--eğer saptanan başka otomatik çekim varsa önce virgül eklemeliyiz
						virgul(args)
						table.insert(args, (z >= 6 and "dilek" or "bildirme"))
						if z >= 6 then table.insert(args, "-") end
						table.insert(args, degerler)
						table.insert(args, zaman)
						table.insert(args, kisi)
						--eğer eylemin son hecesi "me, ma" ise bu olumsuz bir eylemdir
						--bu nedenle de bu eylemin olumlu versiyonunun tam tersine
						--çevrilmesi gerekir
						if olumsuz then gorunumTip = tip == "olumsuz" and "olumlu" or "olumsuz" else gorunumTip = tip end
						table.insert(args, gorunumTip)
						args = araclar.yaliniTersCevir((olumsuz and ilkEylem or eylem))
					end
				end
			end
		end
	end
	
	--eğer çekimleme karşılaştırması sonucu bu modüldeki
	--fonksiyonların ürünleri sayfa adı ile eşleşmiyorsa
	--bu demektir ki, sayfa adı henüz bu modül tarafından
	--desteklenmeyen bir çekim türü
	--böyle sayfalarda normalde {{tr-çekim}} kullanılmamalı
	--fakat eğer kullanıldıysa bunu saptamamız ve izleyici
	--kategoriye eklememiz gerekiyor
	--bakınız: ]
	if args then else table.insert(args, "belirtilmemiş") end
end

return {eylemTablo = eylemTablo, genis = genis, cekim_tr = cekim_tr}