Module:etymology/templates/internal

< Module:etymology‎ | templates
Revision as of 16:45, 9 March 2023 by Sware (talk | contribs)

Documentation for this module may be created at Module:etymology/templates/internal/doc

-- For internal use only with [[Module:etymology/templates]] and its submodules.

local export = {}

function export.fetch_lang(lang, param)
	return require("Module:languages").getByCode(lang, param)
end


function export.fetch_source(code, param, disallow_family)
	return require("Module:languages").getByCode(code, param, true, not disallow_family)
end


local function fetch_sources(codes, param, disallow_family)
	local m_languages = require("Module:languages")
	codes = mw.text.split(codes, "%s*,%s*")
	for i, code in ipairs(codes) do
		codes[i] = m_languages.getByCode(code, param, true, not disallow_family)
	end
	return codes
end


function export.fetch_source_or_sources(source, param, disallow_family)
	local sources
	if source:find(",") then
		sources = fetch_sources(source, param, no_family)
		source = sources[#sources]
	else
		source = export.fetch_source(source, param, no_family)
	end
	return source, sources
end


function export.fetch_script(sc, param)
	return require("Module:scripts").getByCode(sc, param)
end


function export.parse_2_lang_args(frame, has_text, no_family)
	local params = {
		[1] = true,
		[2] = true,
		[3] = false,
		
		["alt"] = {aliases = {4}},
		["cat"] = false,
		["id"] = false,
		["lit"] = false,
		["pos"] = false,
		["t"] = {aliases = {5, "gloss"}},
		["tr"] = false,
		["ts"] = false,
		["sc"] = false,
		["senseid"] = false,

		["nocat"] = false,
		["sort"] = false,
		["conj"] = false,
	}

	if has_text then
		params["notext"] = false
		params["nocap"] = false
	end

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

	args["g"] = require("Module:parameters/lite/list")(frame:getParent().args, "g")
	args["nocat"] = yesno(args["nocat"])
	if has_text then
		args["notext"] = yesno(args["notext"])
		args["nocap"] = yesno(args["nocap"])
	end
	
	local lang = export.fetch_lang(args[1], 1)
	local source, sources = export.fetch_source_or_sources(args[2], 2, no_family)
	local sc = export.fetch_script(args["sc"], "sc") or require("Module:scripts").findBestScriptWithoutLang(args[3])

	return args, lang, {
		lang = source,
		sc = sc,
		term = args[3],
		alt = args["alt"],
		id = args["id"],
		genders = args["g"],
		tr = args["tr"],
		ts = args["ts"],
		gloss = args["t"],
		pos = args["pos"],
		lit = args["lit"]
	}, sources
end

return export