<?php
-
/**
* @author Niklas Laxström, Tim Starling
*
*/
public static function convert( $rule ) {
$parser = new self( $rule );
+
return $parser->doConvert();
}
if ( $length !== 0 ) {
$token = $this->newNumber( substr( $this->rule, $this->pos, $length ), $this->pos );
$this->pos += $length;
+
return $token;
}
if ( $op2 === '..' || $op2 === '!=' ) {
$token = $this->newOperator( $op2, $this->pos, 2 );
$this->pos += 2;
+
return $token;
}
$op1 = $this->rule[$this->pos];
if ( $op1 === ',' || $op1 === '=' || $op1 === '%' ) {
$token = $this->newOperator( $op1, $this->pos, 1 );
- $this->pos ++;
+ $this->pos++;
+
return $token;
}
if ( isset( self::$precedence[$bothWords] ) ) {
$token = $this->newOperator( $bothWords, $this->pos, $nextTokenPos - $this->pos );
$this->pos = $nextTokenPos;
+
return $token;
}
}
if ( isset( self::$precedence[$word1] ) ) {
$token = $this->newOperator( $word1, $this->pos, strlen( $word1 ) );
$this->pos += strlen( $word1 );
+
return $token;
}
// The single-character operand symbols
if ( strpos( self::OPERAND_SYMBOLS, $word1 ) !== false ) {
$token = $this->newNumber( $word1, $this->pos );
- $this->pos ++;
+ $this->pos++;
+
return $token;
}
// Samples are like comments, they have no effect on rule evaluation.
// They run from the first sample indicator to the end of the string.
$this->pos = $this->end;
+
return false;
}
<?php
+
/**
* Parse and evaluate a plural rule.
*
* @file
* @since 1.20
*/
-
class CLDRPluralRuleEvaluator {
/**
* Evaluate a number against a set of plural rules. If a rule passes,
*/
public static function evaluate( $number, array $rules ) {
$rules = self::compile( $rules );
+
return self::evaluateCompiled( $number, $rules );
}
foreach ( $rules as &$rule ) {
$rule = CLDRPluralRuleConverter::convert( $rule );
}
+
return $rules;
}
$number = strval( $number );
if ( !preg_match( '/^ -? ( ([0-9]+) (?: \. ([0-9]+) )? )$/x', $number, $m ) ) {
wfDebug( __METHOD__ . ": invalid number input, returning 'other'\n" );
+
return count( $rules );
}
if ( !isset( $m[3] ) ) {
if ( is_int( $left ) ) {
return (int)fmod( $left, $right );
}
+
return fmod( $left, $right );
case ',':
if ( $left instanceof CLDRPluralRuleEvaluatorRange ) {
$range = new CLDRPluralRuleEvaluatorRange( $left );
}
$range->add( $right );
+
return $range;
case '..':
return new CLDRPluralRuleEvaluatorRange( $left, $right );