[
"gender" => "ponygender",
"gender:fr" => "poneygenre",
"object" => "pony",
"person" => "pony",
"possessive_det" => "pony's",
"possessive_pro" => "pony's",
"reflexive" => "ponyself",
"subjective" => "pony",
"third" => true,
"color" => "warning"
],
"she" => [
"gender" => "female",
"gender:fr" => "fille",
"object" => "her",
"person" => "girl",
"possessive_det" => "her",
"possessive_pro" => "hers",
"reflexive" => "herself",
"subjective" => "she",
"third" => true,
"color" => "success"
],
"he" => [
"gender" => "male",
"gender:fr" => "garçon",
"object" => "him",
"person" => "boy",
"possessive_det" => "his",
"possessive_pro" => "his",
"reflexive" => "himself",
"subjective" => "he",
"third" => true,
"color" => "info"
],
"it" => [
"gender" => "agender",
"gender:fr" => "agenre",
"object" => "it",
"person" => "person",
"possessive_det" => "its",
"possessive_pro" => "its",
"reflexive" => "itself",
"subjective" => "it",
"third" => true,
"color" => "light"
],
"they" => [
"gender" => "non binary",
"gender:fr" => "non binaire",
"object" => "them",
"person" => "person",
"possessive_det" => "their",
"possessive_pro" => "theirs",
"reflexive" => "themself",
"subjective" => "they",
"third" => false,
"color" => "primary"
]
];
$pronounGetCount = 0;
$possibilitiesPerSet = [];
foreach ($pronounsSets as $name => $set) {
if (!isset($possibilitiesPerSet[$name])) $possibilitiesPerSet[$name] = [];
$possibilitiesPerSet[$name][] = $name;
foreach ($set as $category => $value) {
if (is_string($value)) $possibilitiesPerSet[$name][] = $value;
}
}
function getSetFromValue(string $value) {
global $possibilitiesPerSet;
foreach ($possibilitiesPerSet as $name => $set) {
if (in_array($value, $set)) {
return $name;
}
}
return null;
}
function getPronounsFromMark(?string $mark = null): array {
if (!isset($mark) || trim($mark) === "") {
return ["they"];
} else {
$parts = array_unique(array_map(function ($i) {
return getSetFromValue($i);
}, explode("/", $mark)));
return $parts;
}
}
function getMemberPronouns(?string $pronouns): ?array {
global $pronounsSets;
$list = getPronounsFromMark($pronouns);
return $pronounsSets[$list[array_rand($list)]] ?? $pronounsSets["she"];
}
function getGenderFromPronoun(string $pronoun, bool $french = false) {
global $pronounsSets;
$set = getPronounsFromMark($pronoun)[0];
if ($french) {
return ($pronounsSets[$set] ?? $pronounsSets["they"])["gender:fr"];
} else {
return ($pronounsSets[$set] ?? $pronounsSets["they"])["gender"];
}
}
function pronounInFrench(string $pronoun): string {
return match ($pronoun) {
"she" => "elle",
"her" => "elle",
"he" => "il",
"him" => "lui",
"they" => "iel",
"them" => "iel",
"it" => "iel",
"its" => "iel",
"pony" => "poney",
"pony's" => "à poney",
"ponys" => "à poney",
default => $pronoun,
};
}
function getTooltipsFromMark(string $mark = null, bool $french = false): ?string {
if (!isset($mark)) {
return null;
} else {
if ($french) {
return implode("/", array_map(function ($i) {
return "" . pronounInFrench($i) . "";
}, explode("/", $mark)));
} else {
return implode("/", array_map(function ($i) {
return "" . $i . "";
}, explode("/", $mark)));
}
}
}