Modül:tr-eylem

Vikisözlük sitesinden
Gezinti kısmına atla Arama kısmına atla
[Düzenle] [Tazele] Template-info.svg Modül belgelemesi

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

Modülün alt sayfaları:


p = {}

--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

--------------------------------------------------
--tr-eylem-tablo şablonuna yardımcı olan fonksiyon
--------------------------------------------------
function p.eylemTablo(frame)
	--Ana parametreler
	local ad = frame.args['ad'] or frame:getParent():getTitle()
	local tip = frame.args['tip']
	
	return "<div class='NavFrame' style='width:100%'>"
		.. "<div class='NavHead' style='' >''" .. ad .. "'' eyleminin " .. tip .. " çekimi</div>"
		.. "<div class='NavContent'>"
		.. "\n{| style='background:#F9F9F9; text-align:center; width:100%' class='çekim inflection-table'"
		.. "\n|-"
		.. "\n! style='background:#DEDEDE; width: 33%;' colspan='2' rowspan='2' |"
		.. "\n! style='background:#DEDEDE' colspan='3' |'''[[tekil]]'''"
		.. "\n! style='background:#DEDEDE' colspan='3' |'''[[çoğul]]'''"
		.. "\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|-"
		.. "\n! style='background:#DEDEDE' rowspan='10' |'''[[zaman]]'''"
		.. "\n! style='background:#EFEFEF' |'''[[belirli geçmiş zaman|belirli geçmiş]]'''"
		.. "\n| style='color:black' |[[" .. belirliGecmis(ad, tip, "ben") .. "]]"
		.. "\n| style='color:black' |[[" .. belirliGecmis(ad, tip, "sen") .. "]]"
		.. "\n| style='color:black' |[[" .. belirliGecmis(ad, tip, "o") .. "]]"
		.. "\n| style='color:black' |[[" .. belirliGecmis(ad, tip, "biz") .. "]]"
		.. "\n| style='color:black' |[[" .. belirliGecmis(ad, tip, "siz") .. "]]"
		.. "\n| style='color:black' |[[" .. belirliGecmis(ad, tip, "onlar") .. "]]"
		.. "\n|-"
		.. "\n! style='background:#EFEFEF' |'''[[belirsiz geçmiş zaman|belirsiz geçmiş]]'''"
		.. "\n| style='color:black' |[[" .. belirsizGecmis(ad, tip, "ben") .. "]]"
		.. "\n| style='color:black' |[[" .. belirsizGecmis(ad, tip, "sen") .. "]]"
		.. "\n| style='color:black' |[[" .. belirsizGecmis(ad, tip, "o") .. "]]"
		.. "\n| style='color:black' |[[" .. belirsizGecmis(ad, tip, "biz") .. "]]"
		.. "\n| style='color:black' |[[" .. belirsizGecmis(ad, tip, "siz") .. "]]"
		.. "\n| style='color:black' |[[" .. belirsizGecmis(ad, tip, "onlar") .. "]]"
		.. "\n|-"
		.. "\n! style='background:#EFEFEF' |'''[[geniş zaman|geniş]]'''"
		.. "\n| style='color:black' |[[" .. p.genis(ad, tip, "ben") .. "]]"
		.. "\n| style='color:black' |[[" .. p.genis(ad, tip, "sen") .. "]]"
		.. "\n| style='color:black' |[[" .. p.genis(ad, tip, "o") .. "]]"
		.. "\n| style='color:black' |[[" .. p.genis(ad, tip, "biz") .. "]]"
		.. "\n| style='color:black' |[[" .. p.genis(ad, tip, "siz") .. "]]"
		.. "\n| style='color:black' |[[" .. p.genis(ad, tip, "onlar") .. "]]"
		.. "\n|-"
		.. "\n! style='background:#EFEFEF' |'''[[şimdiki zaman|şimdiki]]'''"
		.. "\n| style='color:black' |[[" .. simdiki(ad, tip, "ben") .. "]]"
		.. "\n| style='color:black' |[[" .. simdiki(ad, tip, "sen") .. "]]"
		.. "\n| style='color:black' |[[" .. simdiki(ad, tip, "o") .. "]]"
		.. "\n| style='color:black' |[[" .. simdiki(ad, tip, "biz") .. "]]"
		.. "\n| style='color:black' |[[" .. simdiki(ad, tip, "siz") .. "]]"
		.. "\n| style='color:black' |[[" .. simdiki(ad, tip, "onlar") .. "]]"
		.. "\n|-"
		.. "\n! style='background:#EFEFEF' |'''[[gelecek zaman|gelecek]]'''"
		.. "\n| style='color:black' |[[" .. gelecek(ad, tip, "ben") .. "]]"
		.. "\n| style='color:black' |[[" .. gelecek(ad, tip, "sen") .. "]]"
		.. "\n| style='color:black' |[[" .. gelecek(ad, tip, "o") .. "]]"
		.. "\n| style='color:black' |[[" .. gelecek(ad, tip, "biz") .. "]]"
		.. "\n| style='color:black' |[[" .. gelecek(ad, tip, "siz") .. "]]"
		.. "\n| style='color:black' |[[" .. gelecek(ad, tip, "onlar") .. "]]"
		.. "\n|}"
		.. "</div></div>"
