Ugrás a tartalomhoz

Modul:category tree/calque cat

A Wikiszótárból, a nyitott szótárból

A modult a Modul:category tree/calque cat/doc lapon tudod dokumentálni

local export = {}

-- Category object

local Category = {}
Category.__index = Category


function Category.new_main(frame)
	local params = {
		[1] = {},
		[2] = {required = true},
		partial = { type = "boolean" },
	}
	
	args = require("Module:parameters").process(frame:getParent().args, params)
	
	return Category.new({code = args[1], label = args[2], partial = args.partial})
end


function Category.new(info)
	for key, val in pairs(info) do
		if not (key == "code" or key == "label" or key == "partial") then
			error("The parameter \"" .. key .. "\" was not recognized.")
		end
	end
	
	local self = setmetatable({}, Category)
	self._info = info
	
	if not self._info.label then
		error("No label was specified.")
	end
	
	self._lang = self._info.code and (require("Module:languages").getByCode(self._info.code)
		or error("The language code \"" .. self._info.code .. "\" is not valid."))
	self._source = 
		require("Module:families").getByCode(self._info.label) or
		require("Module:etymology languages").getByCode(self._info.label) or
		require("Module:languages").getByCode(self._info.label) or 
		error("\"" .. self._info.label
			.. "\" is not a valid language, family or etymology-only language code.")
	
	return self
end

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


function Category:getInfo()
	return self._info
end


function Category:getBreadcrumbName()
	local breadcrumb = {}
	if not self._lang then
		table.insert(breadcrumb, self._info.partial
			and "terms partially calqued from" or "terms calqued from")
	end
	table.insert(breadcrumb, self._source:getCanonicalName())
	return table.concat(breadcrumb, " ")
end


function Category:getDataModule()
	return "Module:category tree/calque cat"
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
		ret = self._source:getCanonicalName()
	end
	
	local suffix = (self._info.partial and "partially " or "") .. "calqued from " .. ret
	if self._lang then
		return mw.getContentLanguage():ucfirst(self._lang:getCanonicalName()
			.. " terms " .. suffix)
	else
		return "Terms " .. suffix
	end
end


function Category:getDescription()
	local calqued = self._info.partial and "partially calqued" or "calqued"
	if not self._lang then
		return "Categories with terms " .. calqued .. " from "
			.. self._source:getCanonicalName() .. " in various specific languages."
	else
		if self._source:getType() == "family" then
			return "Terms in " .. self._lang:getCanonicalName() .. " that were "
				.. calqued .. " from unknown [[:Category:"
				.. mw.getContentLanguage():ucfirst(self._source:getCategoryName())
				.. "|" .. self._source:getCategoryName() .. "]].\n\n"
		elseif self._source:getType() == "etymology language" then
			return "Terms in " .. self._lang:getCanonicalName() .. " that were "
				.. calqued .. " from " .. self._source:getCanonicalName() .. "."
		else
			return "Terms in " .. self._lang:getCanonicalName() .. " that were "
				.. calqued .. " from the [[:Category:"
				.. mw.getContentLanguage():ucfirst(self._source:getCategoryName())
				.. "|" .. self._source:getCategoryName() .. "]]."
		end
	end
end


function Category:getParents()
	if self._lang then
		return {
			{
				name = require("Module:category tree/poscatboiler").new({
					code = self._info.code,
					label = self._info.partial and "partial calques" or "calques"
				}),
				sort = self._source:getCanonicalName()
			},
			{
				name = require("Module:category tree/borrowed cat").new({
					code = self._info.code,
					label = self._source:getCode()
				}),
				sort = " "
			},
		}
	else
		return {
			{
			name = require("Module:category tree/borrowed cat").new({
				label = self._source:getCode()}),
			sort = " "
			}
		}
	end
end

function Category:getChildren()
	return nil
end


function Category:getUmbrella()
	if not self._lang then
		return nil
	end
	
	local uinfo = mw.clone(self._info)
	uinfo.code = nil
	return Category.new(uinfo)
end


return export