İçeriğe atla

Modül:çekim/şablonlar

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


local cikart = {}

local etiket_turunden_aciklamaya = {
	-- If not listed, we just capitalize the first letter
	["zaman"] = "Zaman",
	["çatı"] = "Çatı",
	["karşılaştırma"] = "Karşılaştırma dereceleri",
	["class"] = "Inflectional class",
	["sound change"] = "Sound changes",
	["dilbilgisi"] = "Sınıflandırılmamış dil bilgisi",
	["diğer"] = "Diğer etiketler",
}

local etiket_turu_sirasi = {
	"şahıs",
	"miktar",
	"cinsiyet",
	"animacy",
	"zaman",
	"kip",
	"çatı",
	"non-finite",
	"hâl",
	"durum",
	"karşılaştırma",
	"register",
	"deixis",
	"clusivity",
	"class",
	"attitude",
	"sound change",
	"dilbilgisi",
	"diğer",
}

local function sirala_birinciye_gore(veriadi1, veriadi2)
	return veriadi1[1] < veriadi2[1]
end

function cikart.etikettablosu()
	m_veri = mw.loadData("Modül:çekim/veri")
	m_veri2 = mw.loadData("Modül:çekim/veri2")
	m_cekim = require("Modül:çekim")

	local function organize_data(data_module)
		local tab = {}
		for name, data in pairs(data_module.etiketler) do
			if not data.etiket_turu then
				-- Throw an error because hopefully it will get noticed and fixed.
				-- If we just skip it, it may never get fixed.
				error("Tag '" .. name .. "' has no tag_type")
			end
			if not tab[data.etiket_turu] then
				tab[data.etiket_turu] = {}
			end
			table.insert(tab[data.etiket_turu], {name, data})
		end
		local tag_type_order_set = require("Modül:table").listToSet(etiket_turu_sirasi)
		for tag_type, tags_of_type in pairs(tab) do
			if not tag_type_order_set[tag_type] then
				-- See justification above for throwing an error.
				error("Tag type '" .. tag_type .. "' not listed in tag_type_order")
			end
			table.sort(tags_of_type, sirala_birinciye_gore)
		end
		local multitag_shortcuts = {}
		local list_shortcuts = {}
		local function get_display_form(tags)
			local normtags = m_cekim.normallestir_etiketleri(tags)
			local display_forms = {}
			for _, normtag in ipairs(normtags) do
				table.insert(display_forms, m_cekim.getir_etiket_gorunum_bicimi(normtag))
			end
			return table.concat(display_forms, " ")
		end

		for shortcut, full in pairs(data_module.kisayollar) do
			if type(full) == "table" then
				table.insert(list_shortcuts, {shortcut, get_display_form(full)})
			elseif full:find("//") then
				table.insert(multitag_shortcuts, {shortcut, get_display_form({full})})
			end
		end

		table.sort(list_shortcuts, sirala_birinciye_gore)
		table.sort(multitag_shortcuts, sirala_birinciye_gore)

		return tab, multitag_shortcuts, list_shortcuts
	end

	local data_tab, data_multitag_shortcuts, data_list_shortcuts = organize_data(m_veri)
	local data2_tab, data2_multitag_shortcuts, data2_list_shortcuts = organize_data(m_veri2)

	local parts = {}

	local function insert_group(group)
		for _, veriadi in ipairs(group) do
			local sparts = {}
			local name = veriadi[1]
			local data = veriadi[2]
			table.insert(sparts, "| <code>" .. name .. "</code> || ")
			if data.kisayollar then
				local ssparts = {}
				for _, shortcut in ipairs(data.kisayollar) do
					table.insert(ssparts, "<code>" .. shortcut .. "</code>")
				end
				table.insert(sparts, table.concat(ssparts, ", ") .. " ")
			end
			table.insert(sparts, "|| " .. m_cekim.getir_etiket_gorunum_bicimi(name))
			table.insert(parts, "|-")
			table.insert(parts, table.concat(sparts))
		end
	end

	local function insert_shortcut_group(shortcuts)
		for _, namedisp in ipairs(shortcuts) do
			local name = namedisp[1]
			local disp = namedisp[2]
			table.insert(parts, "|-")
			table.insert(parts, "| || <code>" .. name .. "</code> || " .. disp)
		end
	end

	table.insert(parts, '{|class="wikitable"')
	table.insert(parts, "! Etiketin adı !! Kısayol(lar) !! Görüntülenen biçimi")
	for _, tag_type in ipairs(etiket_turu_sirasi) do
		local group_tab = data_tab[tag_type]
		if group_tab then
			table.insert(parts, "|-")
			table.insert(parts, '! colspan="3" style="text-align: center; background: #dddddd;" | ' ..
				(etiket_turunden_aciklamaya[tag_type] or m_cekim.ucfirst(tag_type)) .. " (daha çok yaygın)")
			insert_group(group_tab)
		end
		group_tab = data2_tab[tag_type]
		if group_tab then
			table.insert(parts, "|-")
			table.insert(parts, '! colspan="3" style="text-align: center; background: #dddddd;" | ' ..
				(etiket_turunden_aciklamaya[tag_type] or m_cekim.ucfirst(tag_type)) .. " (daha az yaygın)")
			insert_group(group_tab)
		end
	end
	if #data_multitag_shortcuts > 0 then
		table.insert(parts, "|-")
		table.insert(parts, '! colspan="3" style="text-align: center; background: #dddddd;" | Birdenfazla etiketli kısayollar (daha çok yaygın)')
		insert_shortcut_group(data_multitag_shortcuts)
	end
	if #data2_multitag_shortcuts > 0 then
		table.insert(parts, "|-")
		table.insert(parts, '! colspan="3" style="text-align: center; background: #dddddd;" | Birdenfazla etiketli kısayollar (daha az yaygın)')
		insert_shortcut_group(data2_multitag_shortcuts)
	end
	if #data_list_shortcuts > 0 then
		table.insert(parts, "|-")
		table.insert(parts, '! colspan="3" style="text-align: center; background: #dddddd;" | Liste kısayolları (daha çok yaygın)')
		insert_shortcut_group(data_list_shortcuts)
	end
	if #data2_list_shortcuts > 0 then
		table.insert(parts, "|-")
		table.insert(parts, '! colspan="3" style="text-align: center; background: #dddddd;" | Liste kısayolları (daha az yaygın)')
		insert_shortcut_group(data2_list_shortcuts)
	end
	table.insert(parts, "|}")
	return table.concat(parts, "\n")
