mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:42:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/Optional.h>
 | |
| #include <AK/StringView.h>
 | |
| #include <AK/Types.h>
 | |
| 
 | |
| namespace Unicode {
 | |
| 
 | |
| enum class EmojiGroup : u8 {
 | |
|     Unknown,
 | |
| 
 | |
|     SmileysAndEmotion,
 | |
|     PeopleAndBody,
 | |
|     Component,
 | |
|     AnimalsAndNature,
 | |
|     FoodAndDrink,
 | |
|     TravelAndPlaces,
 | |
|     Activities,
 | |
|     Objects,
 | |
|     Symbols,
 | |
|     Flags,
 | |
| 
 | |
|     // Non-standard emoji added for SerenityOS:
 | |
|     SerenityOS,
 | |
| };
 | |
| 
 | |
| struct Emoji {
 | |
|     StringView name;
 | |
|     EmojiGroup group { EmojiGroup::Unknown };
 | |
|     u32 display_order { 0 };
 | |
|     ReadonlySpan<u32> code_points;
 | |
| };
 | |
| 
 | |
| Optional<Emoji> find_emoji_for_code_points(ReadonlySpan<u32> code_points);
 | |
| 
 | |
| template<size_t Size>
 | |
| Optional<Emoji> find_emoji_for_code_points(u32 const (&code_points)[Size])
 | |
| {
 | |
|     return find_emoji_for_code_points(ReadonlySpan<u32> { code_points });
 | |
| }
 | |
| 
 | |
| constexpr StringView emoji_group_to_string(EmojiGroup group)
 | |
| {
 | |
|     switch (group) {
 | |
|     case EmojiGroup::Unknown:
 | |
|         return "Unknown"sv;
 | |
|     case EmojiGroup::SmileysAndEmotion:
 | |
|         return "Smileys & Emotion"sv;
 | |
|     case EmojiGroup::PeopleAndBody:
 | |
|         return "People & Body"sv;
 | |
|     case EmojiGroup::Component:
 | |
|         return "Component"sv;
 | |
|     case EmojiGroup::AnimalsAndNature:
 | |
|         return "Animals & Nature"sv;
 | |
|     case EmojiGroup::FoodAndDrink:
 | |
|         return "Food & Drink"sv;
 | |
|     case EmojiGroup::TravelAndPlaces:
 | |
|         return "Travel & Places"sv;
 | |
|     case EmojiGroup::Activities:
 | |
|         return "Activities"sv;
 | |
|     case EmojiGroup::Objects:
 | |
|         return "Objects"sv;
 | |
|     case EmojiGroup::Symbols:
 | |
|         return "Symbols"sv;
 | |
|     case EmojiGroup::Flags:
 | |
|         return "Flags"sv;
 | |
|     case EmojiGroup::SerenityOS:
 | |
|         return "SerenityOS"sv;
 | |
|     }
 | |
| 
 | |
|     VERIFY_NOT_REACHED();
 | |
| }
 | |
| 
 | |
| constexpr EmojiGroup emoji_group_from_string(StringView group)
 | |
| {
 | |
|     if (group == "Unknown"sv)
 | |
|         return EmojiGroup::Unknown;
 | |
|     if (group == "Smileys & Emotion"sv)
 | |
|         return EmojiGroup::SmileysAndEmotion;
 | |
|     if (group == "People & Body"sv)
 | |
|         return EmojiGroup::PeopleAndBody;
 | |
|     if (group == "Component"sv)
 | |
|         return EmojiGroup::Component;
 | |
|     if (group == "Animals & Nature"sv)
 | |
|         return EmojiGroup::AnimalsAndNature;
 | |
|     if (group == "Food & Drink"sv)
 | |
|         return EmojiGroup::FoodAndDrink;
 | |
|     if (group == "Travel & Places"sv)
 | |
|         return EmojiGroup::TravelAndPlaces;
 | |
|     if (group == "Activities"sv)
 | |
|         return EmojiGroup::Activities;
 | |
|     if (group == "Objects"sv)
 | |
|         return EmojiGroup::Objects;
 | |
|     if (group == "Symbols"sv)
 | |
|         return EmojiGroup::Symbols;
 | |
|     if (group == "Flags"sv)
 | |
|         return EmojiGroup::Flags;
 | |
|     if (group == "SerenityOS"sv)
 | |
|         return EmojiGroup::SerenityOS;
 | |
| 
 | |
|     VERIFY_NOT_REACHED();
 | |
| }
 | |
| 
 | |
| }
 | 
