Jump to content

Մոդուլ:etymology/templates

Վիքիբառարան-ից

Documentation for this module may be created at Մոդուլ:etymology/templates/doc

local export = {}

function export.etyl(frame)
	local params = {
		[1] = {required = true, default = "und"},
		[2] = {},
		["sort"] = {},
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local source = args[1]
	local lang = args[2]
	local sort_key = args["sort"]
	
	-- Empty language means English, but "-" means no language. Yes, confusing...
	if not lang then
		lang = "en"
	elseif lang == "-" then
		lang = nil
	end
	
	if lang then
		lang = require("Module:languages").getByCode(lang) or error("The language code \"" .. lang .. "\" is not valid.")
	end
	
	source =
		require("Module:languages").getByCode(source) or
		require("Module:etymology languages").getByCode(source) or
		require("Module:families").getByCode(source) or
		error("The language, family or etymology language code \"" .. source .. "\" is not valid.")
	
	if lang and lang:getCode() == "nl" then
		require("Module:debug").track("etyl/nl")
		require("Module:debug").track("etyl/nl/" .. source:getCode())
	end
	
	return require("Module:etymology").format_etyl(lang, source, sort_key)
end

function export.derived(frame)
	local params = {
		[1] = {required = true, default = "und"},
		[2] = {required = true, default = "und"},
		[3] = {},
		[4] = {alias_of = "alt"},
		[5] = {alias_of = "gloss"},
		
		["alt"] = {},
		["g"] = {},
		["gloss"] = {},
		["id"] = {},
		["lit"] = {},
		["pos"] = {},
		["t"] = {alias_of = "gloss"},
		["tr"] = {},
		["sc"] = {},
		["sort"] = {},
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local lang = args[1]
	local source = args[2]
	local sc = args["sc"]
	
	lang = require("Module:languages").getByCode(lang) or error("The language code \"" .. lang .. "\" is not valid.")
	
	source =
		require("Module:languages").getByCode(source) or
		require("Module:etymology languages").getByCode(source) or
		require("Module:families").getByCode(source) or
		error("The language, family or etymology language code \"" .. source .. "\" is not valid.")
	
	sc = (sc and (require("Module:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
	
	return require("Module:etymology").format_derived(
		lang, sc, source, args[3], args["alt"], args["id"],
		{genders = {args["g"]}, tr = args["tr"], gloss = args["gloss"], pos = args["pos"], lit = args["lit"]},
		args["sort"])
end

function export.cognate(frame)
	local params = {
		[1] = {required = true, default = "und"},
		[2] = {},
		[3] = {alias_of = "alt"},
		[4] = {alias_of = "gloss"},
		
		["alt"] = {},
		["g"] = {},
		["gloss"] = {},
		["id"] = {},
		["lit"] = {},
		["pos"] = {},
		["t"] = {alias_of = "gloss"},
		["tr"] = {},
		["sc"] = {},
		["sort"] = {},
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local source = args[1]
	local sc = args["sc"]
	
	source =
		require("Module:languages").getByCode(source) or
		require("Module:etymology languages").getByCode(source) or
		require("Module:families").getByCode(source) or
		error("The language, family or etymology language code \"" .. source .. "\" is not valid.")
	
	sc = (sc and (require("Module:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
	
	return require("Module:etymology").format_cognate(
		sc, source, args[2], args["alt"], args["id"],
		{genders = {args["g"]}, tr = args["tr"], gloss = args["gloss"], pos = args["pos"], lit = args["lit"]},
		args["sort"])
end

function export.inherited(frame)
	local params = {
		[1] = {required = true, default = "und"},
		[2] = {required = true, default = "und"},
		[3] = {},
		[4] = {alias_of = "alt"},
		[5] = {alias_of = "gloss"},
		
		["alt"] = {},
		["g"] = {},
		["gloss"] = {},
		["id"] = {},
		["lit"] = {},
		["pos"] = {},
		["t"] = {alias_of = "gloss"},
		["tr"] = {},
		["sc"] = {},
		["sort"] = {},
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local lang = args[1]
	local source = args[2]
	local sc = args["sc"]
	
	lang = require("Module:languages").getByCode(lang) or error("The language code \"" .. lang .. "\" is not valid.")
	
	source =
		require("Module:languages").getByCode(source) or
		require("Module:etymology languages").getByCode(source) or
		error("The language or etymology language code \"" .. source .. "\" is not valid.")
	
	sc = (sc and (require("Module:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
	
	return require("Module:etymology").format_inherited(
		lang, sc, source, args[3], args["alt"], args["id"],
		{genders = {args["g"]}, tr = args["tr"], gloss = args["gloss"], pos = args["pos"], lit = args["lit"]},
		args["sort"])
end

function export.borrowed(frame)
	local learned = frame.args["learned"]; if not learned or learned == "" then learned = false else learned = true end
	
	local params = {
		[1] = {required = true, default = "und"},
		[2] = {required = true, default = "und"},
		[3] = {},
		[4] = {alias_of = "alt"},
		[5] = {alias_of = "gloss"},
		
		["alt"] = {},
		["g"] = {},
		["gloss"] = {},
		["id"] = {},
		["lit"] = {},
		["nocap"] = {type = "boolean"},
		["notext"] = {type = "boolean"},
		["pos"] = {},
		["t"] = {alias_of = "gloss"},
		["tr"] = {},
		["sc"] = {},
		["sort"] = {},
	}
	
	local compat = false
	
	if frame:getParent().args["lang"] then
		compat = true
	end
	
	if compat then
		require("Module:debug").track("borrowing/lang")
		params["lang"] = table.remove(params, 1)
	end
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local lang = args[compat and "lang" or 1]
	local source = args[compat and 1 or 2]
	local sc = args["sc"]
	
	lang = require("Module:languages").getByCode(lang) or error("The language code \"" .. lang .. "\" is not valid.")
	
	source =
		require("Module:languages").getByCode(source) or
		require("Module:etymology languages").getByCode(source) or
		require("Module:families").getByCode(source) or
		error("The language, family or etymology language code \"" .. source .. "\" is not valid.")
	
	sc = (sc and (require("Module:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
	
	return require("Module:etymology").format_borrowed(
		lang, sc, source, args[compat and 2 or 3], args["alt"], args["id"],
		{genders = {args["g"]}, tr = args["tr"], gloss = args["gloss"], pos = args["pos"], lit = args["lit"]},
		args["sort"], args["nocap"], args["notext"], learned)
end

function export.calque(frame)
	local params = {
		[1] = {required = true, default = "und"},
		[2] = {list = true, allow_holes = true},
		
		["alt"] = {list = true, allow_holes = true},
		["gloss"] = {list = true, allow_holes = true},
		["nocat"] = {},
		["nocap"] = {},
		["notext"] = {},
		["pos"] = {list = true, allow_holes = true},
		["t"] = {alias_of = "gloss", list = true, allow_holes = true},
		["tr"] = {list = true, allow_holes = true},
		["sort"] = {},
		
		["etyl lang"] = {required = true},
		["etyl term"] = {},
		["etyl t"] = {},
		["etyl tr"] = {},
	}
	
	local compat = false
	
	if frame:getParent().args["lang"] then
		compat = true
	end
	
	if compat then
		require("Module:debug").track("calque/lang")
		params["lang"] = table.remove(params, 1)
	end
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local lang = require("Module:languages").getByCode(args[compat and "lang" or 1])
	local term = args[compat and 1 or 2]
	local alt = args["alt"]
	local gloss = args["gloss"]
	local tr = args["tr"]
	local pos = args["pos"]
	
	local source = {
		lang = require("Module:languages").getByCode(args["etyl lang"]) or require("Module:etymology languages").getByCode(args["etyl lang"]) or error("Invalid langcode: " .. args["etyl lang"]),
		term = args["etyl term"],
		tr = args["etyl tr"],
		gloss = args["etyl t"],
	}
	
	local parts = {}
	for i=1,math.max(term.maxindex,alt.maxindex,gloss.maxindex,tr.maxindex) do
		table.insert(parts,{
			term = term[i],
			alt = alt[i],
			annotations = {
				tr = tr[i],
				gloss = gloss[i],
				pos = pos[i],
			}
		})
	end
	
	local sort_key = args["sort"]
	
	return require("Module:etymology").calque(lang, source, parts, sort_key, args.nocap, args.nocat, args.notext)
end

return export