Module:Pronoun: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
-- |
-- Checks if a verb needs an 'es' ending (for third-person singular simple present tense) |
||
local function needsEsEnding(verb) |
local function needsEsEnding(verb) |
||
-- Verbs ending in o, ch, sh, ss, or x get 'es' in the third person singular |
|||
return verb:match("[oschx]$") or verb:match("sh$") or verb:match("ss$") |
return verb:match("[oschx]$") or verb:match("sh$") or verb:match("ss$") |
||
end |
end |
||
-- Special cases for verb conjugation that don't follow the regular 's' or 'es' pattern |
|||
⚫ | |||
local specialCases = { |
|||
go = "goes", |
|||
} |
|||
⚫ | |||
local function adjustVerb(originalPronoun, verb) |
local function adjustVerb(originalPronoun, verb) |
||
local pronoun = originalPronoun:lower() -- Use |
local pronoun = originalPronoun:lower() -- Use lowercase for logic |
||
local originalVerb = verb -- Preserve the original verb for later comparison |
|||
⚫ | |||
verb = verb:lower() -- Use lowercase for logic |
|||
⚫ | |||
if verb:sub(-3) == "ing" then |
if verb:sub(-3) == "ing" then |
||
if pronoun == "he" or pronoun == "she" or pronoun == "it" then |
if pronoun == "he" or pronoun == "she" or pronoun == "it" then |
||
return originalPronoun .. " is " .. |
return originalPronoun .. " is " .. originalVerb |
||
elseif pronoun == "they" then |
elseif pronoun == "they" then |
||
return originalPronoun .. " are " .. |
return originalPronoun .. " are " .. originalVerb |
||
end |
end |
||
else |
else |
||
-- |
-- Simple present tense for singular third-person |
||
if pronoun == "he" or pronoun == "she" or pronoun == "it" then |
if pronoun == "he" or pronoun == "she" or pronoun == "it" then |
||
verb = specialCases[verb] or verb -- Apply special case if exists |
|||
if not verb:match("s$") then |
|||
if needsEsEnding(verb) then |
|||
⚫ | |||
verb = verb .. " |
verb = verb .. "es" |
||
else |
|||
verb = verb .. "s" |
|||
end |
|||
end |
|||
⚫ | |||
-- For 'they', ensure verb is in base form, adjusting special cases as needed |
|||
for base, conjugated in pairs(specialCases) do |
|||
if verb == conjugated then |
|||
verb = base -- revert special case to base form |
|||
end |
|||
end |
|||
-- Remove 'es' or 's' if present (from a previously conjugated form) |
|||
if verb:match("es$") then |
|||
verb = verb:sub(1, -3) |
|||
⚫ | |||
verb = verb:sub(1, -2) |
|||
end |
end |
||
⚫ | |||
verb = verb:sub(1, verb:match("es$") and -3 or -2) -- Remove 'es' or 's' appropriately |
|||
end |
end |
||
-- Recombine with original pronoun, using modified verb if it was changed |
|||
return originalPronoun .. " " .. verb |
return originalPronoun .. " " .. (verb == originalVerb:lower() and originalVerb or verb) |
||
end |
end |
||
end |
end |
||
Line 35: | Line 57: | ||
local originalPronoun = frame.args[1] |
local originalPronoun = frame.args[1] |
||
local verb = frame.args[2] |
local verb = frame.args[2] |
||
return adjustVerb(originalPronoun, verb) -- Adjust |
return adjustVerb(originalPronoun, verb) -- Adjust and return result |
||
end |
end |
||
Revision as of 19:20, 18 March 2024
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
local specialCases = {
go = "goes",
}
-- Adjusts the verb based on the pronoun, verb tense, and maintains original capitalization
local function adjustVerb(originalPronoun, verb)
local pronoun = originalPronoun:lower() -- Use lowercase for logic
local originalVerb = verb -- Preserve the original verb for later comparison
verb = verb:lower() -- Use lowercase for logic
-- Continuous tense (verbs ending in 'ing')
if verb:sub(-3) == "ing" then
if pronoun == "he" or pronoun == "she" or pronoun == "it" then
return originalPronoun .. " is " .. originalVerb
elseif pronoun == "they" then
return originalPronoun .. " are " .. originalVerb
end
else
-- Simple present tense for singular third-person
if pronoun == "he" or pronoun == "she" or pronoun == "it" then
verb = specialCases[verb] or verb -- Apply special case if exists
if not verb:match("s$") then
if needsEsEnding(verb) then
verb = verb .. "es"
else
verb = verb .. "s"
end
end
elseif pronoun == "they" then
-- For 'they', ensure verb is in base form, adjusting special cases as needed
for base, conjugated in pairs(specialCases) do
if verb == conjugated then
verb = base -- revert special case to base form
end
end
-- Remove 'es' or 's' if present (from a previously conjugated form)
if verb:match("es$") then
verb = verb:sub(1, -3)
elseif verb:match("s$") then
verb = verb:sub(1, -2)
end
end
-- Recombine with original pronoun, using modified verb if it was changed
return originalPronoun .. " " .. (verb == originalVerb:lower() and originalVerb or verb)
end
end
function p.main(frame)
local originalPronoun = frame.args[1]
local verb = frame.args[2]
return adjustVerb(originalPronoun, verb) -- Adjust and return result
end
return p