summaryrefslogtreecommitdiff
path: root/includes/pronouns.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/pronouns.inc')
-rw-r--r--includes/pronouns.inc149
1 files changed, 149 insertions, 0 deletions
diff --git a/includes/pronouns.inc b/includes/pronouns.inc
new file mode 100644
index 0000000..6ab2487
--- /dev/null
+++ b/includes/pronouns.inc
@@ -0,0 +1,149 @@
+<?php
+
+$pronounsSets = [
+ "pony" => [
+ "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 "<span title='" . ucfirst(getGenderFromPronoun($i, true)) . "' data-bs-toggle='tooltip'>" . pronounInFrench($i) . "</span>";
+ }, explode("/", $mark)));
+ } else {
+ return implode("/", array_map(function ($i) {
+ return "<span title='" . ucfirst(getGenderFromPronoun($i, false)) . "' data-bs-toggle='tooltip'>" . $i . "</span>";
+ }, explode("/", $mark)));
+ }
+ }
+} \ No newline at end of file