diff options
Diffstat (limited to 'languages/classes/LanguageSr.php')
-rw-r--r-- | languages/classes/LanguageSr.php | 71 |
1 files changed, 41 insertions, 30 deletions
diff --git a/languages/classes/LanguageSr.php b/languages/classes/LanguageSr.php index 412463f8..59d31cab 100644 --- a/languages/classes/LanguageSr.php +++ b/languages/classes/LanguageSr.php @@ -53,12 +53,13 @@ class SrConverter extends LanguageConverter { ); function loadDefaultTables() { - $this->mTables = array(); - $this->mTables['sr-ec'] = $this->mToCyrillics; - $this->mTables['sr-jc'] = $this->mToCyrillics; - $this->mTables['sr-el'] = $this->mToLatin; - $this->mTables['sr-jl'] = $this->mToLatin; - $this->mTables['sr'] = array(); + $this->mTables = array( + 'sr-ec' => new ReplacementArray( $this->mToCyrillics ), + 'sr-jc' => new ReplacementArray( $this->mToCyrillics), + 'sr-el' => new ReplacementArray( $this->mToLatin), + 'sr-jl' => new ReplacementArray( $this->mToLatin), + 'sr' => new ReplacementArray() + ); } /* rules should be defined as -{ekavian | iyekavian-} -or- @@ -67,40 +68,48 @@ class SrConverter extends LanguageConverter { currently, and just produces a couple of bugs */ function parseManualRule($rule, $flags=array()) { - // ignore all formatting - foreach($this->mVariants as $v) { - $carray[$v] = $rule; - } + if(in_array('T',$flags)){ + return parent::parseManualRule($rule, $flags); + } + // otherwise ignore all formatting + foreach($this->mVariants as $v) { + $carray[$v] = $rule; + } + return $carray; } - /* - * Override function from LanguageConvertor - * Additional checks: - * - There should be no conversion for Talk pages - */ - function getPreferredVariant(){ - global $wgTitle; - if($wgTitle!=NULL && $wgTitle->isTalkPage()){ - return $this->mMainLanguageCode; - } - return parent::getPreferredVariant(); - } + // Do not convert content on talk pages + function parserConvert( $text, &$parser ){ + if(is_object($parser->mTitle) && $parser->mTitle->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 + * 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; } - /* * We want our external link captions to be converted in variants, * so we return the original text instead -{$text}-, except for URLs @@ -117,7 +126,7 @@ class SrConverter extends LanguageConverter { */ function autoConvert($text, $toVariant=false) { global $wgTitle; - if($wgTitle->getNameSpace()==NS_IMAGE){ + if(is_object($wgTitle) && $wgTitle->getNameSpace()==NS_IMAGE){ $imagename = $wgTitle->getNsText(); if(preg_match("/^$imagename:/",$text)) return $text; } @@ -139,7 +148,10 @@ class SrConverter extends LanguageConverter { $matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE); $m = array_shift($matches); - $ret = strtr($m[0], $this->mTables[$toVariant]); + if( !isset( $this->mTables[$toVariant] ) ) { + throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) ); + } + $ret = $this->mTables[$toVariant]->replace( $m[0] ); $mstart = $m[1]+strlen($m[0]); foreach($matches as $m) { $ret .= substr($text, $mstart, $m[1]-$mstart); @@ -150,7 +162,6 @@ class SrConverter extends LanguageConverter { return $ret; } - } class LanguageSr extends LanguageSr_ec { @@ -164,8 +175,8 @@ class LanguageSr extends LanguageSr_ec { $variants = array('sr', 'sr-ec', 'sr-el'); $variantfallbacks = array( 'sr' => 'sr-ec', - 'sr-ec' => 'sr-ec', - 'sr-el' => 'sr-el', + 'sr-ec' => 'sr', + 'sr-el' => 'sr', ); |