Plural_Forms::execute

Advertisement

Summery Summery

Execute the plural form function.

Syntax Syntax

Plural_Forms::execute( int $n )

Parameters Parameters

$n

(Required) Variable "n" to substitute.

Return Return

(int) Plural form value.

Source Source

File: wp-includes/pomo/plural-forms.php

	public function execute( $n ) {
		$stack = array();
		$i     = 0;
		$total = count( $this->tokens );
		while ( $i < $total ) {
			$next = $this->tokens[ $i ];
			$i++;
			if ( 'var' === $next[0] ) {
				$stack[] = $n;
				continue;
			} elseif ( 'value' === $next[0] ) {
				$stack[] = $next[1];
				continue;
			}

			// Only operators left.
			switch ( $next[1] ) {
				case '%':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 % $v2;
					break;

				case '||':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 || $v2;
					break;

				case '&&':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 && $v2;
					break;

				case '<':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 < $v2;
					break;

				case '<=':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 <= $v2;
					break;

				case '>':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 > $v2;
					break;

				case '>=':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 >= $v2;
					break;

				case '!=':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 != $v2;
					break;

				case '==':
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 == $v2;
					break;

				case '?:':
					$v3      = array_pop( $stack );
					$v2      = array_pop( $stack );
					$v1      = array_pop( $stack );
					$stack[] = $v1 ? $v2 : $v3;
					break;

				default:
					throw new Exception( sprintf( 'Unknown operator "%s"', $next[1] ) );
			}
		}

		if ( count( $stack ) !== 1 ) {
			throw new Exception( 'Too many values remaining on the stack' );
		}

		return (int) $stack[0];
	}

Advertisement

Changelog Changelog

Changelog
Version Description
4.9.0 Introduced.

Advertisement

Leave a Reply