Modul:dara kategoriyan/ferhengokkatbike

Belgekirina modulê[nîşan bide] [biguhêre] [rojane bike]
Ev belge ji Modul:dara kategoriyan/ferhengokkatbike/belge hatiye girtin.

Bikaranîn

biguhêre

Di vê mînakê de kategoriyên wek Kategorî:Avjenî + bi zimanekî tê çêkirin danasîna kategoriyê "Peyvên {{{langname}}} têkildarî avjenî.", tê lêzêdekirin û ew kategorî dikeve Kategorî:Biyolojî + "zimanekî" û Kategorî:Werziş + "zimanekî".

labels["avjenî"] = {
	description = "Peyvên {{{langname}}} têkildarî [[avjeni|avjeniyê]].",
	parents = {"biyolojî", "spor"},
}

Di vê mînakê de kategoriyên wek Kategorî:Etîmolojî + bi zimanekî tê çêkirin danasîna kategoriyê "Etîmolojiyên peyvên {{{langname}}}." tê lêzêdekirin û ew kategorî dikeve Kategorî:Etîmolojî li gorî zimanan û Kategorî:Etîmolojî dikeve Kategorî:!Serkategorî.

labels["etîmolojî"] = { 
	description = "Etîmolojiyên peyvên {{{langname}}}.",
	parents = {{template = "zimankatbike"}},
	umbrella = true,
	inSerkategori = true,
}
local export = {}

local label_data = require("Modul:dara kategoriyan/ferhengokkatbike/dane")
local b = require("Modul:bingeh")
local tewin = require('Modul:ku-tewîn-nav').tew_nobold

-- Category object

local Category = {}
Category.__index = Category

function Category.new_main(frame)
	local self = setmetatable({}, Category)
	
	local params = {
		[1] = {},
		[2] = {required = true},
		["sc"] = {},
	}
	
	args = require("Module:parameters").process(frame:getParent().args, params)
	self._info = {code = args[1], label = args[2]}
	
	self:initCommon()
	
	if not self._data then
		return nil
	end
	
	return self
end

function Category.new(info)
	for key, val in pairs(info) do
		if not (key == "code" or key == "label") then
			error("Parametreya “" .. key .. "” nayê zanîn.")
		end
	end
	
	local self = setmetatable({}, Category)
	self._info = info
	
	if not self._info.label then
		error("No label was specified.")
	end
	
	self:initCommon()
	
	if not self._data then
		error("The label “" .. self._info.label .. "” does not exist.")
	end
	
	return self
end

export.new = Category.new
export.new_main = Category.new_main


function Category:initCommon()
	if self._info.code then
		self._lang = require("Modul:ziman").getByCode(self._info.code) or
			error("The language code “" .. self._info.code .. "” is not valid.")
	end
	
	-- Convert label to lowercase if possible
	local lowercase_label = mw.getContentLanguage():lcfirst(self._info.label)
	
	-- Check if the label exists
	local labels = label_data["LABELS"]

	if labels[lowercase_label] then
		self._info.label = lowercase_label
	end
	
	self._data = labels[self._info.label]
	
	-- Go through handlers
	if not self._data then
		for _, handler in ipairs(label_data["HANDLERS"]) do
			self._data = handler.handler(self._info.label)
			if self._data then
				self._data.edit = handler.module
				break
			end
		end
	end
end


function Category:getInfo()
	return self._info
end


function Category:getBreadcrumbName()
	return self._info.label
end


function Category:getDataModule()
	return self._data["edit"]
end


function Category:canBeEmpty()
	if self._lang then
		return false
	else
		return true
	end
end


function Category:isHidden()
	local isHidden = self._data["isHidden"]
	if isHidden then
		return true
	else 
		return false
	end
end


function Category:getCategoryName()
	if self._lang then
		return mw.getContentLanguage():ucfirst(self._info.label) .. " bi " .. self._lang:getCanonicalName()
	else
		return mw.getContentLanguage():ucfirst(self._info.label)
	end
end


