Module:Sandbox/Erutuon/Glossing abbreviations

From blackwiki
Jump to navigation Jump to search

This was an early module designed to format and expand glossing abbreviations. It was used by an earlier version of Template:Gloss-abbr. It has been superseded by Template:gcl (which uses Module:Interlinear).


local p = {}

local data = {
	["1s"] = "first person singular",
	["2s"] = "second person singular",
	["3s"] = "third person plural",
	["1p"] = "first person plural",
	["2p"] = "second person plural",
	["3p"] = "third person plural",
	["ind"] = "indicative mood",
	["sjv"] = "subjunctive mood",
	["part"] = "participle",
	["imp"] = "imperative",
	["nom"] = "nominative case",
	["acc"] = "accusative case",
	["gen"] = "genitive case",
	["dat"] = "dative case",
	["def"] = "definite",
	["ndef"] = "indefinite",
	["sg"] = "singular number",
	["du"] = "dual number",
	["pl"] = "plural number",
}

data["sbjv"] = data["sjv"]
data["indef"] = data["ndef"]
 -- non-standard
data["indic"] = data["ind"]
data["1sg"] = data["1s"]
data["2sg"] = data["2s"]
data["3sg"] = data["3s"]
data["1pl"] = data["1p"]
data["2pl"] = data["2p"]
data["3pl"] = data["3p"]

function p.abbr(frame)
	local args = frame:getParent().args[1] and frame:getParent().args or frame.args
	local abbreviation = args[1] or error("Provide an abbreviation in parameter 1")
	
	local key = string.gsub(abbreviation, "%.$", "")
	key = string.lower(key)
	
	local expanded = data[key] or error("The abbreviation "..(abbreviation or "nil").." is not recognized")
	
	local _, count = mw.ustring.gsub(abbreviation, "%u", "")
	if count > #abbreviation * 3/4 then
		return '<abbr class="smallcaps" style="font-variant: small-caps; text-transform: lowercase;" title="'..expanded..'">'..abbreviation..'</abbr>'
	else
		return '<abbr title="'..expanded..'">'..abbreviation..'</abbr>'
	end
end

return p