Module:Grammar/Conjugate: Difference between revisions
Jump to navigation
Jump to search
(improved pluralization for things with "of" in the name (drops of nectar, clumps of grave moss, knight commanders of the holy temple, etc)) |
m (re-order logic to ensure "with" and "of" phrases are pluralized regardless of how their final word ends) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 9: | Line 9: | ||
if irregularplurals[str] ~= nil then | if irregularplurals[str] ~= nil then | ||
return irregularplurals[str] | return irregularplurals[str] | ||
elseif (string.find(str, ' of ')) then | |||
i = string.find(str, ' of ') | |||
return p.pluralize(string.sub(str, 1, i-1)) .. string.sub(str, i) | |||
elseif (string.find(str, ' with ')) then | |||
i = string.find(str, ' with ') | |||
return p.pluralize(string.sub(str, 1, i-1)) .. string.sub(str, i) | |||
elseif (str:sub(-1) == 's') then | elseif (str:sub(-1) == 's') then | ||
return (str .. apostrophe) --return unmodified (ends with 's', like 'boots', so we shouldn't append another 's') | return (str .. apostrophe) --return unmodified (ends with 's', like 'boots', so we shouldn't append another 's') | ||
Line 15: | Line 21: | ||
elseif (string.sub(str, -1) == 'y') and apostrophe == '' then | elseif (string.sub(str, -1) == 'y') and apostrophe == '' then | ||
return (string.sub(str, 1, -2) .. 'ies') | return (string.sub(str, 1, -2) .. 'ies') | ||
elseif (string. | elseif (string.sub(str, -3) == 'ife') and apostrophe == '' then | ||
return (string.sub(str, 1, -4) .. 'ives') | |||
return | |||
elseif (str:sub(-1) == 'z' or str:sub(-2) == 'ch' or str:sub(-2) == 'sh' or str:sub(-1) == 'x') and apostrophe == '' then | elseif (str:sub(-1) == 'z' or str:sub(-2) == 'ch' or str:sub(-2) == 'sh' or str:sub(-1) == 'x') and apostrophe == '' then | ||
if (str:sub(-6) == 'vortex') then --special case, capitalize vortex the same way the game does in in-game text like Quantum Jitters description | if (str:sub(-6) == 'vortex') then --special case, capitalize vortex the same way the game does in in-game text like Quantum Jitters description |
Latest revision as of 19:30, 27 June 2022
local p = {}
function p.pluralize(str, apostrophe)
apostrophe = apostrophe or ''
local irregularplurals = {
Man = 'Men',
man = 'men'
}
if irregularplurals[str] ~= nil then
return irregularplurals[str]
elseif (string.find(str, ' of ')) then
i = string.find(str, ' of ')
return p.pluralize(string.sub(str, 1, i-1)) .. string.sub(str, i)
elseif (string.find(str, ' with ')) then
i = string.find(str, ' with ')
return p.pluralize(string.sub(str, 1, i-1)) .. string.sub(str, i)
elseif (str:sub(-1) == 's') then
return (str .. apostrophe) --return unmodified (ends with 's', like 'boots', so we shouldn't append another 's')
elseif (string.sub(str, -2) == 'ey') and apostrophe == '' then
return (str .. 's') --for example, "lamprey"
elseif (string.sub(str, -1) == 'y') and apostrophe == '' then
return (string.sub(str, 1, -2) .. 'ies')
elseif (string.sub(str, -3) == 'ife') and apostrophe == '' then
return (string.sub(str, 1, -4) .. 'ives')
elseif (str:sub(-1) == 'z' or str:sub(-2) == 'ch' or str:sub(-2) == 'sh' or str:sub(-1) == 'x') and apostrophe == '' then
if (str:sub(-6) == 'vortex') then --special case, capitalize vortex the same way the game does in in-game text like Quantum Jitters description
return (string.sub(str, 1, -3) .. 'ices')
end
return (str .. 'es')
else
return (str.. apostrophe .. 's')
end
end
function p.make_possessive(string)
return p.pluralize(string, "'")
end
function p.singularverb(string)
--[ Assumes the input string is already a plural verb.]
local irregularsingulars = {
["are"] = 'is',
["were"] = 'was',
["have"] = 'has',
["'re"] = "'s",
["don't"] = "doesn't",
["'ve"] = "'s",
["do"] = "does"
}
local result = irregularsingulars[string]
if result ~= nil and result ~= '' then
return result
else
return string .. "s"
end
end
function p.capitalize(str)
return str:gsub("^%l", string.upper)
end
return p