35 const C_UC =
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; # Crimean Tatar Cyrillic uppercase
36 const C_LC =
'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; # Crimean Tatar Cyrillic lowercase
37 const C_CONS_UC =
'БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ'; # Crimean Tatar Cyrillic + CÑ uppercase consonants
38 const C_CONS_LC =
'бвгджзйклмнпрстфхцчшщcñ'; # Crimean Tatar Cyrillic + CÑ lowercase consonants
39 const C_M_CONS =
'бгкмшcБГКМШC'; # Crimean Tatar Cyrillic M-
type consonants
42 const C_CONS =
'бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ';
45 const L_UC =
'AÂBCÇDEFGĞHIİJKLMNÑOÖPQRSŞTUÜVYZ'; # Crimean Tatar Latin uppercase
46 const L_LC =
'aâbcçdefgğhıijklmnñoöpqrsştuüvyz'; # Crimean Tatar Latin lowercase
49 const L_N_CONS =
'çnrstzÇNRSTZ'; # Crimean Tatar Latin N-
type consonants
50 const L_M_CONS =
'bcgkmpşBCGKMPŞ'; # Crimean Tatar Latin M-
type consonants
51 const L_CONS_UC =
'BCÇDFGĞHJKLMNÑPQRSŞTVZ'; # Crimean Tatar Latin uppercase consonants
52 const L_CONS_LC =
'bcçdfgğhjklmnñpqrsştvz'; # Crimean Tatar Latin lowercase consonants
53 const L_CONS =
'bcçdfgğhjklmnñpqrsştvzBCÇDFGĞHJKLMNÑPQRSŞTVZ'; # Crimean Tatar Latin consonants
54 const L_VOW_UC =
'AÂEIİOÖUÜ'; # Crimean Tatar Latin uppercase vowels
55 const L_VOW =
'aâeıioöuüAÂEIİOÖUÜ'; # Crimean Tatar Latin vowels
56 const L_F_UC =
'EİÖÜ'; # Crimean Tatar Latin uppercase front vowels
57 const L_F =
'eiöüEİÖÜ'; # Crimean Tatar Latin front vowels
68 $variantfallbacks = [],
70 parent::__construct( $langobj, $maincode,
71 $variants, $variantfallbacks, $flags );
76 $this->loadExceptions();
79 public $mCyrillicToLatin = [
81 ## these are independent of location in the word, but have
82 ## to go first so other transforms don't bleed them
83 'гъ' =>
'ğ',
'Гъ' =>
'Ğ',
'ГЪ' =>
'Ğ',
84 'къ' =>
'q',
'Къ' =>
'Q',
'КЪ' =>
'Q',
85 'нъ' =>
'ñ',
'Нъ' =>
'Ñ',
'НЪ' =>
'Ñ',
86 'дж' =>
'c',
'Дж' =>
'C',
'ДЖ' =>
'C',
88 'А' =>
'A',
'а' =>
'a',
'Б' =>
'B',
'б' =>
'b',
89 'В' =>
'V',
'в' =>
'v',
'Г' =>
'G',
'г' =>
'g',
90 'Д' =>
'D',
'д' =>
'd',
'Ж' =>
'J',
'ж' =>
'j',
91 'З' =>
'Z',
'з' =>
'z',
'И' =>
'İ',
'и' =>
'i',
92 'Й' =>
'Y',
'й' =>
'y',
'К' =>
'K',
'к' =>
'k',
93 'Л' =>
'L',
'л' =>
'l',
'М' =>
'M',
'м' =>
'm',
94 'Н' =>
'N',
'н' =>
'n',
'П' =>
'P',
'п' =>
'p',
95 'Р' =>
'R',
'р' =>
'r',
'С' =>
'S',
'с' =>
's',
96 'Т' =>
'T',
'т' =>
't',
'Ф' =>
'F',
'ф' =>
'f',
97 'Х' =>
'H',
'х' =>
'h',
'Ч' =>
'Ç',
'ч' =>
'ç',
98 'Ш' =>
'Ş',
'ш' =>
'ş',
'Ы' =>
'I',
'ы' =>
'ı',
99 'Э' =>
'E',
'э' =>
'e',
'Е' =>
'E',
'е' =>
'e',
100 'Я' =>
'Â',
'я' =>
'â',
'У' =>
'U',
'у' =>
'u',
101 'О' =>
'O',
'о' =>
'o',
103 'Ё' =>
'Yo',
'ё' =>
'yo',
'Ю' =>
'Yu',
'ю' =>
'yu',
104 'Ц' =>
'Ts',
'ц' =>
'ts',
'Щ' =>
'Şç',
'щ' =>
'şç',
105 'Ь' =>
'',
'ь' =>
'',
'Ъ' =>
'',
'ъ' =>
'',
109 public $mLatinToCyrillic = [
110 'Â' =>
'Я',
'â' =>
'я',
'B' =>
'Б',
'b' =>
'б',
111 'Ç' =>
'Ч',
'ç' =>
'ч',
'D' =>
'Д',
'd' =>
'д',
112 'F' =>
'Ф',
'f' =>
'ф',
'G' =>
'Г',
'g' =>
'г',
113 'H' =>
'Х',
'h' =>
'х',
'I' =>
'Ы',
'ı' =>
'ы',
114 'İ' =>
'И',
'i' =>
'и',
'J' =>
'Ж',
'j' =>
'ж',
115 'K' =>
'К',
'k' =>
'к',
'L' =>
'Л',
'l' =>
'л',
116 'M' =>
'М',
'm' =>
'м',
'N' =>
'Н',
'n' =>
'н',
117 'O' =>
'О',
'o' =>
'о',
'P' =>
'П',
'p' =>
'п',
118 'R' =>
'Р',
'r' =>
'р',
'S' =>
'С',
's' =>
'с',
119 'Ş' =>
'Ш',
'ş' =>
'ш',
'T' =>
'Т',
't' =>
'т',
120 'V' =>
'В',
'v' =>
'в',
'Z' =>
'З',
'z' =>
'з',
122 'ya' =>
'я',
'Ya' =>
'Я',
'YA' =>
'Я',
123 'ye' =>
'е',
'YE' =>
'Е',
'Ye' =>
'Е',
126 'A' =>
'А',
'a' =>
'а',
'E' =>
'Е',
'e' =>
'е',
127 'Ö' =>
'Ё',
'ö' =>
'ё',
'U' =>
'У',
'u' =>
'у',
128 'Ü' =>
'Ю',
'ü' =>
'ю',
'Y' =>
'Й',
'y' =>
'й',
129 'C' =>
'Дж',
'c' =>
'дж',
'Ğ' =>
'Гъ',
'ğ' =>
'гъ',
130 'Ñ' =>
'Нъ',
'ñ' =>
'нъ',
'Q' =>
'Къ',
'q' =>
'къ',
134 public $mCyrl2LatnExceptions = [];
135 public $mLatn2CyrlExceptions = [];
137 public $mCyrl2LatnPatterns = [];
138 public $mLatn2CyrlPatterns = [];
140 public $mCyrlCleanUpRegexes = [];
142 public $mExceptionsLoaded =
false;
152 function loadExceptions() {
153 if ( $this->mExceptionsLoaded ) {
157 $this->mExceptionsLoaded =
true;
159 list( $this->mCyrl2LatnExceptions, $this->mLatn2CyrlExceptions,
160 $this->mCyrl2LatnPatterns, $this->mLatn2CyrlPatterns, $this->mCyrlCleanUpRegexes ) =
161 $crhExceptions->loadExceptions( self::L_LC . self::C_LC, self::L_UC . self::C_UC );
176 if ( is_object( $nt ) ) {
177 $ns = $nt->getNamespace();
184 parent::findVariantLink(
$link, $nt, $ignoreOtherCond );
200 function translate( $text, $toVariant ) {
201 switch ( $toVariant ) {
209 if ( !$this->mTablesLoaded ) {
213 if ( !isset( $this->mTables[$toVariant] ) ) {
214 throw new MWException(
"Broken variant table: " . implode(
',', array_keys( $this->mTables ) ) );
217 switch ( $toVariant ) {
224 $roman =
'(?=[MDCLXVI]([^.]|$))M{0,4}(C[DM]|D?C{0,3})(X[LC]|L?X{0,3})(I[VX]|V?I{0,3})';
226 $breaks =
'([^\w\x80-\xff])';
229 $romanRegex =
'/^' . $roman .
'$|^(' . $roman . $breaks .
')+|(' . $breaks . $roman .
')+$|' .
230 $breaks .
'(' . $roman . $breaks .
')+/';
232 $matches = preg_split( $romanRegex, $text, -1, PREG_SPLIT_OFFSET_CAPTURE );
237 $ret .= substr( $text, $mstart, $m[1] - $mstart );
240 if ( $m[0] !==
'' ) {
241 $ret .= $this->regsConverter( $m[0], $toVariant );
244 $mstart = $m[1] + strlen( $m[0] );
250 return $this->regsConverter( $text, $toVariant );
254 private function regsConverter( $text, $toVariant ) {
255 if ( $text ==
'' )
return $text;
259 switch ( $toVariant ) {
261 $text = strtr( $text, $this->mCyrl2LatnExceptions );
262 foreach ( $this->mCyrl2LatnPatterns as $pat => $rep ) {
263 $text = preg_replace( $pat, $rep, $text );
265 $text = parent::translate( $text, $toVariant );
266 $text = strtr( $text, [
'«' =>
'"',
'»' =>
'"', ] );
269 $text = strtr( $text, $this->mLatn2CyrlExceptions );
270 foreach ( $this->mLatn2CyrlPatterns as $pat => $rep ) {
271 $text = preg_replace( $pat, $rep, $text );
273 $text = parent::translate( $text, $toVariant );
274 $text = strtr( $text, [
'“' =>
'«',
'”' =>
'»', ] );
275 foreach ( $this->mCyrlCleanUpRegexes as $pat => $rep ) {
276 $text = preg_replace( $pat, $rep, $text );
This document describes the state of Postgres support in and is fairly well maintained The main code is very well while extensions are very hit and miss it is probably the most supported database after MySQL Much of the work in making MediaWiki database agnostic came about through the work of creating Postgres as and are nearing end of but without copying over all the usage comments General notes on the but these can almost always be programmed around *Although Postgres has a true BOOLEAN type