Modul:category tree/root cat

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

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

local export = {}

-- Category object

local Category = {}
Category.__index = Category


local function get_lang_by_name(name)
	return require("Module:languages").getByCanonicalName(name) or
				error('The language name "' .. name .. '" in the page title is not valid.')
end


function Category.new_main(frame)
	local raw_args = mw.title.getCurrentTitle().nsText == "Module" and frame.args
		or frame:getParent().args
	local args = {}
	for k, v in pairs(raw_args) do
		args[k] = v
	end
	
	local lang, source, root, id
	-- Parameters were supplied; "next" can't be called on
	-- frame.args
	if next(args) then
		local getByCode = require("Module:languages").getByCode
		lang = args[1]
		if lang and lang ~= "" then
			lang = getByCode(lang)
		else
			lang = nil
		end
		source = args[2]
		if source and source ~= "" then
			source = getByCode(source)
		else
			source = nil
		end
		root = args[3]
		id = args[4]
	end
	
	if not source then error("Source language is required.") end
	
	return Category.new{
		lang = lang,
		source = source,
		label = root,
		id = id
	}
end


function Category.new(info)
	local validKeys = {
		lang = true,
		source = true,
		code = true,
		label = true,
		id = true,
	}
	for key, val in pairs(info) do
		if not validKeys[key] then
			error("The parameter \"" .. key .. "\" was not recognized.")
		end
	end
	
	local self = setmetatable({}, Category)
	self._info = info

	if self._info.code or self._info.lang then
		self._lang = self._info.lang
			or require("Module:languages").getByCode(self._info.code)
			or error("The language code \"" .. self._info.code .. "\" is not valid.")
		if not self._info.code then
			self._info.code = self._lang:getCode()
		end
	end
	
	return self
end

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


function Category:getInfo()
	return self._info
end


function Category:getBreadcrumbName()
	if self._info.label then
		local root = require("Module:script utilities").tag_text(
			self._info.label,
			self._info.lang,
			nil,
			"term"
		)
		
		if self._info.id then
			root = root .. " (" .. self._info.id .. ")"
		end
		
		return root
	else
		return self:getCategoryName()
	end
end


function Category:getDataModule()
	return "Module:category tree/root cat"
end


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


function Category:isHidden()
	return false
end


function Category:getCategoryName()
	if self._info.label then
		local shared = " derived from the " .. self._info.source:getCanonicalName() .. " root " ..
			self._info.label
	
		if self._info.id then
			shared = shared .. " (" .. self._info.id .. ")"
		end
		
		if self._lang then
			return self._lang:getCanonicalName() .. " terms" .. shared
		else
			return "Terms" .. shared
		end
	else
		local source = self._info.source
		if source then
			return "Terms derived from " .. source:getCanonicalName() .. " roots"
		else
			return "Terms by root"
		end
	end
end


function Category:getDescription()
	if self._info.label then
		local shared = " that originate ultimately from the [[w:"
			.. self._info.source:getWikipediaArticle() .. "|"
			.. self._info.source:getCanonicalName() .. "]] root " ..
			 require("Module:links").full_link(
				{
					term = self._info.label,
					lang = self._info.source,
					id = self._info.id
				},
				"term"
			) .. "."
		
		mw.getCurrentFrame():callParserFunction(
			"DISPLAYTITLE",
			require("Module:string").plain_gsub(
				"Category:" .. self:getCategoryName(),
				self._info.label,
				require("Module:script utilities").tag_text(
					self._info.label,
					self._info.source,
					nil,
					"term"
				)
			)
		)
		
		if self._lang then
			return self._lang:getCanonicalName() .. " terms" .. shared
		else
			return "Terms" .. shared
		end
	else
		return "Categories for terms derived from particular [[w:"
			.. self._info.source:getWikipediaArticle() .. "|"
			.. self._info.source:getCanonicalName() .. "]]."
	end
end


function Category:getParents()
	local parents = {}
	if self._lang then -- langname terms derived from PIE root
		if self._info.label then
			table.insert(
				parents,
				{
					name = Category.new { source = self._info.source },
					-- root sortkey
					sort = self._info.source:makeSortKey(self._info.label)
				}
			)
			table.insert(
				parents,
				{
					name = require("Module:category tree/root cat")
						.new {
							source = self._info.source,
							label = self._info.label,
							id = self._info.id
						},
					sort = self._lang:getCanonicalName()
				}
			)
		else
			return { "test" }
		end
	else -- terms derived from PIE root
		if self._info.label then
			table.insert(
				parents,
				{
					name = Category.new {
							code = nil,
							label = nil,
							id = nil,
							source = self._info.source
						},
					-- root sortkey
					sort = self._info.source:makeSortKey(self._info.label)
				}
			)
		else
			table.insert(
				parents,
				{
					name = require("Module:category tree/poscatboiler")
						.new {
							code = self._info.source:getCode(),
							label = "roots",
						},
					sort = " "
				}
			)
			table.insert(
				parents,
				{
					name = require("Module:category tree/derived cat")
						.new {
							label = self._info.source:getCode(),
						},
					sort = " roots"
				}
			)
		end
	end
		
	if self._info.id then
		table.insert(
			parents,
			{
				name = Category.new {
						lang = self._lang,
						label = self._info.label,
						id = nil,
						source = self._info.source
					},
				sort = " " .. self._info.id
			}
		)
	end
	
	return parents
end


function Category:getChildren()
	return nil
end


function Category:getUmbrella()
	return nil
end


return export

-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet: