Modül:başlık başı/şablonlar

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


local cikart = {}

-- Çoğul hale getirilmemesi gereken söz türleri.
local invariable = mw.loadData("Modül:başlık başı/veri").invariable

function secSonUnlu(yazi)
	return mw.ustring.sub( mw.ustring.gsub( yazi, "[%s%d%p%'bBcCçÇdDfFgGğĞhHjJkKlLmMnNpPrRsSşŞtTvVyYzZ']", ""), -1 )
end

function cikart.sozTuruCogul(soz_kategorisi)
	-- Söz türünü çoğul hale çevir
	if mw.ustring.find(soz_kategorisi, "[trz][iü]$") then
		soz_kategorisi = mw.ustring.gsub( soz_kategorisi, "([trz])[eiöüî]$", "%1leri" )
	elseif mw.ustring.find(soz_kategorisi, "dı$") then
		soz_kategorisi = mw.ustring.gsub( soz_kategorisi, "([d])[aıouâ]$", "%1ları" )
	elseif secSonUnlu(soz_kategorisi):find("[eiöüî]") or soz_kategorisi:find("sembol") or soz_kategorisi:find("harf") then
		soz_kategorisi = soz_kategorisi .. "ler"
	elseif secSonUnlu(soz_kategorisi):find("[aıouâ]") then
		soz_kategorisi = soz_kategorisi .. "lar"
	else
		soz_kategorisi = soz_kategorisi
	end
	
	return soz_kategorisi
end

function cikart.bas_s(frame)
	local params = {
		[1] = {required = true, default = "und"},
		["ak"] = {},
		["kat ak"] = {},
		["sıra"] = {},
		
		[2] = {required = true, default = "adlar"},
		["kat2"] = {},
		["kat3"] = {},
		["kat4"] = {},
		
		["baş"] = {list = true, allow_holes = true, default = ""},
		["id"] = {},
		["ç"] = {list = true, allow_holes = true},
		["tr"] = {alias_of = "ç", list = true},
		["c"] = {list = true},
		
		[3] = {list = true, allow_holes = true},
		
		["ce=accel"]   = {list = true, allow_holes = true},
		["ce=istek"] = {list = true, allow_holes = true},
		["ce=alt"]     = {list = true, allow_holes = true},
		["ce=ak"]      = {list = true, allow_holes = true},
		["ce=id"]      = {list = true, allow_holes = true},
		["ce=ç"]      = {list = true, allow_holes = true},
		["ce=c"]       = {list = true, allow_holes = true},
		["ce=bel"]    = {list = true, allow_holes = true},
		["ce=bağyok"]  = {list = true, allow_holes = true, type = "boolean"},
		["ce=dil"]    = {list = true, allow_holes = true},
	}
	
	local args = require("Modül:parameters").process(frame:getParent().args, params)
	
	-- Dil ve alfabe verisini al
	local veri = {}
	veri.dil = require("Modül:diller").getirKodaGore(args[1]) or require("Modül:diller").err(args[1], 1)
	veri.sira_anahtari = args["sıra"]
	veri.baslar = args["baş"]
	veri.id = args["id"]
	veri.alfabecevler = args["ç"]
	veri.cinsiyetler = args["c"]
	
	-- Alfabe
	local kat_alf
	
	if args["kat ak"] then
		veri.alf = (args["kat ak"] and (require("Modül:alfabeler").getirKodaGore(args["kat ak"]) or error("Alfabe kodu \"" .. args["kat ak"] .. "\" geçerli değil.")) or nil)
		kat_alf = kat_alf
	else
		veri.alf = (args["ak"] and (require("Modül:alfabeler").getirKodaGore(args["ak"]) or error("Alfabe kodu \"" .. args["ak"] .. "\" geçerli değil.")) or nil)
	end
	
	-- Söz türü kategorisi
	veri.soz_kategorisi = args[2]
	
	if not invariable[veri.soz_kategorisi] then
		veri.soz_kategorisi = cikart.sozTuruCogul(veri.soz_kategorisi)
	end
	
	if kat_alf then
		veri.soz_kategorisi = kat_alf:getirKategoriAdi() .. " ile yazılmış " .. veri.soz_kategorisi
	end
	
	-- Fazladan kategoriler
	veri.kategoriler = {}
	
	if args["kat2"] then
		table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " " .. args["kat2"])
	end
	
	if args["kat3"] then
		table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " " .. args["kat3"])
	end
	
	if args["kat4"] then
		table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " " .. args["kat4"])
	end
	
	-- Çekim halleri
	veri.cekimler = {}
	
	for i = 1, math.ceil(args[3].maxindex / 2) do
		local cekim_kisim = {
			etiket   = args[3][i * 2 - 1],
			accel    = args["ceaccel"][i],
			istek    = args["ceistek"][i],
			}
		
		local bicim = {
			sozcuk       =  args[3][i * 2],
			alt          =  args["cealt"][i],
			cinsiyetler  = {args["cec"][i]},
			id           =  args["ceid"][i],
			dil          =  args["cedil"][i],
			bagyok       =  args["cebağyok"][i],
			belirticiler = {args["cebel"][i]},
			alf          =  args["ceak"][i],
			alfabecev    =  args["ceç"][i],
			}
		
		if bicim.dil then
			bicim.dil = require("Modül:diller").getirKodaGore(bicim.dil) or require("Modül:diller").err(bicim.dil, "f" .. i .. "dil")
		end
		
		if bicim.alf then
			bicim.alf = require("Modül:alfabeler").getirKodaGore(bicim.alf) or error("Alfabe kodu \"" .. bicim.alf .. "\" geçerli değil.")
		end
		
		-- Eğer hiçbir sözcük veya alternatif girilmediyse, o zaman etiket tek başına görüntülenir.
		if bicim.sozcuk or bicim.alt then
			table.insert(cekim_kisim, bicim)
		end
		
		if cekim_kisim.etiket == "veya" then
			-- Bir önceki çekim kısmını başa ekle, eğer varsa
			if #cekim_kisim > 0 and veri.cekimler[1] then
				table.insert(veri.cekimler[#veri.cekimler], bicim)
			end
		elseif cekim_kisim.etiket then
			-- Yeni bir çekim kısmı ekle
			table.insert(veri.cekimler, cekim_kisim)
		end
	end
	
	return require("Modül:başlık başı").tam_baslikbasi(veri)
end

return cikart