Къошулуучу:Ernác/Translit/LanguageKrc.php
/*
*/
<?php
/** Karachay-Balkar (Qaraçay-Malqarça)
* converter routines
*
* @addtogroup Language
*/
require_once( dirname(__FILE__).'/../LanguageConverter.php' );
require_once( dirname(__FILE__).'/LanguageKrc_krc.php' );
// Defines working character ranges
define( 'WORD_BEGINS', '\r\s\"\'\(\)\-<>\[\]\/.,:;!?' ); #
define( 'WORD_ENDS', '\r\s\"\'\(\)\-<>\[\]\/.,:;!?' ); #
// Cyrillic
define( 'KRC_C_UC', 'АБВГДЕЁЖЗИЙКЛМНОПРСТУЎФХЦЧШЩЪЫЬЭЮЯ' ); # Karachay-Balkar Cyrillic uppercase
define( 'KRC_C_LC', 'абвгдеёжзийклмнопрстуўфхцчшщъыьэюя' ); # Karachay-Balkar Cyrillic lowercase
define( 'KRC_C_CONS_UC', 'БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ' ); # Karachay-Balkar Cyrillic + CÑ uppercase consonants
define( 'KRC_C_CONS_LC', 'бвгджзйклмнпрстфхцчшщcñ' ); # Karachay-Balkar Cyrillic + CÑ lowercase consonants
define( 'KRC_C_CONS', 'бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ' ); # Karachay-Balkar Cyrillic + CÑ consonants
define( 'KRC_C_M_CONS', 'бгкмпшcБГКМПШC' ); # Karachay-Balkar Cyrillic M-type consonants
// Latin
define( 'KRC_L_UC', 'AÂBCÇDEFGĞHIİJKLMNÑOÖPQRSŞTUÜVWXYZ' ); # Karachay-Balkar Latin uppercase
define( 'KRC_L_LC', 'aâbcçdefgğhıijklmnñoöpqrsştuüvwxyz' ); # Karachay-Balkar Latin lowercase
define( 'KRC_L_N_CONS_UC', 'ÇNRSTZ' ); # Karachay-Balkar Latin N-type upper case consonants
define( 'KRC_L_N_CONS_LC', 'çnrstz' ); # Karachay-Balkar Latin N-type lower case consonants
define( 'KRC_L_N_CONS', 'çnrstzÇNRSTZ' ); # Karachay-Balkar Latin N-type consonants
define( 'KRC_L_M_CONS', 'bcgkmpşBCGKMPŞ' ); # Karachay-Balkar Latin M-type consonants
define( 'KRC_L_CONS_UC', 'BCÇDFGHJKLMNÑPRSŞTVWZ' ); # Karachay-Balkar Latin uppercase consonants
define( 'KRC_L_CONS_LC', 'bcçdfghjklmnñprsştvwz' ); # Karachay-Balkar Latin lowercase consonants
define( 'KRC_L_CONS', 'bcçdfghjklmnñprsştvwzBCÇDFGHJKLMNÑPRSŞTVWZ' ); # Karachay-Balkar Latin consonants
define( 'KRC_L_VOW_UC', 'AÂEIİOÖUÜ' ); # Karachay-Balkar Latin uppercase vowels
define( 'KRC_L_VOW', 'aâeıioöuüAÂEIİOÖUÜ' ); # Karachay-Balkar Latin vowels
define( 'KRC_L_F_UC', 'EİÖÜ' ); # Karachay-Balkar Latin uppercase front vowels
define( 'KRC_L_F', 'eiöüEİÖÜ' ); # Karachay-Balkar Latin front vowels
class KrcConverter 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/KrcConversion.php" );
//$krc2Cyrl = array();
//$krc2Latn = array();
$this->mTables = array(
'krc-latn' => new ReplacementArray( $krc2Latn ),
'krc-cyrl' => new ReplacementArray( $krc2Cyrl ),
'krc' => new ReplacementArray()
);
}
function loadRegs() {
$this->$mCyrl2Latn = array
(
############################
# относятся ко всему слову #
############################
'^Югославия$' => 'Yugoslaviya',
'^Юпитер$' => 'Yupiter',
'^([34])(\-)юнджи$' => '$1$2ünçü',
'^([34])(\-)ЮНДЖИ$' => '$1$2ÜNÇÜ',
## отдельно стоящие Ё и Я
'^Я$' => '$1Ya$2',
'^Ё$' => '$1Yo$2',
## этот кусок хоть и не зависит от места в слове, но должен идти в начале, иначе нельзя
'гъ' => 'ğ',
'Г[ъЪ]' => 'Ğ',
'къ' => 'q',
'К[ъЪ]' => 'Q',
'нг' => 'ñ',
'Н[гГ]' => 'Ñ',
'дж' => 'c',
'Д[жЖ]' => 'C',
## e => ye, я => ya, у => w
'^е' => 'ye',
'^Е(['.KRC_C_LC.'cğñqöü])' => 'Ye$1',
'^Е(['.KRC_C_UC.'CĞÑQÖÜ])' => 'YE$1',
'^я' => 'ya',
'^Я(['.KRC_C_LC.'cğñqöü])' => 'Ya$1',
'^Я(['.KRC_C_UC.'CĞÑQÖÜ])' => 'YA$1',
'^у' => 'w',
'^У(['.KRC_C_LC.'cğñqöü])' => 'W$1',
'^У(['.KRC_C_UC.'CĞÑQÖÜ])' => 'W$1',
'([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])е' => '$1ye',
'([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.KRC_C_LC.'cğñqöü])' => '$1Ye$2',
'([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.KRC_C_UC.'CĞÑQÖÜ])' => '$1YE$2',
'([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])я' => '$1ya',
'([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.KRC_C_LC.'cğñqöü])' => '$1Ya$2',
'([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.KRC_C_UC.'CĞÑQÖÜ])' => '$1YA$2',
'([аеёиоуыэюяaeöüАЕЁИОУЫЭЮЯAEÖÜ])у' => '$1w',
'([аеёиоуыэюяaeöüАЕЁИОУЫЭЮЯAEÖÜ])У(['.KRC_C_LC.'cğñqöü])' => '$1W$2',
'([аеёиоуыэюяaeöüАЕЁИОУЫЭЮЯAEÖÜ])У(['.KRC_C_UC.'CĞÑQÖÜ])' => '$1W$2',
###############################
# не зависят от места в слове #
###############################
## слова на -льон
'льон' => 'lyon',
'ЛЬОН' => 'LYON',
## номер
# '№' => 'No.',
## Ö, Ü 1-й заход: ё, ю после согласных > ö, ü
'(['.KRC_C_CONS.'])ю' => '$1ü',
'(['.KRC_C_CONS.'])Ю' => '$1Ü',
'(['.KRC_C_CONS.'])ё' => '$1ö',
'(['.KRC_C_CONS.'])Ё' => '$1Ö',
## буквы Е и Я
## остальные вхождения e и я
'Е' => 'E', 'е' => 'e',
'Я' => 'Â', 'я' => 'â',
## остальные вхождения о, у, ў, ё, ю
'Ё(['.KRC_C_UC.'CĞÑQÖÜ])' => 'YO$2',
'Ё' => 'Yo', 'ё' => 'yo',
'Ю(['.KRC_C_UC.'CĞÑQÖÜ])' => 'YU$2',
'Ю' => 'Yu', 'ю' => 'yu',
'У' => 'U', 'у' => 'u',
'Ў' => 'W', 'ў' => 'w',
'О' => 'O', 'о' => 'o',
## убираем Ь и Ъ
'Ь' => '', 'ь' => '',
'Ъ' => '', 'ъ' => '',
## буквы Ц и Щ
'Ц(['.KRC_C_UC.'CĞÑQÖÜ])' => 'TS$2',
'Ц' => 'Ts', 'ц' => 'ts',
'Щ(['.KRC_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' => 'АНЬКИ',
'/^mer$/u' => 'мэр',
'/^Mer$/u' => 'Мэр',
'/^MER$/u' => 'МЭР',
## повел. накл. на -етсин
'/^etsin$/u' => 'этсин',
'/^Etsin$/u' => 'Этсин',
'/^ETSİN$/u' => 'ЭТСИН',
#
# относятся к концу слова
#
'/ts$/u' => 'ц',
'/şç$/u' => 'щ',
'/Ş[çÇ]$/u' => 'Щ',
'/T[sS]$/u' => 'Ц',
'/etsin$/u' => 'етсин',
'/ETSİN$/u' => 'ЕТСИН',
#
# относятся к началу слова
#
'/^rol([^ü])/u' => 'роль$1',
'/^Rol([^ü])/u' => 'Роль$1',
'/^ROL([^Ü])/u' => 'РОЛЬ$1',
'/^ts/u' => 'ц',
'/^T[sS]/u' => 'Ц',
'/^şç/u' => 'щ',
'/^Ş[çÇ]/u' => 'Щ',
## Э
'/(?(^)|['.KRC_L_VOW.'аеэяАЕЭЯ])e/u' => '$1э',
'/(?(^)|['.KRC_L_VOW_UC.'АЕЭЯ])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(['.KRC_L_CONS.'])/u' => 'ц$1',
'/T[sS](['.KRC_L_CONS.'])/u' => 'Ц$1',
'/(['.KRC_L_CONS.'])ts/u' => '$1ц',
'/(['.KRC_L_CONS.'])T[sS]/u' => '$1Ц',
'/tsial/u' => 'циал',
'/TSİAL/u' => 'ЦИАЛ',
## слова на -льон
'/lyon/u' => 'льон',
'/LYON/u' => 'ЛЬОН',
## убираем ьi
'/ьi/u' => 'i',
'/Ьi/u' => 'i',
'/Ьİ/u' => 'İ',
## буквы гъ, къ, нг
'/ğ/u' => 'гъ',
'/Ğ(['.KRC_L_LC.'])/u' => 'Гъ$1',
'/Ğ(['.KRC_L_UC.'])/u' => 'ГЪ$1',
'/Ğ(['.KRC_L_UC.'Ъ])/u' => 'ГЪ$1',
'/q/u' => 'къ',
'/Q(['.KRC_L_LC.'])/u' => 'Къ$1',
'/Q(['.KRC_L_UC.'])/u' => 'КЪ$1',
'/Q(['.KRC_L_UC.'Ъ])/u' => 'КЪ$1',
'/ñ/u' => 'нг',
'/Ñ(['.KRC_L_LC.'])/u' => 'Нг$1',
'/Ñ(['.KRC_L_UC.'])/u' => 'НГ$1',
'/Ñ(['.KRC_L_UC.'Ъ])/u' => 'НГ$1',
## ya и ye
'/(['.KRC_L_CONS.'])ya/u' => '$1ья',
'/(['.KRC_L_CONS.'])Y[aA]/u' => '$1ЬЯ',
'/ya/u' => 'я',
'/Y[aA]/u' => 'Я',
'/(['.KRC_L_CONS.'])ye/u' => '$1ье',
'/(['.KRC_L_CONS.'])Y[eE]/u' => '$1ЬЕ',
'/ye/u' => 'е',
'/Y[eE]/u' => 'Е',
## расставляем Ь перед Ё
'/(['.KRC_L_CONS.'])y[oö]/u' => '$1ьё',
'/(['.KRC_L_CONS.'])Y[oOöÖ]/u' => '$1ЬЁ',
## оставшиеся вхождения yo и yö
'/y[oö]/u' => 'ё',
'/Y[oOöÖ]/u' => 'Ё',
'/[yY][oOöÖ]/u' => 'Ё',
## расставляем Ь перед Ю
'/(['.KRC_L_CONS.'])y[uü]/u' => '$1ью',
'/(['.KRC_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(['.KRC_L_LC.KRC_C_LC.'])/u' => 'Дж$1',
'/C(['.KRC_L_UC.KRC_C_UC.'])/u' => 'ДЖ$1',
'/C(['.KRC_L_UC.KRC_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' => 'т',
'/W/u' => 'У', '/w/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' => 'Й',
);
}
/* 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 'krc-cyrl':
$letters = KRC_L_UC . KRC_L_LC . "\'";
$wgContLanguageCode = 'krc-Cyrl';
break;
case 'krc-latn':
$letters = KRC_C_UC . KRC_C_LC;
$wgContLanguageCode = 'krc-Latn';
break;
default:
$wgContLanguageCode = 'krc';
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 'krc-latn':
foreach( $this->mCyrl2Latn as $pat => $rep ) {
$text = preg_replace( $pat, $rep, $text );
}
return $text;
break;
case 'krc-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, 'krc' );
}
}
/* class that handles Cyrillic and Latin scripts for Karachay-Balkar
right now it only distinguish krc_cyrl, krc_latn.
*/
class LanguageKrc extends LanguageKrc_krc {
function __construct() {
global $wgHooks;
parent::__construct();
$variants = array( 'krc', 'krc-latn', 'krc-cyrl' );
$variantfallbacks = array(
'krc' => 'krc-latn',
'krc-latn' => 'krc',
'krc-cyrl' => 'krc',
);
$this->mConverter = new KrcConverter( $this, 'krc', $variants, $variantfallbacks );
$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
}
/*
* It fixes issue with ucfirst for transforming 'i' to 'İ'
*
*/
function ucfirst ( $string ) {
$variant = $this->getPreferredVariant();
if ( $variant == 'krc-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 == 'krc-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 'krc-cyrl':
$word = parent::convertGrammarKrc_cyrl( $word, $case );
break;
case 'krc-latn':
case 'krc':
default:
$word = parent::convertGrammarKrc_latn( $word, $case );
}
wfProfileOut( __METHOD__ );
return $word;
}
}
/*
*/