| 1 |  |  | <?php | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | declare(strict_types=1); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | namespace Doctrine\Inflector\Rules; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | use function array_map; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | use function implode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | use function preg_match; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | class Uninflected | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  |     /** @var Pattern[] */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  |     private $patterns; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  |     /** @var string|null */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |     private $regex; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 | 528 |  |     public function __construct(Pattern ...$patterns) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 | 528 |  |         $this->patterns = $patterns; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 | 528 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |      * @return Pattern[] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 | 526 |  |     public static function getDefault() : iterable | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 | 526 |  |         yield new Pattern('\w+media'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 | 526 |  |         yield new Pattern('Amoyese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 | 526 |  |         yield new Pattern('audio'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 | 526 |  |         yield new Pattern('bison'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 | 526 |  |         yield new Pattern('Borghese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 | 526 |  |         yield new Pattern('bream'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 | 526 |  |         yield new Pattern('breeches'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 | 526 |  |         yield new Pattern('britches'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 | 526 |  |         yield new Pattern('buffalo'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 | 526 |  |         yield new Pattern('cantus'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 | 526 |  |         yield new Pattern('carp'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 | 526 |  |         yield new Pattern('chassis'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 | 526 |  |         yield new Pattern('clippers'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 | 526 |  |         yield new Pattern('cod'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 | 526 |  |         yield new Pattern('coitus'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 | 526 |  |         yield new Pattern('compensation'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 | 526 |  |         yield new Pattern('Congoese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 | 526 |  |         yield new Pattern('contretemps'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 | 526 |  |         yield new Pattern('coreopsis'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 | 526 |  |         yield new Pattern('corps'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 | 526 |  |         yield new Pattern('data'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 | 526 |  |         yield new Pattern('debris'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 | 526 |  |         yield new Pattern('deer'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 | 526 |  |         yield new Pattern('diabetes'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 | 526 |  |         yield new Pattern('djinn'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 | 526 |  |         yield new Pattern('education'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 | 526 |  |         yield new Pattern('eland'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 | 526 |  |         yield new Pattern('elk'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 | 526 |  |         yield new Pattern('emoji'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 | 526 |  |         yield new Pattern('equipment'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 | 526 |  |         yield new Pattern('evidence'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 | 526 |  |         yield new Pattern('Faroese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 | 526 |  |         yield new Pattern('feedback'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 | 526 |  |         yield new Pattern('fish'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 | 526 |  |         yield new Pattern('flounder'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 | 526 |  |         yield new Pattern('Foochowese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 65 | 526 |  |         yield new Pattern('Furniture'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 66 | 526 |  |         yield new Pattern('furniture'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 67 | 526 |  |         yield new Pattern('gallows'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 68 | 526 |  |         yield new Pattern('Genevese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 69 | 526 |  |         yield new Pattern('Genoese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 70 | 526 |  |         yield new Pattern('Gilbertese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 71 | 526 |  |         yield new Pattern('gold'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 72 | 526 |  |         yield new Pattern('headquarters'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 73 | 526 |  |         yield new Pattern('herpes'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 74 | 526 |  |         yield new Pattern('hijinks'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 75 | 526 |  |         yield new Pattern('Hottentotese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 76 | 526 |  |         yield new Pattern('information'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 77 | 526 |  |         yield new Pattern('innings'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 78 | 526 |  |         yield new Pattern('jackanapes'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 79 | 526 |  |         yield new Pattern('jedi'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 80 | 526 |  |         yield new Pattern('Kiplingese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 81 | 526 |  |         yield new Pattern('knowledge'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 82 | 526 |  |         yield new Pattern('Kongoese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 83 | 526 |  |         yield new Pattern('love'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 84 | 526 |  |         yield new Pattern('Lucchese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 85 | 526 |  |         yield new Pattern('Luggage'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 86 | 526 |  |         yield new Pattern('mackerel'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 87 | 526 |  |         yield new Pattern('Maltese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 88 | 526 |  |         yield new Pattern('metadata'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 89 | 526 |  |         yield new Pattern('mews'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 90 | 526 |  |         yield new Pattern('moose'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 91 | 526 |  |         yield new Pattern('mumps'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 92 | 526 |  |         yield new Pattern('Nankingese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 93 | 526 |  |         yield new Pattern('news'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 94 | 526 |  |         yield new Pattern('nexus'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 95 | 526 |  |         yield new Pattern('Niasese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 96 | 526 |  |         yield new Pattern('nutrition'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 97 | 526 |  |         yield new Pattern('offspring'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 98 | 526 |  |         yield new Pattern('Pekingese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 99 | 526 |  |         yield new Pattern('Piedmontese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 100 | 526 |  |         yield new Pattern('pincers'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 101 | 526 |  |         yield new Pattern('Pistoiese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 102 | 526 |  |         yield new Pattern('plankton'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 103 | 526 |  |         yield new Pattern('pliers'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 104 | 526 |  |         yield new Pattern('pokemon'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 105 | 526 |  |         yield new Pattern('police'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 106 | 526 |  |         yield new Pattern('Portuguese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 107 | 526 |  |         yield new Pattern('proceedings'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 108 | 526 |  |         yield new Pattern('rabies'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 109 | 526 |  |         yield new Pattern('rain'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 110 | 526 |  |         yield new Pattern('rhinoceros'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 111 | 526 |  |         yield new Pattern('rice'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 112 | 526 |  |         yield new Pattern('salmon'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 113 | 526 |  |         yield new Pattern('Sarawakese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 114 | 526 |  |         yield new Pattern('scissors'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 115 | 526 |  |         yield new Pattern('sea[- ]bass'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 116 | 526 |  |         yield new Pattern('series'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 117 | 526 |  |         yield new Pattern('Shavese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 118 | 526 |  |         yield new Pattern('shears'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 119 | 526 |  |         yield new Pattern('sheep'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 120 | 526 |  |         yield new Pattern('siemens'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 121 | 526 |  |         yield new Pattern('species'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 122 | 526 |  |         yield new Pattern('staff'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 123 | 526 |  |         yield new Pattern('swine'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 124 | 526 |  |         yield new Pattern('traffic'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 125 | 526 |  |         yield new Pattern('trousers'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 126 | 526 |  |         yield new Pattern('trout'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 127 | 526 |  |         yield new Pattern('tuna'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 128 | 526 |  |         yield new Pattern('us'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 129 | 526 |  |         yield new Pattern('Vermontese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 130 | 526 |  |         yield new Pattern('Wenchowese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 131 | 526 |  |         yield new Pattern('wheat'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 132 | 526 |  |         yield new Pattern('whiting'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 133 | 526 |  |         yield new Pattern('wildebeest'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 134 | 526 |  |         yield new Pattern('Yengeese'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 135 | 526 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 136 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 137 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 138 |  |  |      * @return Pattern[] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 139 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 140 | 526 |  |     public function getPatterns() : iterable | 
            
                                                                                                            
                            
            
                                    
            
            
                | 141 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 142 | 526 |  |         yield from $this->patterns; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 143 | 526 |  |     } | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 144 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 145 | 508 |  |     public function isUninflected(string $word) : bool | 
            
                                                                        
                            
            
                                    
            
            
                | 146 |  |  |     { | 
            
                                                                        
                            
            
                                    
            
            
                | 147 | 508 |  |         return preg_match($this->getRegex(), $word, $regs) === 1; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 148 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 149 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 150 | 508 |  |     private function getRegex() : string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 151 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 152 | 508 |  |         if ($this->regex === null) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 153 |  |  |             $patterns = array_map(function (Pattern $word) : string { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 154 | 508 |  |                 return $word->getPattern(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 155 | 508 |  |             }, $this->patterns); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 156 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 157 | 508 |  |             $this->regex = '/^(?:' . implode('|', $patterns) . ')$/i'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 158 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 159 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 160 | 508 |  |         return $this->regex; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 161 |  |  |     } | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 162 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 163 |  |  |  |