Module:User:Theknightwho/etymology/templates

local export = {}

local m_languages = require("Module:User:Theknightwho/languages") local m_internal = require("Module:User:Theknightwho/etymology/templates/internal")

-- For testing local force_cat = false

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 = m_internal.fetch_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 = m_internal.fetch_lang(lang, 2) end if lang and (lang:getCode == "la" or lang:getCode == "nl") then require("Module:debug").track("etyl/" .. lang:getCode) require("Module:debug").track("etyl/" .. lang:getCode .. "/" .. source:getCode) end return require("Module:User:Theknightwho/etymology").format_etyl(lang, source, sort_key) end

-- Supports various specialized types of borrowings, according to `frame.args.bortype`: --  "learned" = / --  "semi-learned" = / --  "orthographic" = / --  "unadapted" = / --  "calque" = / --  "partial-calque" = / --  "semantic-loan" = / --  "transliteration" = / --  "phono-semantic-matching" = / function export.specialized_borrowing(frame) local bortype = frame.args.bortype local args = frame:getParent.args if args.gloss then require("Module:debug").track("borrowing/" .. bortype .. "/gloss param") end

-- More informative error message for, which used to support other params. if bortype == "calque" and (args["etyl lang"] or args["etyl term"] or args["etyl t"] or args["etyl tr"]) then error(" no longer supports parameters beginning with etyl. " ..			"The parameters supported are similar to those used by " ..			",, " ..			". See Template:calque/documentation for more.") end local args, lang, term, sources = m_internal.parse_2_lang_args(frame, "has text") local m_etymology_specialized = require("Module:User:Theknightwho/etymology/specialized") if sources then return m_etymology_specialized.specialized_multi_borrowing(bortype, lang, term.sc, sources, term,			args.sort, args.nocap, args.notext, args.nocat, args.conj, args.senseid) else return m_etymology_specialized.specialized_borrowing(bortype, lang, term, args.sort,			args.nocap, args.notext, args.nocat, args.senseid) end end

-- Implementation of miscellaneous templates such as, , --, , and that have a single -- associated term. function export.misc_variant(frame) local params = { [1] = {required = true, default = "und"}, [2] = {},		[3] = {alias_of = "alt"}, [4] = {alias_of = "t"}, ["alt"] = {}, ["gloss"] = {alias_of = "t"}, ["g"] = {list = true}, ["id"] = {}, ["lit"] = {}, ["pos"] = {}, ["t"] = {}, ["tr"] = {}, ["ts"] = {}, ["sc"] = {}, ["nocap"] = {type = "boolean"}, -- should be processed in the template itself ["notext"] = {type = "boolean"}, ["nocat"] = {type = "boolean"}, ["sort"] = {}, }	-- |ignore-params= parameter to module invocation specifies -- additional parameter names to allow in template invocation, separated by -- commas. They must consist of ASCII letters or numbers or hyphens. local ignore_params = frame.args["ignore-params"] if ignore_params then ignore_params = mw.text.trim(ignore_params) if not ignore_params:match "^[%w%-,]+$" then error("Invalid characters in |ignore-params=: " .. ignore_params:gsub("[%w%-,]+", "")) end for param in ignore_params:gmatch "[%w%-]+" do			if params[param] then error("Duplicate param |" .. param					.. " in |ignore-params=: already specified in params") end params[param] = {} end end local args = require("Module:parameters").process(frame:getParent.args, params) local lang = m_internal.fetch_lang(args[1], 1) local sc = m_internal.fetch_script(args["sc"], "sc")

local parts = {} if not args["notext"] then table.insert(parts, frame.args["text"]) end if args[2] or args["alt"] then if not args["notext"] then table.insert(parts, " ") table.insert(parts, frame.args["oftext"] or "of") table.insert(parts, " ") end table.insert(parts, require("Module:links").full_link( {				lang = lang, sc = sc, term = args[2], alt = args["alt"], id = args["id"], tr = args["tr"], ts = args["ts"], genders = args["g"], gloss = args["t"], pos = args["pos"], lit = args["lit"], },			"term", true)) end -- Allow |cat=, |cat2=, |cat3=, etc. They must be sequential. If |cat= -- is not defined, |cat2= will not be checked. Empty categories are ignored. local categories = {} if not args["nocat"] and frame.args["cat"] then local cat_number while true do local cat = frame.args["cat" .. (cat_number or "")] if not cat then break end cat = mw.text.trim(cat) if cat ~= "" then table.insert(categories, lang:getCanonicalName .. " " .. cat) end cat_number = (cat_number or 1) + 1 end end if #categories > 0 then table.insert(			parts,			require("Module:utilities").format_categories(categories, lang, args["sort"], nil, force_cat)) end

return table.concat(parts) end

-- Implementation of miscellaneous templates such as Unknown that have no -- associated terms. function export.misc_variant_no_term(frame) local params = { [1] = {required = true, default = "und"},

["title"] = {}, ["nocap"] = {type = "boolean"}, -- should be processed in the template itself ["notext"] = {type = "boolean"}, ["nocat"] = {type = "boolean"}, ["sort"] = {}, }

if frame.args["title2_alias"] then params[2] = {alias_of = "title"} end local args = require("Module:parameters").process(frame:getParent.args, params) local lang = m_internal.fetch_lang(args[1], 1)

local parts = {} if not args["notext"] then table.insert(parts, args["title"] or frame.args["text"]) end if not args["nocat"] and frame.args["cat"] then local categories = {} table.insert(categories, lang:getCanonicalName .. " " .. frame.args["cat"]) table.insert(parts, require("Module:utilities").format_categories(categories, lang, args["sort"], nil, force_cat)) end

return table.concat(parts) end

return export