function PoHeader::parsePluralForms in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/lib/Drupal/Component/Gettext/PoHeader.php \Drupal\Component\Gettext\PoHeader::parsePluralForms()
Parses a Plural-Forms entry from a Gettext Portable Object file header.
Parameters
string $pluralforms: The Plural-Forms entry value.
Return value
An indexed array of parsed plural formula data. Containing:
- 'nplurals': The number of plural forms defined by the plural formula.
- 'plurals': Array of plural positions keyed by plural value.
Throws
Exception
File
- core/
lib/ Drupal/ Component/ Gettext/ PoHeader.php, line 198 - Contains \Drupal\Component\Gettext\PoHeader.
Class
- PoHeader
- Gettext PO header handler.
Namespace
Drupal\Component\GettextCode
function parsePluralForms($pluralforms) {
$plurals = array();
// First, delete all whitespace.
$pluralforms = strtr($pluralforms, array(
" " => "",
"\t" => "",
));
// Select the parts that define nplurals and plural.
$nplurals = strstr($pluralforms, "nplurals=");
if (strpos($nplurals, ";")) {
// We want the string from the 10th char, because "nplurals=" length is 9.
$nplurals = substr($nplurals, 9, strpos($nplurals, ";") - 9);
}
else {
return FALSE;
}
$plural = strstr($pluralforms, "plural=");
if (strpos($plural, ";")) {
// We want the string from the 8th char, because "plural=" length is 7.
$plural = substr($plural, 7, strpos($plural, ";") - 7);
}
else {
return FALSE;
}
// If the number of plurals is zero, we return a default result.
if ($nplurals == 0) {
return array(
$nplurals,
array(
'default' => 0,
),
);
}
// Calculate possible plural positions of different plural values. All known
// plural formula's are repetitive above 100.
// For data compression we store the last position the array value
// changes and store it as default.
$element_stack = $this
->parseArithmetic($plural);
if ($element_stack !== FALSE) {
for ($i = 0; $i <= 199; $i++) {
$plurals[$i] = $this
->evaluatePlural($element_stack, $i);
}
$default = $plurals[$i - 1];
$plurals = array_filter($plurals, function ($value) use ($default) {
return $value != $default;
});
$plurals['default'] = $default;
return array(
$nplurals,
$plurals,
);
}
else {
throw new \Exception('The plural formula could not be parsed.');
}
}