end

-----------------------------------------
--sahiplik eklerini ayarlayan fonksiyon
-----------------------------------------
function sahiplik(ad, sahip)
    local sonHarf = mw.ustring.sub( ad, -1 )
    local sonUnlu = mw.ustring.sub( araclar.harfAyikla(ad, "sessiz"), -1 )
	
	if sonUnlu == sonHarf 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

----------------------------------------------
--belirli geçmiş zamanı ayarlayan fonksiyon
----------------------------------------------
function belirliGecmis(ad, olumlu, sahip)
	local ad = araclar.yalinYap(ad)
    local sonHarf = mw.ustring.sub( ad, -1 )
    local sonUnlu = mw.ustring.sub( araclar.harfAyikla(ad, "sessiz"), -1 )
    local ek = "d"
    
    if olumlu == "olumlu" then
    	--Bazı durumlarda olan ses olayları
	    if mw.ustring.find(sonHarf, "[fstkçşhp]$") 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
	
	return sahiplik(ad, sahip)
end

----------------------------------------------
--belirsiz geçmiş zamanı ayarlayan fonksiyon
----------------------------------------------
function belirsizGecmis(ad, olumlu, sahip)
	local ad = araclar.yalinYap(ad)
    local sonHarf = mw.ustring.sub( ad, -1 )
    local sonUnlu = mw.ustring.sub( araclar.harfAyikla(ad, "sessiz"), -1 )
    
    if olumlu == "olumlu" then
		ad = araclar.unluUyumu(ad, "mış", "miş", "muş", "müş")
	else
		ad = araclar.unluUyumu(ad, "mamış", "memiş")
	end
	
	return sahiplik(ad, sahip)
end

------------------------------------
--geniş zamanı ayarlayan fonksiyon
------------------------------------
function p.genis(ad, olumlu, sahip)
	local ad = araclar.yalinYap(ad)
    local sonHarf = mw.ustring.sub( ad, -1 )
    local sonSozcuk = mw.ustring.gsub( ad, ".*[%s]", "")
    local sonUnlu = mw.ustring.sub( araclar.harfAyikla(ad, "sessiz"), -1 )
    
    if olumlu == "olumlu" then
		--Bazı durumlarda sondaki "t", "d"ye dönüşür
		if istisnaIncelme[sonSozcuk] 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[sonSozcuk] then
			ad = ad .. istisnaGenis[sonSozcuk]
		else
    	--Eğer ünlü harf ile bitiyorsa sonuna "-r" eki gelir
	    	if sonHarf == sonUnlu 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
	
	return sahiplik(ad, sahip)
end

-------------------------------------
--şimdiki zamanı ayarlayan fonksiyon
-------------------------------------
function simdiki(ad, olumlu, sahip)
	local ad = araclar.yalinYap(ad)
    local sonSozcuk = mw.ustring.gsub( ad, ".*[%s]", "")
    local sonHarf = mw.ustring.sub( ad, -1 )
    local sonUnlu = mw.ustring.sub( araclar.harfAyikla(ad, "sessiz"), -1 )
    
    if olumlu == "olumlu" then
    	--Ünlü bir harfle biten eylemlerde son ünlü düşer
    	if sonHarf == sonUnlu then
    		ad = mw.ustring.sub( ad, 1, -2 )
    	end
		--Bazı durumlarda sondaki "t", "d"ye dönüşür
		if istisnaIncelme[sonSozcuk] then
			ad = mw.ustring.sub( ad, 1, -2 ) .. "d"
		end
    	sonUnlu = mw.ustring.sub( araclar.harfAyikla(ad, "sessiz"), -1 )
    	--demek ve yemek fiillerinde e harfi i'ye dönüşür
    	if sonSozcuk == "de" or sonSozcuk == "ye" then
    		ad = mw.ustring.sub( ad, 1, -2 ) .. "iyor"
    	else
			ad = araclar.unluUyumu(ad, "ıyor", "iyor", "uyor", "üyor")
	    end
    else
		ad = araclar.unluUyumu(ad, "mıyor", "miyor", "muyor", "müyor")
    end
    
	return sahiplik(ad, sahip)
end

-------------------------------------
--gelecek zamanı ayarlayan fonksiyon
-------------------------------------
function gelecek(ad, olumlu, sahip)
	local ad = araclar.yalinYap(ad)
    local sonSozcuk = mw.ustring.gsub( ad, ".*[%s]", "")
    local sonHarf = mw.ustring.sub( ad, -1 )
    local sonUnlu = mw.ustring.sub( araclar.harfAyikla(ad, "sessiz"), -1 )
    
    if olumlu == "olumlu" then
    	--Ünlü bir harfle biten eylemlerde araya "y" harfi girer
    	if sonHarf == sonUnlu then
    		ad = ad .. "y"
    	end
		--Bazı durumlarda sondaki "t", "d"ye dönüşür
		if istisnaIncelme[sonSozcuk] 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 sahip == "ben" or sahip == "biz" then
		ad = ad .. "ğ"
	else
		ad = ad .. "k"
	end
    
	return sahiplik(ad, sahip)
end

return p