Module:Pronoun
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Pronoun/doc
local p = {}
-- Checks if a verb needs an 'es' ending (for third-person singular simple present tense)
local function needsEsEnding(verb)
return verb:match("[oschx]$") or verb:match("sh$") or verb:match("ss$")
end
-- Special cases for verb conjugation that don't follow the regular 's' or 'es' pattern, including 'has' to 'have'
local specialCases = {
go = "goes",
has = "have",
}
-- Determines if the string is fully uppercase
local function isAllCaps(s)
return s:upper() == s
end
-- Correctly applies 'is' or 'are' for continuous verbs based on pronoun, retaining input case
local function applyContinuousVerb(pronoun, verb)
if pronoun:lower() == "they" then
return pronoun .. " are " .. verb
else
return pronoun .. " is " .. verb
end
end
-- Adjusts the verb based on the pronoun, verb tense, and input capitalization
local function adjustVerb(originalPronoun, originalVerb)
local pronoun = originalPronoun:lower() -- Use lowercase for logic
local verb = originalVerb:lower() -- Use lowercase for logic
local result = ""
-- Continuous tense (verbs ending in 'ing')
if verb:sub(-3) == "ing" then
result = applyContinuousVerb(originalPronoun, originalVerb)
else
if pronoun == "he" or pronoun == "she" or pronoun == "it" then
if specialCases[verb] then
verb = specialCases[verb]
elseif not verb:match("s$") then
verb = verb .. (needsEsEnding(verb) and "es" or "s")
end
elseif pronoun == "they" then
verb = specialCases[verb] or verb -- Check if there's a special plural case
if verb:match("es$") or verb:match("s$") then
verb = verb:sub(1, -3) -- Assuming 'es' ending for simplicity, adjust as needed
end
end
result = originalPronoun .. " " .. verb
end
-- Adjust for uppercase input
if isAllCaps(originalPronoun) and isAllCaps(originalVerb) then
result = result:upper()
else
-- Reapply the original case for the verb if no conjugation change was needed
if verb == originalVerb:lower() then
verb = originalVerb
end
result = originalPronoun .. " " .. verb
end
return result
end
function p.main(frame)
local originalPronoun = frame.args[1]
local originalVerb = frame.args[2]
return adjustVerb(originalPronoun, originalVerb) -- Adjust and return the result
end
return p