Module:Grammar: Difference between revisions

436 bytes removed ,  01:27, 16 February 2021
prevent parsing html
mNo edit summary
(prevent parsing html)
 
(5 intermediate revisions by one other user not shown)
Line 4: Line 4:
local conjugate = require'Module:Grammar/Conjugate'
local conjugate = require'Module:Grammar/Conjugate'
local progentable = {}
local progentable = {}
function p.Main(frame)
function p.Main(frame)
gender = frame.args[2]


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


if (frame.args[3] ~= nil and frame.args[3] ~= '') then
progentable = {
  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"],
     ["subjective"] = pronouns[pronoun]["subjective"],
     ["objective"] = pronouns[pronoun]["objective"],
     ["objective"] = pronouns[pronoun]["objective"],
Line 37: 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], "=([^=]+)=", function(f)
parsedtext = string.gsub(frame.args[1], '=([^=<>"]+)=', parse)
for a, b, c in string.gmatch(f, "(%w*)[:%.]?(['%w]*)(:?%w*)") do
return parsedtext
  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)
        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 (capitalized == true) then
      return (returnstring:gsub("^%l", string.upper))
  else
      return returnstring
  end
  end
  end
end)
return parsedtext
end
end


function p.parse(field, gender, pronoun)
function p.progenize(field, gender, pronoun)
     return progentable[field]
     return progentable[field]
end
end
Line 106: 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="Before you =verb:recline= =article==pronouns.personTerm= clothed in leafy raiment, so svelte and still you mistake =pronouns.objective= for the fallen branch of a sickly tree until you meet the gaze of =pronouns.possessive= cerulean eyes. Upon closer scrutiny, you discern the hilts of =pronouns.possessive= twin swords, Caslainard and Polluxus, rising through the foliage of =pronouns.possessive= cloak and over =pronouns.possessive= shoulders. =pronouns.Possessive= sylvan sashes, of which =pronouns.subjective= =verb:wear:afterpronoun= several, are strewn with the ears, claws, and horns of creatures unfamiliar to you, and as you examine them, =pronouns.subjective= =verb:scrutinize:afterpronoun= you wearing an expression that bears qualities of both a smirk and a scowl yet that is not quite either."
text="=pluralize==pronouns.personTerm="
gender = "male"
gender = "male"
pronoun = ""
pronoun = ""
 
local f = {["args"] = {[1]= text, [2] = gender, [3] = pronoun }}
return p.Main(f)


local f = {["args"] = {[1]= text, [2] = gender, [3] = pronoun }}
return p.Main(f)
end
end


return p
return p