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