local p = {}
local pronouns = require'Module:Grammar/PronounsTable'
local genders = require'Module:Grammar/GenderTable'
local progentable = {}
function p.Main(frame)
gender = frame.args[2]
if (frame.args[3] ~= nil and frame.args[3] ~= '') then
pronoun = frame.args[3]
else
pronounresult = genders[gender]['defaultpronouns']
if (pronounresult == nil) then
error ("can't find a pronoun for gender" .. (gender or "(no gender)") .. "!")
else
pronoun = pronounresult
end
end
progentable = {
["subjective"] = pronouns[pronoun]["subjective"],
["objective"] = pronouns[pronoun]["objective"],
["possessive"] = pronouns[pronoun]["possessive"],
["substantivepossessive"] = pronouns[pronoun]["substantivepossessive"],
["reflexive"] = pronouns[pronoun]["reflexive"],
["pseudoplural"] = pronouns[pronoun]["pseudoplural"],
["plural"] = pronouns[pronoun]["plural"] or genders[gender]["plural"],
["personterm"] = pronouns[pronoun]["personterm"] or genders[gender]["personterm"],
["immaturepersonterm"] = pronouns[pronoun]["immaturepersonterm"] or genders[gender]["immaturepersonterm"],
["formaladdressterm"] = pronouns[pronoun]["formaladdressterm"] or genders[gender]["formaladdressterm"],
["offspringterm"] = pronouns[pronoun]["offspringterm"] or genders[gender]["offspringterm"],
["siblingterm"] = pronouns[pronoun]["siblingterm"] or genders[gender]["siblingterm"],
["parentterm"] = pronouns[pronoun]["parentterm"] or genders[gender]["parentterm"]
}
parsedtext = string.gsub(frame.args[1], "=([^=]+)=", function(f)
for a, b, c in string.gmatch(f, "(%w*)[:%.]?(['%w]*)(:?%w*)") do
if b == nil or b == "" then
if a == "article" then
return "a "
else
return "="..a.."="
end
else
local capitalized = ((b:gsub("^%l", string.upper)) == string.gsub(b,"(^%w)","%1"))
returnstring = ""
b = string.lower(b)
if (a == "name") then
returnstring = "(player's name)"
elseif (a == "player") then
returnstring = "(player's " .. b .. ")"
elseif (a == "pronouns") then
if (b == "indicativeproximal") then
if (p.isplural(gender,pronoun) == '0') then
returnstring = "this"
else
returnstring = "these"
end
else
local results = parse(b)
if results == nil then
returnstring = "No results!"
end
returnstring = results
end
elseif (a == "verb") then
if (c == nil or c == '') then
if (b == "are") then
returnstring= "is"
elseif (b == "have") then
returnstring= "has"
elseif (b == "'re") then
returnstring= "'s"
elseif (b =="don't") then
returnstring= "doesn't"
elseif (b== "'ve") then
returnstring="'s"
else
returnstring= b .. "s"
end
else
local results = isplural(gender,pronoun)
if (results == '0') then
if (b == "are") then
returnstring= "is"
elseif (b == "have") then
returnstring= "has"
elseif (b == "'re") then
returnstring= "'s"
elseif (b == "don't") then
returnstring= "doesn't"
elseif (b== "'ve") then
returnstring="'s"
else
returnstring= b .. "s"
end
else
returnstring= b
end
end
else
returnstring= f
end
if (capitalized == true) then
return (returnstring:gsub("^%l", string.upper))
else
return returnstring
end
end
end
end)
return parsedtext
end
local function parse(field, gender, pronoun)
return progentable[field]
end
local function isplural(gender,pronoun)
if progentable["pseudoplural"] == '1' or progentable["plural"] == '1' then
return '1'
else
return '0'
end
end
local function test(frame)
local strippedstring = "j"
local argument = frame.args[1]
for s in string.gmatch(argument, "=([^=]+)=") do
strippedstring = strippedstring .. s
end
return strippedstring
end
return p