123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // © 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__
|