xref: /webtrees/app/SurnameTradition/LithuanianSurnameTradition.php (revision 1ff45046fabc22237b5d0d8e489c96f031fc598d)
1323788f4SGreg Roach<?php
23976b470SGreg Roach
3323788f4SGreg Roach/**
4323788f4SGreg Roach * webtrees: online genealogy
5d11be702SGreg Roach * Copyright (C) 2023 webtrees development team
6323788f4SGreg Roach * This program is free software: you can redistribute it and/or modify
7323788f4SGreg Roach * it under the terms of the GNU General Public License as published by
8323788f4SGreg Roach * the Free Software Foundation, either version 3 of the License, or
9323788f4SGreg Roach * (at your option) any later version.
10323788f4SGreg Roach * This program is distributed in the hope that it will be useful,
11323788f4SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
12323788f4SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13323788f4SGreg Roach * GNU General Public License for more details.
14323788f4SGreg Roach * You should have received a copy of the GNU General Public License
1589f7189bSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>.
16323788f4SGreg Roach */
17fcfa147eSGreg Roach
18e7f56f2aSGreg Roachdeclare(strict_types=1);
19e7f56f2aSGreg Roach
20323788f4SGreg Roachnamespace Fisharebest\Webtrees\SurnameTradition;
21323788f4SGreg Roach
227c29ac65SGreg Roachuse Fisharebest\Webtrees\Elements\NameType;
237e128bbfSGreg Roachuse Fisharebest\Webtrees\I18N;
24cb7a42eaSGreg Roachuse Fisharebest\Webtrees\Individual;
25cb7a42eaSGreg Roach
26323788f4SGreg Roach/**
27323788f4SGreg Roach * Lithuanian — Children take their father’s surname. Wives take their husband’s surname. Surnames are inflected to indicate an individual’s sex and marital status.
28323788f4SGreg Roach */
295206405dSRico Sonntagclass LithuanianSurnameTradition extends PaternalSurnameTradition
30c1010edaSGreg Roach{
31e364afe4SGreg Roach    // Inflect a surname for wives
32e364afe4SGreg Roach    private const INFLECT_WIFE = [
33323788f4SGreg Roach        'as\b' => 'ienė',
34323788f4SGreg Roach        'is\b' => 'ienė',
35323788f4SGreg Roach        'ys\b' => 'ienė',
36323788f4SGreg Roach        'us\b' => 'ienė',
3713abd6f3SGreg Roach    ];
38323788f4SGreg Roach
39e364afe4SGreg Roach    // Inflect a surname for daughters
40e364afe4SGreg Roach    private const INFLECT_DAUGHTER = [
41323788f4SGreg Roach        'a\b'   => 'aitė',
42323788f4SGreg Roach        'as\b'  => 'aitė',
43323788f4SGreg Roach        'is\b'  => 'ytė',
44323788f4SGreg Roach        'ys\b'  => 'ytė',
45323788f4SGreg Roach        'ius\b' => 'iūtė',
46323788f4SGreg Roach        'us\b'  => 'utė',
4713abd6f3SGreg Roach    ];
48323788f4SGreg Roach
49e364afe4SGreg Roach    // Inflect a surname for males
50e364afe4SGreg Roach    private const INFLECT_MALE = [
51323788f4SGreg Roach        'aitė\b' => 'as',
52323788f4SGreg Roach        'ytė\b'  => 'is',
53323788f4SGreg Roach        'iūtė\b' => 'ius',
54323788f4SGreg Roach        'utė\b'  => 'us',
5513abd6f3SGreg Roach    ];
56323788f4SGreg Roach
57323788f4SGreg Roach    /**
587e128bbfSGreg Roach     * The name of this surname tradition
597e128bbfSGreg Roach     *
607e128bbfSGreg Roach     * @return string
617e128bbfSGreg Roach     */
627e128bbfSGreg Roach    public function name(): string
637e128bbfSGreg Roach    {
647e128bbfSGreg Roach        return I18N::translateContext('Surname tradition', 'Lithuanian');
657e128bbfSGreg Roach    }
667e128bbfSGreg Roach
677e128bbfSGreg Roach    /**
687e128bbfSGreg Roach     * A short description of this surname tradition
697e128bbfSGreg Roach     *
707e128bbfSGreg Roach     * @return string
717e128bbfSGreg Roach     */
727e128bbfSGreg Roach    public function description(): string
737e128bbfSGreg Roach    {
747e128bbfSGreg Roach        /* I18N: In the Lithuanian surname tradition, ... */
757e128bbfSGreg Roach        return
767e128bbfSGreg Roach            I18N::translate('Children take their father’s surname.') . ' ' .
777e128bbfSGreg Roach            I18N::translate('Wives take their husband’s surname.') . ' ' .
787e128bbfSGreg Roach            I18N::translate('Surnames are inflected to indicate an individual’s gender and marital status.');
797e128bbfSGreg Roach    }
807e128bbfSGreg Roach
817e128bbfSGreg Roach    /**
82cb7a42eaSGreg Roach     * What name is given to a new child
83323788f4SGreg Roach     *
84cb7a42eaSGreg Roach     * @param Individual|null $father
85cb7a42eaSGreg Roach     * @param Individual|null $mother
86cb7a42eaSGreg Roach     * @param string          $sex
87323788f4SGreg Roach     *
8801ffdfd0SGreg Roach     * @return array<int,string>
89323788f4SGreg Roach     */
90*1ff45046SGreg Roach    public function newChildNames(Individual|null $father, Individual|null $mother, string $sex): array
91c1010edaSGreg Roach    {
92ef475b14SGreg Roach        if (preg_match(self::REGEX_SURN, $this->extractName($father), $match) === 1) {
93cb7a42eaSGreg Roach            if ($sex === 'F') {
94cb7a42eaSGreg Roach                $name = $this->inflect($match['NAME'], self::INFLECT_DAUGHTER);
95cb7a42eaSGreg Roach                $surn = $this->inflect($match['SURN'], self::INFLECT_MALE);
96cb7a42eaSGreg Roach            } else {
97cb7a42eaSGreg Roach                $name = $match['NAME'];
98cb7a42eaSGreg Roach                $surn = $match['SURN'];
99323788f4SGreg Roach            }
100b2ce94c6SRico Sonntag
10113abd6f3SGreg Roach            return [
10288a03560SGreg Roach                $this->buildName($name, ['TYPE' => NameType::VALUE_BIRTH, 'SURN' => $surn]),
103cb7a42eaSGreg Roach            ];
104cb7a42eaSGreg Roach        }
105cb7a42eaSGreg Roach
106cb7a42eaSGreg Roach        return [
10788a03560SGreg Roach            $this->buildName('//', ['TYPE' => NameType::VALUE_BIRTH]),
10813abd6f3SGreg Roach        ];
109323788f4SGreg Roach    }
110323788f4SGreg Roach
111323788f4SGreg Roach    /**
112cb7a42eaSGreg Roach     * What name is given to a new parent
113323788f4SGreg Roach     *
114cb7a42eaSGreg Roach     * @param Individual $child
115cb7a42eaSGreg Roach     * @param string     $sex
116323788f4SGreg Roach     *
11701ffdfd0SGreg Roach     * @return array<int,string>
118323788f4SGreg Roach     */
119cb7a42eaSGreg Roach    public function newParentNames(Individual $child, string $sex): array
120c1010edaSGreg Roach    {
121ef475b14SGreg Roach        if ($sex === 'M' && preg_match(self::REGEX_SURN, $this->extractName($child), $match) === 1) {
122cb7a42eaSGreg Roach            $name = $this->inflect($match['NAME'], self::INFLECT_MALE);
123cb7a42eaSGreg Roach            $surn = $this->inflect($match['SURN'], self::INFLECT_MALE);
124cb7a42eaSGreg Roach
125cb7a42eaSGreg Roach            return [
12688a03560SGreg Roach                $this->buildName($name, ['TYPE' => NameType::VALUE_BIRTH, 'SURN' => $surn]),
127cb7a42eaSGreg Roach            ];
128b2ce94c6SRico Sonntag        }
129b2ce94c6SRico Sonntag
13013abd6f3SGreg Roach        return [
13188a03560SGreg Roach            $this->buildName('//', ['TYPE' => NameType::VALUE_BIRTH]),
13213abd6f3SGreg Roach        ];
133323788f4SGreg Roach    }
134323788f4SGreg Roach
135323788f4SGreg Roach    /**
136323788f4SGreg Roach     * What names are given to a new spouse
137323788f4SGreg Roach     *
138cb7a42eaSGreg Roach     * @param Individual $spouse
139cb7a42eaSGreg Roach     * @param string     $sex
140323788f4SGreg Roach     *
14101ffdfd0SGreg Roach     * @return array<int,string>
142323788f4SGreg Roach     */
143cb7a42eaSGreg Roach    public function newSpouseNames(Individual $spouse, string $sex): array
144c1010edaSGreg Roach    {
145ef475b14SGreg Roach        if ($sex === 'F' && preg_match(self::REGEX_SURN, $this->extractName($spouse), $match) === 1) {
146cb7a42eaSGreg Roach            $name = $this->inflect($match['NAME'], self::INFLECT_WIFE);
147cb7a42eaSGreg Roach            $surn = $this->inflect($match['SURN'], self::INFLECT_MALE);
148cb7a42eaSGreg Roach
14913abd6f3SGreg Roach            return [
15088a03560SGreg Roach                $this->buildName('//', ['TYPE' => NameType::VALUE_BIRTH]),
15188a03560SGreg Roach                $this->buildName($name, ['TYPE' => NameType::VALUE_MARRIED, 'SURN' => $surn]),
15213abd6f3SGreg Roach            ];
153b2ce94c6SRico Sonntag        }
154b2ce94c6SRico Sonntag
15513abd6f3SGreg Roach        return [
15688a03560SGreg Roach            $this->buildName('//', ['TYPE' => NameType::VALUE_BIRTH]),
15713abd6f3SGreg Roach        ];
158323788f4SGreg Roach    }
159323788f4SGreg Roach}
160