Open main menu
Text-x-generic with pencil.svg 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:Unicode_data").char_to_script(head)
	local script = scriptCode and require("Module:scripts").getByCode(scriptCode) or require("Module:scripts").findBestScript(head, lang)
	local variant = args["var"] or nil
	
	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,
		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