Module:Sandbox/Erutuon/Glossing abbreviations

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 ''..abbreviation..' ' else return ''..abbreviation..' ' end end

return p