From 36fdd4ec72162fc7b49163f53c9140ae13749a0b Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 20:42:53 +0100 Subject: [PATCH 1/8] Update location.cpp --- src/modules/location.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/location.cpp b/src/modules/location.cpp index a743f40af..6283f7925 100644 --- a/src/modules/location.cpp +++ b/src/modules/location.cpp @@ -74,6 +74,8 @@ CountryAddressesInfo getAddresses(const Locale& locale) return unitedkingdomAddresses; case Locale::sk_SK: return slovakiaAddresses; + case Locale::pt_PT: + return portugalAddresses; default: return usaAddresses; } From 8a4d3d0974bf9a82d75e43ecb1a78dbedab8fb95 Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 20:42:57 +0100 Subject: [PATCH 2/8] Update location_data.h --- src/modules/location_data.h | 412 ++++++++++++++++++++++++++++++++++++ 1 file changed, 412 insertions(+) diff --git a/src/modules/location_data.h b/src/modules/location_data.h index f6d5bf0bd..8c4e819ba 100644 --- a/src/modules/location_data.h +++ b/src/modules/location_data.h @@ -5470,6 +5470,418 @@ const CountryAddressesInfo polandAddresses{ (polandStates), }; +// Portugal + +const auto portugalCities = std::to_array({ + "Lisboa", + "Porto", + "Amadora", + "Braga", + "Coimbra", + "Funchal", + "Guimarães", + "Queluz", + "Cacém", + "Setúbal", + "Barreiro", + "Aveiro", + "Évora", + "Leiria", + "Faro", + "Viseu", + "Odivelas", + "Póvoa de Varzim", + "Vila Nova de Gaia", + "Almada", + "Seixal", + "Cascais", + "Sintra", + "Oeiras", + "Portimão", + "Maia", + "Matosinhos", + "Torres Vedras", + "Viana do Castelo", + "Beja", + "Loulé", + "Santarém", + "Montijo", + "Fafe", + "Penafiel", + "Figueira da Foz", + "Tomar", + "Oliveira de Azeméis", + "Vila Real", + "Vila Franca de Xira", + "Vila do Conde", + "Albufeira", + "Castelo Branco", + "Silves", + "Ponta Delgada", + "Angra do Heroísmo", + "Horta", + "Caldas da Rainha", + "Marinha Grande", + "Lagos", + "Tavira", + "Lourinhã", + "Alcobaça", + "Sines", + "Chaves", + "Felgueiras", + "Amarante", + "Montemor-o-Novo", + "Moita", + "Olhão", + "Mafra", + "Almeirim", + "Palmela", + "Sesimbra", + "Esposende", + "Trofa", + "Gondomar", + "Santa Maria da Feira", + "Valongo", + "Loures", + "Lamego", + "Estremoz", + "Alcochete", + "Moura", + "Arcos de Valdevez", + "Paredes", + "Vizela", + "Abrantes", + "Vendas Novas", + "Alijó", + "Cantanhede", + "Monção", + "Paços de Ferreira", + "Monforte", + "Marco de Canaveses", + "Vila Verde", + "Valença", + "Aljustrel", + "Mira", + "Vila Viçosa", + "Carregado", + "Albergaria-a-Velha", + "Benavente", + "São João da Madeira", + "Troia", + "Arraiolos", + "Alvaiázere", + "Ansião", + "Mirandela", + "Vila Nova de Foz Côa", + "Elvas", + "Mêda", + "Póvoa de Lanhoso", + "Pombal", + "Macedo de Cavaleiros", + "Fronteira", + "Mértola", + "Melgaço", + "Tondela", + "Vagos", + "Carregal do Sal", + "Serpa", + "Estarreja", + "Sever do Vouga", + "Sabugal", + "Tábua", + "São Pedro do Sul", + "Vouzela", + "Peniche", + "Vila do Bispo", + "Castro Verde", + "Reguengos de Monsaraz", + "Idanha-a-Nova", + "Arganil", + "Oliveira do Hospital", + "Alpiarça", + "Vila Nova de Poiares", + "Odemira", + "Carrazeda de Ansiães", + "Sátão", + "Borba", + "Portel", + "Redondo", + "Moura", + "Mogadouro", + "Sabrosa", + "Montalegre", + "Miranda do Douro", + "Alandroal", + "Castro Marim", + "Aljezur", + "Terras de Bouro" +}); + +const auto portugalStates = std::to_array({ + "Distrito de Lisboa", + "Distrito do Porto", + "Distrito de Braga", + "Distrito de Coimbra", + "Distrito de Faro", + "Distrito de Setúbal", + "Distrito de Aveiro", + "Distrito de Leiria", + "Distrito de Santarém", + "Distrito de Viseu", + "Distrito de Viana do Castelo", + "Distrito de Beja", + "Distrito de Évora", + "Distrito de Castelo Branco", + "Distrito de Portalegre", + "Distrito da Guarda", + "Distrito de Vila Real", + "Distrito de Bragança", + "Distrito de Ponta Delgada", + "Distrito de Angra do Heroísmo", + "Distrito de Horta", + "Distrito do Funchal" +}); + +const auto portugalStreetNames = std::to_array({ + "Rua Augusta", + "Avenida da Liberdade", + "Rua de Santa Catarina", + "Rua dos Clérigos", + "Rua do Ouro", + "Avenida da República", + "Rua de São Bento", + "Rua 5 de Outubro", + "Rua do Carmo", + "Rua Garrett", + "Avenida Almirante Reis", + "Rua Ferreira Borges", + "Rua Mouzinho da Silveira", + "Avenida de Roma", + "Avenida João XXI", + "Avenida 24 de Julho", + "Rua Castilho", + "Rua de Cedofeita", + "Rua Miguel Bombarda", + "Rua da Madalena", + "Avenida Infante Santo", + "Rua da Prata", + "Rua da Boavista", + "Rua D. Pedro V", + "Rua da Constituição", + "Rua Saraiva de Carvalho", + "Avenida Dom Afonso Henriques", + "Rua dos Fanqueiros", + "Avenida da Igreja", + "Avenida da Boavista", + "Avenida Fontes Pereira de Melo", + "Avenida Gago Coutinho", + "Avenida Duque de Loulé", + "Rua Morais Soares", + "Rua do Conde Redondo", + "Rua D. João IV", + "Rua Nova do Almada", + "Rua de Belém", + "Rua dos Navegantes", + "Rua de São Sebastião", + "Rua Bartolomeu Dias", + "Rua Garrett", + "Rua do Norte", + "Rua do Arsenal", + "Rua de Santana", + "Rua do Telhal", + "Rua Pascoal de Melo", + "Avenida Defensores de Chaves", + "Rua Visconde de Santarém", + "Rua de São Paulo", + "Rua Alexandre Herculano", + "Rua Barata Salgueiro", + "Rua da Rosa", + "Rua da Misericórdia", + "Rua dos Poiais de São Bento", + "Rua dos Anjos", + "Avenida Columbano Bordalo Pinheiro", + "Avenida das Forças Armadas", + "Rua da Estrela", + "Rua dos Sapateiros", + "Avenida 5 de Outubro", + "Rua de São Mamede", + "Rua António Maria Cardoso", + "Rua da Alegria", + "Rua Domingos Sequeira", + "Avenida Marechal Craveiro Lopes", + "Rua de São Julião", + "Avenida dos Aliados", + "Rua de São Francisco", + "Rua da Constituição", + "Rua 31 de Janeiro", + "Avenida da Marginal", + "Rua do Bonjardim", + "Rua de Dom Manuel II", + "Rua Passos Manuel", + "Rua Sá da Bandeira", + "Rua Mouzinho da Silveira", + "Rua dos Bragas", + "Rua do Bolhão", + "Rua de Mouzinho da Silveira", + "Rua de Miguel Bombarda", + "Rua Formosa", + "Rua das Flores", + "Avenida dos Combatentes", + "Rua Nova da Trindade", + "Rua da Escola Politécnica", + "Rua de São Bento", + "Avenida do Brasil", + "Rua Bartolomeu Dias", + "Rua General Torres", + "Rua Álvares Cabral", + "Rua D. Filipa de Lencastre", + "Rua Camilo Castelo Branco", + "Rua Antero de Quental", + "Rua da Rainha D. Amélia", + "Rua das Fontainhas", + "Rua D. Pedro IV", + "Avenida Central", + "Rua do Almada", + "Rua de Santo António", + "Rua Álvares Cabral", + "Rua da Bandeirinha", + "Rua do Duque de Saldanha", + "Rua do Teatro", + "Rua da Sociedade Farmacêutica", + "Rua de Santa Apolónia", + "Rua de São Lázaro", + "Rua Marquês de Pombal", + "Avenida D. Carlos I", + "Rua do Salitre", + "Avenida Miguel Torga", + "Rua de São Domingos", + "Avenida de Berna", + "Rua dos Bacalhoeiros", + "Rua da Bica de Duarte Belo", + "Rua da Lapa", + "Avenida do Uruguai", + "Rua Joaquim António de Aguiar", + "Rua António Augusto de Aguiar", + "Avenida Elias Garcia", + "Rua da Trindade", + "Rua São José", + "Rua da Alfândega", + "Avenida Duque de Ávila", + "Avenida Sidónio Pais", + "Rua Domingos Sequeira", + "Rua da Junqueira", + "Rua do Sacramento", + "Rua do Conde de Redondo", + "Rua de São Marçal", + "Rua Professor Sousa da Câmara", + "Rua Jorge de Sena", + "Rua das Janelas Verdes", + "Rua da Oliveira ao Carmo", + "Rua Nova do Carvalho", + "Rua de São Nicolau", + "Rua do Alvito", + "Rua do Embaixador", + "Rua de Santa Marta", + "Rua Padre António Vieira", + "Avenida Almirante Gago Coutinho", + "Rua Actor Taborda", + "Avenida Almirante Reis", + "Rua Frei Tomás de Lemos", + "Avenida Infante Dom Henrique", + "Rua Afonso de Albuquerque", + "Rua Bartolomeu de Gusmão", + "Avenida Calouste Gulbenkian", + "Avenida Professor Egas Moniz", + "Rua Augusto Rosa", + "Rua da Imprensa Nacional", + "Avenida António Serpa", + "Rua Dom Luís I", + "Avenida General Norton de Matos", + "Rua Gil Vicente", + "Rua Afonso Lopes Vieira", + "Rua dos Cordoeiros", + "Rua do Olival", + "Rua dos Remédios", + "Avenida da Índia", + "Rua da Mãe d'Água", + "Rua da Esperança", + "Rua Pedro Álvares Cabral", + "Rua da Saudade", + "Rua de São João Nepomuceno", + "Rua da Cintura do Porto de Lisboa", + "Avenida Infante Dom Pedro", + "Rua do Poço dos Negros", + "Rua Viriato", + "Rua Damião de Góis", + "Rua General Silveira", + "Rua do Forno do Tijolo", + "Rua dos Remolares", + "Rua Fernandes Tomás", + "Rua dos Bacalhoeiros", + "Rua do Sacramento a Alcântara", + "Rua Professor Abel Salazar", + "Avenida José Malhoa", + "Avenida Fontes Pereira de Melo", + "Rua Filipe Folque", + "Rua do Grilo", + "Avenida de Ceuta", + "Avenida de Paris" +}); + +const auto portugalStreetSuffixes = std::to_array({ + "Rua", + "Avenida", + "Travessa", + "Praça", + "Largo", + "Estrada", + "Calçada" +}) + +const std::string_view portugalZipCodeFormat{"####-###"}; + +const auto portugalAddressFormats = + std::to_array({ + "{street} {buildingNumber}", + "{street} {buildingNumber}, {secondaryAddress}" +}); + +const auto portugalSecondaryAddressFormats = std::to_array({ + "Apartamento #", + "Andar #", + "Casa #", +}); + +const auto portugalBuildingNumberFormats = std::to_array({ + "#", + "##", + "###" +}); + +const auto portugalStreetFormats = std::to_array({ + "{streetName} {streetSuffix}" +}); + +const auto portugalCityFormats = std::to_array({ + "{cityName}", +}); + +const CountryAddressesInfo portugalAddresses{ + portugalZipCodeFormat, + {portugalAddressFormats}, + {portugalSecondaryAddressFormats}, + {portugalStreetFormats}, + {}, + {portugalStreetNames}, + {portugalStreetSuffixes}, + {portugalBuildingNumberFormats}, + {portugalCityFormats}, + {}, + {portugalCities}, + {}, + {portugalStates}, +}; + // Russia const auto russiaCities = std::to_array({ From 75073ac7ece980075abdcfa9c4b741f09b50cd54 Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 20:42:59 +0100 Subject: [PATCH 3/8] Update location_test.cpp --- tests/modules/location_test.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/modules/location_test.cpp b/tests/modules/location_test.cpp index daa7d69f5..5ee89c876 100644 --- a/tests/modules/location_test.cpp +++ b/tests/modules/location_test.cpp @@ -1011,3 +1011,32 @@ TEST_F(LocationTest, shouldGenerateSlovakiaStreetAddress) [&generatedStreetSuffix](const std::string_view& streetSuffix) { return generatedStreetSuffix.find(streetSuffix) != std::string::npos; })); } + + +TEST_F(LocationTest, shouldGeneratePortugalStreet) +{ + const auto generatedStreet = street(Locale::pt_PT); + + ASSERT_TRUE(std::ranges::any_of(portugalStreetNames, [&generatedStreet](const std::string_view& street) + { return generatedStreet.find(street) != std::string::npos; })); +} + +TEST_F(LocationTest, shouldGeneratePortugalStreetAddress) +{ + const auto generatedStreetAddress = streetAddress(Locale::pt_PT); + + const auto generatedStreetAddressElements = common::split(generatedStreetAddress, " "); + + const auto& generatedStreet = generatedStreetAddressElements[0]; + const auto& generatedStreetSuffix = generatedStreetAddressElements[1]; + const auto& generatedBuildingNumber = generatedStreetAddressElements[2]; + + ASSERT_TRUE(generatedBuildingNumber.size() >= 1 && generatedBuildingNumber.size() <= 3); + ASSERT_TRUE(checkIfAllCharactersAreNumeric(generatedBuildingNumber)); + + ASSERT_TRUE(std::ranges::any_of(portugalStreetNames, [&generatedStreet](const std::string_view& streetName) + { return generatedStreet.find(streetName) != std::string::npos; })); + + ASSERT_TRUE(std::ranges::any_of(portugalStreetSuffixes, [&generatedStreetSuffix](const std::string_view& streetSuffix) + { return generatedStreetSuffix.find(streetSuffix) != std::string::npos; })); +} From 6a9181004b962a81e8617c2254bdd1fd68524865 Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 20:43:44 +0100 Subject: [PATCH 4/8] Run format_code script --- include/faker-cxx/animal.h | 30 +-- include/faker-cxx/helper.h | 4 +- include/faker-cxx/random_generator.h | 6 +- src/modules/animal.cpp | 1 + src/modules/esport_data.h | 15 +- src/modules/internet_data.h | 318 +++++++++++++++------------ 6 files changed, 209 insertions(+), 165 deletions(-) diff --git a/include/faker-cxx/animal.h b/include/faker-cxx/animal.h index de6679a38..0550561c8 100644 --- a/include/faker-cxx/animal.h +++ b/include/faker-cxx/animal.h @@ -11,7 +11,7 @@ namespace faker::animal * @brief Returns a random species of bear. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of bear. * * @code @@ -24,7 +24,7 @@ FAKER_CXX_EXPORT std::string_view bear(Locale locale = Locale::en_US); * @brief Returns a random species of bird. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of bird. * * @code @@ -37,7 +37,7 @@ FAKER_CXX_EXPORT std::string_view bird(Locale locale = Locale::en_US); * @brief Returns a random species of cat. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of cat. * * @code @@ -50,7 +50,7 @@ FAKER_CXX_EXPORT std::string_view cat(Locale locale = Locale::en_US); * @brief Returns a random species of cetacean. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of cetacean. * * @code @@ -63,7 +63,7 @@ FAKER_CXX_EXPORT std::string_view cetacean(Locale locale = Locale::en_US); * @brief Returns a random species of cow. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of cow. * * @code @@ -76,7 +76,7 @@ FAKER_CXX_EXPORT std::string_view cow(Locale locale = Locale::en_US); * @brief Returns a random species of crocodilia. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of crocodilia. * * @code @@ -89,7 +89,7 @@ FAKER_CXX_EXPORT std::string_view crocodile(Locale locale = Locale::en_US); * @brief Returns a random species of dog. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of dog. * * @code @@ -102,7 +102,7 @@ FAKER_CXX_EXPORT std::string_view dog(Locale locale = Locale::en_US); * @brief Returns a random species of fish. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of fish. * * @code @@ -115,7 +115,7 @@ FAKER_CXX_EXPORT std::string_view fish(Locale locale = Locale::en_US); * @brief Returns a random species of horse. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of horse. * * @code @@ -128,7 +128,7 @@ FAKER_CXX_EXPORT std::string_view horse(Locale locale = Locale::en_US); * @brief Returns a random species of insect. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of insect. * * @code @@ -141,7 +141,7 @@ FAKER_CXX_EXPORT std::string_view insect(Locale locale = Locale::en_US); * @brief Returns a random species of lion. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of lion. * * @code @@ -154,7 +154,7 @@ FAKER_CXX_EXPORT std::string_view lion(Locale locale = Locale::en_US); * @brief Returns a random species of rabbit. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of rabbit. * * @code @@ -167,7 +167,7 @@ FAKER_CXX_EXPORT std::string_view rabbit(Locale locale = Locale::en_US); * @brief Returns a random species of rodent. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of rodent. * * @code @@ -180,7 +180,7 @@ FAKER_CXX_EXPORT std::string_view rodent(Locale locale = Locale::en_US); * @brief Returns a random species of snake. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Species of snake. * * @code @@ -193,7 +193,7 @@ FAKER_CXX_EXPORT std::string_view snake(Locale locale = Locale::en_US); * @brief Returns a random type of animal. * * @param locale The locale. Defaults to `Locale::en_US`. - * + * * @returns Type of animal. * * @code diff --git a/include/faker-cxx/helper.h b/include/faker-cxx/helper.h index cb780e7bc..f21f25517 100644 --- a/include/faker-cxx/helper.h +++ b/include/faker-cxx/helper.h @@ -10,8 +10,8 @@ namespace faker::helper { template -concept input_range_with_faster_size_compute_than_linear_rng = - std::ranges::input_range && (std::ranges::sized_range || std::ranges::forward_range); +concept input_range_with_faster_size_compute_than_linear_rng = std::ranges::input_range && + (std::ranges::sized_range || std::ranges::forward_range); template decltype(auto) randomElement(Range&& range) diff --git a/include/faker-cxx/random_generator.h b/include/faker-cxx/random_generator.h index 9f5e70984..c5408b18f 100644 --- a/include/faker-cxx/random_generator.h +++ b/include/faker-cxx/random_generator.h @@ -6,7 +6,8 @@ namespace faker { template - requires std::uniform_random_bit_generator +requires std::uniform_random_bit_generator + class RandomGenerator { public: @@ -20,7 +21,8 @@ class RandomGenerator RandomGenerator& operator=(RandomGenerator&&) = default; template - requires std::is_invocable_r_v + requires std::is_invocable_r_v + int operator()(Dist&& dist) { return std::forward(dist)(generator_); diff --git a/src/modules/animal.cpp b/src/modules/animal.cpp index 5b8ccc56e..44babcc75 100644 --- a/src/modules/animal.cpp +++ b/src/modules/animal.cpp @@ -18,6 +18,7 @@ const struct AnimalDefinition& getAnimalDefinition(Locale locale) } } } + std::string_view bear(Locale locale) { const auto& animalDefinition = getAnimalDefinition(locale); diff --git a/src/modules/esport_data.h b/src/modules/esport_data.h index 2f9fea170..b1d099dbb 100644 --- a/src/modules/esport_data.h +++ b/src/modules/esport_data.h @@ -49,16 +49,11 @@ const auto enUSEvents = "IEM"}); const auto enUSGames = std::to_array({"Valorant", "League Of Legend", "Rocket League", "Fifa", - "Overwatch", "CSGO", "Fortnite", "Dota 2", - "Street Fighter," - "Apex Legends", - "TFT", "PUBG", "Call of Duty"}); + "Overwatch", "CSGO", "Fortnite", "Dota 2", + "Street Fighter," + "Apex Legends", + "TFT", "PUBG", "Call of Duty"}); const EsportDefinition enUSEsportDefinition = { - .players = enUSPlayers, - .teams = enUSTeams, - .leagues = enUSLeagues, - .events = enUSEvents, - .games = enUSGames -}; + .players = enUSPlayers, .teams = enUSTeams, .leagues = enUSLeagues, .events = enUSEvents, .games = enUSGames}; } \ No newline at end of file diff --git a/src/modules/internet_data.h b/src/modules/internet_data.h index 9064e9b14..b1b96a923 100644 --- a/src/modules/internet_data.h +++ b/src/modules/internet_data.h @@ -187,24 +187,34 @@ const auto smileyEmojis = std::to_array({ }); const auto bodyEmojis = std::to_array({ - "☝️", "☝🏻", "☝🏼", "☝🏽", "☝🏾", "☝🏿", "✊", "✊🏻", "✊🏼", "✊🏽", "✊🏾", "✊🏿", "✋", "✋🏻", - "✋🏼", "✋🏽", "✋🏾", "✋🏿", "✌️", "✌🏻", "✌🏼", "✌🏽", "✌🏾", "✌🏿", "✍️", "✍🏻", "✍🏼", "✍🏽", - "✍🏾", "✍🏿", "👀", "👁️", "👂", "👂🏻", "👂🏼", "👂🏽", "👂🏾", "👂🏿", "👃", "👃🏻", "👃🏼", "👃🏽", - "👃🏾", "👃🏿", "👄", "👅", "👆", "👆🏻", "👆🏼", "👆🏽", "👆🏾", "👆🏿", "👇", "👇🏻", "👇🏼", "👇🏽", - "👇🏾", "👇🏿", "👈", "👈🏻", "👈🏼", "👈🏽", "👈🏾", "👈🏿", "👉", "👉🏻", "👉🏼", "👉🏽", "👉🏾", "👉🏿", - "👊", "👊🏻", "👊🏼", "👊🏽", "👊🏾", "👊🏿", "👋", "👋🏻", "👋🏼", "👋🏽", "👋🏾", "👋🏿", "👌", "👌🏻", - "👌🏼", "👌🏽", "👌🏾", "👌🏿", "👍", "👍🏻", "👍🏼", "👍🏽", "👍🏾", "👍🏿", "👎", "👎🏻", "👎🏼", "👎🏽", - "👎🏾", "👎🏿", "👏", "👏🏻", "👏🏼", "👏🏽", "👏🏾", "👏🏿", "👐", "👐🏻", "👐🏼", "👐🏽", "👐🏾", "👐🏿", - "💅", "💅🏻", "💅🏼", "💅🏽", "💅🏾", "💅🏿", "💪", "💪🏻", "💪🏼", "💪🏽", "💪🏾", "💪🏿", "🖐️", "🖐🏻", - "🖐🏼", "🖐🏽", "🖐🏾", "🖐🏿", "🖕", "🖕🏻", "🖕🏼", "🖕🏽", "🖕🏾", "🖕🏿", "🖖", "🖖🏻", "🖖🏼", "🖖🏽", - "🖖🏾", "🖖🏿", "🙌", "🙌🏻", "🙌🏼", "🙌🏽", "🙌🏾", "🙌🏿", "🙏", "🙏🏻", "🙏🏼", "🙏🏽", "🙏🏾", "🙏🏿", - "🤌", "🤌🏻", "🤌🏼", "🤌🏽", "🤌🏾", "🤌🏿", "🤏", "🤏🏻", "🤏🏼", "🤏🏽", "🤏🏾", "🤏🏿", "🤘", "🤘🏻", - "🤘🏼", "🤘🏽", "🤘🏾", "🤘🏿", "🤙", "🤙🏻", "🤙🏼", "🤙🏽", "🤙🏾", "🤙🏿", "🤚", "🤚🏻", "🤚🏼", "🤚🏽", - "🤚🏾", "🤚🏿", "🤛", "🤛🏻", "🤛🏼", "🤛🏽", "🤛🏾", "🤛🏿", "🤜", "🤜🏻", "🤜🏼", "🤜🏽", "🤜🏾", "🤜🏿", - "🤝", "🤞", "🤞🏻", "🤞🏼", "🤞🏽", "🤞🏾", "🤞🏿", "🤟", "🤟🏻", "🤟🏼", "🤟🏽", "🤟🏾", "🤟🏿", "🤲", - "🤲🏻", "🤲🏼", "🤲🏽", "🤲🏾", "🤲🏿", "🤳", "🤳🏻", "🤳🏼", "🤳🏽", "🤳🏾", "🤳🏿", "🦴", "🦵", "🦵🏻", - "🦵🏼", "🦵🏽", "🦵🏾", "🦵🏿", "🦶", "🦶🏻", "🦶🏼", "🦶🏽", "🦶🏾", "🦶🏿", "🦷", "🦻", "🦻🏻", "🦻🏼", - "🦻🏽", "🦻🏾", "🦻🏿", "🦾", "🦿", "🧠", "🫀", "🫁", + "☝️", "☝🏻", "☝🏼", "☝🏽", "☝🏾", "☝🏿", "✊", "✊🏻", "✊🏼", + "✊🏽", "✊🏾", "✊🏿", "✋", "✋🏻", "✋🏼", "✋🏽", "✋🏾", "✋🏿", + "✌️", "✌🏻", "✌🏼", "✌🏽", "✌🏾", "✌🏿", "✍️", "✍🏻", "✍🏼", + "✍🏽", "✍🏾", "✍🏿", "👀", "👁️", "👂", "👂🏻", "👂🏼", "👂🏽", + "👂🏾", "👂🏿", "👃", "👃🏻", "👃🏼", "👃🏽", "👃🏾", "👃🏿", "👄", + "👅", "👆", "👆🏻", "👆🏼", "👆🏽", "👆🏾", "👆🏿", "👇", "👇🏻", + "👇🏼", "👇🏽", "👇🏾", "👇🏿", "👈", "👈🏻", "👈🏼", "👈🏽", "👈🏾", + "👈🏿", "👉", "👉🏻", "👉🏼", "👉🏽", "👉🏾", "👉🏿", "👊", "👊🏻", + "👊🏼", "👊🏽", "👊🏾", "👊🏿", "👋", "👋🏻", "👋🏼", "👋🏽", "👋🏾", + "👋🏿", "👌", "👌🏻", "👌🏼", "👌🏽", "👌🏾", "👌🏿", "👍", "👍🏻", + "👍🏼", "👍🏽", "👍🏾", "👍🏿", "👎", "👎🏻", "👎🏼", "👎🏽", "👎🏾", + "👎🏿", "👏", "👏🏻", "👏🏼", "👏🏽", "👏🏾", "👏🏿", "👐", "👐🏻", + "👐🏼", "👐🏽", "👐🏾", "👐🏿", "💅", "💅🏻", "💅🏼", "💅🏽", "💅🏾", + "💅🏿", "💪", "💪🏻", "💪🏼", "💪🏽", "💪🏾", "💪🏿", "🖐️", "🖐🏻", + "🖐🏼", "🖐🏽", "🖐🏾", "🖐🏿", "🖕", "🖕🏻", "🖕🏼", "🖕🏽", "🖕🏾", + "🖕🏿", "🖖", "🖖🏻", "🖖🏼", "🖖🏽", "🖖🏾", "🖖🏿", "🙌", "🙌🏻", + "🙌🏼", "🙌🏽", "🙌🏾", "🙌🏿", "🙏", "🙏🏻", "🙏🏼", "🙏🏽", "🙏🏾", + "🙏🏿", "🤌", "🤌🏻", "🤌🏼", "🤌🏽", "🤌🏾", "🤌🏿", "🤏", "🤏🏻", + "🤏🏼", "🤏🏽", "🤏🏾", "🤏🏿", "🤘", "🤘🏻", "🤘🏼", "🤘🏽", "🤘🏾", + "🤘🏿", "🤙", "🤙🏻", "🤙🏼", "🤙🏽", "🤙🏾", "🤙🏿", "🤚", "🤚🏻", + "🤚🏼", "🤚🏽", "🤚🏾", "🤚🏿", "🤛", "🤛🏻", "🤛🏼", "🤛🏽", "🤛🏾", + "🤛🏿", "🤜", "🤜🏻", "🤜🏼", "🤜🏽", "🤜🏾", "🤜🏿", "🤝", "🤞", + "🤞🏻", "🤞🏼", "🤞🏽", "🤞🏾", "🤞🏿", "🤟", "🤟🏻", "🤟🏼", "🤟🏽", + "🤟🏾", "🤟🏿", "🤲", "🤲🏻", "🤲🏼", "🤲🏽", "🤲🏾", "🤲🏿", "🤳", + "🤳🏻", "🤳🏼", "🤳🏽", "🤳🏾", "🤳🏿", "🦴", "🦵", "🦵🏻", "🦵🏼", + "🦵🏽", "🦵🏾", "🦵🏿", "🦶", "🦶🏻", "🦶🏼", "🦶🏽", "🦶🏾", "🦶🏿", + "🦷", "🦻", "🦻🏻", "🦻🏼", "🦻🏽", "🦻🏾", "🦻🏿", "🦾", "🦿", + "🧠", "🫀", "🫁", }); const auto personEmojis = std::to_array({ @@ -333,141 +343,177 @@ const auto personEmojis = std::to_array({ }); const auto natureEmojis = std::to_array({ - "☘️", "🌱", - "🌲", "🌳", - "🌴", "🌵", - "🌷", "🌸", - "🌹", "🌺", - "🌻", "🌼", - "🌾", "🌿", - "🍀", "🍁", - "🍂", "🍃", - "🏵️", "🐀", - "🐁", "🐂", - "🐃", "🐄", - "🐅", "🐆", - "🐇", "🐈", + "☘️", "🌱", + "🌲", "🌳", + "🌴", "🌵", + "🌷", "🌸", + "🌹", "🌺", + "🌻", "🌼", + "🌾", "🌿", + "🍀", "🍁", + "🍂", "🍃", + "🏵️", "🐀", + "🐁", "🐂", + "🐃", "🐄", + "🐅", "🐆", + "🐇", "🐈", "🐈‍⬛", "🐉", - "🐊", "🐋", - "🐌", "🐍", - "🐎", "🐏", - "🐐", "🐑", - "🐒", "🐓", - "🐔", "🐕", + "🐊", "🐋", + "🐌", "🐍", + "🐎", "🐏", + "🐐", "🐑", + "🐒", "🐓", + "🐔", "🐕", "🐕‍🦺", "🐖", - "🐗", "🐘", - "🐙", "🐚", - "🐛", "🐜", - "🐝", "🐞", - "🐟", "🐠", - "🐡", "🐢", - "🐣", "🐤", - "🐥", "🐦", - "🐧", "🐨", - "🐩", "🐪", - "🐫", "🐬", - "🐭", "🐮", - "🐯", "🐰", - "🐱", "🐲", - "🐳", "🐴", - "🐵", "🐶", - "🐷", "🐸", - "🐹", "🐺", - "🐻", "🐻‍❄️", - "🐼", "🐽", - "🐾", "🐿️", - "💐", "💮", - "🕊️", "🕷️", - "🕸️", "🥀", - "🦁", "🦂", - "🦃", "🦄", - "🦅", "🦆", - "🦇", "🦈", - "🦉", "🦊", - "🦋", "🦌", - "🦍", "🦎", - "🦏", "🦒", - "🦓", "🦔", - "🦕", "🦖", - "🦗", "🦘", - "🦙", "🦚", - "🦛", "🦜", - "🦝", "🦟", - "🦠", "🦡", - "🦢", "🦣", - "🦤", "🦥", - "🦦", "🦧", - "🦨", "🦩", - "🦫", "🦬", - "🦭", "🦮", - "🪰", "🪱", - "🪲", "🪳", - "🪴", "🪶", + "🐗", "🐘", + "🐙", "🐚", + "🐛", "🐜", + "🐝", "🐞", + "🐟", "🐠", + "🐡", "🐢", + "🐣", "🐤", + "🐥", "🐦", + "🐧", "🐨", + "🐩", "🐪", + "🐫", "🐬", + "🐭", "🐮", + "🐯", "🐰", + "🐱", "🐲", + "🐳", "🐴", + "🐵", "🐶", + "🐷", "🐸", + "🐹", "🐺", + "🐻", "🐻‍❄️", + "🐼", "🐽", + "🐾", "🐿️", + "💐", "💮", + "🕊️", "🕷️", + "🕸️", "🥀", + "🦁", "🦂", + "🦃", "🦄", + "🦅", "🦆", + "🦇", "🦈", + "🦉", "🦊", + "🦋", "🦌", + "🦍", "🦎", + "🦏", "🦒", + "🦓", "🦔", + "🦕", "🦖", + "🦗", "🦘", + "🦙", "🦚", + "🦛", "🦜", + "🦝", "🦟", + "🦠", "🦡", + "🦢", "🦣", + "🦤", "🦥", + "🦦", "🦧", + "🦨", "🦩", + "🦫", "🦬", + "🦭", "🦮", + "🪰", "🪱", + "🪲", "🪳", + "🪴", "🪶", }); const auto foodEmojis = std::to_array({ - "☕", "🌭", "🌮", "🌯", "🌰", "🌶️", "🌽", "🍄", "🍅", "🍆", "🍇", "🍈", "🍉", "🍊", "🍋", "🍌", "🍍", "🍎", "🍏", - "🍐", "🍑", "🍒", "🍓", "🍔", "🍕", "🍖", "🍗", "🍘", "🍙", "🍚", "🍛", "🍜", "🍝", "🍞", "🍟", "🍠", "🍡", "🍢", - "🍣", "🍤", "🍥", "🍦", "🍧", "🍨", "🍩", "🍪", "🍫", "🍬", "🍭", "🍮", "🍯", "🍰", "🍱", "🍲", "🍳", "🍴", "🍵", - "🍶", "🍷", "🍸", "🍹", "🍺", "🍻", "🍼", "🍽️", "🍾", "🍿", "🎂", "🏺", "🔪", "🥂", "🥃", "🥄", "🥐", "🥑", "🥒", - "🥓", "🥔", "🥕", "🥖", "🥗", "🥘", "🥙", "🥚", "🥛", "🥜", "🥝", "🥞", "🥟", "🥠", "🥡", "🥢", "🥣", "🥤", "🥥", - "🥦", "🥧", "🥨", "🥩", "🥪", "🥫", "🥬", "🥭", "🥮", "🥯", "🦀", "🦐", "🦑", "🦞", "🦪", "🧀", "🧁", "🧂", "🧃", - "🧄", "🧅", "🧆", "🧇", "🧈", "🧉", "🧊", "🧋", "🫐", "🫑", "🫒", "🫓", "🫔", "🫕", "🫖", + "☕", "🌭", "🌮", "🌯", "🌰", "🌶️", "🌽", "🍄", "🍅", "🍆", "🍇", "🍈", "🍉", + "🍊", "🍋", "🍌", "🍍", "🍎", "🍏", "🍐", "🍑", "🍒", "🍓", "🍔", "🍕", "🍖", + "🍗", "🍘", "🍙", "🍚", "🍛", "🍜", "🍝", "🍞", "🍟", "🍠", "🍡", "🍢", "🍣", + "🍤", "🍥", "🍦", "🍧", "🍨", "🍩", "🍪", "🍫", "🍬", "🍭", "🍮", "🍯", "🍰", + "🍱", "🍲", "🍳", "🍴", "🍵", "🍶", "🍷", "🍸", "🍹", "🍺", "🍻", "🍼", "🍽️", + "🍾", "🍿", "🎂", "🏺", "🔪", "🥂", "🥃", "🥄", "🥐", "🥑", "🥒", "🥓", "🥔", + "🥕", "🥖", "🥗", "🥘", "🥙", "🥚", "🥛", "🥜", "🥝", "🥞", "🥟", "🥠", "🥡", + "🥢", "🥣", "🥤", "🥥", "🥦", "🥧", "🥨", "🥩", "🥪", "🥫", "🥬", "🥭", "🥮", + "🥯", "🦀", "🦐", "🦑", "🦞", "🦪", "🧀", "🧁", "🧂", "🧃", "🧄", "🧅", "🧆", + "🧇", "🧈", "🧉", "🧊", "🧋", "🫐", "🫑", "🫒", "🫓", "🫔", "🫕", "🫖", }); const auto travelEmojis = std::to_array({ - "⌚", "⌛", "⏰", "⏱️", "⏲️", "⏳", "☀️", "☁️", "☂️", "☃️", "☄️", "☔", "♨️", "⚓", "⚡", "⛄", "⛅", "⛈️", - "⛩️", "⛪", "⛰️", "⛱️", "⛲", "⛴️", "⛵", "⛺", "⛽", "✈️", "❄️", "⭐", "🌀", "🌁", "🌂", "🌃", "🌄", "🌅", - "🌆", "🌇", "🌈", "🌉", "🌊", "🌋", "🌌", "🌍", "🌎", "🌏", "🌐", "🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", - "🌘", "🌙", "🌚", "🌛", "🌜", "🌝", "🌞", "🌟", "🌠", "🌡️", "🌤️", "🌥️", "🌦️", "🌧️", "🌨️", "🌩️", "🌪️", "🌫️", - "🌬️", "🎠", "🎡", "🎢", "🎪", "🏍️", "🏎️", "🏔️", "🏕️", "🏖️", "🏗️", "🏘️", "🏙️", "🏚️", "🏛️", "🏜️", "🏝️", "🏞️", - "🏟️", "🏠", "🏡", "🏢", "🏣", "🏤", "🏥", "🏦", "🏨", "🏩", "🏪", "🏫", "🏬", "🏭", "🏯", "🏰", "💈", "💒", - "💧", "💺", "🔥", "🕋", "🕌", "🕍", "🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕛", - "🕜", "🕝", "🕞", "🕟", "🕠", "🕡", "🕢", "🕣", "🕤", "🕥", "🕦", "🕧", "🕰️", "🗺️", "🗻", "🗼", "🗽", "🗾", - "🚀", "🚁", "🚂", "🚃", "🚄", "🚅", "🚆", "🚇", "🚈", "🚉", "🚊", "🚋", "🚌", "🚍", "🚎", "🚏", "🚐", "🚑", - "🚒", "🚓", "🚔", "🚕", "🚖", "🚗", "🚘", "🚙", "🚚", "🚛", "🚜", "🚝", "🚞", "🚟", "🚠", "🚡", "🚢", "🚤", - "🚥", "🚦", "🚧", "🚨", "🚲", "🛎️", "🛑", "🛕", "🛖", "🛢️", "🛣️", "🛤️", "🛥️", "🛩️", "🛫", "🛬", "🛰️", "🛳️", - "🛴", "🛵", "🛶", "🛸", "🛹", "🛺", "🛻", "🛼", "🦼", "🦽", "🧭", "🧱", "🧳", "🪂", "🪐", "🪨", "🪵", + "⌚", "⌛", "⏰", "⏱️", "⏲️", "⏳", "☀️", "☁️", "☂️", "☃️", + "☄️", "☔", "♨️", "⚓", "⚡", "⛄", "⛅", "⛈️", "⛩️", "⛪", + "⛰️", "⛱️", "⛲", "⛴️", "⛵", "⛺", "⛽", "✈️", "❄️", "⭐", + "🌀", "🌁", "🌂", "🌃", "🌄", "🌅", "🌆", "🌇", "🌈", "🌉", + "🌊", "🌋", "🌌", "🌍", "🌎", "🌏", "🌐", "🌑", "🌒", "🌓", + "🌔", "🌕", "🌖", "🌗", "🌘", "🌙", "🌚", "🌛", "🌜", "🌝", + "🌞", "🌟", "🌠", "🌡️", "🌤️", "🌥️", "🌦️", "🌧️", "🌨️", "🌩️", + "🌪️", "🌫️", "🌬️", "🎠", "🎡", "🎢", "🎪", "🏍️", "🏎️", "🏔️", + "🏕️", "🏖️", "🏗️", "🏘️", "🏙️", "🏚️", "🏛️", "🏜️", "🏝️", "🏞️", + "🏟️", "🏠", "🏡", "🏢", "🏣", "🏤", "🏥", "🏦", "🏨", "🏩", + "🏪", "🏫", "🏬", "🏭", "🏯", "🏰", "💈", "💒", "💧", "💺", + "🔥", "🕋", "🕌", "🕍", "🕐", "🕑", "🕒", "🕓", "🕔", "🕕", + "🕖", "🕗", "🕘", "🕙", "🕚", "🕛", "🕜", "🕝", "🕞", "🕟", + "🕠", "🕡", "🕢", "🕣", "🕤", "🕥", "🕦", "🕧", "🕰️", "🗺️", + "🗻", "🗼", "🗽", "🗾", "🚀", "🚁", "🚂", "🚃", "🚄", "🚅", + "🚆", "🚇", "🚈", "🚉", "🚊", "🚋", "🚌", "🚍", "🚎", "🚏", + "🚐", "🚑", "🚒", "🚓", "🚔", "🚕", "🚖", "🚗", "🚘", "🚙", + "🚚", "🚛", "🚜", "🚝", "🚞", "🚟", "🚠", "🚡", "🚢", "🚤", + "🚥", "🚦", "🚧", "🚨", "🚲", "🛎️", "🛑", "🛕", "🛖", "🛢️", + "🛣️", "🛤️", "🛥️", "🛩️", "🛫", "🛬", "🛰️", "🛳️", "🛴", "🛵", + "🛶", "🛸", "🛹", "🛺", "🛻", "🛼", "🦼", "🦽", "🧭", "🧱", + "🧳", "🪂", "🪐", "🪨", "🪵", }); const auto activityEmojis = std::to_array({ - "♟️", "♠️", "♣️", "♥️", "♦️", "⚽", "⚾", "⛳", "⛸️", "✨", "🀄", "🃏", "🎀", "🎁", "🎃", "🎄", "🎆", - "🎇", "🎈", "🎉", "🎊", "🎋", "🎍", "🎎", "🎏", "🎐", "🎑", "🎖️", "🎗️", "🎟️", "🎣", "🎨", "🎫", "🎭", - "🎮", "🎯", "🎰", "🎱", "🎲", "🎳", "🎴", "🎽", "🎾", "🎿", "🏀", "🏅", "🏆", "🏈", "🏉", "🏏", "🏐", - "🏑", "🏒", "🏓", "🏸", "🔮", "🕹️", "🖼️", "🛷", "🤿", "🥅", "🥇", "🥈", "🥉", "🥊", "🥋", "🥌", "🥍", - "🥎", "🥏", "🧧", "🧨", "🧩", "🧵", "🧶", "🧸", "🧿", "🪀", "🪁", "🪄", "🪅", "🪆", "🪡", "🪢", + "♟️", "♠️", "♣️", "♥️", "♦️", "⚽", "⚾", "⛳", "⛸️", "✨", "🀄", "🃏", + "🎀", "🎁", "🎃", "🎄", "🎆", "🎇", "🎈", "🎉", "🎊", "🎋", "🎍", "🎎", + "🎏", "🎐", "🎑", "🎖️", "🎗️", "🎟️", "🎣", "🎨", "🎫", "🎭", "🎮", "🎯", + "🎰", "🎱", "🎲", "🎳", "🎴", "🎽", "🎾", "🎿", "🏀", "🏅", "🏆", "🏈", + "🏉", "🏏", "🏐", "🏑", "🏒", "🏓", "🏸", "🔮", "🕹️", "🖼️", "🛷", "🤿", + "🥅", "🥇", "🥈", "🥉", "🥊", "🥋", "🥌", "🥍", "🥎", "🥏", "🧧", "🧨", + "🧩", "🧵", "🧶", "🧸", "🧿", "🪀", "🪁", "🪄", "🪅", "🪆", "🪡", "🪢", }); const auto objectEmojis = std::to_array({ - "⌨️", "☎️", "⚒️", "⚔️", "⚖️", "⚗️", "⚙️", "⚰️", "⚱️", "⛏️", "⛑️", "⛓️", "✂️", "✉️", "✏️", "✒️", "🎒", "🎓", - "🎙️", "🎚️", "🎛️", "🎞️", "🎤", "🎥", "🎧", "🎩", "🎬", "🎵", "🎶", "🎷", "🎸", "🎹", "🎺", "🎻", "🎼", "🏮", - "🏷️", "🏹", "👑", "👒", "👓", "👔", "👕", "👖", "👗", "👘", "👙", "👚", "👛", "👜", "👝", "👞", "👟", "👠", - "👡", "👢", "💄", "💉", "💊", "💍", "💎", "💡", "💰", "💳", "💴", "💵", "💶", "💷", "💸", "💹", "💻", "💼", - "💽", "💾", "💿", "📀", "📁", "📂", "📃", "📄", "📅", "📆", "📇", "📈", "📉", "📊", "📋", "📌", "📍", "📎", - "📏", "📐", "📑", "📒", "📓", "📔", "📕", "📖", "📗", "📘", "📙", "📚", "📜", "📝", "📞", "📟", "📠", "📡", - "📢", "📣", "📤", "📥", "📦", "📧", "📨", "📩", "📪", "📫", "📬", "📭", "📮", "📯", "📰", "📱", "📲", "📷", - "📸", "📹", "📺", "📻", "📼", "📽️", "📿", "🔇", "🔈", "🔉", "🔊", "🔋", "🔌", "🔍", "🔎", "🔏", "🔐", "🔑", - "🔒", "🔓", "🔔", "🔕", "🔖", "🔗", "🔦", "🔧", "🔨", "🔩", "🔫", "🔬", "🔭", "🕯️", "🕶️", "🖇️", "🖊️", "🖋️", - "🖌️", "🖍️", "🖥️", "🖨️", "🖱️", "🖲️", "🗂️", "🗃️", "🗄️", "🗑️", "🗒️", "🗓️", "🗜️", "🗝️", "🗞️", "🗡️", "🗳️", "🗿", - "🚪", "🚬", "🚽", "🚿", "🛁", "🛋️", "🛍️", "🛏️", "🛒", "🛗", "🛠️", "🛡️", "🥁", "🥻", "🥼", "🥽", "🥾", "🥿", - "🦯", "🦺", "🧢", "🧣", "🧤", "🧥", "🧦", "🧪", "🧫", "🧬", "🧮", "🧯", "🧰", "🧲", "🧴", "🧷", "🧹", "🧺", - "🧻", "🧼", "🧽", "🧾", "🩰", "🩱", "🩲", "🩳", "🩴", "🩸", "🩹", "🩺", "🪃", "🪑", "🪒", "🪓", "🪔", "🪕", - "🪖", "🪗", "🪘", "🪙", "🪚", "🪛", "🪜", "🪝", "🪞", "🪟", "🪠", "🪣", "🪤", "🪥", "🪦", "🪧", + "⌨️", "☎️", "⚒️", "⚔️", "⚖️", "⚗️", "⚙️", "⚰️", "⚱️", "⛏️", + "⛑️", "⛓️", "✂️", "✉️", "✏️", "✒️", "🎒", "🎓", "🎙️", "🎚️", + "🎛️", "🎞️", "🎤", "🎥", "🎧", "🎩", "🎬", "🎵", "🎶", "🎷", + "🎸", "🎹", "🎺", "🎻", "🎼", "🏮", "🏷️", "🏹", "👑", "👒", + "👓", "👔", "👕", "👖", "👗", "👘", "👙", "👚", "👛", "👜", + "👝", "👞", "👟", "👠", "👡", "👢", "💄", "💉", "💊", "💍", + "💎", "💡", "💰", "💳", "💴", "💵", "💶", "💷", "💸", "💹", + "💻", "💼", "💽", "💾", "💿", "📀", "📁", "📂", "📃", "📄", + "📅", "📆", "📇", "📈", "📉", "📊", "📋", "📌", "📍", "📎", + "📏", "📐", "📑", "📒", "📓", "📔", "📕", "📖", "📗", "📘", + "📙", "📚", "📜", "📝", "📞", "📟", "📠", "📡", "📢", "📣", + "📤", "📥", "📦", "📧", "📨", "📩", "📪", "📫", "📬", "📭", + "📮", "📯", "📰", "📱", "📲", "📷", "📸", "📹", "📺", "📻", + "📼", "📽️", "📿", "🔇", "🔈", "🔉", "🔊", "🔋", "🔌", "🔍", + "🔎", "🔏", "🔐", "🔑", "🔒", "🔓", "🔔", "🔕", "🔖", "🔗", + "🔦", "🔧", "🔨", "🔩", "🔫", "🔬", "🔭", "🕯️", "🕶️", "🖇️", + "🖊️", "🖋️", "🖌️", "🖍️", "🖥️", "🖨️", "🖱️", "🖲️", "🗂️", "🗃️", + "🗄️", "🗑️", "🗒️", "🗓️", "🗜️", "🗝️", "🗞️", "🗡️", "🗳️", "🗿", + "🚪", "🚬", "🚽", "🚿", "🛁", "🛋️", "🛍️", "🛏️", "🛒", "🛗", + "🛠️", "🛡️", "🥁", "🥻", "🥼", "🥽", "🥾", "🥿", "🦯", "🦺", + "🧢", "🧣", "🧤", "🧥", "🧦", "🧪", "🧫", "🧬", "🧮", "🧯", + "🧰", "🧲", "🧴", "🧷", "🧹", "🧺", "🧻", "🧼", "🧽", "🧾", + "🩰", "🩱", "🩲", "🩳", "🩴", "🩸", "🩹", "🩺", "🪃", "🪑", + "🪒", "🪓", "🪔", "🪕", "🪖", "🪗", "🪘", "🪙", "🪚", "🪛", + "🪜", "🪝", "🪞", "🪟", "🪠", "🪣", "🪤", "🪥", "🪦", "🪧", }); const auto symbolEmojis = std::to_array({ - "#️⃣", "*️⃣", "0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "©️", "®️", "‼️", "⁉️", "™️", "ℹ️", "↔️", - "↕️", "↖️", "↗️", "↘️", "↙️", "↩️", "↪️", "⏏️", "⏩", "⏪", "⏫", "⏬", "⏭️", "⏮️", "⏯️", "⏸️", "⏹️", "⏺️", "Ⓜ️", - "▪️", "▫️", "▶️", "◀️", "◻️", "◼️", "◽", "◾", "☑️", "☢️", "☣️", "☦️", "☪️", "☮️", "☯️", "☸️", "♀️", "♂️", "♈", - "♉", "♊", "♋", "♌", "♍", "♎", "♏", "♐", "♑", "♒", "♓", "♻️", "♾️", "♿", "⚕️", "⚛️", "⚜️", "⚠️", "⚧️", - "⚪", "⚫", "⛎", "⛔", "✅", "✔️", "✖️", "✝️", "✡️", "✳️", "✴️", "❇️", "❌", "❎", "❓", "❔", "❕", "❗", "➕", - "➖", "➗", "➡️", "➰", "➿", "⤴️", "⤵️", "⬅️", "⬆️", "⬇️", "⬛", "⬜", "⭕", "〰️", "〽️", "㊗️", "㊙️", "🅰️", "🅱️", - "🅾️", "🅿️", "🆎", "🆑", "🆒", "🆓", "🆔", "🆕", "🆖", "🆗", "🆘", "🆙", "🆚", "🈁", "🈂️", "🈚", "🈯", "🈲", "🈳", - "🈴", "🈵", "🈶", "🈷️", "🈸", "🈹", "🈺", "🉐", "🉑", "🎦", "🏧", "💠", "💱", "💲", "📛", "📳", "📴", "📵", "📶", - "🔀", "🔁", "🔂", "🔃", "🔄", "🔅", "🔆", "🔘", "🔙", "🔚", "🔛", "🔜", "🔝", "🔞", "🔟", "🔠", "🔡", "🔢", "🔣", - "🔤", "🔯", "🔰", "🔱", "🔲", "🔳", "🔴", "🔵", "🔶", "🔷", "🔸", "🔹", "🔺", "🔻", "🔼", "🔽", "🕉️", "🕎", "🚫", - "🚭", "🚮", "🚯", "🚰", "🚱", "🚳", "🚷", "🚸", "🚹", "🚺", "🚻", "🚼", "🚾", "🛂", "🛃", "🛄", "🛅", "🛐", "🟠", - "🟡", "🟢", "🟣", "🟤", "🟥", "🟦", "🟧", "🟨", "🟩", "🟪", "🟫", + "#️⃣", "*️⃣", "0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", + "8️⃣", "9️⃣", "©️", "®️", "‼️", "⁉️", "™️", "ℹ️", "↔️", "↕️", + "↖️", "↗️", "↘️", "↙️", "↩️", "↪️", "⏏️", "⏩", "⏪", "⏫", + "⏬", "⏭️", "⏮️", "⏯️", "⏸️", "⏹️", "⏺️", "Ⓜ️", "▪️", "▫️", + "▶️", "◀️", "◻️", "◼️", "◽", "◾", "☑️", "☢️", "☣️", "☦️", + "☪️", "☮️", "☯️", "☸️", "♀️", "♂️", "♈", "♉", "♊", "♋", + "♌", "♍", "♎", "♏", "♐", "♑", "♒", "♓", "♻️", "♾️", + "♿", "⚕️", "⚛️", "⚜️", "⚠️", "⚧️", "⚪", "⚫", "⛎", "⛔", + "✅", "✔️", "✖️", "✝️", "✡️", "✳️", "✴️", "❇️", "❌", "❎", + "❓", "❔", "❕", "❗", "➕", "➖", "➗", "➡️", "➰", "➿", + "⤴️", "⤵️", "⬅️", "⬆️", "⬇️", "⬛", "⬜", "⭕", "〰️", "〽️", + "㊗️", "㊙️", "🅰️", "🅱️", "🅾️", "🅿️", "🆎", "🆑", "🆒", "🆓", + "🆔", "🆕", "🆖", "🆗", "🆘", "🆙", "🆚", "🈁", "🈂️", "🈚", + "🈯", "🈲", "🈳", "🈴", "🈵", "🈶", "🈷️", "🈸", "🈹", "🈺", + "🉐", "🉑", "🎦", "🏧", "💠", "💱", "💲", "📛", "📳", "📴", + "📵", "📶", "🔀", "🔁", "🔂", "🔃", "🔄", "🔅", "🔆", "🔘", + "🔙", "🔚", "🔛", "🔜", "🔝", "🔞", "🔟", "🔠", "🔡", "🔢", + "🔣", "🔤", "🔯", "🔰", "🔱", "🔲", "🔳", "🔴", "🔵", "🔶", + "🔷", "🔸", "🔹", "🔺", "🔻", "🔼", "🔽", "🕉️", "🕎", "🚫", + "🚭", "🚮", "🚯", "🚰", "🚱", "🚳", "🚷", "🚸", "🚹", "🚺", + "🚻", "🚼", "🚾", "🛂", "🛃", "🛄", "🛅", "🛐", "🟠", "🟡", + "🟢", "🟣", "🟤", "🟥", "🟦", "🟧", "🟨", "🟩", "🟪", "🟫", }); const auto flagEmojis = std::to_array({ From b0e3c6707b32ac33d3781a653228aaaa2c7b62be Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 21:00:12 +0100 Subject: [PATCH 5/8] Update location_data.h fix: misstype --- src/modules/location_data.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/location_data.h b/src/modules/location_data.h index 8c4e819ba..4034d001f 100644 --- a/src/modules/location_data.h +++ b/src/modules/location_data.h @@ -5828,7 +5828,7 @@ const auto portugalStreetNames = std::to_array({ "Avenida de Paris" }); -const auto portugalStreetSuffixes = std::to_array({ +const auto portugalStreetSuffixes = std::to_array({ "Rua", "Avenida", "Travessa", @@ -5836,7 +5836,7 @@ const auto portugalStreetSuffixes = std::to_array({ "Largo", "Estrada", "Calçada" -}) +}); const std::string_view portugalZipCodeFormat{"####-###"}; From 3b912f51825a7fff2828cc504d9c3715fdd4e338 Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 21:22:11 +0100 Subject: [PATCH 6/8] Update location_test.cpp add portugal data to switch case --- tests/modules/location_test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/modules/location_test.cpp b/tests/modules/location_test.cpp index 5ee89c876..a0564a80a 100644 --- a/tests/modules/location_test.cpp +++ b/tests/modules/location_test.cpp @@ -76,6 +76,8 @@ CountryAddressesInfo getAddresses(const Locale& locale) return unitedkingdomAddresses; case Locale::sk_SK: return slovakiaAddresses; + case Locale::pt_PT: + return portugalAddresses; default: return usaAddresses; } From 01c12ab394f6b929505dadea5fb91a81125c31c9 Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 21:42:37 +0100 Subject: [PATCH 7/8] fix: location_test.cpp --- tests/modules/location_test.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/tests/modules/location_test.cpp b/tests/modules/location_test.cpp index a0564a80a..b35c3aecd 100644 --- a/tests/modules/location_test.cpp +++ b/tests/modules/location_test.cpp @@ -1027,11 +1027,21 @@ TEST_F(LocationTest, shouldGeneratePortugalStreetAddress) { const auto generatedStreetAddress = streetAddress(Locale::pt_PT); - const auto generatedStreetAddressElements = common::split(generatedStreetAddress, " "); + const auto generatedStreetAddressElements = common::split(generatedStreetAddress[0], " "); + + const auto& generatedBuildNumber = generatedStreetAddressElements[generatedStreetAddressElements.size()-1]; + const auto& generatedStreetSuffix = generatedStreetAddressElements[generatedStreetAddressElements.size()-2]; + const auto& generatedStreet = common::join({generatedStreetAddressElements.begin(), generatedStreetAddressElements.end() - 2}); + + if (generatedAddresses.size() > 1) + { + const auto& generatedSecondaryAddressParts = common::split(generatedAddresses[1], " "); - const auto& generatedStreet = generatedStreetAddressElements[0]; - const auto& generatedStreetSuffix = generatedStreetAddressElements[1]; - const auto& generatedBuildingNumber = generatedStreetAddressElements[2]; + const auto& generatedUnitNumber = generatedSecondaryAddressParts[generatedSecondaryAddressParts.size()-1]; + + ASSERT_TRUE(generatedUnitNumber.size() == 1 || generatedUnitNumber.size() == 3); + ASSERT_TRUE(checkIfAllCharactersAreNumeric(generatedUnitNumber)); + } ASSERT_TRUE(generatedBuildingNumber.size() >= 1 && generatedBuildingNumber.size() <= 3); ASSERT_TRUE(checkIfAllCharactersAreNumeric(generatedBuildingNumber)); @@ -1041,4 +1051,4 @@ TEST_F(LocationTest, shouldGeneratePortugalStreetAddress) ASSERT_TRUE(std::ranges::any_of(portugalStreetSuffixes, [&generatedStreetSuffix](const std::string_view& streetSuffix) { return generatedStreetSuffix.find(streetSuffix) != std::string::npos; })); -} +} \ No newline at end of file From 834b8770aa3fd52e9094b4401c5b4eab79aabba0 Mon Sep 17 00:00:00 2001 From: Tanjil Date: Wed, 23 Oct 2024 22:26:09 +0100 Subject: [PATCH 8/8] fix: location_test.cpp --- tests/modules/location_test.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/modules/location_test.cpp b/tests/modules/location_test.cpp index b35c3aecd..6f2b0a472 100644 --- a/tests/modules/location_test.cpp +++ b/tests/modules/location_test.cpp @@ -1027,28 +1027,31 @@ TEST_F(LocationTest, shouldGeneratePortugalStreetAddress) { const auto generatedStreetAddress = streetAddress(Locale::pt_PT); - const auto generatedStreetAddressElements = common::split(generatedStreetAddress[0], " "); + const auto generatedAddresses = common::split(generatedStreetAddress, ", "); + const auto generatedStreetAddressElements = common::split(generatedAddresses[0], " "); - const auto& generatedBuildNumber = generatedStreetAddressElements[generatedStreetAddressElements.size()-1]; - const auto& generatedStreetSuffix = generatedStreetAddressElements[generatedStreetAddressElements.size()-2]; - const auto& generatedStreet = common::join({generatedStreetAddressElements.begin(), generatedStreetAddressElements.end() - 2}); + const auto& generatedBuildingNumber = generatedStreetAddressElements[generatedStreetAddressElements.size() - 1]; + const auto& generatedStreetSuffix = generatedStreetAddressElements[generatedStreetAddressElements.size() - 2]; + const auto& generatedStreet = + common::join({generatedStreetAddressElements.begin(), generatedStreetAddressElements.end() - 2}); if (generatedAddresses.size() > 1) { const auto& generatedSecondaryAddressParts = common::split(generatedAddresses[1], " "); - const auto& generatedUnitNumber = generatedSecondaryAddressParts[generatedSecondaryAddressParts.size()-1]; + const auto& generatedUnitNumber = generatedSecondaryAddressParts[generatedSecondaryAddressParts.size() - 1]; ASSERT_TRUE(generatedUnitNumber.size() == 1 || generatedUnitNumber.size() == 3); ASSERT_TRUE(checkIfAllCharactersAreNumeric(generatedUnitNumber)); } - ASSERT_TRUE(generatedBuildingNumber.size() >= 1 && generatedBuildingNumber.size() <= 3); + ASSERT_TRUE(!generatedBuildingNumber.empty() && generatedBuildingNumber.size() <= 3); ASSERT_TRUE(checkIfAllCharactersAreNumeric(generatedBuildingNumber)); ASSERT_TRUE(std::ranges::any_of(portugalStreetNames, [&generatedStreet](const std::string_view& streetName) { return generatedStreet.find(streetName) != std::string::npos; })); - ASSERT_TRUE(std::ranges::any_of(portugalStreetSuffixes, [&generatedStreetSuffix](const std::string_view& streetSuffix) + ASSERT_TRUE(std::ranges::any_of(portugalStreetSuffixes, + [&generatedStreetSuffix](const std::string_view& streetSuffix) { return generatedStreetSuffix.find(streetSuffix) != std::string::npos; })); } \ No newline at end of file