rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php
Tomas Votruba 750add220d Updated Rector to commit 305c524662
305c524662 [TypeDeclaration] Improve typed property (#1221)
2021-11-13 00:51:27 +00:00

49 lines
1.5 KiB
PHP

<?php
declare (strict_types=1);
namespace RectorPrefix20211113\Doctrine\Inflector;
use RectorPrefix20211113\Doctrine\Inflector\Rules\Ruleset;
use function array_merge;
/**
* Inflects based on multiple rulesets.
*
* Rules:
* - If the word matches any uninflected word pattern, it is not inflected
* - The first ruleset that returns a different value for an irregular word wins
* - The first ruleset that returns a different value for a regular word wins
* - If none of the above match, the word is left as-is
*/
class RulesetInflector implements \RectorPrefix20211113\Doctrine\Inflector\WordInflector
{
/** @var Ruleset[] */
private $rulesets;
public function __construct(\RectorPrefix20211113\Doctrine\Inflector\Rules\Ruleset $ruleset, \RectorPrefix20211113\Doctrine\Inflector\Rules\Ruleset ...$rulesets)
{
$this->rulesets = \array_merge([$ruleset], $rulesets);
}
/**
* @param string $word
*/
public function inflect($word) : string
{
if ($word === '') {
return '';
}
foreach ($this->rulesets as $ruleset) {
if ($ruleset->getUninflected()->matches($word)) {
return $word;
}
$inflected = $ruleset->getIrregular()->inflect($word);
if ($inflected !== $word) {
return $inflected;
}
$inflected = $ruleset->getRegular()->inflect($word);
if ($inflected !== $word) {
return $inflected;
}
}
return $word;
}
}