| // © 2021 and later: Unicode, Inc. and others. |
| // License & terms of use: https://www.unicode.org/copyright.html |
| |
| // emojiprops.h |
| // created: 2021sep03 Markus W. Scherer |
| |
| #ifndef __EMOJIPROPS_H__ |
| #define __EMOJIPROPS_H__ |
| |
| #include "unicode/utypes.h" |
| #include "unicode/ucptrie.h" |
| #include "unicode/udata.h" |
| #include "unicode/uobject.h" |
| #include "uset_imp.h" |
| |
| U_NAMESPACE_BEGIN |
| |
| class EmojiProps : public UMemory { |
| public: |
| // @internal |
| EmojiProps(UErrorCode &errorCode) { load(errorCode); } |
| ~EmojiProps(); |
| |
| static const EmojiProps *getSingleton(UErrorCode &errorCode); |
| static UBool hasBinaryProperty(UChar32 c, UProperty which); |
| static UBool hasBinaryProperty(const char16_t *s, int32_t length, UProperty which); |
| |
| void addPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const; |
| void addStrings(const USetAdder *sa, UProperty which, UErrorCode &errorCode) const; |
| |
| enum { |
| // Byte offsets from the start of the data, after the generic header, |
| // in ascending order. |
| // UCPTrie=CodePointTrie, follows the indexes |
| IX_CPTRIE_OFFSET, |
| IX_RESERVED1, |
| IX_RESERVED2, |
| IX_RESERVED3, |
| |
| // UCharsTrie=CharsTrie |
| IX_BASIC_EMOJI_TRIE_OFFSET, |
| IX_EMOJI_KEYCAP_SEQUENCE_TRIE_OFFSET, |
| IX_RGI_EMOJI_MODIFIER_SEQUENCE_TRIE_OFFSET, |
| IX_RGI_EMOJI_FLAG_SEQUENCE_TRIE_OFFSET, |
| IX_RGI_EMOJI_TAG_SEQUENCE_TRIE_OFFSET, |
| IX_RGI_EMOJI_ZWJ_SEQUENCE_TRIE_OFFSET, |
| IX_RESERVED10, |
| IX_RESERVED11, |
| IX_RESERVED12, |
| IX_TOTAL_SIZE, |
| |
| // Not initially byte offsets. |
| IX_RESERVED14, |
| IX_RESERVED15, |
| IX_COUNT // 16 |
| }; |
| |
| // Properties in the code point trie. |
| enum { |
| // https://www.unicode.org/reports/tr51/#Emoji_Properties |
| BIT_EMOJI, |
| BIT_EMOJI_PRESENTATION, |
| BIT_EMOJI_MODIFIER, |
| BIT_EMOJI_MODIFIER_BASE, |
| BIT_EMOJI_COMPONENT, |
| BIT_EXTENDED_PICTOGRAPHIC, |
| // https://www.unicode.org/reports/tr51/#Emoji_Sets |
| BIT_BASIC_EMOJI |
| }; |
| |
| private: |
| static UBool U_CALLCONV |
| isAcceptable(void *context, const char *type, const char *name, const UDataInfo *pInfo); |
| /** Input i: One of the IX_..._TRIE_OFFSET indexes into the data file indexes[] array. */ |
| static int32_t getStringTrieIndex(int32_t i) { |
| return i - IX_BASIC_EMOJI_TRIE_OFFSET; |
| } |
| |
| void load(UErrorCode &errorCode); |
| UBool hasBinaryPropertyImpl(UChar32 c, UProperty which) const; |
| UBool hasBinaryPropertyImpl(const char16_t *s, int32_t length, UProperty which) const; |
| |
| UDataMemory *memory = nullptr; |
| UCPTrie *cpTrie = nullptr; |
| const char16_t *stringTries[6] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; |
| }; |
| |
| U_NAMESPACE_END |
| |
| #endif // __EMOJIPROPS_H__ |