MediaWiki
REL1_24
|
00001 <?php 00031 class LanguageTyv extends Language { 00040 function convertGrammar( $word, $case ) { 00041 global $wgGrammarForms; 00042 if ( isset( $wgGrammarForms['tyv'][$case][$word] ) ) { 00043 return $wgGrammarForms['tyv'][$case][$word]; 00044 } 00045 00046 // Set up some constants... 00047 $allVowels = array( "е", "и", "э", "ө", "ү", "а", "ё", "о", "у", "ы", 00048 "ю", "я", "a", "e", "i", "o", "ö", "u", "ü", "y" ); 00049 $frontVowels = array( "е", "и", "э", "ө", "ү", "e", "i", "ö", "ü" ); 00050 $backVowels = array( "а", "ё", "о", "у", "ы", "ю", "я", "a", "o", "u", "y" ); 00051 $unroundFrontVowels = array( "е", "и", "э", "e", "i" ); 00052 $roundFrontVowels = array( "ө", "ү", "ö", "ü" ); 00053 $unroundBackVowels = array( "а", "ы", "я", "a", "y" ); 00054 $roundBackVowels = array( "ё", "о", "у", "ю", "o", "u" ); 00055 //$voicedPhonemes = array( "д", "б", "з", "ж", "г", "d", "b", "z", "g" ); 00056 $unvoicedPhonemes = array( "т", "п", "с", "ш", "к", "ч", "х", "t", "p", "s", "k", "x" ); 00057 $directiveUnvoicedStems = array( "т", "п", "с", "ш", "к", "ч", "х", "л", 00058 "м", "н", "ң", "t", "p", "s", "k", "x", "l", "m", "n", "ŋ" ); 00059 $directiveVoicedStems = array( "д", "б", "з", "ж", "г", "р", "й", "d", "b", "z", "g", "r", "j" ); 00060 00061 //$allSonants = array("л", "м", "н", "ң", "р", "й"); 00062 //$allNasals = array("м", "н", "ң"); 00063 00064 //Put the word in a form we can play with since we're using UTF-8 00065 preg_match_all( '/./us', $word, $ar ); 00066 00067 // Here's the last letter in the word 00068 $wordEnding = $ar[0][count( $ar[0] ) - 1]; 00069 // Here's an array with the order of the letters in the word reversed so 00070 // we can find a match quicker. *shrug* 00071 $wordReversed = array_reverse( $ar[0] ); 00072 00073 // Find the last vowel in the word 00074 $wordLastVowel = null; 00075 foreach ( $wordReversed as $xvalue ) { 00076 foreach ( $allVowels as $yvalue ) { 00077 if ( strcmp( $xvalue, $yvalue ) == 0 ) { 00078 $wordLastVowel = $xvalue; 00079 break; 00080 } else { 00081 continue; 00082 } 00083 } 00084 if ( $wordLastVowel !== null ) { 00085 break; 00086 } else { 00087 continue; 00088 } 00089 } 00090 00091 // Now convert the word 00092 switch ( $case ) { 00093 case "genitive": 00094 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) { 00095 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00096 $word = implode( "", $ar[0] ) . "түң"; 00097 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00098 $word = implode( "", $ar[0] ) . "тиң"; 00099 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00100 $word = implode( "", $ar[0] ) . "туң"; 00101 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00102 $word = implode( "", $ar[0] ) . "тың"; 00103 } else { 00104 } 00105 } elseif ( $wordEnding === "л" || $wordEnding === "l" ) { 00106 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00107 $word = implode( "", $ar[0] ) . "дүң"; 00108 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00109 $word = implode( "", $ar[0] ) . "диң"; 00110 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00111 $word = implode( "", $ar[0] ) . "дуң"; 00112 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00113 $word = implode( "", $ar[0] ) . "дың"; 00114 } else { 00115 } 00116 } else { 00117 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00118 $word = implode( "", $ar[0] ) . "нүң"; 00119 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00120 $word = implode( "", $ar[0] ) . "ниң"; 00121 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00122 $word = implode( "", $ar[0] ) . "нуң"; 00123 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00124 $word = implode( "", $ar[0] ) . "ның"; 00125 } else { 00126 } 00127 } 00128 break; 00129 case "dative": 00130 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) { 00131 if ( in_array( $wordLastVowel, $frontVowels ) ) { 00132 $word = implode( "", $ar[0] ) . "ке"; 00133 } elseif ( in_array( $wordLastVowel, $backVowels ) ) { 00134 $word = implode( "", $ar[0] ) . "ка"; 00135 } else { 00136 } 00137 } else { 00138 if ( in_array( $wordLastVowel, $frontVowels ) ) { 00139 $word = implode( "", $ar[0] ) . "ге"; 00140 } elseif ( in_array( $wordLastVowel, $backVowels ) ) { 00141 $word = implode( "", $ar[0] ) . "га"; 00142 } else { 00143 } 00144 } 00145 break; 00146 case "accusative": 00147 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) { 00148 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00149 $word = implode( "", $ar[0] ) . "тү"; 00150 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00151 $word = implode( "", $ar[0] ) . "ти"; 00152 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00153 $word = implode( "", $ar[0] ) . "ту"; 00154 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00155 $word = implode( "", $ar[0] ) . "ты"; 00156 } else { 00157 } 00158 } elseif ( $wordEnding === "л" || $wordEnding === "l" ) { 00159 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00160 $word = implode( "", $ar[0] ) . "дү"; 00161 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00162 $word = implode( "", $ar[0] ) . "ди"; 00163 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00164 $word = implode( "", $ar[0] ) . "ду"; 00165 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00166 $word = implode( "", $ar[0] ) . "ды"; 00167 } else { 00168 } 00169 } else { 00170 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00171 $word = implode( "", $ar[0] ) . "нү"; 00172 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00173 $word = implode( "", $ar[0] ) . "ни"; 00174 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00175 $word = implode( "", $ar[0] ) . "ну"; 00176 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00177 $word = implode( "", $ar[0] ) . "ны"; 00178 } else { 00179 } 00180 } 00181 break; 00182 case "locative": 00183 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) { 00184 if ( in_array( $wordLastVowel, $frontVowels ) ) { 00185 $word = implode( "", $ar[0] ) . "те"; 00186 } elseif ( in_array( $wordLastVowel, $backVowels ) ) { 00187 $word = implode( "", $ar[0] ) . "та"; 00188 } else { 00189 } 00190 } else { 00191 if ( in_array( $wordLastVowel, $frontVowels ) ) { 00192 $word = implode( "", $ar[0] ) . "де"; 00193 } elseif ( in_array( $wordLastVowel, $backVowels ) ) { 00194 $word = implode( "", $ar[0] ) . "да"; 00195 } else { 00196 } 00197 } 00198 break; 00199 case "ablative": 00200 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) { 00201 if ( in_array( $wordLastVowel, $frontVowels ) ) { 00202 $word = implode( "", $ar[0] ) . "тен"; 00203 } elseif ( in_array( $wordLastVowel, $backVowels ) ) { 00204 $word = implode( "", $ar[0] ) . "тан"; 00205 } else { 00206 } 00207 } else { 00208 if ( in_array( $wordLastVowel, $frontVowels ) ) { 00209 $word = implode( "", $ar[0] ) . "ден"; 00210 } elseif ( in_array( $wordLastVowel, $backVowels ) ) { 00211 $word = implode( "", $ar[0] ) . "дан"; 00212 } else { 00213 } 00214 } 00215 break; 00216 case "directive1": 00217 if ( in_array( $wordEnding, $directiveVoicedStems ) ) { 00218 $word = implode( "", $ar[0] ) . "же"; 00219 } elseif ( in_array( $wordEnding, $directiveUnvoicedStems ) ) { 00220 $word = implode( "", $ar[0] ) . "че"; 00221 } else { 00222 } 00223 break; 00224 case "directive2": 00225 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) { 00226 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00227 $word = implode( "", $ar[0] ) . "түве"; 00228 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00229 $word = implode( "", $ar[0] ) . "тиве"; 00230 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00231 $word = implode( "", $ar[0] ) . "туве"; 00232 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00233 $word = implode( "", $ar[0] ) . "тыве"; 00234 } else { 00235 } 00236 } else { 00237 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) { 00238 $word = implode( "", $ar[0] ) . "дүве"; 00239 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) { 00240 $word = implode( "", $ar[0] ) . "диве"; 00241 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) { 00242 $word = implode( "", $ar[0] ) . "дуве"; 00243 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) { 00244 $word = implode( "", $ar[0] ) . "дыве"; 00245 } else { 00246 } 00247 } 00248 break; 00249 default: 00250 break; 00251 } 00252 return $word; 00253 } 00254 }