--gerekli modülleri yükleyelim
local olustur = require("Module:tr-nouns").olustur
local istisnaYumusama = require("Modül:tr-ad/istisnalar").istisnaYumusama
local lang = require("Module:languages").getByCode("ota")
local cekim = {}
--tüm verileri tabloya yerleştiren fonksiyon
function tablo(frame)
--args'i tanıtalım
local args = frame:getParent().args
--ana parametreler
local ad = args["baş"] or mw.title.getCurrentTitle().text
local it = args["istisna"]
local okunus = args[1] or error("Lütfen sözcüğün okunuşunu şablona ekleyiniz.")
local yalin = require("Modül:bağlantılar").tam_bag({dil = dil, sozcuk = ad}, "çeviri", false)
return "<div class='NavFrame' style='width:65%'>"
.. "<div class='NavHead' style='' >" .. yalin .. " <span style='color:#888'><b>(" .. okunus .. ")</b></span> adının çekimi</div>"
.. "<div class='NavContent'>"
.. "\n{| style='background:#F9F9F9; text-align:center; width:100%' class='çekim inflection-table'"
.. "\n|-"
.. "\n! style='width:33%;background:#DEDEDE' |"
.. "\n! style='background:#DEDEDE' |'''[[tekil]]'''"
.. "\n! style='background:#DEDEDE' |'''[[çoğul]]'''"
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''[[yalın hâl|yalın]]'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "yalın","+", it)
.. "\n| style='color:black' |" .. islem(ad, okunus, "yalın","-", it)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''[[belirtme hâli|belirtme]]'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "belirtme","+", it)
.. "\n| style='color:black' |" .. islem(ad, okunus, "belirtme","-", it)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''[[yönelme hâli|yönelme]]'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "yönelme","+", it)
.. "\n| style='color:black' |" .. islem(ad, okunus, "yönelme","-", it)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''[[bulunma hâli|bulunma]]'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "bulunma","+", it)
.. "\n| style='color:black' |" .. islem(ad, okunus, "bulunma","-", it)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''[[ayrılma hâli|ayrılma]]'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "ayrılma","+", it)
.. "\n| style='color:black' |" .. islem(ad, okunus, "ayrılma","-", it)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''[[tamlayan hâli|tamlayan]]'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "tamlayan","+", it)
.. "\n| style='color:black' |" .. islem(ad, okunus, "tamlayan","-", it)
.. "\n|-"
.. "\n! colspan='3' style='background:#EFEFEF' |'''[[iyelik]]'''"
.. "\n|-"
.. "\n! style='width:33%;background:#EFEFEF' |"
.. "\n! style='background:#EFEFEF' |'''[[tekil]]'''"
.. "\n! style='background:#EFEFEF' |'''[[çoğul]]'''"
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''1. tekil (benim)'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","+", it, 1)
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","-", it, 1)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''2. tekil (senin)'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","+", it, 2)
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","-", it, 2)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''3. tekil (onun)'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","+", it, 3)
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","-", it, 3)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''1. çoğul (bizim)'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","+", it, 4)
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","-", it, 4)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''2. çoğul (sizin)'''"
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","+", it, 5)
.. "\n| style='color:black' |" .. islem(ad, okunus, "iyelik","-", it, 5)
.. "\n|-"
.. "\n! style='background:#EFEFEF' |'''3. çoğul (onların)'''"
.. "\n| style='color:black' colspan='2' |" .. islem(ad, okunus, "iyelik","+", it, 6) .. "<br>" .. islem(ad, okunus, "iyelik","-", it, 6)
.. "\n|}"
.. "</div></div>"
end
--bir tabloya birden fazla veri eklemeye yarayan fonksiyon
function b(tablo, liste)
for k, v in pairs(liste) do
table.insert(tablo, v)
end
end
--adların tüm çekimlemelerini halleden fonksiyon
function islem(ad, okunus, hal, tekil, it, kisi, cekim)
--sonAd değeri, bu fonksiyonun en sonunda çıktıya vereceğimiz değer, bunu en başta ne olur ne olmaz
--normal ad parametresine eşitleyelim
local sonAd = ad
--okunuşun son harfi bir çok yerde lazım olacak
local sonHarf = mw.ustring.sub(okunus, -1)
--sona gelen ekleri biriktireceğimiz tablo
local h = {}
--BAŞLAMADAN ÖNCE
--b fonksiyonunu kullanarak eklenen ekler (sağdan sola doğru) sırasıyla yalın halin çoğulundan başlayarak
--belirtme tekil-çoğul, yönelme tekil-çoğul, bulunma tekil-çoğul, ayrılma tekil-çoğul,
--tamlayan tekil-çoğul ekleri ve son olarak da tüm iyelik kişi ekleri sırasıyla
--bu kural sözcüğün sonu ه ile biten sözcüklerde geçerlidir
if mw.ustring.sub(ad, -1) == "ه" then
--eğer sözcüğün okunuşu h ile bitiyorsa:
if sonHarf == "h" then
b(h, {"لر","ی","لری","ه","لره","ده","لرده","دن","لردن","ڭ","لرڭ","م","لرم","ڭ","لرڭ","ی","لری","مز","لرمز","ڭز","لرڭز","ی","لری"})
--eğer a veya e ile bitiyorsa:
elseif mw.ustring.find(sonHarf, "[ae]") then
b(h, {"لر","یی","لری","یه","لره","ده","لرده","دن","لردن","نڭ","لرڭ","م","لرم","ڭ","لرڭ","سی","لری","مز","لرمز","ڭز","لرڭز","سی","لری"})
end
--eğer sözcüğün okunuşu bir ünsüzle bitiyorsa bu kurallar geçerlidir:
elseif mw.ustring.find(sonHarf, "[bcçdfgğhjklmnprsştvyzqxyz]") then
--eğer sözcüğün sonu (okunuşuna göre) k ile bitiyor ve yumuşamaya uğruyorsa
--Osmanlıca sözcüğün sonundaki ق harfi غ harfine, ك harfi de گ harfine dönüşür
if sonHarf == "k" then
if not istisnaYumusama[okunus] and (hal == "belirtme" or hal == "yönelme" or hal == "tamlayan" or hal == "iyelik") and tekil == "+" then
sonAd = mw.ustring.sub( sonAd, 1, -2 ) .. (mw.ustring.sub(sonAd, -1) == "ق" and "غ" or mw.ustring.sub(sonAd, -1) == "ك" and "گ" or "")
end
end
b(h, {"لر","ی","لری","ه","لره","ده","لرده","دن","لردن","ڭ","لرڭ","م","لرم","ڭ","لرڭ","ی","لری","مز","لرمز","ڭز","لرڭز","ی","لری"})
--eğer sözcük bir ünlüyle bitiyorsa bu kurallar geçerlidir:
elseif mw.ustring.find(sonHarf, "[aıouâeiöüî]") then
suMu = okunus == "su"
b(h, {"لر","یی","لری","یه","لره","ده","لرده","دن","لردن"})
--burada okunuşu "su" olan sözcüğün bir istisnası bulunuyor
if suMu then
table.insert(h, "یڭ")
else
table.insert(h, "نڭ")
end
table.insert(h, "لرڭ")
b(h, {(suMu and "ی" or "") .. "م","لرم",(suMu and "ی" or "") .. "ڭ","لرڭ",(suMu and "ی" or "س") .. "ی","لری",(suMu and "ی" or "") .. "مز","لرمز",(suMu and "ی" or "") .. "ڭز","لرڭز",(suMu and "ی" or "س") .. "ی","لری"})
end
--burada tüm hallerin tekil veya çoğul olma durumlarında sonlarına gelen ekler belirleniyor
--birinciler tekil, ikinciler çoğulların sonuna gelen ekler
if hal == "yalın" then sonAd = (tekil == "+" and sonAd or sonAd .. h[1])
elseif hal == "belirtme" then sonAd = (tekil == "+" and sonAd .. h[2] or sonAd .. h[3])
elseif hal == "yönelme" then sonAd = (tekil == "+" and sonAd .. h[4] or sonAd .. h[5])
elseif hal == "bulunma" then sonAd = (tekil == "+" and sonAd .. h[6] or sonAd .. h[7])
elseif hal == "ayrılma" then sonAd = (tekil == "+" and sonAd .. h[8] or sonAd .. h[9])
elseif hal == "tamlayan" then sonAd = (tekil == "+" and sonAd .. h[10] or sonAd .. h[11])
elseif hal == "iyelik" and kisi == 1 then sonAd = (tekil == "+" and sonAd .. h[12] or sonAd .. h[13])
elseif hal == "iyelik" and kisi == 2 then sonAd = (tekil == "+" and sonAd .. h[14] or sonAd .. h[15])
elseif hal == "iyelik" and kisi == 3 then sonAd = (tekil == "+" and sonAd .. h[16] or sonAd .. h[17])
elseif hal == "iyelik" and kisi == 4 then sonAd = (tekil == "+" and sonAd .. h[18] or sonAd .. h[19])
elseif hal == "iyelik" and kisi == 5 then sonAd = (tekil == "+" and sonAd .. h[20] or sonAd .. h[21])
elseif hal == "iyelik" and kisi == 6 then sonAd = (tekil == "+" and sonAd .. h[22] or sonAd .. h[23])
end
--şimdi de okunuşları ayarlayalım
local a = tekil == "+" and "tekil" or "çoğul"
local harfler = {
["yalın"] = {"","","",""},
["belirtme"] = {"ı","i","u","ü"},
["yönelme"] = {"a","e","a","e"},
["bulunma"] = {"da","de","da","de"},
["ayrılma"] = {"dan","den","dan","den"},
["tamlayan"] = {"ı","i","u","ü"},
}
harfler["iyelik"] = kisi == 1 and {"m", "m", "m", "m"} or
kisi == 2 and {"n", "n", "n", "n"} or
kisi == 3 and {"ı", "i", "u", "ü"} or
kisi == 4 and {"mız", "miz", "muz", "müz"} or
kisi == 5 and {"nız", "niz", "nuz", "nüz"} or
kisi == 6 and {"ı", "i", "u", "ü"}
local f = hal == "yönelme" and "belirtme" or (hal == "ayrılma" and "bulunma" or hal)
okunus = ayarla(okunus, it, a, harfler[hal][1], harfler[hal][2], harfler[hal][3], harfler[hal][4], f)
if cekim == "+" then
return sonAd
end
return require("Modül:bağlantılar").tam_bag({dil = dil, sozcuk = sonAd}, "çeviri", true) .. "<br><span style='color:#888'>" .. okunus .. "</span>"
end
--bu fonksiyon [[Modül:çekim/şablonlar]] tarafından kullanılmaktadır
--burada yapacağınız değişiklikler sadece o modülü ilgilendirir
--Osmanlı Türkçesi dilindeki adlara gelen ekleri ayırt eden fonksiyon
function cekim_ota(args)
--çekimlemesi yapılan sözcüğün yalın hali
local ad = 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"]
--osmanlı türkçesi sözcük çekimlerinde istisnai durumlar mevcut değil
--fakat okunuş olarak girilen latin alfabesinde yazılan sözcüğün de
--çekimlemelerde okunuşları devam edeceği için eğer latin yazılışta bir istisna olduysa
--o girilmeli, bu istisnalar Modül:tr-ad/istisnalar sayfasında bulunabilir
local it = args["istisna"]
--ikinci parametre yalın sözcüğün okunuş parametresidir
local okunus = args["tr"] or args["ç"]
--otomatik çekimlemeler arasına virgül ekleyen fonksiyon
local function virgul(tablo)
if tablo[1] then
table.insert(tablo, ";")
end
end
if okunus then
--tek tek tüm çekimlemeleri karşılaştırdığımız kısım
--burada Modül:ota-ad'ın islem() 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
--islem() fonksiyonunun nasıl çalıştığını daha iyi anlamak için
--ilgili modüle bakabilirsiniz
cekimler = {"yalın", "belirtme", "yönelme", "bulunma", "ayrılma", "tamlayan"}
for i, c in ipairs(cekimler) do
if cekim == islem(ad, okunus, c,"+", it, nil, "+") then
--eğer saptanan başka otomatik çekim varsa önce virgül eklemeliyiz
virgul(args[3])
table.insert(args[3], c)
table.insert(args[3], "t")
end
if cekim == islem(ad, okunus, c,"-", it, nil, "+") then
--eğer saptanan başka otomatik çekim varsa önce virgül eklemeliyiz
virgul(args[3])
if c == "yalın" then else
table.insert(args[3], c)
end
table.insert(args[3], "ç")
end
end
iyelik = {{1,"1t"},{2,"2t"},{3,"3t"},
{4,"1ç"},{5,"2ç"},{6,"3ç"}}
for i, s in ipairs(iyelik) do
if cekim == islem(ad, okunus, "iyelik","+", it, s[1], "+") then
--eğer saptanan başka otomatik çekim varsa önce virgül eklemeliyiz
virgul(args[3])
table.insert(args[3], s[2])
table.insert(args[3], "iyelik")
table.insert(args[3], "t")
end
if cekim == islem(ad, okunus, "iyelik","-", it, s[1], "+") then
--eğer saptanan başka otomatik çekim varsa önce virgül eklemeliyiz
virgul(args[3])
table.insert(args[3], s[2])
table.insert(args[3], "iyelik")
table.insert(args[3], "ç")
end
end
end
end
return {tablo = tablo, islem = islem, cekim_ota = cekim_ota}