İçeriğe atla

Modül:birleşim

Vikisözlük sitesinden
Modül belgelemesi [Düzenle] [Tazele]


local cikart = {}

local cizgiYok = {
	"ar",
	"ja",
	"ota",
}

--Bu fonksiyon girilen parametrenin boş olup olmadığını kontrol eder
local function ine(arg)
	if arg == "" then
		return nil
	else
		return arg
	end
end

--Tüm birleşim olayları bu fonksiyonda gerçekleşiyor.
--Şablon:birleşik, Şablon:ek ve Şablon:ön ek
function cikart.ek(frame)
	--Parametrelerimizi çağıralım:
	args = frame:getParent().args
	
	--İzleyici kategorileri yüklemek için bir array.
	local kategoriler = {}
	
	--Eğer dil kodu girilmemiş ise bir izleme kategorisi oluşturmalı.
	if not args["dil"]  then
		table.insert(kategoriler, "[[Kategori:Dil parametresi olmayan " .. frame.args["şablon"] .. " şablonları]]")
		return "<span style='color:red'>'''Lütfen bir dil kodu girin.'''</span>" .. table.concat(kategoriler, "\n")
	end	
	
	--Dil
	local dil = require("Modül:diller").getirKodaGore(args["dil"])
	
	--Girilen tüm birimlerin depolanacağı array
	local ilk = {}
	local son = {}
	
	--Eklerden önce veya sonra gelen tire
	local ciz = "-"
	
	for _,dKodu in ipairs(cizgiYok) do
		if dKodu == dil:getirKod() then
			ciz = ""
		end
	end
	
	--Bu da girilen ilk parametre, bunu döngü başlamadan önce
	--hata çıkmasını önlemek amacıyla dışarıda başlatıyoruz.
	--Eğer "ön ek" şablonu kullanılıyorsa, ekten sonra "-" eklenmeli,
	--çünkü bu şablonda ilk parametre daima ektir.
	ayrik = frame.args["şablon"] == "ön ek" and ine(args[1]) .. ciz or ine(args[1])
	--bu da döngünün tekrar etmesini sağlayacak sabit herhangi bir sayı
	i = 1
	
	--Döngü burada başlıyor.
	while ayrik do
		--Girilen herhangi bir birimin çeviri anlamı belirtiliyorsa, bunu
		--"ç1, ç2, ç3..." gibi değerler ile belirtebiliriz
		anlam = ine(args["a"..i]) or ine(args["anlam"..i])
		ceviri = ine(args["ç"..i]) or ine(args["tr"..i])
		alt = ine(args["alt"..i])
		soz = ine(args["söz"..i])
		table.insert(ilk, ayrik)
		--Burada bağlantı oluşturabiliriz.
		table.insert(son, require("Modül:bağlantılar").tam_bag(
			{dil = dil, sozcuk = ayrik, alt = alt, c = ceviri, anlam = anlam, soz = soz}, "çeviri", true))
		
		--Burada da "ek" şablonu için izleme kategorileri bulunuyor.
		if frame.args["şablon"] == "ek" and mw.title.getCurrentTitle().namespace == 0 and i ~= 1 then
			table.insert(kategoriler, "[[Kategori:" .. dil:getirAsilAd()
				.. " " .. ayrik ..  " son ekiyle oluşmuş sözcükler]]")
		elseif frame.args["şablon"] == "ön ek" and mw.title.getCurrentTitle().namespace == 0 and i == 1 then
			table.insert(kategoriler, "[[Kategori:" .. dil:getirAsilAd()
				.. " " .. ayrik ..  " ön ekiyle oluşmuş sözcükler]]")
		end
		
		--Döngünün bir üst katmana devam etmesi için sabit sayıyı artırıyoruz.
		i = i + 1
		if frame.args["şablon"] == "ek" and args[i] then
			--Eğer "ek" şablonu kullanılıyorsa tüm birimlerin başına "-" gelmeli,
			--çünkü bu şablonda ilk parametreden sonra girilen tüm birimler bir ek
			args[i] = ciz .. args[i]
		elseif frame.args["şablon"] == "ön ek" and args[i+1] then
			--Eğer "ön ek" şablonu kullanılıyorsa, girilen tüm ön parametrelerde "-" gelmeli,
			--ta ki en son birime kadar, çünkü en son birim hariç girilen tüm birimler bir ön ektir
			args[i] = args[i] .. ciz
		end
		
		--ve son olarak da bir sonraki birimimizin boş olup olmadığını kontrol ediyoruz ki,
		--döngünün devam edip etmeyeceğine karar verilsin.
		ayrik = ine(args[i])
	end
	
	--Burada da "birleşik" şablonu için izleme kategorileri bulunuyor
	if frame.args["şablon"] == "birleşik" and mw.title.getCurrentTitle().namespace == 0 then
		table.insert(kategoriler, "[[Kategori:" .. dil:getirAsilAd() .. " birleşik sözcükler]]")
	end
	
	--Tüm her şeyi çıktı alma zamanı
	return table.concat(son, " + ") .. table.concat(kategoriler, "")
end

return cikart