mirror of
https://github.com/rectorphp/rector.git
synced 2024-08-28 19:29:37 +00:00
49 lines
1.5 KiB
PHP
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;
|
|
}
|
|
}
|