end

function cikart.cekimlemesi_s(frame)
	local params = {
		[1] = {required = true},
		[2] = {},
		[3] = {list = true},
		
		["anlam"] = {},
		["mana"] = {alias_of = "anlam"},
		["id"] = {},
		["dil"] = {required = true},
		["nocap"] = {type = "boolean"},
		["nocat"] = {type = "boolean"},
		["nodot"] = {type = "boolean"},
		["söz"] = {},
		["sc"] = {},
		["tr"] = {},
		["ç"] = {alias_of = "tr"},
		["istisna"] = {},
		["k"] = {},
		["a"] = {},
		["şablon"] = {},
	}
	
	local args = require("Modül:parameters").process(frame:getParent().args, params)
	
	local lang = args["dil"] or "und"
	local sc = args["dk"]
	
	lang = require("Modül:diller").getirKodaGore(lang) or
		require("Modül:diller").err(lang, "dil")
	sc = (sc and (require("Modül:alfabeler").getirKodaGore(sc) or
		error(sc .. "\" alfabe kodu geçerli değil.")) or nil)
	
	--NOT: bu kısım dil bazıl fonksiyonları çalıştırmak içindir,
	--yani eğer bir dilin kendi modülünde otomatik çekimleme
	--fonksiyonu var ise ona bağlanıp hiçbir parametre gerektirmeden
	--çekimleme açıklamalarını çağırabiliriz
	if args["şablon"] == "tr-çekim" then
		if args['söz'] == "ad" then
			require("Modül:tr-ad").cekim_tr(args)
		elseif args['söz'] == "eylem" then
			require("Modül:tr-eylem").cekim_tr(args)
		end
	elseif args["şablon"] == "ota-çekim" then
		if args['söz'] == "ad" then
			require("Modül:ota-ad").cekim_ota(args)
		end
	end

	return require("Modül:çekim").etiketlenmis_cekimler(
		args[3],
		{
			dil = lang,
			alf = sc,
			sozcuk = args[1] or "sözcük",
			alt = args[2],
			id = args["id"],
			anlam = args["anlam"],
			soz = args["söz"],
			c = args["tr"],
		}
	)
end

return cikart