Module:ota-nouns

--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 " " .. " " .. yalin .. " (" .. okunus .. ") adının çekimi " .. " "		.. "\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" .. "\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" .. "\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" .. "\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" .. "\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" .. "\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" .. "\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) .. " " .. islem(ad, okunus, "iyelik","-", it, 6) .. "\n|}" .. " " 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) .. " " .. okunus .. " " 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}