GenericLanguageInflectorFactory.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. declare(strict_types=1);
  3. namespace Doctrine\Inflector;
  4. use Doctrine\Inflector\Rules\Ruleset;
  5. use function array_unshift;
  6. abstract class GenericLanguageInflectorFactory implements LanguageInflectorFactory
  7. {
  8. /** @var Ruleset[] */
  9. private $singularRulesets = [];
  10. /** @var Ruleset[] */
  11. private $pluralRulesets = [];
  12. final public function __construct()
  13. {
  14. $this->singularRulesets[] = $this->getSingularRuleset();
  15. $this->pluralRulesets[] = $this->getPluralRuleset();
  16. }
  17. final public function build(): Inflector
  18. {
  19. return new Inflector(
  20. new CachedWordInflector(new RulesetInflector(
  21. ...$this->singularRulesets
  22. )),
  23. new CachedWordInflector(new RulesetInflector(
  24. ...$this->pluralRulesets
  25. ))
  26. );
  27. }
  28. final public function withSingularRules(?Ruleset $singularRules, bool $reset = false): LanguageInflectorFactory
  29. {
  30. if ($reset) {
  31. $this->singularRulesets = [];
  32. }
  33. if ($singularRules instanceof Ruleset) {
  34. array_unshift($this->singularRulesets, $singularRules);
  35. }
  36. return $this;
  37. }
  38. final public function withPluralRules(?Ruleset $pluralRules, bool $reset = false): LanguageInflectorFactory
  39. {
  40. if ($reset) {
  41. $this->pluralRulesets = [];
  42. }
  43. if ($pluralRules instanceof Ruleset) {
  44. array_unshift($this->pluralRulesets, $pluralRules);
  45. }
  46. return $this;
  47. }
  48. abstract protected function getSingularRuleset(): Ruleset;
  49. abstract protected function getPluralRuleset(): Ruleset;
  50. }