tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

emojiprops.h (2812B)


      1 // © 2021 and later: Unicode, Inc. and others.
      2 // License & terms of use: https://www.unicode.org/copyright.html
      3 
      4 // emojiprops.h
      5 // created: 2021sep03 Markus W. Scherer
      6 
      7 #ifndef __EMOJIPROPS_H__
      8 #define __EMOJIPROPS_H__
      9 
     10 #include "unicode/utypes.h"
     11 #include "unicode/ucptrie.h"
     12 #include "unicode/udata.h"
     13 #include "unicode/uobject.h"
     14 #include "uset_imp.h"
     15 
     16 U_NAMESPACE_BEGIN
     17 
     18 class EmojiProps : public UMemory {
     19 public:
     20    // @internal
     21    EmojiProps(UErrorCode &errorCode) { load(errorCode); }
     22    ~EmojiProps();
     23 
     24    static const EmojiProps *getSingleton(UErrorCode &errorCode);
     25    static UBool hasBinaryProperty(UChar32 c, UProperty which);
     26    static UBool hasBinaryProperty(const char16_t *s, int32_t length, UProperty which);
     27 
     28    void addPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const;
     29    void addStrings(const USetAdder *sa, UProperty which, UErrorCode &errorCode) const;
     30 
     31    enum {
     32        // Byte offsets from the start of the data, after the generic header,
     33        // in ascending order.
     34        // UCPTrie=CodePointTrie, follows the indexes
     35        IX_CPTRIE_OFFSET,
     36        IX_RESERVED1,
     37        IX_RESERVED2,
     38        IX_RESERVED3,
     39 
     40        // UCharsTrie=CharsTrie
     41        IX_BASIC_EMOJI_TRIE_OFFSET,
     42        IX_EMOJI_KEYCAP_SEQUENCE_TRIE_OFFSET,
     43        IX_RGI_EMOJI_MODIFIER_SEQUENCE_TRIE_OFFSET,
     44        IX_RGI_EMOJI_FLAG_SEQUENCE_TRIE_OFFSET,
     45        IX_RGI_EMOJI_TAG_SEQUENCE_TRIE_OFFSET,
     46        IX_RGI_EMOJI_ZWJ_SEQUENCE_TRIE_OFFSET,
     47        IX_RESERVED10,
     48        IX_RESERVED11,
     49        IX_RESERVED12,
     50        IX_TOTAL_SIZE,
     51 
     52        // Not initially byte offsets.
     53        IX_RESERVED14,
     54        IX_RESERVED15,
     55        IX_COUNT  // 16
     56    };
     57 
     58    // Properties in the code point trie.
     59    enum {
     60        // https://www.unicode.org/reports/tr51/#Emoji_Properties
     61        BIT_EMOJI,
     62        BIT_EMOJI_PRESENTATION,
     63        BIT_EMOJI_MODIFIER,
     64        BIT_EMOJI_MODIFIER_BASE,
     65        BIT_EMOJI_COMPONENT,
     66        BIT_EXTENDED_PICTOGRAPHIC,
     67        // https://www.unicode.org/reports/tr51/#Emoji_Sets
     68        BIT_BASIC_EMOJI
     69    };
     70 
     71 private:
     72    static UBool U_CALLCONV
     73    isAcceptable(void *context, const char *type, const char *name, const UDataInfo *pInfo);
     74    /** Input i: One of the IX_..._TRIE_OFFSET indexes into the data file indexes[] array. */
     75    static int32_t getStringTrieIndex(int32_t i) {
     76        return i - IX_BASIC_EMOJI_TRIE_OFFSET;
     77    }
     78 
     79    void load(UErrorCode &errorCode);
     80    UBool hasBinaryPropertyImpl(UChar32 c, UProperty which) const;
     81    UBool hasBinaryPropertyImpl(const char16_t *s, int32_t length, UProperty which) const;
     82 
     83    UDataMemory *memory = nullptr;
     84    UCPTrie *cpTrie = nullptr;
     85    const char16_t *stringTries[6] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
     86 };
     87 
     88 U_NAMESPACE_END
     89 
     90 #endif  // __EMOJIPROPS_H__