Module:kilta-headword: Difference between revisions
Created page with "local match = mw.ustring.match local u = mw.ustring.char local gsub = mw.ustring.gsub local sub = mw.ustring.sub local TILDEB = u(0x0330) -- COMBINING TILDE BELOW ̰◌ local export = {} local lang = require("Module:languages").getByCode("kilta") local deabb = {["adj"] = "adjectives", ["v"] = "verbs", ["adv"] = "adverbs", ["n"] = "nouns"} local function glossary_link(entry, text) text = text or entry return "" .. text .. "..." |
No edit summary |
||
| (52 intermediate revisions by the same user not shown) | |||
| Line 3: | Line 3: | ||
local gsub = mw.ustring.gsub | local gsub = mw.ustring.gsub | ||
local sub = mw.ustring.sub | local sub = mw.ustring.sub | ||
local split = mw.text.split | |||
local TILDEB = u(0x0330) -- COMBINING TILDE BELOW ̰◌ | local TILDEB = u(0x0330) -- COMBINING TILDE BELOW ̰◌ | ||
| Line 16: | Line 17: | ||
end | end | ||
local function plural(word, | local function plural(word, n, pos) | ||
local | local w = split(word, " ") | ||
if | n = tonumber(n) | ||
if n > #w then error("Word index outside bounds.") end | |||
if pos == "n" then | |||
if w[n]:match("[kh]wa$") then | |||
w[n] = sub(w[n], 1, -3) .. "úr" | |||
elseif | elseif w[n]:match("a$") then | ||
w[n] = sub(w[n], 1, -2) .. "úr" | |||
elseif w[n]:match("ës$") or w[n]:match("uin$") or w[n]:match("[str]$") then | |||
w[n] = w[n] .. "á" | |||
elseif w[n]:match("[nml]$") then | |||
w[n] = w[n] .. "ur" | |||
end | |||
elseif pos == "adj" then | |||
if w[n]:match("[kh]win$") then | |||
w[n] = sub(w[n], 1, -4) .. "ú" | |||
elseif w[n]:match("in$") then | |||
w[n] = sub(w[n], 1, -3) .. "u" | |||
end | |||
end | end | ||
return {label = "plural", table.concat(w, " ")} | |||
end | end | ||
function export.show(frame) | function export.show(frame) | ||
local | |||
local params = { | |||
local pos = args[1]; local pl = args | [1] = {}, | ||
["pl"] = {list = true}, | |||
["w"] = {default = mw.title.getCurrentTitle().text}, | |||
["n"] = {type = "number", default = 1} | |||
} | |||
local args = require("Module:parameters").process(frame:getParent().args, params) | |||
local word = args.w | |||
local pos = args[1]; local pl = args.pl | |||
local data = {lang = lang, pos_category = deabb[pos], heads = {word}, categories = {}, inflections = {},} | local data = {lang = lang, pos_category = deabb[pos], heads = {word}, categories = {}, inflections = {},} | ||
if pl == '-' then | if pl[1] == '-' then | ||
if pos == "n" then | if pos == "n" then | ||
table.insert(data.inflections, {label = glossary_link("uncountable")}) | table.insert(data.inflections, {label = glossary_link("uncountable")}) | ||
| Line 47: | Line 67: | ||
if pos == "adv" then table.insert(data.categories, lang:getCanonicalName() .. " comparative " .. deabb[pos]) end ]=] | if pos == "adv" then table.insert(data.categories, lang:getCanonicalName() .. " comparative " .. deabb[pos]) end ]=] | ||
else | else | ||
table.insert(data.inflections, plural(word, | if pl[1] then | ||
pl.label = "plural" | |||
table.insert(data.inflections, pl) | |||
else | |||
table.insert(data.inflections, plural(word, args.n, pos)) | |||
end | |||
end | end | ||