[marketplace code, Bulgarian name (masculine, after "цвят")]. */ const WORDS = array( 'black' => array( 'black', 'черен' ), 'черно' => array( 'black', 'черен' ), 'черен' => array( 'black', 'черен' ), 'cheren' => array( 'black', 'черен' ), 'white' => array( 'white', 'бял' ), 'бял' => array( 'white', 'бял' ), 'бяло' => array( 'white', 'бял' ), 'bql' => array( 'white', 'бял' ), 'navy' => array( 'navy_blue', 'тъмносин' ), 'тъмносин' => array( 'navy_blue', 'тъмносин' ), 'royal' => array( 'blue', 'кралскосин' ), 'royal-melange' => array( 'blue', 'кралскосин меланж' ), 'blue' => array( 'blue', 'син' ), 'син' => array( 'blue', 'син' ), 'синьо' => array( 'blue', 'син' ), 'sinyo' => array( 'blue', 'син' ), 'bright-blue' => array( 'blue', 'яркосин' ), 'light-blue' => array( 'blue', 'светлосин' ), 'carbon' => array( 'grey', 'графитен' ), 'grey' => array( 'grey', 'сив' ), 'сив' => array( 'grey', 'сив' ), 'сиво' => array( 'grey', 'сив' ), 'sivo' => array( 'grey', 'сив' ), 'light-grey' => array( 'grey', 'светлосив' ), 'dark-grey' => array( 'grey', 'тъмносив' ), 'grey-melange' => array( 'grey', 'сив меланж' ), 'anthracite' => array( 'grey', 'антрацит' ), 'red' => array( 'red', 'червен' ), 'червен' => array( 'red', 'червен' ), 'light-red' => array( 'red', 'светлочервен' ), 'orange' => array( 'orange', 'оранжев' ), 'bright-orange' => array( 'orange', 'яркооранжев' ), 'green' => array( 'green', 'зелен' ), 'зелен' => array( 'green', 'зелен' ), 'dark-green' => array( 'green', 'тъмнозелен' ), 'fern-green' => array( 'green', 'тъмнозелен' ), 'spring-green' => array( 'green', 'светлозелен' ), 'lime-green' => array( 'green', 'лайм' ), 'olive' => array( 'olive', 'маслинен' ), 'khaki' => array( 'olive', 'каки' ), 'yellow' => array( 'yellow', 'жълт' ), 'жълт' => array( 'yellow', 'жълт' ), 'gold-yellow' => array( 'yellow', 'златистожълт' ), 'light-yellow' => array( 'yellow', 'светложълт' ), 'bright-yellow' => array( 'yellow', 'яркожълт' ), 'natural' => array( 'beige', 'натурален' ), 'aqua' => array( 'turquoise', 'аква' ), 'turquoise' => array( 'turquoise', 'тюркоазен' ), 'petrol' => array( 'turquoise', 'петролен' ), 'pink' => array( 'pink', 'розов' ), 'розов' => array( 'pink', 'розов' ), 'bright-pink' => array( 'pink', 'яркорозов' ), 'light-berry' => array( 'pink', 'светлорозов' ), 'purple' => array( 'violet', 'лилав' ), 'лилав' => array( 'violet', 'лилав' ), 'silver' => array( 'silver', 'сребрист' ), 'brown' => array( 'brown', 'кафяв' ), 'кафяв' => array( 'brown', 'кафяв' ), 'beige' => array( 'beige', 'бежов' ), 'бежов' => array( 'beige', 'бежов' ), ); /** * Maps a colour. * * @param string $colour Shop colour, e.g. "navy/carbon", "сиво и черно", "Бял, Син", "%d1%87...". * @return array{code:string, name:string, known:bool} code is "" when the colour is empty. */ public static function map( string $colour ): array { $colour = trim( mb_strtolower( rawurldecode( $colour ), 'UTF-8' ) ); if ( '' === $colour ) { return array( 'code' => '', 'name' => '', 'known' => false, ); } if ( isset( self::WORDS[ $colour ] ) ) { return array( 'code' => self::WORDS[ $colour ][0], 'name' => self::WORDS[ $colour ][1], 'known' => true, ); } $parts = preg_split( '#\s*(?:/|,| и )\s*#u', $colour ); $codes = array(); $names = array(); $known = true; foreach ( $parts as $part ) { $part = trim( (string) $part ); if ( '' === $part ) { continue; } if ( isset( self::WORDS[ $part ] ) ) { $codes[] = self::WORDS[ $part ][0]; $names[] = self::WORDS[ $part ][1]; } else { $known = false; $names[] = $part; } } return array( 'code' => $codes ? $codes[0] : 'other', 'name' => implode( '/', array_unique( $names ) ), 'known' => $known && (bool) $codes, ); } }