Module:Pronoun: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
Created page with "local p = {} -- A function to check if the verb ends in 's' and should change based on pronoun local function adjustVerb(pronoun, verb) if pronoun == "he" or pronoun == "she" or pronoun == "it" then -- Add 's' for singular third-person, if it doesn't already end with 's' if not verb:match("s$") then verb = verb .. "s" end elseif pronoun == "they" then -- Remove 's' for 'they', consider special cases like 'goes' -> 'go'..." |
No edit summary |
||
(18 intermediate revisions by the same user not shown) | |||
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 |
local function needsEsEnding(verb) |
||
return verb:match("[oschx]$") or verb:match("sh$") or verb:match("ss$") |
|||
end |
|||
-- Add 's' for singular third-person, if it doesn't already end with 's' |
|||
⚫ | |||
-- Special cases for verb conjugation that don't follow the regular 's' or 'es' pattern |
|||
⚫ | |||
local specialCases = { |
|||
["go"] = "goes", |
|||
["do"] = "does" |
|||
} |
|||
-- Determines if the string is fully uppercase |
|||
local function isAllCaps(s) |
|||
⚫ | |||
end |
|||
-- Correctly applies 'is' or 'are' for continuous verbs based on pronoun, retaining input case |
|||
local function applyContinuousVerb(pronoun, 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 and originalVerb:lower() or "" -- Use lowercase for logic, check for nil |
|||
local result = "" |
|||
-- Check if a verb is provided |
|||
if verb == "" then |
|||
-- No verb provided, return pronoun as is |
|||
result = originalPronoun |
|||
else |
|||
-- Handle verb logic |
|||
if verb:sub(-3) == "ing" then |
|||
result = applyContinuousVerb(originalPronoun, originalVerb) |
|||
else |
|||
-- Simple present tense for singular third-person |
|||
if pronoun == "he" or pronoun == "she" or pronoun == "it" then |
|||
if verb == "has" then |
|||
⚫ | |||
⚫ | |||
verb = specialCases[verb] or verb -- Apply special case if exists |
|||
⚫ | |||
verb = verb .. (needsEsEnding(verb) and "es" or "s") |
|||
end |
|||
⚫ | |||
⚫ | |||
if verb == "has" then |
|||
verb = "have" |
|||
else |
|||
verb = specialCases[verb] or verb |
|||
if verb:match("es$") then |
|||
verb = verb:sub(1, -3) |
|||
elseif verb:match("s$") then |
|||
verb = verb:sub(1, -2) |
|||
end |
|||
end |
|||
end |
|||
result = originalPronoun .. " " .. verb |
|||
end |
end |
||
⚫ | |||
-- |
-- Preserve the original case without converting everything to uppercase |
||
if |
if isAllCaps(originalPronoun) and isAllCaps(originalVerb) then |
||
-- |
result = result:upper() -- Only convert to uppercase if both inputs were uppercase |
||
⚫ | |||
⚫ | |||
-- Remove 's' for regular verbs |
|||
⚫ | |||
end |
end |
||
end |
end |
||
⚫ | |||
return result |
|||
end |
end |
||
function p.main(frame) |
function p.main(frame) |
||
local |
local originalPronoun = frame.args[1] |
||
local |
local originalVerb = frame.args[2] -- This can be nil or empty |
||
return adjustVerb(originalPronoun, originalVerb) -- Adjust and return the result |
|||
⚫ | |||
end |
end |
||
Latest revision as of 21:32, 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",
["do"] = "does"
}
-- 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 and originalVerb:lower() or "" -- Use lowercase for logic, check for nil
local result = ""
-- Check if a verb is provided
if verb == "" then
-- No verb provided, return pronoun as is
result = originalPronoun
else
-- Handle verb logic
if verb:sub(-3) == "ing" then
result = applyContinuousVerb(originalPronoun, originalVerb)
else
-- Simple present tense for singular third-person
if pronoun == "he" or pronoun == "she" or pronoun == "it" then
if verb == "has" then
verb = "has"
else
verb = specialCases[verb] or verb -- Apply special case if exists
if not verb:match("s$") then
verb = verb .. (needsEsEnding(verb) and "es" or "s")
end
end
elseif pronoun == "they" then
if verb == "has" then
verb = "have"
else
verb = specialCases[verb] or verb
if verb:match("es$") then
verb = verb:sub(1, -3)
elseif verb:match("s$") then
verb = verb:sub(1, -2)
end
end
end
result = originalPronoun .. " " .. verb
end
-- Preserve the original case without converting everything to uppercase
if isAllCaps(originalPronoun) and isAllCaps(originalVerb) then
result = result:upper() -- Only convert to uppercase if both inputs were uppercase
end
end
return result
end
function p.main(frame)
local originalPronoun = frame.args[1]
local originalVerb = frame.args[2] -- This can be nil or empty
return adjustVerb(originalPronoun, originalVerb) -- Adjust and return the result
end
return p