Модул:category tree/derivcatboilersr

Документацију овог модула можете да направите на страници Модул:category tree/derivcatboilersr/док

local export = {}

-- Category object

local Category = {}
Category.__index = Category


function Category.new_main(frame)
	local params = {
		[1] = {},
		[2] = {required = true},
	}
	
	args = require("Модул:parameters").process(frame:getParent().args, params)
	
	return Category.new({code = args[1], label = args[2]})
end


function Category.new(info)
	for key, val in pairs(info) do
		if not (key == "code" or key == "label") then
			error("Параметар \"" .. key .. "\" није препознат.")
		end
	end
	
	local self = setmetatable({}, Category)
	self._info = info
	
	if not self._info.label then
		error("Ниједна ознака није наведена.")
	end
	
	self._lang = self._info.code and (require("Модул:languagessr").getByCode(self._info.code) or error("The language code \"" .. self._info.code .. "\" is not valid.")) or nil
	self._source = 
		require("Модул:families").getByCode(self._info.label) or
		require("Модул:etymology languagessr").getByCode(self._info.label) or
		require("Модул:languagessr").getByCode(self._info.label) or 
		error("\"" .. self._info.label .. "\" није ваљани језик, породични језик или етимологија.")
	
	return self
end

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


function Category:getInfo()
	return self._info
end


function Category:getBreadcrumbName()
	local ret = nil
	local ret1 = nil
	if self._source:getType() == "family" then
		ret = self._source:getCategoryName()
		ret1 = self._source:getCategoryName()
	else
		ret = self._source:getCanonicalName()
		ret1 = self._source:getCanonicalName()
	end
	
	return (not self._lang and "изрази добијени од " or "") .. ret
end


function Category:getDataModule()
	return "Модул:category tree/derivcatboilersr"
end


function Category:canBeEmpty()
	return false
end


function Category:isHidden()
	return false
end


function Category:getCategoryName()
	local ret = nil

	if self._source:getType() == "family" then
		ret = self._source:getCategoryName()
	else
		if self._source:getCode() == "mul-tax" then
			ret = "taxonomic namessr"
		else
			ret = self._source:getCanonicalName()
		end
	end
	
	if self._lang then
		return mw.getContentLanguage():ucfirst(self._lang:getCanonicalName() .. " појмови изведени из " .. ret)
	else
		return "Појмови изведени из " .. ret
	end
end


function Category:getDescription()
	local ret = nil
	
	if not self._lang then
		if self._source:getType() == "family" then
			return "Категорије са условима изведеним из " .. self._source:getCategoryName() .. " на разним специфичним језицима."
		else
			return "Категорије са условима изведеним из " .. self._source:getCanonicalName() .. " на разним специфичним језицима."
		end
	else
		if self._source:getType() == "family" then
			return
				"Појмови из " .. self._lang:getCanonicalName() .. " потичу из " ..
				"[[:Категорија:" .. mw.getContentLanguage():ucfirst(self._source:getCategoryName()) .. "|" .. self._source:getCategoryName() .. "]].\n\n" ..
				"Ова категорија идеално би требало да садржи само друге категорије. Записи могу бити категоризирани и овде, када је нека тачна подкатегорија нејасна. " ..
				"Ако знате тачан језик из којег је изведен унос који је категоризиран овде, молимо вас уредите његов одговарајући унос."
		elseif self._source:getType() == "etymology language" then
			return "Појмови из " .. self._lang:getCanonicalName() .. " потичу од " .. self._source:getCanonicalName() .. "."
		else
			return "Појмови из " .. self._lang:getCanonicalName() .. " потичу од [[:Категорија:" .. mw.getContentLanguage():ucfirst(self._source:getCategoryName()) .. "|" .. self._source:getCategoryName() .. "]]."
		end
	end
end


function Category:getParents()
	if self._lang then
		local parent = {}
		
		local pinfo = {
			code = self._lang:getCode()
		}
		local sortkey = nil
		
		if self._source:getType() == "family" then
			local fam = self._source:getFamily()
			
			if not fam or fam:getCode() == "qfa-iso" or fam:getCode() == "qfa-not" then
				pinfo.label = nil
			else
				pinfo.label = fam:getCode()
			end
			
			sortkey = self._source:getCategoryName()
		elseif self._source:getType() == "etymology language" then
			if self._source:getParentCode() == "qfa-iso" or self._source:getParentCode() == "qfa-not" or self._source:getParentCode() == "qfa-und" then
				pinfo.label = nil
			elseif self._source:getParentCode() == self._lang:getCode() then
				error("A language can't derive terms from a subvariety of itself.")
				--pinfo.label = self._lang:getFamily():getCode()
			else
				pinfo.label = self._source:getParentCode()
			end
			
			sortkey = self._source:getCanonicalName()
		else
			local fam = self._source:getFamily()
			
			if not fam or fam:getCode() == "qfa-iso" or fam:getCode() == "qfa-not" then
				pinfo.label = nil
			else
				pinfo.label = fam:getCode()
			end
			
			sortkey = self._source:getCanonicalName()
		end
		
		if not pinfo.label then
			return {{name = require("Модул:category tree/poscatboiler").new({code = self._info.code, label = "изрази који потичу из других језика"}), sort = sortkey}}
		else
			return {{name = Category.new(pinfo), sort = sortkey}}
		end
	else
		if self._source:getType() == "family" then
			return {{name = require("Модул:category tree/famcatboiler").new({code = self._info.label}), sort = " "}}
		elseif self._source:getType() == "etymology language" then
			return {{name = "Category:" .. mw.getContentLanguage():ucfirst(self._source:getCategoryName()), sort = "изрази добијени од"}}
		else
			return {{name = require("Модул:category tree/langcatboiler").new({code = self._info.label}), sort = "изрази добијени од"}}
		end
	end
end

function Category:getChildren()
	return nil
end


function Category:getUmbrella()
	if not self._lang then
		return nil
	end
	
	return Category.new({label = self._source:getCode()})
end


return export