xref: /webtrees/app/Module/LanguageHungarian.php (revision e873f434551745f888937263ff89e80db3b0f785)
1<?php
2
3/**
4 * webtrees: online genealogy
5 * Copyright (C) 2023 webtrees development team
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
18declare(strict_types=1);
19
20namespace Fisharebest\Webtrees\Module;
21
22use Fisharebest\Localization\Locale\LocaleHu;
23use Fisharebest\Localization\Locale\LocaleInterface;
24use Fisharebest\Webtrees\Encodings\UTF8;
25use Illuminate\Database\Query\Builder;
26
27use function mb_substr;
28use function str_starts_with;
29
30/**
31 * Class LanguageHungarian.
32 */
33class LanguageHungarian extends AbstractModule implements ModuleLanguageInterface
34{
35    use ModuleLanguageTrait;
36
37    /**
38     * Phone-book ordering of letters.
39     *
40     * @return array<int,string>
41     */
42    public function alphabet(): array
43    {
44        return [
45            'A',
46            UTF8::LATIN_CAPITAL_LETTER_A_WITH_ACUTE,
47            'B',
48            'C',
49            'CS',
50            'D',
51            'DZ',
52            'DZS',
53            'E',
54            UTF8::LATIN_CAPITAL_LETTER_E_WITH_ACUTE,
55            'F',
56            'G',
57            'GY',
58            'H',
59            'I',
60            UTF8::LATIN_CAPITAL_LETTER_I_WITH_ACUTE,
61            'J',
62            'K',
63            'L',
64            'LY',
65            'M',
66            'N',
67            'NY',
68            'O',
69            UTF8::LATIN_CAPITAL_LETTER_O_WITH_ACUTE,
70            UTF8::LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS,
71            UTF8::LATIN_CAPITAL_LETTER_O_WITH_DOUBLE_ACUTE,
72            'P',
73            'Q',
74            'R',
75            'S',
76            'SZ',
77            'T',
78            'TY',
79            'U',
80            UTF8::LATIN_CAPITAL_LETTER_U_WITH_ACUTE,
81            UTF8::LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS,
82            UTF8::LATIN_CAPITAL_LETTER_U_WITH_DOUBLE_ACUTE,
83            'V',
84            'W',
85            'X',
86            'Y',
87            'Z',
88            'ZS',
89        ];
90    }
91
92    /**
93     * One of: 'DMY', 'MDY', 'YMD'.
94     *
95     * @return string
96     */
97    public function dateOrder(): string
98    {
99        return 'YMD';
100    }
101
102    /**
103     * Some languages use digraphs and trigraphs.
104     *
105     * @param string $string
106     *
107     * @return string
108     */
109    public function initialLetter(string $string): string
110    {
111        foreach (['CS', 'DZS', 'DZ', 'GY', 'LY', 'NY', 'SZ', 'TY', 'ZS'] as $digraph) {
112            if (str_starts_with($string, $digraph)) {
113                return $digraph;
114            }
115        }
116
117        return mb_substr($string, 0, 1);
118    }
119
120    /**
121     * @return LocaleInterface
122     */
123    public function locale(): LocaleInterface
124    {
125        return new LocaleHu();
126    }
127
128    /**
129     * Letters with diacritics that are considered distinct letters in this language.
130     *
131     * @return array<string,string>
132     */
133    protected function normalizeExceptions(): array
134    {
135        return [
136            'A' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_CAPITAL_LETTER_A_WITH_ACUTE,
137            'E' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_CAPITAL_LETTER_E_WITH_ACUTE,
138            'I' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_CAPITAL_LETTER_I_WITH_ACUTE,
139            'O' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_CAPITAL_LETTER_O_WITH_ACUTE,
140            'O' . UTF8::COMBINING_DIAERESIS           => UTF8::LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS,
141            'O' . UTF8::COMBINING_DOUBLE_ACUTE_ACCENT => UTF8::LATIN_CAPITAL_LETTER_O_WITH_DOUBLE_ACUTE,
142            'U' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_CAPITAL_LETTER_U_WITH_ACUTE,
143            'U' . UTF8::COMBINING_DIAERESIS           => UTF8::LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS,
144            'U' . UTF8::COMBINING_DOUBLE_ACUTE_ACCENT => UTF8::LATIN_CAPITAL_LETTER_U_WITH_DOUBLE_ACUTE,
145            'a' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_SMALL_LETTER_A_WITH_ACUTE,
146            'e' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_SMALL_LETTER_E_WITH_ACUTE,
147            'i' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_SMALL_LETTER_I_WITH_ACUTE,
148            'o' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_SMALL_LETTER_O_WITH_ACUTE,
149            'o' . UTF8::COMBINING_DIAERESIS           => UTF8::LATIN_SMALL_LETTER_O_WITH_DIAERESIS,
150            'o' . UTF8::COMBINING_DOUBLE_ACUTE_ACCENT => UTF8::LATIN_SMALL_LETTER_O_WITH_DOUBLE_ACUTE,
151            'u' . UTF8::COMBINING_ACUTE_ACCENT        => UTF8::LATIN_SMALL_LETTER_U_WITH_ACUTE,
152            'u' . UTF8::COMBINING_DIAERESIS           => UTF8::LATIN_SMALL_LETTER_U_WITH_DIAERESIS,
153            'u' . UTF8::COMBINING_DOUBLE_ACUTE_ACCENT => UTF8::LATIN_SMALL_LETTER_U_WITH_DOUBLE_ACUTE,
154        ];
155    }
156}
157