summaryrefslogtreecommitdiff
path: root/includes/pronouns.php
blob: 5f79dd3f015385d270db19c4c3c3504e1a756f9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php

$pronounsSets = [
    "pony" => [
        "gender" => "ponygender",
        "object" => "pony",
        "person" => "pony",
        "possessive_det" => "pony's",
        "possessive_pro" => "pony's",
        "reflexive" => "ponyself",
        "subjective" => "pony",
        "third" => true,
        "color" => "warning"
    ],
    "she" => [
        "gender" => "female",
        "object" => "her",
        "person" => "girl",
        "possessive_det" => "her",
        "possessive_pro" => "hers",
        "reflexive" => "herself",
        "subjective" => "she",
        "third" => true,
        "color" => "success"
    ],
    "he" => [
        "gender" => "male",
        "object" => "him",
        "person" => "boy",
        "possessive_det" => "his",
        "possessive_pro" => "his",
        "reflexive" => "himself",
        "subjective" => "he",
        "third" => true,
        "color" => "info"
    ],
    "it" => [
        "gender" => "agender",
        "object" => "it",
        "person" => "person",
        "possessive_det" => "its",
        "possessive_pro" => "its",
        "reflexive" => "itself",
        "subjective" => "it",
        "third" => true,
        "color" => "light"
    ],
    "they" => [
        "gender" => "non binary",
        "object" => "them",
        "person" => "person",
        "possessive_det" => "their",
        "possessive_pro" => "theirs",
        "reflexive" => "themself",
        "subjective" => "they",
        "third" => false,
        "color" => "primary"
    ]
];

$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)) {
        return [];
    } 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[count($list) - 1]] ?? $pronounsSets["she"];
}

function getGenderFromPronoun(string $pronoun) {
    global $pronounsSets;
    $set = getPronounsFromMark($pronoun)[0];
    return $pronounsSets[$set]["gender"];
}

function getTooltipsFromMark(string $mark = null): ?string {
    if (!isset($mark)) {
        return null;
    } else {
        return implode("/", array_map(function ($i) {
            global $pronounsSets;
            return "<span title='" . ucfirst(getGenderFromPronoun($i)) . "' data-bs-toggle='tooltip'>" . $i . "</span>";
        }, explode("/", $mark)));
    }
}