* Reworked convertPlural so that it accepts variable number of arguments nicely
authorNiklas Laxström <nikerabbit@users.mediawiki.org>
Sun, 18 Nov 2007 20:15:49 +0000 (20:15 +0000)
committerNiklas Laxström <nikerabbit@users.mediawiki.org>
Sun, 18 Nov 2007 20:15:49 +0000 (20:15 +0000)
* Should also fix bug 11991

25 files changed:
includes/CoreParserFunctions.php
languages/Language.php
languages/classes/LanguageAr.php
languages/classes/LanguageBat_smg.php
languages/classes/LanguageBe.php
languages/classes/LanguageBe_tarask.php
languages/classes/LanguageBs.php
languages/classes/LanguageCs.php
languages/classes/LanguageCu.php
languages/classes/LanguageDsb.php
languages/classes/LanguageFr.php
languages/classes/LanguageHe.php
languages/classes/LanguageHr.php
languages/classes/LanguageHsb.php
languages/classes/LanguageHy.php
languages/classes/LanguageKsh.php
languages/classes/LanguageLt.php
languages/classes/LanguageLv.php
languages/classes/LanguagePt_br.php
languages/classes/LanguageRu.php
languages/classes/LanguageSk.php
languages/classes/LanguageSl.php
languages/classes/LanguageSr_ec.php
languages/classes/LanguageSr_el.php
languages/classes/LanguageUk.php

index af4458a..2507bda 100644 (file)
@@ -92,9 +92,10 @@ class CoreParserFunctions {
                return $parser->getFunctionLang()->convertGrammar( $word, $case );
        }
 
-       static function plural( $parser, $text = '', $arg0 = null, $arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null ) {
+       static function plural( $parser, $text = '') {
+               $forms = array_slice( func_get_args(), 2);
                $text = $parser->getFunctionLang()->parseFormattedNumber( $text );
-               return $parser->getFunctionLang()->convertPlural( $text, $arg0, $arg1, $arg2, $arg3, $arg4 );
+               return $parser->getFunctionLang()->convertPlural( $text, $forms );
        }
 
        /**
index 0fda0db..76619f4 100644 (file)
@@ -1702,16 +1702,30 @@ class Language {
         *
         * Example: {{plural:{{NUMBEROFARTICLES}}|article|articles}}
         *
-        * @param integer $count
-        * @param string $wordform1
-        * @param string $wordform2
-        * @param string $wordform3 (optional)
-        * @param string $wordform4 (optional)
-        * @param string $wordform5 (optional)
-        * @return string
+        * @param integer $count Non-localized number
+        * @param array $forms Different plural forms
+        * @return string Correct form of plural for $count in this language
+        */
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 2 );
+
+               return ( abs($count) == 1 ) ? $forms[0] : $forms[1];
+       }
+
+       /**
+        * Checks that convertPlural was given an array and pads it to requested
+        * amound of forms by copying the last one.
+        *
+        * @param integer $count How many forms should there be at least
+        * @param array $forms Array of forms given to convertPlural
+        * @return array Padded array of forms or an exception if not an array
         */
-       function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
-               return ( $count == '1' || $count == '-1' ) ? $w1 : $w2;
+       protected function preConvertPlural( Array $forms, $count ) {
+               while ( count($forms) < $count ) {
+                       $forms[] = $forms[count($forms)-1];
+               }
+               return $forms;
        }
 
        /**
index 514ff02..1b9ae7b 100644 (file)
@@ -7,8 +7,10 @@
  */
 class LanguageAr extends Language {
 
-       function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
-               $forms = array($w1, $w2, $w3, $w4, $w5);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 5 );
+
                if ( $count == 1 ) {
                        $index = 0;
                } elseif( $count == 2 ) {
index 5869d03..fc830cf 100644 (file)
@@ -7,16 +7,19 @@
  */
 class LanguageBat_smg extends Language {
 
-       public function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 4 );
+
                $count = abs( $count );
                if ( $count === 0 || ($count%100 === 0 || ($count%100 >= 10 && $count%100 < 20)) ) {
-                       return $w3;
+                       return $forms[2];
                } elseif ( $count%10 === 1 ) {
-                       return $w1;
+                       return $forms[0];
                } elseif ( $count%10 === 2 ) {
-                       return $w2;
+                       return $forms[1];
                } else {
-                       return $w4;
+                       return $forms[3];
                }
        }
 
