Module:Grammar: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(prevent parsing html) |
||
(7 intermediate revisions by one other user not shown) | |||
Line 2: | Line 2: | ||
local pronouns = require'Module:Grammar/PronounsTable' | local pronouns = require'Module:Grammar/PronounsTable' | ||
local genders = require'Module:Grammar/GenderTable' | local genders = require'Module:Grammar/GenderTable' | ||
local conjugate = require'Module:Grammar/Conjugate' | |||
local progentable = {} | local progentable = {} | ||
function p.Main(frame) | 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 | |||
if pronouns[pronoun] == nil then | |||
error ("There was no pronoun set named " .. (pronoun or "(no pronoun)").. "!") | |||
end | |||
progentable = { | |||
progentable = { | |||
["subjective"] = pronouns[pronoun]["subjective"], | ["subjective"] = pronouns[pronoun]["subjective"], | ||
["objective"] = pronouns[pronoun]["objective"], | ["objective"] = pronouns[pronoun]["objective"], | ||
Line 33: | Line 38: | ||
["parentterm"] = pronouns[pronoun]["parentterm"] or genders[gender]["parentterm"] | ["parentterm"] = pronouns[pronoun]["parentterm"] or genders[gender]["parentterm"] | ||
} | } | ||
local bmakeplural = false | |||
parsedtext = string.gsub(frame.args[1], | parsedtext = string.gsub(frame.args[1], '=([^=<>"]+)=', parse) | ||
return parsedtext | |||
return parsedtext | |||
end | end | ||
function p. | function p.progenize(field, gender, pronoun) | ||
return progentable[field] | return progentable[field] | ||
end | end | ||
function p.isplural(gender,pronoun) | function p.isplural(gender,pronoun) | ||
if (pronoun~=nil) then | |||
return pronouns[pronoun]['pseudoplural'] | |||
end | |||
if progentable["pseudoplural"] == '1' or progentable["plural"] == '1' then | if progentable["pseudoplural"] == '1' or progentable["plural"] == '1' then | ||
return '1' | return '1' | ||
Line 127: | Line 58: | ||
end | end | ||
function parse(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 " | |||
elseif a == "pluralize" then | |||
bmakeplural = true | |||
return "" | |||
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.progenize(b) | |||
if results == nil then | |||
returnstring = "No results!" | |||
end | |||
returnstring = results | |||
end | |||
elseif (a == "verb") then | |||
if (c == nil or c == '') then --[if no :afterpronoun] | |||
returnstring = conjugate.singularverb(b) | |||
elseif (p.isplural() == '0') then --[if not plural, singularize] | |||
returnstring = conjugate.singularverb(b) | |||
else | |||
returnstring = b | |||
end | |||
else | |||
returnstring = f | |||
end | |||
-- If pluralize is true, pluralize result | |||
if bmakeplural == true then | |||
returnstring = conjugate.pluralize(returnstring) | |||
bmakeplural = false | |||
end | |||
if (capitalized == true) then | |||
return (returnstring:gsub("^%l", string.upper)) | |||
else | |||
return returnstring | |||
end | |||
end | |||
end | |||
end | |||
function p.test() | function p.test() | ||
text="=pluralize==pronouns.personTerm=" | |||
gender = "male" | gender = "male" | ||
pronoun = " | pronoun = "" | ||
local f = {["args"] = {[1]= text, [2] = gender, [3] = pronoun }} | |||
return p.Main(f) | |||
end | end | ||
return p | return p |
Latest revision as of 01:27, 16 February 2021
local p = {}
local pronouns = require'Module:Grammar/PronounsTable'
local genders = require'Module:Grammar/GenderTable'
local conjugate = require'Module:Grammar/Conjugate'
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
if pronouns[pronoun] == nil then
error ("There was no pronoun set named " .. (pronoun or "(no pronoun)").. "!")
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"]
}
local bmakeplural = false
parsedtext = string.gsub(frame.args[1], '=([^=<>"]+)=', parse)
return parsedtext
end
function p.progenize(field, gender, pronoun)
return progentable[field]
end
function p.isplural(gender,pronoun)
if (pronoun~=nil) then
return pronouns[pronoun]['pseudoplural']
end
if progentable["pseudoplural"] == '1' or progentable["plural"] == '1' then
return '1'
else
return '0'
end
end
function parse(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 "
elseif a == "pluralize" then
bmakeplural = true
return ""
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.progenize(b)
if results == nil then
returnstring = "No results!"
end
returnstring = results
end
elseif (a == "verb") then
if (c == nil or c == '') then --[if no :afterpronoun]
returnstring = conjugate.singularverb(b)
elseif (p.isplural() == '0') then --[if not plural, singularize]
returnstring = conjugate.singularverb(b)
else
returnstring = b
end
else
returnstring = f
end
-- If pluralize is true, pluralize result
if bmakeplural == true then
returnstring = conjugate.pluralize(returnstring)
bmakeplural = false
end
if (capitalized == true) then
return (returnstring:gsub("^%l", string.upper))
else
return returnstring
end
end
end
end
function p.test()
text="=pluralize==pronouns.personTerm="
gender = "male"
pronoun = ""
local f = {["args"] = {[1]= text, [2] = gender, [3] = pronoun }}
return p.Main(f)
end
return p