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