local function replace_special_descriptions(desc)
	-- TODO: Should probably find a better way to do this
	local descriptionFormats = {-- default û default girdek "mê" ne, def-n û def-n girdek nêr e!
		["default"]					= "Peyvên {{{langname}}} têkildarî {{{label_lc}}}.",
		["default girdek"]	= "Peyvên {{{langname}}} têkildarî {{{label_uc}}}.",
		["def-n girdek"]		= "Peyvên {{{langname}}} têkildarî {{{label-n_uc}}}.",
		["def-n"]	= "Peyvên {{{langname}}} têkildarî {{{label-n_lc}}}.",
		["default with topic"]		= "{{{langname}}} terms related to {{{label_lc}}} topics.",
		["default-set"]				= "{{{langname}}} terms for various {{{label_lc}}}.",
	}
	
	return descriptionFormats[desc] or desc
end


local function expand_description(desc, cat)
	if cat._lang then
		desc =  desc:gsub("{{{langname}}}", cat._lang:getCanonicalName())
		desc =  desc:gsub("{{{langcode}}}", cat._lang:getCode())
		desc =  "<strong style=\"font-size:normal; font-weight:normal;\">" .. desc:gsub("{{{langcat}}}", cat._lang:getCategoryName()) .. "</strong>"
	end
	
	if desc:find("{{{label_uc}}}") then
		local label_entry_name = mw.getContentLanguage():ucfirst(cat._info.label)
		local label_entry = mw.title.new(label_entry_name)

		if label_entry.exists then
			desc = desc:gsub("{{{label_uc}}}", "[[" .. label_entry_name .. "|" .. tewin(label_entry_name, 'mê', 'def_obl_s')
						.. "]]")
		else
			desc = desc:gsub("{{{label_uc}}}", label_entry_name)
		end
	end
	
	if desc:find("{{{label_lc}}}") then
		local label_entry_name = mw.getContentLanguage():lcfirst(cat._info.label)
		local label_entry = mw.title.new(label_entry_name)

		if label_entry.exists then
			desc = desc:gsub("{{{label_lc}}}", "[[" .. label_entry_name .. "|" .. tewin(label_entry_name, 'mê', 'def_obl_s')
						.. "]]")
		else
			desc = desc:gsub("{{{label_lc}}}", label_entry_name)
		end
	end
	
	if desc:find("{{{label-n_uc}}}") then
		local label_entry_name = mw.getContentLanguage():ucfirst(cat._info.label)
		local label_entry = mw.title.new(label_entry_name)

		if label_entry.exists then
			desc = desc:gsub("{{{label-n_uc}}}", "[[" .. label_entry_name .. "|" ..mw.getCurrentFrame():expandTemplate{title = "y2", args = {
			label_entry_name,
			"î",
			}} .. "]]")
		else
			desc = desc:gsub("{{{label-n_uc}}}", label_entry_name)
		end
	end
	
	if desc:find("{{{label-n_lc}}}") then
		local label_entry_name = mw.getContentLanguage():lcfirst(cat._info.label)
		local label_entry = mw.title.new(label_entry_name)

		if label_entry.exists then
			desc = desc:gsub("{{{label-n_lc}}}", "[[" .. label_entry_name .. "|" ..mw.getCurrentFrame():expandTemplate{title = "y2", args = {
			label_entry_name,
			"î",
			}} .. "]]")	
		else
			desc = desc:gsub("{{{label-n_lc}}}", label_entry_name)
		end
	end
	
	return desc
end


function Category:getDescription()
	if self._lang then
		local desc = self._data["description"]

		desc = replace_special_descriptions(desc)
		if desc then
			return expand_description(desc, self)
		end
	else
		if not self._lang and self._info.label == "lîsteya ferhengan" then
			return "Lîsteya ferhengan li gorî ziman û mijaran."
		elseif not self._lang and self._info.label == "rêziman" then
			return "Lîsteya hemû kategoriyên rêzimanê li gorî beşa rêzimanî û zimanan."
		elseif not self._lang and self._info.label == "deng" then
			return "Lîsteya zimanên bi dosyaya dengî."
		elseif not self._lang and self._info.label == "bilêvkirina IPAyê" then
			return "Lîsteya zimanên bi bilêvkirina [[IPA]]yê."
		elseif not self._lang and self._info.label == "werger" then
			return "Lîsteya hemû wergerên kurmancî û zimanên din."
		elseif not self._lang and self._info.label == "etîmolojî" then
			return "Lîsteya hemû binkategoriyên etîmolojiyê."
			end

		local eninfo = mw.clone(self._info)
		eninfo.code = "ku"
		local ku = Category.new(eninfo)

		local desc = self._data["description"]
		desc = replace_special_descriptions(desc)
		if desc then
			desc = desc:gsub("^{{{langname}}} ", "")
			desc = desc:gsub("^{{{langcode}}} ", "")
			desc = desc:gsub("^{{{langcat}}} ", "")
			desc = desc:gsub("%.$", "")
			desc = expand_description(desc, self)
		else
			desc = self._info.label
		end
		local umbrella = self._data["umbrella"]
		if umbrella == true then
		return
			"<i>" .. mw.getContentLanguage():ucfirst(self._info.label) .. " </i>mijara sereke ya vê kategoriyê ye. Li vir bin kategoriyên taybet tên lîstekirin. \n\n" ..
			"Ji bo dîtina hemû kategoriyên li gorî zimanan binêre [[:Kategorî:" .. mw.getContentLanguage():ucfirst(self._info.label) .. " li gorî zimanan]].\n\n" ..
			"Ji bo kategoriya kurmancî binêre [[:Kategorî:" .. ku:getCategoryName() .. "]]."
		end
		return
			"<i>" .. mw.getContentLanguage():ucfirst(self._info.label) .. " </i>mijara sereke ya vê kategoriyê ye. \n\n"..
			"Ji bo kategoriya kurmancî binêre [[:Kategorî:" .. ku:getCategoryName() .. "]]."
	end
