LanguageKk_cyrl::commafy()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 1
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
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 View Code Duplication
		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 View Code Duplication
		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 View Code Duplication
		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 );
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (lc() instead of lastLetter()). Are you sure this is correct? If so, you might want to change this to $this->lc().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
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 View Code Duplication
		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
}
793