[ "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))); } } }