end


function Category:getParents()
	local parents = self._data["parents"]
	local inSerkategori = self._data["inSerkategori"]
	
	if inSerkategori and not self._lang then
		return {{ name = "Kategorî:!Serkategorî", sort = self._info.label:gsub("all ", "") }}
	end

	if not parents or #parents == 0 then
		return nil
	end
	
	local ret = {}
	local is_set = false
	
	if self._info.label == "rêziman" then
		is_set = true
	end
	
	for key, parent in ipairs(parents) do
		parent = mw.clone(parent)
		
		if type(parent) ~= "table" then
			parent = {name = parent}
		end
		
		if not parent.sort then
			parent.sort = self._info.label
		end
		
		if self._lang then
			parent.sort = parent.sort:gsub("{{{langname}}}", self._lang:getCanonicalName())
			parent.sort = parent.sort:gsub("{{{langcat}}}", self._lang:getCategoryName())
		elseif parent.sort:find("{{{langname}}}") or parent.sort:find("{{{langcat}}}") or parent.template == "zimankatbike" then
			return nil
		end
		
		if not self._lang then
			parent.sort = parent.sort
		end
		
		if parent.name and parent.name:find("^Kategorî:") then
			if self._lang then
				parent.name = parent.name:gsub("{{{langname}}}", self._lang:getCanonicalName())
				parent.name = parent.name:gsub("{{{langcat}}}", self._lang:getCategoryName())
			elseif parent.name:find("{{{langname}}}") or parent.name:find("{{{langcat}}}") or parent.template == "zimankatbike" then
				return nil
			end
		else
			if parent.name == "lîsteya ferhengan" then
				is_set = true
			end
			
			local pinfo = mw.clone(self._info)
			pinfo.label = parent.name
			
			if parent.template then
				parent.name = require("Modul:dara kategoriyan/" .. parent.template).new(pinfo)
			else
				parent.name = Category.new(pinfo)
			end
		end
		
		table.insert(ret, parent)
	end

	local naveModule = self._data["edit"]

	if self._info.label ~= "lîsteya ferhengan" and self._info.label ~= "hemû mijar" and (naveModule == "Modul:dara kategoriyan/ferhengokkatbike/dane/ferhengok" or naveModule == "Modul:dara kategoriyan/ferhengokkatbike/dane/mane") then
		local pinfo = mw.clone(self._info)
		pinfo.label = "hemû mijar"
		table.insert(ret, {name = Category.new(pinfo), sort = self._info.label})
	end 
	
	return ret
end


function Category:getChildren()
	return nil
end


function Category:getUmbrella()

	local umbrella = self._data["umbrella"]
	if self._lang and umbrella == true then
		return "Kategorî:" .. b.ucfirst(self._info.label) .. " li gorî zimanan"
	elseif not self._lang then
		return nil
	end
--[[	if self._info.label == "etîmolojî" then
		return "Kategorî:Etîmolojî li gorî zimanan"
	elseif not self._lang then
		return nil
	end ]]--	
	
	local uinfo = mw.clone(self._info)
	uinfo.code = nil
	return Category.new(uinfo)
end


return export