Qullanıcı:Don Alessandro/Translit/LanguageCrh.php
Körüniş
/*
*/
<?php
/** Crimean Tatar (Qırımtatarca)
* converter routines
*
* @addtogroup Language
*/
require_once( dirname(__FILE__).'/../LanguageConverter.php' );
require_once( dirname(__FILE__).'/LanguageCrh_crh.php' );
// Defines working character ranges
define( 'WORD_BEGINS', '\r\s\"\'\(\)\-<>\[\]\/.,:;!?' ); #
define( 'WORD_ENDS', '\r\s\"\'\(\)\-<>\[\]\/.,:;!?' ); #
// Cyrillic
define( 'CRH_C_UC', 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' ); # Crimean Tatar Cyrillic uppercase
define( 'CRH_C_LC', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' ); # Crimean Tatar Cyrillic lowercase
define( 'CRH_C_CONS_UC', 'БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ' ); # Crimean Tatar Cyrillic + CÑ uppercase consonants
define( 'CRH_C_CONS_LC', 'бвгджзйклмнпрстфхцчшщcñ' ); # Crimean Tatar Cyrillic + CÑ lowercase consonants
define( 'CRH_C_CONS', 'бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ' ); # Crimean Tatar Cyrillic + CÑ consonants
define( 'CRH_C_M_CONS', 'бгкмпшcБГКМПШC' ); # Crimean Tatar Cyrillic M-type consonants
// Latin
define( 'CRH_L_UC', 'AÂBCÇDEFGĞHIİJKLMNÑOÖPQRSŞTUÜVXYZ' ); # Crimean Tatar Latin uppercase
define( 'CRH_L_LC', 'aâbcçdefgğhıijklmnñoöpqrsştuüvxyz' ); # Crimean Tatar Latin lowercase
define( 'CRH_L_N_CONS_UC', 'ÇNRSTZ' ); # Crimean Tatar Latin N-type upper case consonants
define( 'CRH_L_N_CONS_LC', 'çnrstz' ); # Crimean Tatar Latin N-type lower case consonants
define( 'CRH_L_N_CONS', 'çnrstzÇNRSTZ' ); # Crimean Tatar Latin N-type consonants
define( 'CRH_L_M_CONS', 'bcgkmpşBCGKMPŞ' ); # Crimean Tatar Latin M-type consonants
define( 'CRH_L_CONS_UC', 'BCÇDFGHJKLMNÑPRSŞTVZ' ); # Crimean Tatar Latin uppercase consonants
define( 'CRH_L_CONS_LC', 'bcçdfghjklmnñprsştvz' ); # Crimean Tatar Latin lowercase consonants
define( 'CRH_L_CONS', 'bcçdfghjklmnñprsştvzBCÇDFGHJKLMNÑPRSŞTVZ' ); # Crimean Tatar Latin consonants
define( 'CRH_L_VOW_UC', 'AÂEIİOÖUÜ' ); # Crimean Tatar Latin uppercase vowels
define( 'CRH_L_VOW', 'aâeıioöuüAÂEIİOÖUÜ' ); # Crimean Tatar Latin vowels
define( 'CRH_L_F_UC', 'EİÖÜ' ); # Crimean Tatar Latin uppercase front vowels
define( 'CRH_L_F', 'eiöüEİÖÜ' ); # Crimean Tatar Latin front vowels
class CrhConverter extends LanguageConverter {
function __construct($langobj, $maincode,
$variants=array(),
$variantfallbacks=array(),
$markup=array(),
$flags = array()) {
parent::__construct( $langobj, $maincode,
$variants, $variantfallbacks, $markup, $flags );
// No point delaying this since they're in code.
// Waiting until loadDefaultTables() means they never get loaded
// when the tables themselves are loaded from cache.
$this->loadRegs();
}
function loadDefaultTables() {
require( dirname(__FILE__)."/../../includes/CrhConversion.php" );
$crh2Cyrl = array();
$crh2Latn = array();
$this->mTables = array(
'crh-latn' => new ReplacementArray( $crh2Latn ),
'crh-cyrl' => new ReplacementArray( $crh2Cyrl ),
'crh' => new ReplacementArray()
);
}
function loadRegs() {
$this->mCyrl2Latn = array
(
############################
# относятся ко всему слову #
############################
'^КъЮШ$' => 'QYŞ',
'^ЮШ$' => 'YŞ',
'^кою$' => 'köyü',
'^Кою$' => 'Köyü',
'^КОЮ$' => 'KÖYÜ',
'^кок$' => 'kök',
'^Кок$' => 'Kök',
'^КОК$' => 'KÖK',
'^ком-кок$' => 'köm-kök',
'^Ком-кок$' => 'Köm-kök',
'^КОМ-КОК$' => 'KÖM-KÖK',
'^коп$' => 'köp',
'^Коп$' => 'Köp',
'^КОП$' => 'KÖP',
'^ог$' => 'ög',
'^Ог$' => 'Ög',
'^ОГ$' => 'ÖG',
'^юрип$' => 'yürip',
'^Юрип$' => 'Yürip',
'^ЮРИП$' => 'YÜRİP',
'^юз$' => 'yüz',
'^Юз$' => 'Yüz',
'^ЮЗ$' => 'YÜZ',
'^юк$' => 'yük',
'^Юк$' => 'Yük',
'^ЮК$' => 'YÜK',
'^буюп$' => 'büyüp',
'^Буюп$' => 'Büyüp',
'^БУЮП$' => 'BÜYÜP',
'^буюк$' => 'büyük',
'^Буюк$' => 'Büyük',
'^БУЮК$' => 'BÜYÜK',
'^джонк$' => 'cönk',
'^Джонк$' => 'Cönk',
'^ДЖОНК$' => 'CÖNK',
'^джонкю$' => 'cönkü',
'^Джонкю$' => 'Cönkü',
'^ДЖОНКЮ$' => 'CÖNKÜ',
'^устке$' => 'üstke',
'^Устке$' => 'Üstke',
'^УСТКЕ$' => 'ÜSTKE',
'^устте$' => 'üstte',
'^Устте$' => 'Üstte',
'^УСТТЕ$' => 'ÜSTTE',
'^усттен$' => 'üstten',
'^Усттен$' => 'Üstten',
'^УСТТЕН$' => 'ÜSTTEN',
'^([34])(\-)юнджи$' => '$1$2ünci',
'^([34])(\-)ЮНДЖИ$' => '$1$2ÜNCİ',
## отдельно стоящие Ё и Я
'^Я$' => '$1Ya$2',
'^Ё$' => '$1Yo$2',
###########################
# относятся к концу слова #
###########################
'кой$' => 'köy',
'Кой$' => 'Köy',
'КОЙ$' => 'KÖY',
'койнинъ$' => 'köyniñ',
'Койнинъ$' => 'Köyniñ',
'КОЙНИНЪ$' => 'KÖYNİÑ',
'койни$' => 'köyni',
'Койни$' => 'Köyni',
'КОЙНИ$' => 'KÖYNİ',
'койге$' => 'köyge',
'Койге$' => 'Köyge',
'КОЙГЕ$' => 'KÖYGE',
'койде$' => 'köyde',
'Койде$' => 'Köyde',
'КОЙДЕ$' => 'KÖYDE',
'койдеки$' => 'köydeki',
'Койдеки$' => 'Köydeki',
'КОЙДЕКИ$' => 'KÖYDEKİ',
'койден$' => 'köyden',
'Койден$' => 'Köyden',
'КОЙДЕН$' => 'KÖYDEN',
'козь$' => 'köz',
'Козь$' => 'Köz',
'КОЗЬ$' => 'KÖZ',
############################
# относятся к началу слова #
############################
'^КъЮШн' => 'QYŞn',
'^ЮШн' => 'YŞn',
'^буюк([^ъ])' => 'büyük$1',
'^Буюк([^ъ])' => 'Büyük$1',
'^БУЮК([^Ъ])' => 'BÜYÜK$1',
'^бую([гдйлмнпрстчшc])(и)' => 'büyü$1$2',
'^Бую([гдйлмнпрстчшc])(и)' => 'Büyü$1$2',
'^БУЮ([ГДЙЛМНПРСТЧШС])(И)' => 'BÜYÜ$1$2',
'^буют([^ыа])' => 'büyüt$1',
'^Буют([^ыа])' => 'Büyüt$1',
'^БУЮТ([^ЫА])' => 'BÜYÜT$1',
'^джонк([^ъ])' => 'cönk$1',
'^Джонк([^ъ])' => 'Cönk$1',
'^ДЖОНК([^Ъ])' => 'CÖNK$1',
'^коюм' => 'köyüm',
'^Коюм' => 'Köyüm',
'^КОЮМ' => 'KÖYÜM',
'^коюнъ' => 'köyüñ',
'^Коюнъ' => 'Köyüñ',
'^КОЮНЪ' => 'KÖYÜÑ',
'^коюн([ди])' => 'köyün$1',
'^Коюн([ди])' => 'Köyün$1',
'^КОЮН([ДИ])' => 'KÖYÜN$1',
'^куе' => 'küye',
'^Куе' => 'Küye',
'^КУЕ' => 'KÜYE',
'^куркке' => 'kürkke',
'^Куркке' => 'Kürkke',
'^КУРККЕ' => 'KÜRKKE',
'^куркни' => 'kürkni',
'^Куркни' => 'Kürkni',
'^КУРКНИ' => 'KÜRKNİ',
'^куркте' => 'kürkte',
'^Куркте' => 'Kürkte',
'^КУРКТЕ' => 'KÜRKTE',
'^куркчи' => 'kürkçi',
'^Куркчи' => 'Kürkçi',
'^КУРКЧИ' => 'KÜRKÇİ',
'^куркчю' => 'kürkçü',
'^Куркчю' => 'Kürkçü',
'^КУРКЧЮ' => 'KÜRKÇÜ',
## этот кусок хоть и не зависит от места в слове, но должен идти в начале, иначе нельзя
'гъ' => 'ğ',
'Г[ъЪ]' => 'Ğ',
'къ' => 'q',
'К[ъЪ]' => 'Q',
'нъ' => 'ñ',
'Н[ъЪ]' => 'Ñ',
'дж' => 'c',
'Д[жЖ]' => 'C',
## о => ö
'^(['.CRH_C_M_CONS.'])о(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьü])' => '$1ö$2$3$4',
'^о(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьü])' => 'ö$1$2$3',
'^(['.CRH_C_M_CONS.'])О(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => '$1Ö$2$3$4',
'^О(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => 'Ö$1$2$3',
'^(['.CRH_C_M_CONS.'])о(['.CRH_C_CONS.'])([еиэюьü])' => '$1ö$2$3',
'^о(['.CRH_C_CONS.'])([еиэюьü])' => 'ö$1$2',
'^(['.CRH_C_M_CONS.'])О(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => '$1Ö$2$3',
'^О(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => 'Ö$1$2',
## ё => yö
'^ё(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([ьеюü])' => 'yö$1$2$3',
'^Ё(['.CRH_C_CONS_LC.'])(['.CRH_C_CONS_LC.'])([ьеюü])' => 'Yö$1$2$3',
'^Ё(['.CRH_C_CONS_UC.'])(['.CRH_C_CONS_UC.'])([ЬЕЮÜ])' => 'YÖ$1$2$3',
'^ё(['.CRH_C_CONS.'])([ьеюü])' => 'yö$1$2',
'^Ё(['.CRH_C_CONS_LC.'])([ьеюü])' => 'Yö$1$2',
'^Ё(['.CRH_C_CONS_UC.'])([ЬЕЮÜ])' => 'YÖ$1$2',
## у => ü, ую => üyü
'^(['.CRH_C_M_CONS.'])у(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьü])' => '$1ü$2$3$4',
'^у(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьü])' => 'ü$1$2$3',
'^ую(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьü])' => 'üyü$1$2$3',
'^(['.CRH_C_M_CONS.'])У(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => '$1Ü$2$3$4',
'^У(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => 'Ü$1$2$3',
'^Ую(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьü])' => 'Üyü$1$2$2',
'^УЮ(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([еиэюьü])' => 'ÜYÜ$1$2$3',
'^(['.CRH_C_M_CONS.'])у(['.CRH_C_CONS.'])([еиэюьü])' => '$1ü$2$3',
'^у(['.CRH_C_CONS.'])([еиэюьü])' => 'ü$1$2',
'^ую(['.CRH_C_CONS.'])([еиэюьü])' => 'üyü$1$2',
'^(['.CRH_C_M_CONS.'])У(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => '$1Ü$2$3',
'^У(['.CRH_C_CONS.'])([еиэюьüЕИЭЮЬÜ])' => 'Ü$1$2',
'^Ую(['.CRH_C_CONS.'])([еиэюьü])' => 'Üyü$1$2',
'^УЮ(['.CRH_C_CONS.'])([еиэюьü])' => 'ÜYÜ$1$2',
# ю => yü
'^([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.CRH_C_CONS.'])(['.CRH_C_CONS.'])([ьеюü])' => '$1yü$2$3$4',
'^([АЫОУЕИЁЮ]?)Ю(['.CRH_C_CONS_LC.'])(['.CRH_C_CONS_LC.'])([ьеюü])' => '$1Yü$2$3$4',
'^([АЫОУЕИЁЮ]?)Ю(['.CRH_C_CONS_UC.'])(['.CRH_C_CONS_UC.'])([ЬЕЮÜ])' => '$1YÜ$2$3$4',
'^([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.CRH_C_CONS.'])([ьеюü])' => '$1yü$2$3',
'^([АЫОУЕИЁЮ]?)Ю(['.CRH_C_CONS_LC.'])([ьеюü])' => '$1Yü$2$3',
'^([АЫОУЕИЁЮ]?)Ю(['.CRH_C_CONS_UC.'])([ЬЕЮÜ])' => '$1YÜ$2$3',
## арабизмы на муи- муэ-
'^му([иэИЭ])' => 'mü$1',
'^Му([иэИЭ])' => 'Mü$1',
'^МУ([ИЭ])' => 'MÜ$1',
## e => ye, я => ya
'^е' => 'ye',
'^Е(['.CRH_C_LC.'cğñqöü])' => 'Ye$1',
'^Е(['.CRH_C_UC.'CĞÑQÖÜ])' => 'YE$1',
'^я' => 'ya',
'^Я(['.CRH_C_LC.'cğñqöü])' => 'Ya$1',
'^Я(['.CRH_C_UC.'CĞÑQÖÜ])' => 'YA$1',
'([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])е' => '$1ye',
'([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.CRH_C_LC.'cğñqöü])' => '$1Ye$2',
'([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.CRH_C_UC.'CĞÑQÖÜ])' => '$1YE$2',
'([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])я' => '$1ya',
'([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.CRH_C_LC.'cğñqöü])' => '$1Ya$2',
'([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.CRH_C_UC.'CĞÑQÖÜ])' => '$1YA$2',
###############################
# не зависят от места в слове #
###############################
## слова на -льон
'льон' => 'lyon',
'ЛЬОН' => 'LYON',
'козь([^я])' => 'köz$1',
'Козь([^я])' => 'Köz$1',
'КОЗЬ([^Я])' => 'KÖZ$1',
## номер
# '№' => 'No.',
## Ö, Ü 1-й заход: ё, ю после согласных > ö, ü
'(['.CRH_C_CONS.'])ю' => '$1ü',
'(['.CRH_C_CONS.'])Ю' => '$1Ü',
'(['.CRH_C_CONS.'])ё' => '$1ö',
'(['.CRH_C_CONS.'])Ё' => '$1Ö',
## буквы Е и Я
## остальные вхождения e и я
'Е' => 'E', 'е' => 'e',
'Я' => 'Â', 'я' => 'â',
## остальные вхождения о, у, ё, ю
'Ё(['.CRH_C_UC.'CĞÑQÖÜ])' => 'YO$2',
'Ё' => 'Yo', 'ё' => 'yo',
'Ю(['.CRH_C_UC.'CĞÑQÖÜ])' => 'YU$2',
'Ю' => 'Yu', 'ю' => 'yu',
'У' => 'U', 'у' => 'u',
'О' => 'O', 'о' => 'o',
## убираем Ь и Ъ
'Ь' => '', 'ь' => '',
'Ъ' => '', 'ъ' => '',
## буквы Ц и Щ
'Ц(['.CRH_C_UC.'CĞÑQÖÜ])' => 'TS$2',
'Ц' => 'Ts', 'ц' => 'ts',
'Щ(['.CRH_C_UC.'CĞÑQÖÜ])' => 'ŞÇ$2',
'Щ' => 'Şç', 'щ' => 'şç',
## все остальные буквы
'all_other_letters' => TRUE,
);
$all_other_letters_cyr2lat = array(
'А' => 'A', 'а' => 'a',
'Б' => 'B', 'б' => 'b',
'В' => 'V', 'в' => 'v',
'Г' => 'G', 'г' => 'g',
'Д' => 'D', 'д' => 'd',
'Ж' => 'J', 'ж' => 'j',
'З' => 'Z', 'з' => 'z',
'И' => 'İ', 'и' => 'i',
'Й' => 'Y', 'й' => 'y',
'К' => 'K', 'к' => 'k',
'Л' => 'L', 'л' => 'l',
'М' => 'M', 'м' => 'm',
'Н' => 'N', 'н' => 'n',
'П' => 'P', 'п' => 'p',
'Р' => 'R', 'р' => 'r',
'С' => 'S', 'с' => 's',
'Т' => 'T', 'т' => 't',
'Ф' => 'F', 'ф' => 'f',
'Х' => 'H', 'х' => 'h',
'Ч' => 'Ç', 'ч' => 'ç',
'Ш' => 'Ş', 'ш' => 'ş',
'Ы' => 'I', 'ы' => 'ı',
'Э' => 'E', 'э' => 'e',
);
$this->mLatn2Cyrl = array(
#
# относятся ко всему слову
#
'/^an$/u' => 'ань',
'/^An$/u' => 'Ань',
'/^AN$/u' => 'АНЬ',
'/^ange$/u' => 'аньге',
'/^Ange$/u' => 'Аньге',
'/^ANGE$/u' => 'АНЬГЕ',
'/^ande$/u' => 'аньде',
'/^Ande$/u' => 'Аньде',
'/^ANDE$/u' => 'АНЬДЕ',
'/^anki$/u' => 'аньки',
'/^Anki$/u' => 'Аньки',
'/^ANKİ$/u' => 'АНЬКИ',
'/^deral$/u' => 'деръал',
'/^Deral$/u' => 'Деръал',
'/^DERAL$/u' => 'ДЕРЪАЛ',
'/^kör$/u' => 'кёр',
'/^Kör$/u' => 'Кёр',
'/^KÖR$/u' => 'КЁР',
'/^mer$/u' => 'мэр',
'/^Mer$/u' => 'Мэр',
'/^MER$/u' => 'МЭР',
## буква Ё - первый заход
## расставляем Ь после согласных
'/^([yY])ö(['.CRH_L_N_CONS.'])(?([aAuU'.CRH_L_CONS.'])|$)/u' => '$1ö$2ь$3',
'/^([yY])Ö(['.CRH_L_N_CONS.'])(?([aAuU'.CRH_L_CONS.'])|$)/u' => '$1Ö$2Ь$3',
'/^AQŞ(['.WORD_ENDS.'ngd])/u' => 'АКъШ$1',
## буква Ю - первый заход
## расставляем Ь после согласных
'/^([yY])ü(['.CRH_L_N_CONS.'])(?([aAuU'.CRH_L_CONS.'])|$)/u' => '$1ü$2ь$3',
'/^([yY])Ü(['.CRH_L_N_CONS.'])(?([aAuU'.CRH_L_CONS.'])|$)/u' => '$1Ü$2Ь$3',
'/^([bcgkpşBCGKPŞ])ö(['.CRH_L_N_CONS.'])(?(['.CRH_L_CONS.'])|$)/u' => '$1ö$2ь$3',
'/^([bcgkpşBCGKPŞ])Ö(['.CRH_L_N_CONS.'])(?(['.CRH_L_CONS.'])|$)/u' => '$1Ö$2Ь$3',
'/^([bcgkpşBCGKPŞ])Ö(['.CRH_L_N_CONS.'])(?(['.CRH_L_CONS.'])|$)/u' => '$1Ö$2Ь$3',
'/^([bcgkpşBCGKPŞ])ü(['.CRH_L_N_CONS.'])(?(['.CRH_L_CONS.'])|$)/u' => '$1ü$2ь$3',
'/^([bcgkpşBCGKPŞ])Ü(['.CRH_L_N_CONS.'])(?(['.CRH_L_CONS.'])|$)/u' => '$1Ü$2Ь$3',
'/^([bcgkpşBCGKPŞ])Ü(['.CRH_L_N_CONS.'])(?(['.CRH_L_CONS.'])|$)/u' => '$1Ü$2Ь$3',
## ö и ü в начале слова
## случаи, когда нужен Ь
'/^ö(['.CRH_L_N_CONS.'pP])(?(['.CRH_L_CONS.'])|$)/u' => 'ö$1ь$2',
'/^Ö(['.CRH_L_N_CONS_LC.'p])(?(['.CRH_L_CONS.'])|$)/u' => 'Ö$1ь$2',
'/^Ö(['.CRH_L_N_CONS_UC.'P])(?(['.CRH_L_CONS.'])|$)/u' => 'Ö$1Ь$2',
'/^ü(['.CRH_L_N_CONS.'])(?(['.CRH_L_CONS.'])|$)/u' => 'ü$1ь$2',
'/^Ü(['.CRH_L_N_CONS_LC.'])(?(['.CRH_L_CONS.'])|$)/u' => 'Ü$1ь$2',
'/^Ü(['.CRH_L_N_CONS_UC.'])(?(['.CRH_L_CONS.'])|$)/u' => 'Ü$1Ь$2',
## повел. накл. на -етсин
'/^etsin$/u' => 'этсин',
'/^Etsin$/u' => 'Этсин',
'/^ETSİN$/u' => 'ЭТСИН',
#
# относятся к концу слова
#
'/ts$/u' => 'ц',
'/şç$/u' => 'щ',
'/Ş[çÇ]$/u' => 'Щ',
'/T[sS]$/u' => 'Ц',
## Ь после Л
'/(['.CRH_L_F.'])l(?(['.CRH_L_CONS_LC.'])|$)/u' => '$1ль$2',
'/(['.CRH_L_F_UC.'])L(?(['.CRH_L_CONS.'])|$)/u' => '$1ЛЬ$2',
'/etsin$/u' => 'етсин',
'/ETSİN$/u' => 'ЕТСИН',
#
# относятся к началу слова
#
'/^ital/u' => 'итъаль',
'/^İtal/u' => 'Итъаль',
'/^İTAL/u' => 'ИТЪАЛЬ',
'/^rol([^ü])/u' => 'роль$1',
'/^Rol([^ü])/u' => 'Роль$1',
'/^ROL([^Ü])/u' => 'РОЛЬ$1',
'/^ts/u' => 'ц',
'/^T[sS]/u' => 'Ц',
'/^şç/u' => 'щ',
'/^Ş[çÇ]/u' => 'Щ',
## Э
'/(?(^)|['.CRH_L_VOW.'аеэяАЕЭЯ])e/u' => '$1э',
'/(?(^)|['.CRH_L_VOW_UC.'АЕЭЯ])E/u' => '$1Э',
## усть
'/^üst([knt])/u' => 'усть$1',
'/^Üst([knt])/u' => 'Усть$1',
'/^ÜST([KNT])/u' => 'УСТЬ$1',
'/^(['.CRH_L_M_CONS.'])ö/u' => '$1о',
'/^(['.CRH_L_M_CONS.'])Ö/u' => '$1О',
'/^(['.CRH_L_M_CONS.'])ü/u' => '$1у',
'/^(['.CRH_L_M_CONS.'])Ü/u' => '$1У',
'/^ö/u' => 'о',
'/^Ö/u' => 'О',
'/^ü/u' => 'у',
'/^Ü/u' => 'У',
#
# не зависят от места в слове
#
# некоторые исключения
'/maal([^e])/u' => 'мааль$1',
'/Maal([^e])/u' => 'Мааль$1',
'/MAAL([^E])/u' => 'МААЛЬ$1',
'/küf([^eü])/u' => 'куфь$1',
'/Küf([^eü])/u' => 'Куфь$1',
'/KÜF([^EÜ])/u' => 'КУФЬ$1',
'/köz([^eü])/u' => 'козь$1',
'/Köz([^eü])/u' => 'Козь$1',
'/KÖZ([^EÜ])/u' => 'КОЗЬ$1',
## Punctuation
'/#|No\./' => '№',
## некоторые случаи употребления Ц
'/tsi([^zñ])/u' => 'ци$1',
'/T[sS][iİ]([^zZñÑ])/u' => 'ЦИ$1',
'/ts([ou])/u' => 'ц$1',
'/T[sS]([oOuU])/u' => 'Ц$1',
'/ts(['.CRH_L_CONS.'])/u' => 'ц$1',
'/T[sS](['.CRH_L_CONS.'])/u' => 'Ц$1',
'/(['.CRH_L_CONS.'])ts/u' => '$1ц',
'/(['.CRH_L_CONS.'])T[sS]/u' => '$1Ц',
'/tsиал/u' => 'циал',
'/TSИАЛ/u' => 'ЦИАЛ',
## слова на -льон
'/lyon/u' => 'льон',
'/LYON/u' => 'ЛЬОН',
## убираем ьi
'/ьi/u' => 'i',
'/Ьi/u' => 'i',
'/Ьİ/u' => 'İ',
## буквы гъ, къ, нъ
'/ğ/u' => 'гъ',
'/Ğ(['.CRH_L_LC.'])/u' => 'Гъ$1',
'/Ğ(['.CRH_L_UC.'])/u' => 'ГЪ$1',
'/Ğ(['.CRH_L_UC.'Ъ])/u' => 'ГЪ$1',
'/q/u' => 'къ',
'/Q(['.CRH_L_LC.'])/u' => 'Къ$1',
'/Q(['.CRH_L_UC.'])/u' => 'КЪ$1',
'/Q(['.CRH_L_UC.'Ъ])/u' => 'КЪ$1',
'/ñ/u' => 'нъ',
'/Ñ(['.CRH_L_LC.'])/u' => 'Нъ$1',
'/Ñ(['.CRH_L_UC.'])/u' => 'НЪ$1',
'/Ñ(['.CRH_L_UC.'Ъ])/u' => 'НЪ$1',
## ya и ye
'/(['.CRH_L_CONS.'])ya/u' => '$1ья',
'/(['.CRH_L_CONS.'])Y[aA]/u' => '$1ЬЯ',
'/ya/u' => 'я',
'/Y[aA]/u' => 'Я',
'/(['.CRH_L_CONS.'])ye/u' => '$1ье',
'/(['.CRH_L_CONS.'])Y[eE]/u' => '$1ЬЕ',
'/ye/u' => 'е',
'/Y[eE]/u' => 'Е',
## расставляем Ь перед Ё
'/(['.CRH_L_CONS.'])y[oö]/u' => '$1ьё',
'/(['.CRH_L_CONS.'])Y[oOöÖ]/u' => '$1ЬЁ',
## оставшиеся вхождения yo и yö
'/y[oö]/u' => 'ё',
'/Y[oOöÖ]/u' => 'Ё',
'/[yY][oOöÖ]/u' => 'Ё',
## расставляем Ь перед Ю
'/(['.CRH_L_CONS.'])y[uü]/u' => '$1ью',
'/(['.CRH_L_CONS.'])Y[uUüÜ]/u' => '$1ЬЮ',
## оставшиеся вхождения yu и yü
'/y[uü]/u' => 'ю',
'/Y[uUüÜ]/u' => 'Ю',
'/[yY][uUüÜ]/u' => 'Ю',
## убираем ьa
'/ьa/u' => 'a',
'/Ьa/u' => 'a',
'/ЬA/u' => 'A',
## все оставшиеся вхождения a, e, o, ö, ü, u, y
'/A/u' => 'А', '/a/u' => 'а',
'/E/u' => 'Е', '/e/u' => 'е',
'/O/u' => 'О', '/o/u' => 'о',
'/Ö/u' => 'Ё', '/ö/u' => 'ё',
'/U/u' => 'У', '/u/u' => 'у',
'/Ü/u' => 'Ю', '/ü/u' => 'ю',
'/Y/u' => 'Й', '/y/u' => 'й',
## буква дж
'/c/u' => 'дж',
'/C(['.CRH_L_LC.CRH_C_LC.'])/u' => 'Дж$1',
'/C(['.CRH_L_UC.CRH_C_UC.'])/u' => 'ДЖ$1',
'/C(['.CRH_L_UC.CRH_C_UC.'Ъ])/u' => 'ДЖ$1',
## все остальные буквы
'/Â/u' => 'Я', '/â/u' => 'я',
'/B/u' => 'Б', '/b/u' => 'б',
'/Ç/u' => 'Ч', '/ç/u' => 'ч',
'/D/u' => 'Д', '/d/u' => 'д',
'/F/u' => 'Ф', '/f/u' => 'ф',
'/G/u' => 'Г', '/g/u' => 'г',
'/H/u' => 'Х', '/h/u' => 'х',
'/I/u' => 'Ы', '/ı/u' => 'ы',
'/İ/u' => 'И', '/i/u' => 'и',
'/J/u' => 'Ж', '/j/u' => 'ж',
'/K/u' => 'К', '/k/u' => 'к',
'/L/u' => 'Л', '/l/u' => 'л',
'/M/u' => 'М', '/m/u' => 'м',
'/N/u' => 'Н', '/n/u' => 'н',
'/O/u' => 'О', '/o/u' => 'о',
'/P/u' => 'П', '/p/u' => 'п',
'/R/u' => 'Р', '/r/u' => 'р',
'/S/u' => 'С', '/s/u' => 'с',
'/Ş/u' => 'Ш', '/ş/u' => 'ш',
'/T/u' => 'Т', '/t/u' => 'т',
'/V/u' => 'В', '/v/u' => 'в',
'/Z/u' => 'З', '/z/u' => 'з',
## убираем кьк, льл, ньн, рьр, сьс, тьт
'/кьк/u' => 'кк',
'/К[ьЬ]к/u' => 'Кк',
'/КЬК/u' => 'КК',
'/льл/u' => 'лл',
'/Л[ьЬ]л/u' => 'Лл',
'/ЛЬЛ/u' => 'ЛЛ',
'/ньн/u' => 'нн',
'/Н[ьЬ]н/u' => 'Нн',
'/НЬН/u' => 'НН',
'/рьр/u' => 'рр',
'/Р[ьЬ]р/u' => 'Рр',
'/РЬР/u' => 'РР',
'/сьс/u' => 'сс',
'/С[ьЬ]с/u' => 'Сс',
'/СЬС/u' => 'СС',
'/тьт/u' => 'тт',
'/Т[ьЬ]т/u' => 'Тт',
'/ТЬТ/u' => 'ТТ',
## убираем ьы и ь..ы
'/[ьЬ]ы/u' => 'ы',
'/ЬЫ/u' => 'Ы',
'/[ьЬ]([гдклмнпрстчшГДКЛМНПРСТЧШ])ы/u' => '$1ы',
'/Ь([гдклмнпрстчшГДКЛМНПРСТЧШ])Ы/u' => '$1Ы',
'/[ьЬ]([гкнГКН])([ъЪ])ы/u' => '$1$2ы',
'/Ь([ГКН])ЪЫ/u' => '$1ЪЫ',
## убираем йь
'/йь/u' => 'й',
'/ЙЬ/u' => 'Й',
## частичное решение проблемы слова юз - 100
'/эки юзь/u' => 'эки юз', '/Эки юзь/u' => 'Эки юз', '/ЭКИ ЮЗЬ/u' => 'ЭКИ ЮЗ',
'/учь юзь/u' => 'учь юз', '/Учь юзь/u' => 'Учь юз', '/УЧЬ ЮЗЬ/u' => 'УЧЬ ЮЗ',
'/дёрт юзь/u' => 'дёрт юз', '/Дёрт юзь/u' => 'Дёрт юз', '/ДЁРТ ЮЗЬ/u' => 'ДЁРТ ЮЗ',
'/беш юзь/u' => 'беш юз', '/Беш юзь/u' => 'Беш юз', '/БЕШ ЮЗЬ/u' => 'БЕШ ЮЗ',
'/алты юзь/u' => 'алты юз', '/Алты юзь/u' => 'Алты юз', '/АЛТЫ ЮЗЬ/u' => 'АЛТЫ ЮЗ',
'/еди юзь/u' => 'еди юз', '/Еди юзь/u' => 'Еди юз', '/ЕДИ ЮЗЬ/u' => 'ЕДИ ЮЗ',
'/секиз юзь/u' => 'секиз юз', '/Секиз юзь/u' => 'Секиз юз', '/СЕКИЗ ЮЗЬ/u' => 'СЕКИЗ ЮЗ',
'/докъуз юзь/u' => 'докъуз юз', '/Докъуз юзь/u' => 'Докъуз юз', '/ДОКЪУЗ ЮЗЬ/u' => 'ДОКЪУЗ ЮЗ',
);
}
/* rules should be defined as -{ekavian | iyekavian-} -or-
-{code:text | code:text | ...}-
update: delete all rule parsing because it's not used
currently, and just produces a couple of bugs
*/
function parseManualRule($rule, $flags=array()) {
if(in_array('T',$flags)){
return parent::parseManualRule($rule, $flags);
}
// otherwise ignore all formatting
foreach($this->mVariants as $v) {
$carray[$v] = $rule;
}
return $carray;
}
// Do not convert content on talk pages
function parserConvert( $text, &$parser ){
if(is_object($parser->getTitle() ) && $parser->getTitle()->isTalkPage())
$this->mDoContentConvert=false;
else
$this->mDoContentConvert=true;
return parent::parserConvert($text, $parser );
}
/*
* A function wrapper:
* - if there is no selected variant, leave the link
* names as they were
* - do not try to find variants for usernames
*/
function findVariantLink( &$link, &$nt ) {
// check for user namespace
if(is_object($nt)){
$ns = $nt->getNamespace();
if($ns==NS_USER || $ns==NS_USER_TALK)
return;
}
$oldlink=$link;
parent::findVariantLink($link,$nt);
if($this->getPreferredVariant()==$this->mMainLanguageCode)
$link=$oldlink;
}
/*
* An ugly function wrapper for parsing Image titles
* (to prevent image name conversion)
*/
function autoConvert($text, $toVariant=false) {
global $wgTitle;
if(is_object($wgTitle) && $wgTitle->getNameSpace()==NS_IMAGE){
$imagename = $wgTitle->getNsText();
if(preg_match("/^$imagename:/",$text)) return $text;
}
return parent::autoConvert($text,$toVariant);
}
/**
* It translates text into variant
*/
function translate( $text, $toVariant ){
global $wgContLanguageCode;
$text = parent::translate( $text, $toVariant );
$letters = '';
switch( $toVariant ) {
case 'crh-cyrl':
$letters = CRH_L_UC . CRH_L_LC . "\'";
$wgContLanguageCode = 'crh-Cyrl';
break;
case 'crh-latn':
$letters = CRH_C_UC . CRH_C_LC;
$wgContLanguageCode = 'crh-Latn';
break;
default:
$wgContLanguageCode = 'crh';
return $text;
}
// disable conversion of roman numbers like VII, XIX...
$breaks = '[^'.WORD_BEGINS.']' /*'[^\w\x80-\xff]'*/;
$roman = 'M{0,3}(C[DM]|D{0,1}C{0,3})(X[LC]|L{0,1}X{0,3})(I[VX]|V{0,1}I{0,3})';
$romanfix = '^'.$roman.'$|^'.$roman.$breaks.'|'.$breaks.$roman.'$|'.$breaks.$roman.$breaks;
// disable conversion of variables like $1, $2...
$varsfix = '\$[0-9][0-9]';
$reg = '/' . $romanfix . $varsfix . '[^' . $letters . ']+/u';
$matches = preg_split( $reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
$mstart = 0;
$ret = '';
foreach( $matches as $m ) {
$ret .= substr( $text, $mstart, $m[1]-$mstart );
$ret .= $this->regsConverter( $m[0], $toVariant );
$mstart = $m[1] + strlen($m[0]);
}
return $ret;
}
function regsConverter( $text, $toVariant ) {
if ($text == '') return $text;
$pat = array();
$rep = array();
switch( $toVariant ) {
case 'crh-latn':
foreach( $this->mCyrl2Latn as $pat => $rep ) {
$text = preg_replace( $pat, $rep, $text );
}
return $text;
break;
case 'crh-cyrl':
foreach( $this->mLatn2Cyrl as $pat => $rep ) {
$text = preg_replace( $pat, $rep, $text );
}
return $text;
break;
default:
return $text;
}
}
/*
* We want our external link captions to be converted in variants,
* so we return the original text instead -{$text}-, except for URLs
*/
function markNoConversion( $text, $noParse=false ) {
if( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
return parent::markNoConversion( $text );
return $text;
}
function convertCategoryKey( $key ) {
return $this->autoConvert( $key, 'crh' );
}
}
/* class that handles Cyrillic and Latin scripts for Crimean Tatarish
right now it only distinguish crh_cyrl, crh_latn.
*/
class LanguageCrh extends LanguageCrh_crh {
function __construct() {
global $wgHooks;
parent::__construct();
$variants = array( 'crh', 'crh-latn', 'crh-cyrl' );
$variantfallbacks = array(
'crh' => 'crh-latn',
'crh-latn' => 'crh',
'crh-cyrl' => 'crh',
);
$this->mConverter = new CrhConverter( $this, 'crh', $variants, $variantfallbacks );
$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
}
/*
* It fixes issue with ucfirst for transforming 'i' to 'İ'
*
*/
function ucfirst ( $string ) {
$variant = $this->getPreferredVariant();
if ( $variant == 'crh-latn' && $string[0] == 'i' ) {
$string = 'İ' . substr( $string, 1 );
} else {
$string = parent::ucfirst( $string );
}
return $string;
}
/*
* It fixes issue with lcfirst for transforming 'I' to 'ı'
*
*/
function lcfirst ( $string ) {
$variant = $this->getPreferredVariant();
if ( $variant == 'crh-latn' && $string[0] == 'I' ) {
$string = 'ı' . substr( $string, 1 );
} else {
$string = parent::lcfirst( $string );
}
return $string;
}
# Convert from the nominative form of a noun to some other case
# Invoked with {{GRAMMAR:case|word}}
function convertGrammar( $word, $case ) {
wfProfileIn( __METHOD__ );
$variant = $this->getPreferredVariant();
switch ( $variant ) {
case 'crh-cyrl':
$word = parent::convertGrammarCrh_cyrl( $word, $case );
break;
case 'crh-latn':
case 'crh':
default:
$word = parent::convertGrammarCrh_latn( $word, $case );
}
wfProfileOut( __METHOD__ );
return $word;
}
}
/*
*/