* fixed js2 fileexist checking related to rewrite of special upload page in r57868
[lhc/web/wiklou.git] / languages / classes / LanguageSr.php
index d7c75ed..48a4cb7 100644 (file)
@@ -1,20 +1,18 @@
 <?php
-/**
-  * @package MediaWiki
-  * @subpackage Language
-  */
-
-/*
-       There are two levels of conversion for Serbian: the script level
-       (Cyrillics <-> Latin), and the variant level (ekavian
-       <->iyekavian). The two are orthogonal. So we really only need two
-       dictionaries: one for Cyrillics and Latin, and one for ekavian and
-       iyekavian.
-*/
+
 require_once( dirname(__FILE__).'/../LanguageConverter.php' );
 require_once( dirname(__FILE__).'/LanguageSr_ec.php' );
 require_once( dirname(__FILE__).'/LanguageSr_el.php' );
 
+/**
+ * There are two levels of conversion for Serbian: the script level
+ * (Cyrillics <-> Latin), and the variant level (ekavian
+ * <->iyekavian). The two are orthogonal. So we really only need two
+ * dictionaries: one for Cyrillics and Latin, and one for ekavian and
+ * iyekavian.
+ *
+ * @ingroup Language
+ */
 class SrConverter extends LanguageConverter {
        var $mToLatin = array(
                'а' => 'a', 'б' => 'b',  'в' => 'v', 'г' => 'g',  'д' => 'd',
@@ -55,9 +53,7 @@ class SrConverter extends LanguageConverter {
        function loadDefaultTables() {
                $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()
                );
        }
@@ -76,15 +72,15 @@ class SrConverter extends LanguageConverter {
                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->mTitle) && $parser->mTitle->isTalkPage())
+               if(is_object($parser->getTitle() ) && $parser->getTitle()->isTalkPage())
                        $this->mDoContentConvert=false;
-               else 
+               else
                        $this->mDoContentConvert=true;
 
                return parent::parserConvert($text, $parser );
@@ -92,11 +88,11 @@ class SrConverter extends LanguageConverter {
 
        /*
         * A function wrapper:
-        *   - if there is no selected variant, leave the link 
+        *   - 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 ) {
+       function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
                // check for user namespace
                if(is_object($nt)){
                        $ns = $nt->getNamespace();
@@ -105,7 +101,7 @@ class SrConverter extends LanguageConverter {
                }
 
                $oldlink=$link;
-               parent::findVariantLink($link,$nt);
+               parent::findVariantLink( $link, $nt, $ignoreOtherCond );
                if($this->getPreferredVariant()==$this->mMainLanguageCode)
                        $link=$oldlink;
        }
@@ -126,12 +122,12 @@ class SrConverter extends LanguageConverter {
         */
        function autoConvert($text, $toVariant=false) {
                global $wgTitle;
-               if(is_object($wgTitle) && $wgTitle->getNameSpace()==NS_IMAGE){ 
+               if(is_object($wgTitle) && $wgTitle->getNameSpace()==NS_FILE){
                        $imagename = $wgTitle->getNsText();
                        if(preg_match("/^$imagename:/",$text)) return $text;
                }
                return parent::autoConvert($text,$toVariant);
-       } 
+       }
 
        /**
         *  It translates text into variant, specials:
@@ -146,7 +142,7 @@ class SrConverter extends LanguageConverter {
                $reg = '/^'.$roman.'$|^'.$roman.$breaks.'|'.$breaks.$roman.'$|'.$breaks.$roman.$breaks.'/';
 
                $matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
-               
+
                $m = array_shift($matches);
                if( !isset( $this->mTables[$toVariant] ) ) {
                        throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) );
@@ -161,28 +157,23 @@ class SrConverter extends LanguageConverter {
 
                return $ret;
        }
-
-       function armourMath($text){ 
-               return parent::markNoConversion($text);
-       }
-
 }
 
+/**
+ * @ingroup Language
+ */
 class LanguageSr extends LanguageSr_ec {
        function __construct() {
                global $wgHooks;
 
                parent::__construct();
 
-               // these variants are currently UNUSED:
-               // 'sr-jc', 'sr-jl' 
                $variants = array('sr', 'sr-ec', 'sr-el');
                $variantfallbacks = array(
                        'sr'    => 'sr-ec',
                        'sr-ec' => 'sr',
                        'sr-el' => 'sr',
-                       ); 
-
+               );
 
                $marker = array();//don't mess with these, leave them as they are
                $flags = array(
@@ -192,5 +183,27 @@ class LanguageSr extends LanguageSr_ec {
                $this->mConverter = new SrConverter($this, 'sr', $variants, $variantfallbacks, $marker, $flags);
                $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
        }
+
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+
+               //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
+               if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+
+               // FIXME: CLDR defines 4 plural forms. Form with decimals missing.
+               // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ru
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ($count > 10 && floor(($count % 100) / 10) == 1) {
+                       return $forms[2];
+               } else {
+                       switch ($count % 10) {
+                               case 1:  return $forms[0];
+                               case 2:
+                               case 3:
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
+                       }
+               }
+       }
 }
-?>