सामग्री पर जाएँ

मॉड्यूल:User:Benwing2/affixusex/templates

विक्षनरी से

"इस मॉड्यूल हेतु प्रलेख मॉड्यूल:User:Benwing2/affixusex/templates/doc पर बनाया जा सकता है"

local export = {}

local rfind = mw.ustring.find

function export.affixusex_t(frame)
	local params = {
		[1] = {required = true},
		[2] = {list = true, allow_holes = true},
		
		["t"] = {list = true, allow_holes = true},
		["gloss"] = {alias_of = "t"},
		["tr"] = {list = true, allow_holes = true},
		["ts"] = {list = true, allow_holes = true},
		["g"] = {list = true, allow_holes = true},
		["id"] = {list = true, allow_holes = true},
		["altaff"] = {},
		["alt"] = {list = true, allow_holes = true},
		["q"] = {list = true, allow_holes = true},
		["lit"] = {list = true, allow_holes = true},
		["pos"] = {list = true, allow_holes = true},
		["sc"] = {},
		["noaffix"] = {type = "boolean"},
		["arrow"] = {list = true, allow_holes = true, type = "boolean"},
		["accel"] = {list = true, allow_holes = true},
	}

	local aftype = frame.args["type"]
	if aftype == "" or not aftype then
		aftype = "affix"
	end

	if aftype == "prefix" then
		params["altpref"] = {alias_of = "altaff"}
	elseif aftype == "suffix" then
		params["altsuf"] = {alias_of = "altaff"}
	end

	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local lang = args[1]
	lang = require("Module:languages").getByCode(lang) or require("Module:languages").err(lang, 1)
	local sc = args["sc"]
	sc = (sc and (require("Module:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)

	-- Find the maximum index among any of the list parameters.
	local maxmaxindex = 0
	for k, v in pairs(params) do
		if v.list and v.allow_holes and args[k].maxindex > maxmaxindex then
			maxmaxindex = args[k].maxindex
		end
	end

	-- Determine whether the terms in the numbered params contain an affix. If not, we will
	-- insert one before the last term, unless noaffix= is true.
	local parts = {}
	local affix_in_parts = false
	for i=1,maxmaxindex do
		if args[2][i] then
			if (aftype == "prefix" or aftype == "affix") and rfind(args[2][i], "%-$") then
				affix_in_parts = true
			end
			if (aftype == "suffix" or aftype == "affix") and rfind(args[2][i], "^%-") then
				affix_in_parts = true
			end
		end
	end

	-- Build up the per-term objects.
	for i=1,maxmaxindex do
		-- If we're about to append the last term, and no affix appeared among the terms, and
		-- noaffix= isn't set, insert the affix (which comes either from altaff=/altpref=/altsuf=
		-- or from the subpage name).
		if i == maxmaxindex and not args["noaffix"] and not affix_in_parts then
			local affix = args["altaff"]
			affix = affix or mw.title.getCurrentTitle().subpageText
			table.insert(parts, {alt = affix})
		end

		local part = {}
		part.term = args[2][i]
		part.t = args["t"][i]
		part.tr = args["tr"][i]
		part.ts = args["ts"][i]
		part.g = args["g"][i]
		part.id = args["id"][i]
		part.alt = args["alt"][i]
		part.q = args["q"][i]
		part.lit = args["lit"][i]
		part.pos = args["pos"][i]
		part.arrow = args["arrow"][i]
		part.accel = args["accel"][i] and string.gsub(args["accel"], "_", "|"),  -- To allow use of | in templates
		table.insert(parts, part)
	end

	return require("Module:User:Benwing2/affixusex").format_affixusex(lang, sc, parts, aftype)
end

return export