Modül:tr-eylem
Bu belgeleme Modül:tr-eylem/belge (düzenle | geçmiş) sayfasından yansıtılmaktadır. Arayüz düzenleyicilerinin deney yapabilmeleri için ayrıca Modül:tr-eylem/deneme tahtası sayfası kullanılabilir.
Bu modül şu şablonlarda kullanılmaktadır:
{{tr-eylem}}
{{tr-eylem-tablo}}
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 ), "[fstkçşhp]$") 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 ), "[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
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, ".*[%s]", "")
local sonHarfUnluMu = araclar.sonHarfUnluMu(ad)
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 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
if zaman == "basit" then
else
ad = ad .. "z"
end
elseif sahip == "biz" then
if zaman == "basit" then
ad = ad .. "y"
else
ad = ad .. "z"
end
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, ".*[%s]", "")
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[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, -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, ".*[%s]", "")
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[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 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, ".*[%s]", "")
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[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 ) .. "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 == "biz" then
if zaman == "basit" then
ad = ad .. "l"
sahip = "ben"
else
durum = true
end
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, ".*[%s]", "")
local sonHarfUnluMu = araclar.sonHarfUnluMu(ad)
if olumlu == "olumlu" then
if sahip == "siz" then
--Bazı durumlarda sondaki "t", "d"ye dönüşür
if istisnaIncelme[sonSozcuk] 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[1] 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[ea]") 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' |'''[[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|-")
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[x] .. "'''")
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' |[[" .. table.concat(fonk(eylem, tip, kisi[1], 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 [[Modül:çekim/şablonlar]] 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[1])
--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()["text"]
--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[ea]") 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[1] 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[2] then
return tablo[1] == cekim or tablo[2] == cekim
elseif tablo[1] then
return tablo[1] == 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[1], zaman), cekim) then
--eğer saptanan başka otomatik çekim varsa önce virgül eklemeliyiz
virgul(args[3])
table.insert(args[3], (z >= 6 and "dilek" or "bildirme"))
if z >= 6 then table.insert(args[3], "-") end
table.insert(args[3], degerler[z])
table.insert(args[3], zaman)
table.insert(args[3], kisi[2])
--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[3], gorunumTip)
args[1] = 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: [[Kategori:Otomatik modüller tarafından henüz tanınmayan çekimler]]
if args[3][1] then else table.insert(args[3], "belirtilmemiş") end
end
return {eylemTablo = eylemTablo, genis = genis, cekim_tr = cekim_tr}