Module:pa-headword

From Wiktionary, the free dictionary
Jump to navigation Jump to search


local export = {}
local m_scripts = require("Module:scripts")
local m_hi_pa_headword = require("Module:hi-pa-headword")

local lang = require("Module:languages").getByCode("pa")
local langname = "Punjabi"

local function track(page)
	require("Module:debug").track("pa-headword/" .. page)
end

local function process_other_script(forms, script_code)
	local inflection = {}
	local script_object = m_scripts.getByCode(script_code)
	for _, form in ipairs(forms) do
		table.insert(inflection, {term = form, lang = lang, sc = script_object})
	end
	inflection.label = script_object:getCanonicalName() .. " spelling"
	return inflection
end

function export.show(frame)
	local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
	
	local params = {
		["head"] = {list = true},
		["tr"] = {list = true, allow_holes = true},
		["sort"] = {},
		["gur"] = { list = true },
		["sha"] = { list = true },
		["splithyphen"] = {type = "boolean"},
	}

	local PAGENAME = mw.loadData("Module:headword/data").pagename

	if PAGENAME:find(" ") then
		track("space")
	end

	if m_hi_pa_headword.pos_functions[poscat] then
		for key, val in pairs(m_hi_pa_headword.pos_functions[poscat].params) do
			params[key] = val
		end
	end

	local parargs = frame:getParent().args
	local args = require("Module:parameters").process(parargs, params)

	local data = {
		lang = lang,
		langname = langname,
		pos_category = poscat,
		sccat = true,
		heads = args["head"],
		translits = args["tr"],
		categories = {},
		genders = {},
		inflections = {},
		sort_key = args["sort"],
	}

	if #data.translits > 0 then
		track("manual-translit/" .. poscat)
	end

	local heads = data.heads
	local auto_linked_head = require("Module:headword utilities").add_links_to_multiword_term(
		PAGENAME, {split_hyphen_when_space = args.splithyphen})
	if #heads == 0 then
		data.heads = {auto_linked_head}
		data.no_redundant_head_cat = true
	else
		for _, head in ipairs(heads) do
			if head == auto_linked_head then
				track("redundant-head")
			end
		end
	end

	if m_hi_pa_headword.pos_functions[poscat] then
		m_hi_pa_headword.pos_functions[poscat].func(args, data)
	end

	if #args["gur"] > 0 then
		table.insert(data.inflections, process_other_script(args["gur"], "Guru"))
	end
	if #args["sha"] > 0 then
		table.insert(data.inflections, process_other_script(args["sha"], "pa-Arab"))
	end

	return require("Module:headword").full_headword(data)
end

return export