<?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] ) ) {
*/
private static function doOperation( $token, $left, $right ) {
if ( in_array( $token, array( 'in', 'not-in', 'within', 'not-within' ) ) ) {
- if ( !( $right instanceof CLDRPluralRuleEvaluator_Range ) ) {
- $right = new CLDRPluralRuleEvaluator_Range( $right );
+ if ( !( $right instanceof CLDRPluralRuleEvaluatorRange ) ) {
+ $right = new CLDRPluralRuleEvaluatorRange( $right );
}
}
switch ( $token ) {
if ( is_int( $left ) ) {
return (int)fmod( $left, $right );
}
+
return fmod( $left, $right );
case ',':
- if ( $left instanceof CLDRPluralRuleEvaluator_Range ) {
+ if ( $left instanceof CLDRPluralRuleEvaluatorRange ) {
$range = $left;
} else {
- $range = new CLDRPluralRuleEvaluator_Range( $left );
+ $range = new CLDRPluralRuleEvaluatorRange( $left );
}
$range->add( $right );
+
return $range;
case '..':
- return new CLDRPluralRuleEvaluator_Range( $left, $right );
+ return new CLDRPluralRuleEvaluatorRange( $left, $right );
default:
throw new CLDRPluralRuleError( "Invalid RPN token" );
}