Module:names: Difference between revisions

From Laenkea
Jump to navigation Jump to search
(Created page with "local export = {} local m_languages = require("Module:languages") local m_parameters = require("Module:parameters") local params = { [1] = {required = true}, [2] = {alias_of = "gender"}, ["gender"] = {}, ["from"] = {}, ["nocat"] = {type = "boolean"}, } local function check_gender(gender) if gender == nil then return nil end if gender == "male" or gender == "female" or gender == "unisex" then return gender end error("Invalid gender was supplied") end local...")
(No difference)

Revision as of 18:23, 6 August 2023

Documentation for this module may be created at Module:names/documentation

local export = {}

local m_languages = require("Module:languages")
local m_parameters = require("Module:parameters")

local params = {
	[1] = {required = true},
	[2] = {alias_of = "gender"},
	["gender"] = {},
	["from"] = {},
	["nocat"] = {type = "boolean"},
}

local function check_gender(gender)
	if gender == nil then return nil end
	if gender == "male" or gender == "female" or gender == "unisex" then
		return gender
	end
	error("Invalid gender was supplied")
end

local function get_data(frame, name_type)
	local args = m_parameters.process(frame:getParent().args, params)
	args["language"] = m_languages.get_by_code(args[1])
	args["gender"] = check_gender(args["gender"])
	args["type"] = name_type
	return args
end

function export.format_name(data)
	local out = {"A"}
	local cat = "[[Category:" .. data.language.name .. " " .. data.type .. "s]]"
	if data.gender then
		cat = cat .. "[[Category:" .. data.language.name .. " " .. data.gender .. " " .. data.type .. "s]]"
		table.insert(out, gender)
	end
	table.insert(data.type)
	if data.from then
		local from_lang = m_languages.find_by_code(data.from)
		local from_name = (from_lang and from_lang.name or data.from)
		table.insert("from " .. from_name)
		cat = cat .. "[[Category:" .. data.language.name .. " " .. data.type .. "s from " .. from_name .. "]]"
		if data.gender then
			cat = cat .. "[[Category:" .. data.language.name .. " " .. data.gender .. " " .. data.type .. "s from " .. from_name .. "]]"
		end
	end
	return table.concat(out, " ") .. (data.nocat and "" or cat)
end

function export.givenName(frame)
	return export.format_name(get_data(frame), "given name")
end

function export.surname(frame)
	return export.format_name(get_data(frame), "surname")
end

return export