Module:head/templates: Difference between revisions

From Laenkea
Jump to navigation Jump to search
No edit summary
No edit summary
Line 44: Line 44:
local function get_data(args)
local function get_data(args)
local p = m_parameters.process(args, params)
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 = "Appendix:" .. string.sub(language.name, " ", "_") .. "/"
if string.find(term, appendix) then
term = string.sub(term, #appendix + 1)
end
end
return {
return {
term = args["head"] or mw.title.getCurrentTitle().text,
term = term,
language = m_languages.get_by_code(p[1]),
language = language,
pos = p[2],
pos = p[2],
genders = p["g"],
genders = p["g"],

Revision as of 10:12, 8 August 2023

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 = "Appendix:" .. string.sub(language.name, " ", "_") .. "/"
		if string.find(term, appendix) then
			term = string.sub(term, #appendix + 1)
		end
	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