Module:Grammar: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
No edit summary |
||
Line 29: | Line 29: | ||
returnstring = "" | returnstring = "" | ||
b = string.lower(b) | b = string.lower(b) | ||
if (a == "player") then | if (a == "name") then | ||
returnstring = "(player's name)" | |||
elseif (a == "player") then | |||
returnstring = "(player's " .. b .. ")" | returnstring = "(player's " .. b .. ")" | ||
elseif (a == "pronouns") then | elseif (a == "pronouns") then |
Revision as of 14:05, 8 September 2019
local p = {}
local cargo = mw.ext.cargo
function p.Main(frame)
gender = frame.args[2]
if (frame.args[3] ~= nil and frame.args[3] ~= '') then
pronoun = frame.args[3]
else
pronounresult = cargo.query('Genders','defaultpronouns',{where='Gender="' .. gender .. '" AND _pageName="Gender and Pronouns"',limit='1'})
if not next(pronounresult) then
return "can't find a pronoun!"
else
pronoun = pronounresult[1]['defaultpronouns']
end
end
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 = p.parse(b, gender, pronoun)
if not results then
returnstring = "No results!"
end
returnstring = results[1][b]
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 = p.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
function p.parse(field, gender, pronoun)
fields = field
if (string.find(field, "term", -4) ~= nil) then
table = 'Genders'
args = {where='Gender="' .. gender .. '" AND _pageName="Gender and Pronouns"', limit='1'}
else
table = 'Pronouns'
args = {
where='pronoun="' .. pronoun .. '" AND _pageName="Gender and Pronouns"',
limit='1'
}
end
local result= cargo.query(table,fields,args)
if not next(result) then
return nil
else
return result
end
end
function p.isplural(gender,pronoun)
fields= "pseudoplural"
args = {
where='pronoun="' .. pronoun .. '" AND _pageName="Gender and Pronouns"',
limit='1'
}
local result= cargo.query('Pronouns',fields,args)
local resulttwo= cargo.query('Genders','plural',{where='Gender="'..gender..'" AND _pageName="Gender and Pronouns"',
limit='1'})
if not next(result) then
if not next(resulttwo) then
return nil
else
return resulttwo[1]['plural']
end
else
if not next(resulttwo) then
return result[1]['pseudoplural']
else
if (result[1]['pseudoplural'] == '1' or resulttwo[1]['plural'] == '1') then
return '1'
else
return '0'
end
end
end
end
function p.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