Module:head/templates

< Module:head
Revision as of 10:22, 8 August 2023 by Maria (talk | contribs)

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

local export = {}

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

local params = {
	[1] = {required = true},
	[2] = {required = true},
	[3] = {list = true},
	["g"] = {list = true},
	["head"] = {},
	["nocat"] = {type = "boolean"},
}

local function get_inflections(list)
	local inflections = {}
	local i = 1
	while list[i] do
		local inflection = {["label"] = list[i]}
		if not list[i+1] then
			error("unexpected end of inflection forms")
		elseif list[i+1] == "or" then
			error("unexpected 'or' keyword in label slot of inflection forms")
		end
		i = i + 1
		while list[i] do
			table.insert(inflection, list[i])
			if list[i+1] and list[i+1] == "or" then
				if not list[i+2] then
					error("unexpected end of inflection forms")
				end
				i = i + 2
			else
				i = i + 1
				break
			end
		end
		table.insert(inflections, inflection)
	end
	return inflections
end

local function get_data(args)
	local p = m_parameters.process(args, params)
	local language = m_languages.get_by_code(p[1])
	local term = p["head"] or mw.title.getCurrentTitle().text
	if language.proto then
		local appendix = string.gsub(string.gsub(language.name, " ", "_"), "%-", "%%-")
		appendix = "Appendix:" .. appendix .. "/"
		term = string.gsub(term, appendix, "")
	end
	return {
		term = term,
		language = language,
		pos = p[2],
		genders = p["g"],
		nocat = p["nocat"],
		inflections = get_inflections(p[3]),
	}
end

function export.show(frame)
	return m_head.full_head(get_data(frame:getParent().args))
end

return export