Module:Grammar/Conjugate: Difference between revisions
Jump to navigation
Jump to search
Syntaxaire (talk | contribs) (add 'were' -> 'was') |
m (re-order logic to ensure "with" and "of" phrases are pluralized regardless of how their final word ends) |
||
(9 intermediate revisions by 3 users not shown) | |||
Line 2: | Line 2: | ||
function p.pluralize(str, apostrophe) | function p.pluralize(str, apostrophe) | ||
apostrophe = apostrophe or '' | apostrophe = apostrophe or '' | ||
local irregularplurals = {} | local irregularplurals = { | ||
Man = 'Men', | |||
man = 'men' | |||
} | |||
if irregularplurals[str] ~= nil then | |||
return irregularplurals[str] | |||
elseif (str:sub(-1) == 'z' or str:sub(-2) == 'ch' or str:sub(-2) == 'sh' or str:sub(-1) == 'x') and apostrophe == '' then | elseif (string.find(str, ' of ')) then | ||
return (str .. 'es') | 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 | end | ||
function p.make_possessive(string) | function p.make_possessive(string) | ||
return p.pluralize(string, "'") | |||
end | end | ||
function p.singularverb(string) | function p.singularverb(string) | ||
--[ Assumes the input string is already a plural verb.] | |||
local irregularsingulars = { | |||
["are"] = 'is', | ["are"] = 'is', | ||
["were"] = 'was', | ["were"] = 'was', | ||
Line 28: | Line 45: | ||
["'re"] = "'s", | ["'re"] = "'s", | ||
["don't"] = "doesn't", | ["don't"] = "doesn't", | ||
["'ve"] = "'s" | ["'ve"] = "'s", | ||
["do"] = "does" | |||
} | |||
local result = irregularsingulars[string] | |||
if result ~= nil and result ~= '' then | |||
return result | |||
else | |||
return string .. "s" | |||
end | |||
end | end | ||
function p.capitalize(str) | |||
return str:gsub("^%l", string.upper) | |||
end | |||
return p | return p |
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