Add 'ambiguous' gender to gendersub contrib, using 'them'/'their' etc to denote ambuguous gender. Keep 'it' as the neutral gender type. Closes #1146.

This commit is contained in:
Griatch 2017-01-24 23:27:21 +01:00
parent 770b8f16ab
commit e9bc615181

View file

@ -44,7 +44,12 @@ _GENDER_PRONOUN_MAP = {"male": {"s": "he",
"neutral": {"s": "it", "neutral": {"s": "it",
"o": "it", "o": "it",
"p": "its", "p": "its",
"a": "its"}} "a": "its"},
"ambiguous": {"s": "they",
"o": "them",
"p": "their",
"a": "theirs"}
}
_RE_GENDER_PRONOUN = re.compile(r'({s|{S|{o|{O|{p|{P|{a|{A)') _RE_GENDER_PRONOUN = re.compile(r'({s|{S|{o|{O|{p|{P|{a|{A)')
# in-game command for setting the gender # in-game command for setting the gender
@ -54,7 +59,7 @@ class SetGender(Command):
Sets gender on yourself Sets gender on yourself
Usage: Usage:
@gender male|female|neutral @gender male|female|neutral|ambiguous
""" """
key = "@gender" key = "@gender"
@ -67,8 +72,8 @@ class SetGender(Command):
""" """
caller = self.caller caller = self.caller
arg = self.args.strip().lower() arg = self.args.strip().lower()
if not arg in ("male", "female", "neutral"): if not arg in ("male", "female", "neutral", "ambiguous"):
caller.msg("Usage: @gender male|female|neutral") caller.msg("Usage: @gender male|female|neutral|ambiguous")
return return
caller.db.gender = arg caller.db.gender = arg
caller.msg("Your gender was set to %s." % arg) caller.msg("Your gender was set to %s." % arg)
@ -87,7 +92,7 @@ class GenderCharacter(DefaultCharacter):
Called once when the object is created. Called once when the object is created.
""" """
super(GenderCharacter, self).at_object_creation() super(GenderCharacter, self).at_object_creation()
self.db.gender = "neutral" self.db.gender = "ambiguous"
def _get_pronoun(self, regex_match): def _get_pronoun(self, regex_match):
""" """
@ -98,15 +103,15 @@ class GenderCharacter(DefaultCharacter):
regex_match (MatchObject): the regular expression match. regex_match (MatchObject): the regular expression match.
Notes: Notes:
- `{s`, `{S`: Subjective form: he, she, it, He, She, It - `{s`, `{S`: Subjective form: he, she, it, He, She, It, They
- `{o`, `{O`: Objective form: him, her, it, Him, Her, It - `{o`, `{O`: Objective form: him, her, it, Him, Her, It, Them
- `{p`, `{P`: Possessive form: his, her, its, His, Her, Its - `{p`, `{P`: Possessive form: his, her, its, His, Her, Its, Their
- `{a`, `{A`: Absolute Possessive form: his, hers, its, His, Hers, Its - `{a`, `{A`: Absolute Possessive form: his, hers, its, His, Hers, Its, Theirs
""" """
typ = regex_match.group()[1] # "s", "O" etc typ = regex_match.group()[1] # "s", "O" etc
gender = self.attributes.get("gender", default="neutral") gender = self.attributes.get("gender", default="ambiguous")
gender = gender if gender in ("male", "female", "neutral") else "neutral" gender = gender if gender in ("male", "female", "neutral") else "ambiguous"
pronoun = _GENDER_PRONOUN_MAP[gender][typ.lower()] pronoun = _GENDER_PRONOUN_MAP[gender][typ.lower()]
return pronoun.capitalize() if typ.isupper() else pronoun return pronoun.capitalize() if typ.isupper() else pronoun