index e0665e6..cc3e4e3 100644 (file)
   */
 
 class LanguageBe extends Language {
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
+
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }
index 5e168b7..7708440 100644 (file)
   */
 
 class LanguageBe_tarask extends Language {
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }
index 119280e..410c3d6 100644 (file)
@@ -6,17 +6,19 @@
 
 class LanguageBs extends Language {
 
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }
index 0e4731e..4a52368 100644 (file)
@@ -78,20 +78,17 @@ class LanguageCs extends Language {
                return $word;
        }
 
-  # Plural form transformations, needed for some languages.
-  # Invoked by {{plural:count|wordform1|wordform2|wordform3}}
-  function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-       switch ( $count ) {
-               case 1:
-                       return $wordform1;
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
 
-               case 2:
-               case 3:
-               case 4:
-                       return $wordform2;
+               switch ( $count ) {
+                       case 1:  return $forms[0];
+                       case 2:
+                       case 3:
+                       case 4:  return $forms[1];
+                       default: return $forms[2];
+               }
+       }
 
-               default:
-                       return $wordform3;
-       };
-  }
 }
index 61128f2..fba895e 100644 (file)
@@ -35,13 +35,16 @@ class LanguageCu extends Language {
                return $word;
        }
 
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $wordform4, $w5) {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 4 );
+
                switch ($count % 10) {
-                       case 1: return $wordform1;
-                       case 2: return $wordform2;
-                       case 3: return $wordform3;
-                       case 4: return $wordform3;
-                       default: return $wordform4;
+                       case 1:  return $forms[0];
+                       case 2:  return $forms[1];
+                       case 3:
+                       case 4:  return $forms[2];
+                       default: return $forms[3];
                }
        }
 
index 3f6cf9d..7408217 100644 (file)
@@ -100,17 +100,16 @@ class LanguageDsb extends Language {
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
 
-       function convertPlural( $count, $singular, $dual, $plural, $pluralgen, $w5 ) {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 4 );
+
                switch ( abs( $count ) % 100 ) {
-                       case 1:
-                               return $singular;
-                       case 2:
-                               return $dual;
+                       case 1:  return $forms[0]; // singular
+                       case 2:  return $forms[1]; // dual
                        case 3:
-                       case 4:
-                               return $plural;
-                       default:
-                               return $pluralgen;
+                       case 4:  return $forms[2]; // plural
+                       default: return $forms[3]; // pluralgen
                }
        }
 }
index 87d28b2..dfd8af4 100644 (file)
@@ -9,8 +9,12 @@ class LanguageFr extends Language {
        /**
         * Use singular form for zero (see bug 7309)
         */
-        function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
-               return $count <= '1' ? $w1 : $w2;
-        }
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 2 );
+
+               return ($count <= 1) ? $forms[0] : $forms[1];
+       }
+
 }
 
index ca760c1..1742dcb 100644 (file)
@@ -57,13 +57,16 @@ class LanguageHe extends Language {
         *
         * @return string of the suited form of word
         */
-       public function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ( $count == '1' ) {
-                       return $w1;
+                       return $forms[0];
                } elseif ( $count == '2' && $w3 ) {
-                       return $w3;
+                       return $forms[2];
                } else {
-                       return $w2;
+                       return $forms[1];
                }
        }
 }
index 5a875a7..4a64f87 100644 (file)
@@ -5,17 +5,20 @@
   */
 
 class LanguageHr extends Language {
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
+
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }
index 7cbc17d..68df96b 100644 (file)
@@ -100,17 +100,16 @@ class LanguageHsb extends Language {
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
 
-       function convertPlural( $count, $singular, $dual, $plural, $pluralgen, $w5 ) {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 4 );
+
                switch ( abs( $count ) % 100 ) {
-                       case 1:
-                               return $singular;
-                       case 2:
-                               return $dual;
+                       case 1:  return $forms[0]; // singular
+                       case 2:  return $forms[1]; // dual
                        case 3:
-                       case 4:
-                               return $plural;
-                       default:
-                               return $pluralgen;
+                       case 4:  return $forms[2]; // plural
+                       default: return $forms[3]; // pluralgen
                }
        }
 }
index 236e8ba..cc3492b 100644 (file)
@@ -49,13 +49,11 @@ class LanguageHy extends Language {
                return $word;
        }
 
-       function convertPlural( $count, $wordform1, $wordform2, $w3, $w4, $w5) {
-               $count = str_replace (' ', '', $count);
-               if (abs($count) <= 1) {
-                       return $wordform1;
-               } else {
-                       return $wordform2;
-               }
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 2 );
+
+               return (abs($count) <= 1) ? $forms[0] : $forms[1];
        }
 
        /*
index c53667c..f72046e 100644 (file)
@@ -21,14 +21,16 @@ class LanguageKsh extends Language {
        /**
         * Handle cases of (1, other, 0) or (1, other)
         */
