Module:mul-letter

From Wiktionary, the free dictionary
Jump to navigation Jump to search
This module needs documentation.
Please document this module by describing its purpose and usage on the documentation page.

local export = {}
local PAGENAME = mw.title.getCurrentTitle().text

local function getCasing(char, variant)
	if not variant then
		variant = "common"
	end
	local casing = require("Module:mul-letter/data")[variant][char]
	if not casing then
		if mw.ustring.len(char) > 1 then
			casing = {mw.ustring.lower(char), mw.ustring.upper(mw.ustring.sub(char, 1, 1)) .. mw.ustring.lower(mw.ustring.sub(char, 2, -1)), mw.ustring.upper(char)}
		else
			casing = {mw.ustring.lower(char), mw.ustring.upper(char), mw.ustring.upper(char)}
		end
	end
	return casing
end

function export.show(frame)
	local args = frame:getParent().args
	local head = args["head"] or PAGENAME
	local lang = require("Module:languages").getByCode("mul")
	local scriptCode = args["sc"] or args["script"] or require("Module:scripts").findBestScriptWithoutLang(head):getCode()
	local script = scriptCode and require("Module:scripts").getByCode(scriptCode) or lang:findBestScript(head)
	local variant = args["var"]
	
	if args.script then
		require("Module:debug").track("mul-letter/script-param")
	end

	local data = {
		lang = lang,
		sc = script,
		pos_category = "letters",
		categories = {},
		heads = {head},
		no_redundant_head_cat = not args.head,
		inflections = {}
	}

	local casing = getCasing(head, variant)
	if casing[1] ~= head then
		table.insert(data.inflections, {label = "lower case", casing[1]})
	end
	if casing[2] ~= head and casing[2] ~= casing[3] then
		table.insert(data.inflections, {label = "mixed case", casing[2]})
	end
	if casing[3] ~= head then
		table.insert(data.inflections, {label = "upper case", casing[3]})
	end

	return require("Module:headword").full_headword(data)
		.. require("Module:utilities").format_categories({
			script:getCategoryName() .. " characters",
		}, lang)
end

return export