]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - languages/classes/LanguageKk_cyrl.php
MediaWiki 1.30.2 renames
[autoinstalls/mediawiki.git] / languages / classes / LanguageKk_cyrl.php
1 <?php
2 /**
3  * Kazakh (Қазақша) specific code.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
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  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @file
21  * @ingroup Language
22  */
23
24 /**
25  * Kazakh (Қазақша)
26  *
27  * @ingroup Language
28  */
29 // @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
30 class LanguageKk_cyrl extends Language {
31         // @codingStandardsIgnoreEnd
32         # Convert from the nominative form of a noun to some other case
33         # Invoked with {{GRAMMAR:case|word}}
34         /**
35          * Cases: genitive, dative, accusative, locative, ablative, comitative + possessive forms
36          *
37          * @param string $word
38          * @param string $case
39          *
40          * @return string
41          */
42         function convertGrammarKk_cyrl( $word, $case ) {
43                 global $wgGrammarForms;
44                 if ( isset( $wgGrammarForms['kk-kz'][$case][$word] ) ) {
45                         return $wgGrammarForms['kk-kz'][$case][$word];
46                 }
47                 if ( isset( $wgGrammarForms['kk-cyrl'][$case][$word] ) ) {
48                         return $wgGrammarForms['kk-cyrl'][$case][$word];
49                 }
50                 // Set up some constants...
51                 // Vowels in last syllable
52                 $frontVowels = [ "е", "ө", "ү", "і", "ә", "э", "я", "ё", "и" ];
53                 $backVowels = [ "а", "о", "ұ", "ы" ];
54                 $allVowels = [ "е", "ө", "ү", "і", "ә", "э", "а", "о", "ұ", "ы", "я", "ё", "и" ];
55                 // Preceding letters
56                 $Nasals = [ "м", "н", "ң" ];
57                 $Sonants = [ "и", "й", "л", "р", "у", "ю" ];
58                 $Consonants = [ "п", "ф", "к", "қ", "т", "ш", "с", "х", "ц", "ч", "щ", "б", "в", "г", "д" ];
59                 $Sibilants = [ "ж", "з" ];
60                 $Sonorants = [ "и", "й", "л", "р", "у", "ю", "м", "н", "ң", "ж", "з" ];
61
62                 // Possessives
63                 $firstPerson = [ "м", "ң" ]; // 1st singular, 2nd unformal
64                 $secondPerson = [ "з" ]; // 1st plural, 2nd formal
65                 $thirdPerson = [ "ы", "і" ]; // 3rd
66
67                 $lastLetter = $this->lastLetter( $word, $allVowels );
68                 $wordEnding =& $lastLetter[0];
69                 $wordLastVowel =& $lastLetter[1];
70
71                 // Now convert the word
72                 switch ( $case ) {
73                         case "dc1":
74                         case "genitive": # ilik
75                                 if ( in_array( $wordEnding, $Consonants ) ) {
76                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
77                                                 $word = $word . "тің";
78                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
79                                                 $word = $word . "тың";
80                                         }
81                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
82                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
83                                                 $word = $word . "нің";
84                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
85                                                 $word = $word . "ның";
86                                         }
87                                 } elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
88                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
89                                                 $word = $word . "дің";
90                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
91                                                 $word = $word . "дың";
92                                         }
93                                 }
94                                 break;
95                         case "dc2":
96                         case "dative": # barıs
97                                 if ( in_array( $wordEnding, $Consonants ) ) {
98                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
99                                                 $word = $word . "ке";
100                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
101                                                 $word = $word . "қа";
102                                         }
103                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
104                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
105                                                 $word = $word . "ге";
106                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
107                                                 $word = $word . "ға";
108                                         }
109                                 }
110                                 break;
111                         case "dc21":
112                         case "possessive dative": # täweldık + barıs
113                                 if ( in_array( $wordEnding, $firstPerson ) ) {
114                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
115                                                 $word = $word . "е";
116                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
117                                                 $word = $word . "а";
118                                         }
119                                 } elseif ( in_array( $wordEnding, $secondPerson ) ) {
120                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
121                                                 $word = $word . "ге";
122                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
123                                                 $word = $word . "ға";
124                                         }
125                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
126                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
127                                                 $word = $word . "не";
128                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
129                                                 $word = $word . "на";
130                                         }
131                                 }
132                                 break;
133                         case "dc3":
134                         case "accusative": # tabıs
135                                 if ( in_array( $wordEnding, $Consonants ) ) {
136                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
137                                                 $word = $word . "ті";
138                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
139                                                 $word = $word . "ты";
140                                         }
141                                 } elseif ( in_array( $wordEnding, $allVowels ) ) {
142                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
143                                                 $word = $word . "ні";
144                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
145                                                 $word = $word . "ны";
146                                         }
147                                 } elseif ( in_array( $wordEnding, $Sonorants ) ) {
148                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
149                                                 $word = $word . "ді";
150                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
151                                                 $word = $word . "ды";
152                                         }
153                                 }
154                                 break;
155                         case "dc31":
156                         case "possessive accusative": # täweldık + tabıs
157                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
158                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
159                                                 $word = $word . "ді";
160                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
161                                                 $word = $word . "ды";
162                                         }
163                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
164                                                 $word = $word . "н";
165                                 }
166                                 break;
167                         case "dc4":
168                         case "locative": # jatıs
169                                 if ( in_array( $wordEnding, $Consonants ) ) {
170                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
171                                                 $word = $word . "те";
172                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
173                                                 $word = $word . "та";
174                                         }
175                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
176                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
177                                                 $word = $word . "де";
178                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
179                                                 $word = $word . "да";
180                                         }
181                                 }
182                                 break;
183                         case "dc41":
184                         case "possessive locative": # täweldık + jatıs
185                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
186                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
187                                                 $word = $word . "де";
188                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
189                                                 $word = $word . "да";
190                                         }
191                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
192                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
193                                                 $word = $word . "нде";
194                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
195                                                 $word = $word . "нда";
196                                         }
197                                 }
198                                 break;
199                         case "dc5":
200                         case "ablative": # şığıs
201                                 if ( in_array( $wordEnding, $Consonants ) ) {
202                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
203                                                 $word = $word . "тен";
204                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
205                                                 $word = $word . "тан";
206                                         }
207                                 } elseif ( in_array( $wordEnding, $allVowels )
208                                         || in_array( $wordEnding, $Sonants )
209                                         || in_array( $wordEnding, $Sibilants )
210                                 ) {
211                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
212                                                 $word = $word . "ден";
213                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
214                                                 $word = $word . "дан";
215                                         }
216                                 } elseif ( in_array( $wordEnding, $Nasals ) ) {
217                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
218                                                 $word = $word . "нен";
219                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
220                                                 $word = $word . "нан";
221                                         }
222                                 }
223                                 break;
224                         case "dc51":
225                         case "possessive ablative": # täweldık + şığıs
226                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
227                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
228                                                 $word = $word . "нен";
229                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
230                                                 $word = $word . "нан";
231                                         }
232                                 } elseif ( in_array( $wordEnding, $secondPerson ) ) {
233                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
234                                                 $word = $word . "ден";
235                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
236                                                 $word = $word . "дан";
237                                         }
238                                 }
239                                 break;
240                         case "dc6":
241                         case "comitative": # kömektes
242                                 if ( in_array( $wordEnding, $Consonants ) ) {
243                                                 $word = $word . "пен";
244                                 } elseif ( in_array( $wordEnding, $allVowels )
245                                         || in_array( $wordEnding, $Nasals )
246                                         || in_array( $wordEnding, $Sonants )
247                                 ) {
248                                                 $word = $word . "мен";
249                                 } elseif ( in_array( $wordEnding, $Sibilants ) ) {
250                                                 $word = $word . "бен";
251                                 }
252                                 break;
253                         case "dc61":
254                         case "possessive comitative": # täweldık + kömektes
255                                 if ( in_array( $wordEnding, $Consonants ) ) {
256                                                 $word = $word . "пенен";
257                                 } elseif ( in_array( $wordEnding, $allVowels )
258                                         || in_array( $wordEnding, $Nasals )
259                                         || in_array( $wordEnding, $Sonants )
260                                 ) {
261                                                 $word = $word . "менен";
262                                 } elseif ( in_array( $wordEnding, $Sibilants ) ) {
263                                                 $word = $word . "бенен";
264                                 }
265                                 break;
266                         default: # dc0 #nominative #ataw
267                 }
268                 return $word;
269         }
270
271         /**
272          * @param string $word
273          * @param string $case
274          * @return string
275          */
276         function convertGrammarKk_latn( $word, $case ) {
277                 global $wgGrammarForms;
278                 if ( isset( $wgGrammarForms['kk-tr'][$case][$word] ) ) {
279                         return $wgGrammarForms['kk-tr'][$case][$word];
280                 }
281                 if ( isset( $wgGrammarForms['kk-latn'][$case][$word] ) ) {
282                         return $wgGrammarForms['kk-latn'][$case][$word];
283                 }
284                 // Set up some constants...
285                 // Vowels in last syllable
286                 $frontVowels = [ "e", "ö", "ü", "i", "ä", "é" ];
287                 $backVowels = [ "a", "o", "u", "ı" ];
288                 $allVowels = [ "e", "ö", "ü", "i", "ä", "é", "a", "o", "u", "ı" ];
289                 // Preceding letters
290                 $Nasals = [ "m", "n", "ñ" ];
291                 $Sonants = [ "ï", "y", "ý", "l", "r", "w" ];
292                 $Consonants = [ "p", "f", "k", "q", "t", "ş", "s", "x", "c", "ç", "b", "v", "g", "d" ];
293                 $Sibilants = [ "j", "z" ];
294                 $Sonorants = [ "ï", "y", "ý", "l", "r", "w", "m", "n", "ñ", "j", "z" ];
295
296                 // Possessives
297                 $firstPerson = [ "m", "ñ" ]; // 1st singular, 2nd unformal
298                 $secondPerson = [ "z" ]; // 1st plural, 2nd formal
299                 $thirdPerson = [ "ı", "i" ]; // 3rd
300
301                 $lastLetter = $this->lastLetter( $word, $allVowels );
302                 $wordEnding =& $lastLetter[0];
303                 $wordLastVowel =& $lastLetter[1];
304
305                 // Now convert the word
306                 switch ( $case ) {
307                         case "dc1":
308                         case "genitive": # ilik
309                                 if ( in_array( $wordEnding, $Consonants ) ) {
310                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
311                                                 $word = $word . "tiñ";
312                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
313                                                 $word = $word . "tıñ";
314                                         }
315                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
316                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
317                                                 $word = $word . "niñ";
318                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
319                                                 $word = $word . "nıñ";
320                                         }
321                                 } elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
322                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
323                                                 $word = $word . "diñ";
324                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
325                                                 $word = $word . "dıñ";
326                                         }
327                                 }
328                                 break;
329                         case "dc2":
330                         case "dative": # barıs
331                                 if ( in_array( $wordEnding, $Consonants ) ) {
332                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
333                                                 $word = $word . "ke";
334                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
335                                                 $word = $word . "qa";
336                                         }
337                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
338                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
339                                                 $word = $word . "ge";
340                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
341                                                 $word = $word . "ğa";
342                                         }
343                                 }
344                                 break;
345                         case "dc21":
346                         case "possessive dative": # täweldık + barıs
347                                 if ( in_array( $wordEnding, $firstPerson ) ) {
348                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
349                                                 $word = $word . "e";
350                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
351                                                 $word = $word . "a";
352                                         }
353                                 } elseif ( in_array( $wordEnding, $secondPerson ) ) {
354                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
355                                                 $word = $word . "ge";
356                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
357                                                 $word = $word . "ğa";
358                                         }
359                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
360                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
361                                                 $word = $word . "ne";
362                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
363                                                 $word = $word . "na";
364                                         }
365                                 }
366                                 break;
367                         case "dc3":
368                         case "accusative": # tabıs
369                                 if ( in_array( $wordEnding, $Consonants ) ) {
370                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
371                                                 $word = $word . "ti";
372                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
373                                                 $word = $word . "tı";
374                                         }
375                                 } elseif ( in_array( $wordEnding, $allVowels ) ) {
376                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
377                                                 $word = $word . "ni";
378                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
379                                                 $word = $word . "nı";
380                                         }
381                                 } elseif ( in_array( $wordEnding, $Sonorants ) ) {
382                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
383                                                 $word = $word . "di";
384                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
385                                                 $word = $word . "dı";
386                                         }
387                                 }
388                                 break;
389                         case "dc31":
390                         case "possessive accusative": # täweldık + tabıs
391                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
392                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
393                                                 $word = $word . "di";
394                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
395                                                 $word = $word . "dı";
396                                         }
397                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
398                                                 $word = $word . "n";
399                                 }
400                                 break;
401                         case "dc4":
402                         case "locative": # jatıs
403                                 if ( in_array( $wordEnding, $Consonants ) ) {
404                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
405                                                 $word = $word . "te";
406                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
407                                                 $word = $word . "ta";
408                                         }
409                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
410                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
411                                                 $word = $word . "de";
412                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
413                                                 $word = $word . "da";
414                                         }
415                                 }
416                                 break;
417                         case "dc41":
418                         case "possessive locative": # täweldık + jatıs
419                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
420                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
421                                                 $word = $word . "de";
422                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
423                                                 $word = $word . "da";
424                                         }
425                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
426                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
427                                                 $word = $word . "nde";
428                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
429                                                 $word = $word . "nda";
430                                         }
431                                 }
432                                 break;
433                         case "dc5":
434                         case "ablative": # şığıs
435                                 if ( in_array( $wordEnding, $Consonants ) ) {
436                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
437                                                 $word = $word . "ten";
438                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
439                                                 $word = $word . "tan";
440                                         }
441                                 } elseif ( in_array( $wordEnding, $allVowels )
442                                         || in_array( $wordEnding, $Sonants )
443                                         || in_array( $wordEnding, $Sibilants )
444                                 ) {
445                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
446                                                 $word = $word . "den";
447                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
448                                                 $word = $word . "dan";
449                                         }
450                                 } elseif ( in_array( $wordEnding, $Nasals ) ) {
451                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
452                                                 $word = $word . "nen";
453                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
454                                                 $word = $word . "nan";
455                                         }
456                                 }
457                                 break;
458                         case "dc51":
459                         case "possessive ablative": # täweldık + şığıs
460                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
461                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
462                                                 $word = $word . "nen";
463                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
464                                                 $word = $word . "nan";
465                                         }
466                                 } elseif ( in_array( $wordEnding, $secondPerson ) ) {
467                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
468                                                 $word = $word . "den";
469                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
470                                                 $word = $word . "dan";
471                                         }
472                                 }
473                                 break;
474                         case "dc6":
475                         case "comitative": # kömektes
476                                 if ( in_array( $wordEnding, $Consonants ) ) {
477                                                 $word = $word . "pen";
478                                 } elseif ( in_array( $wordEnding, $allVowels )
479                                         || in_array( $wordEnding, $Nasals )
480                                         || in_array( $wordEnding, $Sonants )
481                                 ) {
482                                                 $word = $word . "men";
483                                 } elseif ( in_array( $wordEnding, $Sibilants ) ) {
484                                                 $word = $word . "ben";
485                                 }
486                                 break;
487                         case "dc61":
488                         case "possessive comitative": # täweldık + kömektes
489                                 if ( in_array( $wordEnding, $Consonants ) ) {
490                                                 $word = $word . "penen";
491                                 } elseif ( in_array( $wordEnding, $allVowels )
492                                         || in_array( $wordEnding, $Nasals )
493                                         || in_array( $wordEnding, $Sonants )
494                                 ) {
495                                                 $word = $word . "menen";
496                                 } elseif ( in_array( $wordEnding, $Sibilants ) ) {
497                                                 $word = $word . "benen";
498                                 }
499                                 break;
500                         default: # dc0 #nominative #ataw
501                 }
502                 return $word;
503         }
504
505         /**
506          * @param string $word
507          * @param string $case
508          * @return string
509          */
510         function convertGrammarKk_arab( $word, $case ) {
511                 global $wgGrammarForms;
512                 if ( isset( $wgGrammarForms['kk-cn'][$case][$word] ) ) {
513                         return $wgGrammarForms['kk-cn'][$case][$word];
514                 }
515                 if ( isset( $wgGrammarForms['kk-arab'][$case][$word] ) ) {
516                         return $wgGrammarForms['kk-arab'][$case][$word];
517                 }
518                 // Set up some constants...
519                 // Vowels in last syllable
520                 $frontVowels = [ "ە", "ٶ", "ٷ", "ٸ", "ٵ", "ە" ];
521                 $backVowels = [ "ا", "و", "ۇ", "ى" ];
522                 $allVowels = [ "ە", "ٶ", "ٷ", "ٸ", "ٵ", "ە", "ا", "و", "ۇ", "ى" ];
523                 // Preceding letters
524                 $Nasals = [ "م", "ن", "ڭ" ];
525                 $Sonants = [ "ي", "ي", "ل", "ر", "ۋ" ];
526                 $Consonants = [ "پ", "ف", "ك", "ق", "ت", "ش", "س", "ح", "تس", "چ", "ب", "ۆ", "گ", "د" ];
527                 $Sibilants = [ "ج", "ز" ];
528                 $Sonorants = [ "ي", "ي", "ل", "ر", "ۋ", "م", "ن", "ڭ", "ج", "ز" ];
529
530                 // Possessives
531                 $firstPerson = [ "م", "ڭ" ]; // 1st singular, 2nd unformal
532                 $secondPerson = [ "ز" ]; // 1st plural, 2nd formal
533                 $thirdPerson = [ "ى", "ٸ" ]; // 3rd
534
535                 $lastLetter = $this->lastLetter( $word, $allVowels );
536                 $wordEnding = $lastLetter[0];
537                 $wordLastVowel = $lastLetter[1];
538
539                 // Now convert the word
540                 switch ( $case ) {
541                         case "dc1":
542                         case "genitive": # ilik
543                                 if ( in_array( $wordEnding, $Consonants ) ) {
544                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
545                                                 $word = $word . "تٸڭ";
546                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
547                                                 $word = $word . "تىڭ";
548                                         }
549                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
550                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
551                                                 $word = $word . "نٸڭ";
552                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
553                                                 $word = $word . "نىڭ";
554                                         }
555                                 } elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
556                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
557                                                 $word = $word . "دٸڭ";
558                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
559                                                 $word = $word . "دىڭ";
560                                         }
561                                 }
562                                 break;
563                         case "dc2":
564                         case "dative": # barıs
565                                 if ( in_array( $wordEnding, $Consonants ) ) {
566                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
567                                                 $word = $word . "كە";
568                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
569                                                 $word = $word . "قا";
570                                         }
571                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
572                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
573                                                 $word = $word . "گە";
574                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
575                                                 $word = $word . "عا";
576                                         }
577                                 }
578                                 break;
579                         case "dc21":
580                         case "possessive dative": # täweldık + barıs
581                                 if ( in_array( $wordEnding, $firstPerson ) ) {
582                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
583                                                 $word = $word . "ە";
584                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
585                                                 $word = $word . "ا";
586                                         }
587                                 } elseif ( in_array( $wordEnding, $secondPerson ) ) {
588                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
589                                                 $word = $word . "گە";
590                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
591                                                 $word = $word . "عا";
592                                         }
593                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
594                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
595                                                 $word = $word . "نە";
596                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
597                                                 $word = $word . "نا";
598                                         }
599                                 }
600                                 break;
601                         case "dc3":
602                         case "accusative": # tabıs
603                                 if ( in_array( $wordEnding, $Consonants ) ) {
604                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
605                                                 $word = $word . "تٸ";
606                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
607                                                 $word = $word . "تى";
608                                         }
609                                 } elseif ( in_array( $wordEnding, $allVowels ) ) {
610                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
611                                                 $word = $word . "نٸ";
612                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
613                                                 $word = $word . "نى";
614                                         }
615                                 } elseif ( in_array( $wordEnding, $Sonorants ) ) {
616                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
617                                                 $word = $word . "دٸ";
618                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
619                                                 $word = $word . "دى";
620                                         }
621                                 }
622                                 break;
623                         case "dc31":
624                         case "possessive accusative": # täweldık + tabıs
625                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
626                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
627                                                 $word = $word . "دٸ";
628                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
629                                                 $word = $word . "دى";
630                                         }
631                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
632                                                 $word = $word . "ن";
633                                 }
634                                 break;
635                         case "dc4":
636                         case "locative": # jatıs
637                                 if ( in_array( $wordEnding, $Consonants ) ) {
638                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
639                                                 $word = $word . "تە";
640                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
641                                                 $word = $word . "تا";
642                                         }
643                                 } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
644                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
645                                                 $word = $word . "دە";
646                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
647                                                 $word = $word . "دا";
648                                         }
649                                 }
650                                 break;
651                         case "dc41":
652                         case "possessive locative": # täweldık + jatıs
653                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
654                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
655                                                 $word = $word . "دە";
656                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
657                                                 $word = $word . "دا";
658                                         }
659                                 } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
660                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
661                                                 $word = $word . "ندە";
662                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
663                                                 $word = $word . "ندا";
664                                         }
665                                 }
666                                 break;
667                         case "dc5":
668                         case "ablative": # şığıs
669                                 if ( in_array( $wordEnding, $Consonants ) ) {
670                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
671                                                 $word = $word . "تەن";
672                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
673                                                 $word = $word . "تان";
674                                         }
675                                 } elseif ( in_array( $wordEnding, $allVowels )
676                                         || in_array( $wordEnding, $Sonants )
677                                         || in_array( $wordEnding, $Sibilants )
678                                 ) {
679                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
680                                                 $word = $word . "دەن";
681                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
682                                                 $word = $word . "دان";
683                                         }
684                                 } elseif ( in_array( $wordEnding, $Nasals ) ) {
685                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
686                                                 $word = $word . "نەن";
687                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
688                                                 $word = $word . "نان";
689                                         }
690                                 }
691                                 break;
692                         case "dc51":
693                         case "possessive ablative": # täweldık + şığıs
694                                 if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
695                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
696                                                 $word = $word . "نەن";
697                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
698                                                 $word = $word . "نان";
699                                         }
700                                 } elseif ( in_array( $wordEnding, $secondPerson ) ) {
701                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
702                                                 $word = $word . "دەن";
703                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
704                                                 $word = $word . "دان";
705                                         }
706                                 }
707                                 break;
708                         case "dc6":
709                         case "comitative": # kömektes
710                                 if ( in_array( $wordEnding, $Consonants ) ) {
711                                                 $word = $word . "پەن";
712                                 } elseif ( in_array( $wordEnding, $allVowels )
713                                         || in_array( $wordEnding, $Nasals )
714                                         || in_array( $wordEnding, $Sonants )
715                                 ) {
716                                                 $word = $word . "مەن";
717                                 } elseif ( in_array( $wordEnding, $Sibilants ) ) {
718                                                 $word = $word . "بەن";
719                                 }
720                                 break;
721                         case "dc61":
722                         case "possessive comitative": # täweldık + kömektes
723                                 if ( in_array( $wordEnding, $Consonants ) ) {
724                                                 $word = $word . "پەنەن";
725                                 } elseif ( in_array( $wordEnding, $allVowels )
726                                         || in_array( $wordEnding, $Nasals )
727                                         || in_array( $wordEnding, $Sonants )
728                                 ) {
729                                                 $word = $word . "مەنەن";
730                                 } elseif ( in_array( $wordEnding, $Sibilants ) ) {
731                                                 $word = $word . "بەنەن";
732                                 }
733                                 break;
734                         default: # dc0 #nominative #ataw
735                 }
736                 return $word;
737         }
738
739         /**
740          * @param string $word
741          * @param array $allVowels
742          * @return array
743          */
744         function lastLetter( $word, $allVowels ) {
745                 $lastLetter = [];
746
747                 // Put the word in a form we can play with since we're using UTF-8
748                 $ar = preg_split( '//u', parent::lc( $word ), -1, PREG_SPLIT_NO_EMPTY );
749
750                 // Here's an array with the order of the letters in the word reversed
751                 // so we can find a match quicker *shrug*
752                 $wordReversed = array_reverse( $ar );
753
754                 // Here's the last letter in the word
755                 $lastLetter[0] = $ar[count( $ar ) - 1];
756
757                 // Find the last vowel in the word
758                 $lastLetter[1] = null;
759                 foreach ( $wordReversed as $xvalue ) {
760                         foreach ( $allVowels as $yvalue ) {
761                                 if ( strcmp( $xvalue, $yvalue ) == 0 ) {
762                                         $lastLetter[1] = $xvalue;
763                                         break;
764                                 } else {
765                                         continue;
766                                 }
767                         }
768                         if ( $lastLetter[1] !== null ) {
769                                 break;
770                         } else {
771                                 continue;
772                         }
773                 }
774
775                 return $lastLetter;
776         }
777
778         /**
779          * Avoid grouping whole numbers between 0 to 9999
780          *
781          * @param string $_
782          *
783          * @return string
784          */
785         function commafy( $_ ) {
786                 if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
787                         return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
788                 } else {
789                         return $_;
790                 }
791         }
792 }