This module generates content for the etymology templates {{cognate}} and {{noncognate}}.


local export = {}

local etymology_module = "Module:etymology"
local etymology_multi_module = "Module:etymology/multi"

local process_params = require("Module:parameters").process

do
	local function get_args(parent_args)
		local alias_of_t = {alias_of = "t"}
		local plain = {}
		return process_params(parent_args, {
			[1] = {
				required = true,
				sublist = true,
				type = "language",
				family = true,
				default = "und"
			},
			[2] = plain,
			[3] = {alias_of = "alt"},
			[4] = alias_of_t,
			["alt"] = plain,
			["conj"] = plain,
			["g"] = {list = true},
			["gloss"] = alias_of_t,
			["id"] = plain,
			["lit"] = plain,
			["pos"] = plain,
			["sc"] = {type = "script"},
			["sort"] = plain,
			["t"] = plain,
			["tr"] = plain,
			["ts"] = plain,
		})
	end
	
	function export.cognate(frame)
		local parent_args = frame:getParent().args
		
		if parent_args.gloss then
			require("Module:debug/track")("cognate/gloss param")
		end
		
		local args = get_args(parent_args)
		local sources = args[1]
	
		local terminfo = {
			lang = sources[#sources],
			sc = args["sc"],
			term = args[2],
			alt = args["alt"],
			id = args["id"],
			genders = args["g"],
			tr = args["tr"],
			ts = args["ts"],
			gloss = args["t"],
			pos = args["pos"],
			lit = args["lit"]
		}
	
		if #sources > 1 then
			return require(etymology_multi_module).format_multi_cognate {
				sources = sources,
				terminfo = terminfo,
				sort_key = args.sort,
				conj = args.conj,
			}
		end
		return require(etymology_module).format_cognate {
			terminfo = terminfo,
			sort_key = args.sort,
		}
	end
end

function export.noncognate(frame)
	return export.cognate(frame)
end

return export