-       public function convertPlural( $count, $w1, $w2, $w3, $w4, $w5 ) {
-               $count = str_replace (' ', '', $count);
-               if ( $count == '1' ) {
-                       return $w1;
-               } elseif ( $count == '0' && $w3 ) {
-                       return $w3;
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ( $count == 1 ) {
+                       return $forms[0];
+               } elseif ( $count == 0 ) {
+                       return $forms[2];
                } else {
-                       return $w2;
+                       return $forms[1];
                }
        }
 }
index f2b29ca..bbe619d 100644 (file)
@@ -11,11 +11,13 @@ class LanguageLt extends Language {
                2 - trys (3) lapai
                3 - penkiolika (15) lapų
        */
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               if ($count%10==1 && $count%100!=11) return $wordform1;
-               if ($count%10>=2 && ($count%100<10 || $count%100>=20)) return $wordform2;
-               //if third form not specified, then use second form
-               return empty($wordform3)?$wordform2:$wordform3;
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ($count%10==1 && $count%100!=11) return $forms[0];
+               if ($count%10>=2 && ($count%100<10 || $count%100>=20)) return $forms[1];
+               return $forms[2];
        }
 }
 
index 8a46bb9..a3f076e 100644 (file)
@@ -21,8 +21,11 @@ class LanguageLv extends Language {
         * @param string $wordform3 (not used)
         * @return string
         */
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5 ) {
-               return ( ( $count % 10 == 1 ) && ( $count % 100 != 11 ) ) ? $wordform1 : $wordform2;
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 2 );
+
+               return ( ( $count % 10 == 1 ) && ( $count % 100 != 11 ) ) ? $forms[0] : $forms[1];
        }
 
        # Convert from the nominative form of a noun to some other case
index 31574ed..78965ae 100644 (file)
@@ -9,8 +9,11 @@ class LanguagePt_br extends Language {
        /**
         * Use singular form for zero (see bug 7309)
         */
-        function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
-               return $count <= '1' ? $w1 : $w2;
-        }
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 2 );
+
+               return ($count <= 1) ? $forms[0] : $forms[1];
+       }
 }
 
index bb8437e..ddca9ea 100644 (file)
@@ -73,21 +73,23 @@ class LanguageRu extends Language {
          *
         */
 
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $wordform4, $wordform5) {
-               $count=abs($count);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
 
-               if ( $wordform4 && $count <> 1 )
-                       return $wordform4;
+               $count = abs( $count );
+               if ( isset($forms[3]) && $count != 1 )
+                       return $forms[3];
 
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }
index 1b9832c..edbe011 100644 (file)
@@ -76,9 +76,10 @@ class LanguageSk extends Language {
                return $word;
        }
 
-       function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
-               $forms = array( $w1, $w2, $w3);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ( $count == 1 ) {
                        $index = 0;
                } elseif ( $count == 2 || $count == 3 || $count == 4 ) {
index 2513d6b..9b1e5c2 100644 (file)
@@ -71,9 +71,10 @@ class LanguageSl extends Language {
                return $word; # this will return the original value for 'imenovalnik' (nominativ) and all undefined case values
        }
 
-       function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
-               $forms = array( $w1, $w2, $w3, $w4, $w5 );
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 5 );
+
                if ( $count % 100 == 1 ) {
                        $index = 0;
                } elseif ( $count % 100 == 2 ) {
index 42647ae..1f9bb71 100644 (file)
@@ -8,17 +8,19 @@
 #--------------------------------------------------------------------------
 
 class LanguageSr_ec extends Language {
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }
index 66118cc..a444e3b 100644 (file)
@@ -8,17 +8,19 @@
 #--------------------------------------------------------------------------
 
 class LanguageSr_el extends Language {
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               $count = str_replace ('.', '', $count);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }
index d87b7f5..7d2f58b 100644 (file)
@@ -58,17 +58,19 @@ class LanguageUk extends Language {
                return $word;
        }
 
-       function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
-               $count = str_replace (' ', '', $count);
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 3 );
+
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
-                       return $wordform3;
+                       return $forms[2];
                } else {
                        switch ($count % 10) {
-                               case 1: return $wordform1;
+                               case 1:  return $forms[0];
                                case 2:
                                case 3:
-                               case 4: return $wordform2;
-                               default: return $wordform3;
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
                        }
                }
        }