Module:Labels/templates: Difference between revisions

From The Languages of David J. Peterson
Jump to navigation Jump to search
(Created page with "local export = {} --[=[ Modules used: Module:labels Module:parameters Module:utilities Module:languages Module:template_link ]=] function export.sh...")
 
No edit summary
 
Line 61: Line 61:
and similar templates ]]
and similar templates ]]
function export.show_from(frame)
function export.show_from(frame)
local m_labeldata = require('Module:labels/data')
local m_labeldata = require("Module:labels/data")
local froms = {}
local froms = {}
local categories = {}
local categories = {}
local args = frame:getParent().args
 
local iparams = {
["lang"] = {},
["limit"] = {type = "number"},
["default"] = {},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
local parent_args = frame:getParent().args
local compat = iargs["lang"] or parent_args["lang"]
 
local params = {
[compat and "lang" or 1] = {required = not iargs["lang"]},
["from"] = {list = true},
["nocat"] = {type = "boolean"},
}
 
-- This is called by various form-of templates. They accept several params,
-- and some templates accept additional params. To avoid having to list all
-- of them, we just ignore unrecognized params. The main processing for the
-- form-of template will catch true unrecognized params.
local args = require("Module:parameters").process(parent_args, params, "allow unrecognized params")
local lang = args[compat and "lang" or 1] or iargs["lang"] or "und"
local nocat = args["nocat"]
local nocat = args["nocat"]
local lang = frame.args["lang"] or args["lang"] or args[1] or "en"
local limit = iargs.limit or 99999
local limit = frame.args.limit and tonumber(frame.args.limit) or 99999
local m_languages = require("Module:languages")
local m_languages = require("Module:languages")
lang = m_languages.getByCode(lang) or m_languages.err(lang, "lang")
lang = m_languages.getByCode(lang) or m_languages.err(lang, "lang")


local key, i = 'from', 1
for i, k in ipairs(args["from"]) do
while args[key] do
if i > limit then
local k = args[key]
break
end
k = m_labeldata.aliases[k] or k
k = m_labeldata.aliases[k] or k
local data = m_labeldata.labels[k]
local data = m_labeldata.labels[k]
Line 98: Line 120:
table.insert(categories, category1)
table.insert(categories, category1)
table.insert(categories, category2)
table.insert(categories, category2)
i = i + 1
if i > limit then
break
end
key = 'from' .. i
end
end
Line 108: Line 125:
if #froms == 0 then
if #froms == 0 then
return frame.args.default
return iargs.default
end
end

Latest revision as of 02:01, 17 March 2020

Documentation for this module may be created at Module:Labels/templates/documentation

local export = {}

--[=[
	Modules used:
	[[Module:labels]]
	[[Module:parameters]]
	[[Module:utilities]]
	[[Module:languages]]
	[[Module:template_link]]
]=]

function export.show(frame)
	local parent_args = frame:getParent().args
	local compat = (frame.args["compat"] or "") ~= "" and parent_args["lang"]
	local term_mode = (frame.args["term"] or "") ~= ""
	
	local params = {
		[1] = {required = true},
		[2] = {list = true},
		["nocat"] = {type = "boolean"},
		["script"] = {},
		["script2"] = {},
		["sort"] = {},
		["sort2"] = {},
	}
	
	if compat then
		params[1] = params[2]
		params[2] = nil
		params["lang"] = {required = true}
	end
	
	local args = require("Module:parameters").process(parent_args, params)
	
	-- Gather parameters
	local lang = args[compat and "lang" or 1]
	local labels = args[compat and 1 or 2]
	local nocat = args["nocat"]
	local script = args["script"]
	local script2 = args["script2"]
	local sort_key = args["sort"]
	local sort_key2 = args["sort2"]

	if not lang then
		if mw.title.getCurrentTitle().nsText == "Template" then
			lang = "und"
		else
			error("Language code has not been specified. Please provide it to the template using the first parameter.")
		end
	end
	
	lang = require("Module:languages").getByCode(lang) or require("Module:languages").err(lang, compat and "lang" or 1)
	
	return require("Module:labels").show_labels(labels, lang, script, script2, sort_key, sort_key2, nocat, term_mode)
end

--[[	temporary. intentionally undocumented.
		this function is only to be used in
		{{alternative spelling of}},
		{{eye dialect of}}
		and similar templates					]]
function export.show_from(frame)
	local m_labeldata = require("Module:labels/data")
	
	local froms = {}
	local categories = {}

	local iparams = {
		["lang"] = {},
		["limit"] = {type = "number"},
		["default"] = {},
	}
	
	local iargs = require("Module:parameters").process(frame.args, iparams)
	local parent_args = frame:getParent().args
	local compat = iargs["lang"] or parent_args["lang"]

	local params = {
		[compat and "lang" or 1] = {required = not iargs["lang"]},
		["from"] = {list = true},
		["nocat"] = {type = "boolean"},
	}

	-- This is called by various form-of templates. They accept several params,
	-- and some templates accept additional params. To avoid having to list all
	-- of them, we just ignore unrecognized params. The main processing for the
	-- form-of template will catch true unrecognized params.
	local args = require("Module:parameters").process(parent_args, params, "allow unrecognized params")
	local lang = args[compat and "lang" or 1] or iargs["lang"] or "und"
	local nocat = args["nocat"]
	local limit = iargs.limit or 99999
	
	local m_languages = require("Module:languages")
	lang = m_languages.getByCode(lang) or m_languages.err(lang, "lang")

	for i, k in ipairs(args["from"]) do
		if i > limit then
			break	
		end
		k = m_labeldata.aliases[k] or k
		local data = m_labeldata.labels[k]
		local label = data and data.display or k
		local category1, category2
		
		if not nocat and data then
			if data.regional_categories then
				for j, cat in ipairs(data.regional_categories) do
					category1 = cat .. ' ' .. lang:getCanonicalName()
				end
			end
		
			if data.plain_categories then
				for j, cat in ipairs(data.plain_categories) do
					category2 = cat
				end
			end
		end

		table.insert(froms, label)
		table.insert(categories, category1)
		table.insert(categories, category2)
	end
	
	categories = require("Module:utilities").format_categories(categories, lang)
	
	if #froms == 0 then
		return iargs.default
	end
	
	if #froms == 2 then
		return froms[1] .. " and " .. froms[2] .. categories
	end
	
	local results = {}
	for i, item in ipairs(froms) do
		if i == 1 then
			-- nothing
		elseif i == #froms then
			table.insert(results, '<span class="serial-comma">,</span> <span class="serial-and"> and</span> ')
		else
			table.insert(results, ', ')
		end
		
		table.insert(results, item)
	end
	return table.concat(results) .. categories
end

return export