Модул:usex/templates

Пређи на навигацију Пређи на претрагу
Документација модула[прикажи] [уреди] [историја] [освежи]

This module is used by {{ux}} to format the usage example for a definition line, and by {{quote}} to format quotations.

It delegates the actual work to Module:usex.

Exported functions[уреди]

usex_t[уреди]

{{#invoke:usex/templates|usex_t}}

Format an usage example or a quotation. See {{ux}} and {{quote}} for more.

See also[уреди]

local export = {}

local m_languages = require("Модул:languages")
local rsplit = mw.text.split
local rfind = mw.ustring.find

function export.usex_t(frame)
	local params = {
		[1] = {required = true},
		[2] = {},
		[3] = {},
		
		["inline"] = {type = "boolean"},
		["noenum"] = {type = "boolean"},
		["ref"] = {},
		["lit"] = {},
		["q"] = {list = true},
		["sc"] = {},
		["source"] = {},
		["footer"] = {},
		["subst"] = {},
		["t"] = {alias_of = 3},
		["translation"] = {alias_of = 3},
		["tr"] = {},
		["transliteration"] = {alias_of = "tr"},
		["nocat"] = {type = "boolean"},
		["brackets"] = {type = "boolean"},
	}
	
	local quote = (frame.args["quote"] or "") ~= ""
	local compat = (frame.args["compat"] or "") ~= ""
	local template_inline = (frame.args["inline"] or "") ~= ""
	
	if compat then
		params["lang"] = {required = true}
		params["t"].alias_of = 2
		params["translation"].alias_of = 2
		table.remove(params, 1)
	end
	
	local args = require("Модул:parameters").process(frame:getParent().args, params)
	
	local lang = args[compat and "lang" or 1] or "und"
	local sc = args["sc"]
	
	lang = m_languages.getByCode(lang) or m_languages.err(lang, ( compat and "lang" ) or 1)
	sc = (sc and (require("Модул:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
	
	local usex = args[compat and 1 or 2]
	local translation = args[compat and 2 or 3]
	local transliteration = args["tr"]
	local noenum = args["noenum"]
	local inline = args["inline"] or template_inline
	local ref = args["ref"]
	local lit = args["lit"]
	local substs = args["subst"]
	local qualifiers = args["q"]
	local source = args["source"]
	local footer = args["footer"]
	local nocat = args["nocat"]
	local brackets = args["brackets"]
	
	return require("Модул:usex").format_usex(lang, sc, usex, translation,
		transliteration, noenum, inline, ref, quote, lit, substs, qualifiers,
		source, nocat, brackets, footer)
end

-- Given a comma-separated list of language codes, return the English equivalent.
function export.format_langs(frame)
	local langcodes = rsplit(frame.args[1], ",")
	local langnames = {}
	for _, langcode in ipairs(langcodes) do
		local lang = m_languages.getByCode(langcode) or m_languages.err(langcode, 1)
		table.insert(langnames, lang:getCanonicalName())
	end
	if #langnames == 1 then
		return langnames[1]
	elseif #langnames == 2 then
		return langnames[1] .. " and " .. langnames[2]
	else
		local retval = {}
		for i, langname in ipairs(langnames) do
			table.insert(retval, langname)
			if i <= #langnames - 2 then
				table.insert(retval, ", ")
			elseif i == #langnames - 1 then
				table.insert(retval, "<span class=\"serial-comma\">,</span><span class=\"serial-and\"> and</span> ")
			end
		end
		return table.concat(retval, "")
	end
end

-- Given a comma-separated list of language codes, return the first one.
function export.first_lang(frame)
	local langcodes = rsplit(frame.args[1], ",")
	return langcodes[1]
end

local ignore_prefixes = {"User:", "Talk:",
	"Wiktionary:Beer parlour", "Wiktionary:Translation requests",
	"Wiktionary:Grease pit", "Wiktionary:Etymology scriptorium",
	"Wiktionary:Information desk", "Wiktionary:Tea room",
	"Wiktionary:Requests for", "Wiktionary:Votes"
}

function export.page_should_be_ignored(page)
	-- Ignore user pages, talk pages and certain Wiktionary pages
	for _, ip in ipairs(ignore_prefixes) do
		if rfind(page, "^" .. ip) then
			return true
		end
	end
	if rfind(page, " talk:") then
		return true
	end
	return false
end

function export.page_should_be_ignored_t(frame)
	return export.page_should_be_ignored(frame.args[1]) and "true" or ""
end

return export