diff --git a/Telegram/SourceFiles/codegen/emoji/data.cpp b/Telegram/SourceFiles/codegen/emoji/data.cpp index 8b789e5dea..9d12ca41c2 100644 --- a/Telegram/SourceFiles/codegen/emoji/data.cpp +++ b/Telegram/SourceFiles/codegen/emoji/data.cpp @@ -26,6 +26,17 @@ using std::end; using InputId = vector; using InputCategory = vector; +namespace old { +extern InputCategory ColoredEmoji; +extern InputCategory Category1; +extern InputCategory Category2; +extern InputCategory Category3; +extern InputCategory Category4; +extern InputCategory Category5; +extern InputCategory Category6; +extern InputCategory Category7; +} // namespace old + // copied from emoji_box.cpp struct Replace { InputId code; @@ -80,6 +91,2209 @@ ColorId Colors[] = { }; constexpr auto ColorMask = 0xD83CDFFBU; +InputCategory ColoredEmoji = { + { 0xD83EDD32U, 0xD83CDFFBU, }, + { 0xD83DDC50U, 0xD83CDFFBU, }, + { 0xD83DDE4CU, 0xD83CDFFBU, }, + { 0xD83DDC4FU, 0xD83CDFFBU, }, + { 0xD83DDC4DU, 0xD83CDFFBU, }, + { 0xD83DDC4EU, 0xD83CDFFBU, }, + { 0xD83DDC4AU, 0xD83CDFFBU, }, + { 0x270AU, 0xD83CDFFBU, }, + { 0xD83EDD1BU, 0xD83CDFFBU, }, + { 0xD83EDD1CU, 0xD83CDFFBU, }, + { 0xD83EDD1EU, 0xD83CDFFBU, }, + { 0x270CU, 0xD83CDFFBU, }, + { 0xD83EDD1FU, 0xD83CDFFBU, }, + { 0xD83EDD18U, 0xD83CDFFBU, }, + { 0xD83DDC4CU, 0xD83CDFFBU, }, + { 0xD83DDC48U, 0xD83CDFFBU, }, + { 0xD83DDC49U, 0xD83CDFFBU, }, + { 0xD83DDC46U, 0xD83CDFFBU, }, + { 0xD83DDC47U, 0xD83CDFFBU, }, + { 0x261DU, 0xD83CDFFBU, }, + { 0x270BU, 0xD83CDFFBU, }, + { 0xD83EDD1AU, 0xD83CDFFBU, }, + { 0xD83DDD90U, 0xD83CDFFBU, }, + { 0xD83DDD96U, 0xD83CDFFBU, }, + { 0xD83DDC4BU, 0xD83CDFFBU, }, + { 0xD83EDD19U, 0xD83CDFFBU, }, + { 0xD83DDCAAU, 0xD83CDFFBU, }, + { 0xD83DDD95U, 0xD83CDFFBU, }, + { 0x270DU, 0xD83CDFFBU, }, + { 0xD83DDE4FU, 0xD83CDFFBU, }, + { 0xD83EDDB6U, 0xD83CDFFBU, }, + { 0xD83EDDB5U, 0xD83CDFFBU, }, + { 0xD83DDC42U, 0xD83CDFFBU, }, + { 0xD83DDC43U, 0xD83CDFFBU, }, + { 0xD83DDC76U, 0xD83CDFFBU, }, + { 0xD83DDC67U, 0xD83CDFFBU, }, + { 0xD83EDDD2U, 0xD83CDFFBU, }, + { 0xD83DDC66U, 0xD83CDFFBU, }, + { 0xD83DDC69U, 0xD83CDFFBU, }, + { 0xD83EDDD1U, 0xD83CDFFBU, }, + { 0xD83DDC68U, 0xD83CDFFBU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB1U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB1U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB0U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB0U, }, + { 0xD83DDC71U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC71U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB3U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB3U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB2U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83EDDB2U, }, + { 0xD83EDDD4U, 0xD83CDFFBU, }, + { 0xD83DDC75U, 0xD83CDFFBU, }, + { 0xD83EDDD3U, 0xD83CDFFBU, }, + { 0xD83DDC74U, 0xD83CDFFBU, }, + { 0xD83DDC72U, 0xD83CDFFBU, }, + { 0xD83DDC73U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC73U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDD5U, 0xD83CDFFBU, }, + { 0xD83DDC6EU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC6EU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC77U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC77U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC82U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC82U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDD75U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDD75U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0x2695U, 0xFE0FU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0x2695U, 0xFE0FU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDF3EU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDF3EU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDF73U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDF73U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDF93U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDF93U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA4U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA4U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEBU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEBU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEDU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEDU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBBU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBBU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBCU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBCU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDD27U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDD27U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDD2CU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDD2CU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA8U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA8U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDE92U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDE92U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0x2708U, 0xFE0FU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0x2708U, 0xFE0FU, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDE80U, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDE80U, }, + { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0x2696U, 0xFE0FU, }, + { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0x2696U, 0xFE0FU, }, + { 0xD83DDC70U, 0xD83CDFFBU, }, + { 0xD83EDD35U, 0xD83CDFFBU, }, + { 0xD83DDC78U, 0xD83CDFFBU, }, + { 0xD83EDD34U, 0xD83CDFFBU, }, + { 0xD83EDDB8U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDB8U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDB9U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDB9U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD36U, 0xD83CDFFBU, }, + { 0xD83CDF85U, 0xD83CDFFBU, }, + { 0xD83EDDD9U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD9U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDDU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDDU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDBU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDBU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDCU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDCU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDAU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDAU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC7CU, 0xD83CDFFBU, }, + { 0xD83EDD30U, 0xD83CDFFBU, }, + { 0xD83EDD31U, 0xD83CDFFBU, }, + { 0xD83DDE47U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE47U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC81U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC81U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE45U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE45U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE46U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE46U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE4BU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE4BU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD26U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD26U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD37U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD37U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE4EU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE4EU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE4DU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE4DU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC87U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC87U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC86U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC86U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDD6U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD6U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC85U, 0xD83CDFFBU, }, + { 0xD83EDD33U, 0xD83CDFFBU, }, + { 0xD83DDC83U, 0xD83CDFFBU, }, + { 0xD83DDD7AU, 0xD83CDFFBU, }, + { 0xD83DDD74U, 0xD83CDFFBU, }, + { 0xD83DDEB6U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEB6U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFC3U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFC3U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFCBU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFCBU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD38U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD38U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0x26F9U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0x26F9U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD3EU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD3EU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFCCU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFCCU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFC7U, 0xD83CDFFBU, }, + { 0xD83EDDD8U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD8U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFC4U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFC4U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFCAU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFCAU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD3DU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD3DU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDEA3U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEA3U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDD7U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD7U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDEB5U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEB5U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDEB4U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEB4U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD39U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD39U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDEC0U, 0xD83CDFFBU, }, +}; + +InputCategory Category1 = { + { 0xD83DDE00U, }, + { 0xD83DDE03U, }, + { 0xD83DDE04U, }, + { 0xD83DDE01U, }, + { 0xD83DDE06U, }, + { 0xD83DDE05U, }, + { 0xD83DDE02U, }, + { 0xD83EDD23U, }, + { 0x263AU, 0xFE0FU, }, + { 0xD83DDE0AU, }, + { 0xD83DDE07U, }, + { 0xD83DDE42U, }, + { 0xD83DDE43U, }, + { 0xD83DDE09U, }, + { 0xD83DDE0CU, }, + { 0xD83DDE0DU, }, + { 0xD83EDD70U, }, + { 0xD83DDE18U, }, + { 0xD83DDE17U, }, + { 0xD83DDE19U, }, + { 0xD83DDE1AU, }, + { 0xD83DDE0BU, }, + { 0xD83DDE1BU, }, + { 0xD83DDE1DU, }, + { 0xD83DDE1CU, }, + { 0xD83EDD2AU, }, + { 0xD83EDD28U, }, + { 0xD83EDDD0U, }, + { 0xD83EDD13U, }, + { 0xD83DDE0EU, }, + { 0xD83EDD29U, }, + { 0xD83EDD73U, }, + { 0xD83DDE0FU, }, + { 0xD83DDE12U, }, + { 0xD83DDE1EU, }, + { 0xD83DDE14U, }, + { 0xD83DDE1FU, }, + { 0xD83DDE15U, }, + { 0xD83DDE41U, }, + { 0x2639U, 0xFE0FU, }, + { 0xD83DDE23U, }, + { 0xD83DDE16U, }, + { 0xD83DDE2BU, }, + { 0xD83DDE29U, }, + { 0xD83EDD7AU, }, + { 0xD83DDE22U, }, + { 0xD83DDE2DU, }, + { 0xD83DDE24U, }, + { 0xD83DDE20U, }, + { 0xD83DDE21U, }, + { 0xD83EDD2CU, }, + { 0xD83EDD2FU, }, + { 0xD83DDE33U, }, + { 0xD83EDD75U, }, + { 0xD83EDD76U, }, + { 0xD83DDE31U, }, + { 0xD83DDE28U, }, + { 0xD83DDE30U, }, + { 0xD83DDE25U, }, + { 0xD83DDE13U, }, + { 0xD83EDD17U, }, + { 0xD83EDD14U, }, + { 0xD83EDD2DU, }, + { 0xD83EDD2BU, }, + { 0xD83EDD25U, }, + { 0xD83DDE36U, }, + { 0xD83DDE10U, }, + { 0xD83DDE11U, }, + { 0xD83DDE2CU, }, + { 0xD83DDE44U, }, + { 0xD83DDE2FU, }, + { 0xD83DDE26U, }, + { 0xD83DDE27U, }, + { 0xD83DDE2EU, }, + { 0xD83DDE32U, }, + { 0xD83DDE34U, }, + { 0xD83EDD24U, }, + { 0xD83DDE2AU, }, + { 0xD83DDE35U, }, + { 0xD83EDD10U, }, + { 0xD83EDD74U, }, + { 0xD83EDD22U, }, + { 0xD83EDD2EU, }, + { 0xD83EDD27U, }, + { 0xD83DDE37U, }, + { 0xD83EDD12U, }, + { 0xD83EDD15U, }, + { 0xD83EDD11U, }, + { 0xD83EDD20U, }, + { 0xD83DDE08U, }, + { 0xD83DDC7FU, }, + { 0xD83DDC79U, }, + { 0xD83DDC7AU, }, + { 0xD83EDD21U, }, + { 0xD83DDCA9U, }, + { 0xD83DDC7BU, }, + { 0xD83DDC80U, }, + { 0x2620U, 0xFE0FU, }, + { 0xD83DDC7DU, }, + { 0xD83DDC7EU, }, + { 0xD83EDD16U, }, + { 0xD83CDF83U, }, + { 0xD83DDE3AU, }, + { 0xD83DDE38U, }, + { 0xD83DDE39U, }, + { 0xD83DDE3BU, }, + { 0xD83DDE3CU, }, + { 0xD83DDE3DU, }, + { 0xD83DDE40U, }, + { 0xD83DDE3FU, }, + { 0xD83DDE3EU, }, + { 0xD83EDD32U, }, + { 0xD83DDC50U, }, + { 0xD83DDE4CU, }, + { 0xD83DDC4FU, }, + { 0xD83EDD1DU, }, + { 0xD83DDC4DU, }, + { 0xD83DDC4EU, }, + { 0xD83DDC4AU, }, + { 0x270AU, }, + { 0xD83EDD1BU, }, + { 0xD83EDD1CU, }, + { 0xD83EDD1EU, }, + { 0x270CU, 0xFE0FU, }, + { 0xD83EDD1FU, }, + { 0xD83EDD18U, }, + { 0xD83DDC4CU, }, + { 0xD83DDC48U, }, + { 0xD83DDC49U, }, + { 0xD83DDC46U, }, + { 0xD83DDC47U, }, + { 0x261DU, 0xFE0FU, }, + { 0x270BU, }, + { 0xD83EDD1AU, }, + { 0xD83DDD90U, }, + { 0xD83DDD96U, }, + { 0xD83DDC4BU, }, + { 0xD83EDD19U, }, + { 0xD83DDCAAU, }, + { 0xD83DDD95U, }, + { 0x270DU, 0xFE0FU, }, + { 0xD83DDE4FU, }, + { 0xD83EDDB6U, }, + { 0xD83EDDB5U, }, + { 0xD83DDC84U, }, + { 0xD83DDC8BU, }, + { 0xD83DDC44U, }, + { 0xD83EDDB7U, }, + { 0xD83DDC45U, }, + { 0xD83DDC42U, }, + { 0xD83DDC43U, }, + { 0xD83DDC63U, }, + { 0xD83DDC41U, }, + { 0xD83DDC40U, }, + { 0xD83EDDE0U, }, + { 0xD83DDDE3U, }, + { 0xD83DDC64U, }, + { 0xD83DDC65U, }, + { 0xD83DDC76U, }, + { 0xD83DDC67U, }, + { 0xD83EDDD2U, }, + { 0xD83DDC66U, }, + { 0xD83DDC69U, }, + { 0xD83EDDD1U, }, + { 0xD83DDC68U, }, + { 0xD83DDC69U, 0x200DU, 0xD83EDDB1U, }, + { 0xD83DDC68U, 0x200DU, 0xD83EDDB1U, }, + { 0xD83DDC69U, 0x200DU, 0xD83EDDB0U, }, + { 0xD83DDC68U, 0x200DU, 0xD83EDDB0U, }, + { 0xD83DDC71U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC71U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC69U, 0x200DU, 0xD83EDDB3U, }, + { 0xD83DDC68U, 0x200DU, 0xD83EDDB3U, }, + { 0xD83DDC69U, 0x200DU, 0xD83EDDB2U, }, + { 0xD83DDC68U, 0x200DU, 0xD83EDDB2U, }, + { 0xD83EDDD4U, }, + { 0xD83DDC75U, }, + { 0xD83EDDD3U, }, + { 0xD83DDC74U, }, + { 0xD83DDC72U, }, + { 0xD83DDC73U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC73U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDD5U, }, + { 0xD83DDC6EU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC6EU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC77U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC77U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC82U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC82U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDD75U, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDD75U, 0xFE0FU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC69U, 0x200DU, 0x2695U, 0xFE0FU, }, + { 0xD83DDC68U, 0x200DU, 0x2695U, 0xFE0FU, }, + { 0xD83DDC69U, 0x200DU, 0xD83CDF3EU, }, + { 0xD83DDC68U, 0x200DU, 0xD83CDF3EU, }, + { 0xD83DDC69U, 0x200DU, 0xD83CDF73U, }, + { 0xD83DDC68U, 0x200DU, 0xD83CDF73U, }, + { 0xD83DDC69U, 0x200DU, 0xD83CDF93U, }, + { 0xD83DDC68U, 0x200DU, 0xD83CDF93U, }, + { 0xD83DDC69U, 0x200DU, 0xD83CDFA4U, }, + { 0xD83DDC68U, 0x200DU, 0xD83CDFA4U, }, + { 0xD83DDC69U, 0x200DU, 0xD83CDFEBU, }, + { 0xD83DDC68U, 0x200DU, 0xD83CDFEBU, }, + { 0xD83DDC69U, 0x200DU, 0xD83CDFEDU, }, + { 0xD83DDC68U, 0x200DU, 0xD83CDFEDU, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDCBBU, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDCBBU, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDCBCU, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDCBCU, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDD27U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDD27U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDD2CU, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDD2CU, }, + { 0xD83DDC69U, 0x200DU, 0xD83CDFA8U, }, + { 0xD83DDC68U, 0x200DU, 0xD83CDFA8U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDE92U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDE92U, }, + { 0xD83DDC69U, 0x200DU, 0x2708U, 0xFE0FU, }, + { 0xD83DDC68U, 0x200DU, 0x2708U, 0xFE0FU, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDE80U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDE80U, }, + { 0xD83DDC69U, 0x200DU, 0x2696U, 0xFE0FU, }, + { 0xD83DDC68U, 0x200DU, 0x2696U, 0xFE0FU, }, + { 0xD83DDC70U, }, + { 0xD83EDD35U, }, + { 0xD83DDC78U, }, + { 0xD83EDD34U, }, + { 0xD83EDDB8U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDB8U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDB9U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDB9U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD36U, }, + { 0xD83CDF85U, }, + { 0xD83EDDD9U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD9U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDDU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDDU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDBU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDBU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDFU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDFU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDEU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDEU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDCU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDCU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDDAU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDDAU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC7CU, }, + { 0xD83EDD30U, }, + { 0xD83EDD31U, }, + { 0xD83DDE47U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE47U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC81U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC81U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE45U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE45U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE46U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE46U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE4BU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE4BU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD26U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD26U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD37U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD37U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE4EU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE4EU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDE4DU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDE4DU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC87U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC87U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC86U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC86U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDD6U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD6U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC85U, }, + { 0xD83EDD33U, }, + { 0xD83DDC83U, }, + { 0xD83DDD7AU, }, + { 0xD83DDC6FU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDC6FU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDD74U, }, + { 0xD83DDEB6U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEB6U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFC3U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFC3U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDC6BU, }, + { 0xD83DDC6DU, }, + { 0xD83DDC6CU, }, + { 0xD83DDC91U, }, + { 0xD83DDC69U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC69U, }, + { 0xD83DDC68U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC68U, }, + { 0xD83DDC8FU, }, + { 0xD83DDC69U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC8BU, 0x200DU, 0xD83DDC69U, }, + { 0xD83DDC68U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC8BU, 0x200DU, 0xD83DDC68U, }, + { 0xD83DDC6AU, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC67U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, }, + { 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, }, + { 0xD83EDDF6U, }, + { 0xD83EDDF5U, }, + { 0xD83EDDE5U, }, + { 0xD83EDD7CU, }, + { 0xD83DDC5AU, }, + { 0xD83DDC55U, }, + { 0xD83DDC56U, }, + { 0xD83DDC54U, }, + { 0xD83DDC57U, }, + { 0xD83DDC59U, }, + { 0xD83DDC58U, }, + { 0xD83EDD7FU, }, + { 0xD83DDC60U, }, + { 0xD83DDC61U, }, + { 0xD83DDC62U, }, + { 0xD83DDC5EU, }, + { 0xD83DDC5FU, }, + { 0xD83EDD7EU, }, + { 0xD83EDDE6U, }, + { 0xD83EDDE4U, }, + { 0xD83EDDE3U, }, + { 0xD83CDFA9U, }, + { 0xD83EDDE2U, }, + { 0xD83DDC52U, }, + { 0xD83CDF93U, }, + { 0x26D1U, }, + { 0xD83DDC51U, }, + { 0xD83DDC8DU, }, + { 0xD83DDC5DU, }, + { 0xD83DDC5BU, }, + { 0xD83DDC5CU, }, + { 0xD83DDCBCU, }, + { 0xD83CDF92U, }, + { 0xD83EDDF3U, }, + { 0xD83DDC53U, }, + { 0xD83DDD76U, }, + { 0xD83EDD7DU, }, + { 0xD83CDF02U, }, +}; + +InputCategory Category2 = { + { 0xD83DDC36U, }, + { 0xD83DDC31U, }, + { 0xD83DDC2DU, }, + { 0xD83DDC39U, }, + { 0xD83DDC30U, }, + { 0xD83EDD8AU, }, + { 0xD83DDC3BU, }, + { 0xD83DDC3CU, }, + { 0xD83DDC28U, }, + { 0xD83DDC2FU, }, + { 0xD83EDD81U, }, + { 0xD83DDC2EU, }, + { 0xD83DDC37U, }, + { 0xD83DDC3DU, }, + { 0xD83DDC38U, }, + { 0xD83DDC35U, }, + { 0xD83DDE48U, }, + { 0xD83DDE49U, }, + { 0xD83DDE4AU, }, + { 0xD83DDC12U, }, + { 0xD83DDC14U, }, + { 0xD83DDC27U, }, + { 0xD83DDC26U, }, + { 0xD83DDC24U, }, + { 0xD83DDC23U, }, + { 0xD83DDC25U, }, + { 0xD83EDD86U, }, + { 0xD83EDD85U, }, + { 0xD83EDD89U, }, + { 0xD83EDD87U, }, + { 0xD83DDC3AU, }, + { 0xD83DDC17U, }, + { 0xD83DDC34U, }, + { 0xD83EDD84U, }, + { 0xD83DDC1DU, }, + { 0xD83DDC1BU, }, + { 0xD83EDD8BU, }, + { 0xD83DDC0CU, }, + { 0xD83DDC1EU, }, + { 0xD83DDC1CU, }, + { 0xD83EDD9FU, }, + { 0xD83EDD97U, }, + { 0xD83DDD77U, }, + { 0xD83DDD78U, }, + { 0xD83EDD82U, }, + { 0xD83DDC22U, }, + { 0xD83DDC0DU, }, + { 0xD83EDD8EU, }, + { 0xD83EDD96U, }, + { 0xD83EDD95U, }, + { 0xD83DDC19U, }, + { 0xD83EDD91U, }, + { 0xD83EDD90U, }, + { 0xD83EDD9EU, }, + { 0xD83EDD80U, }, + { 0xD83DDC21U, }, + { 0xD83DDC20U, }, + { 0xD83DDC1FU, }, + { 0xD83DDC2CU, }, + { 0xD83DDC33U, }, + { 0xD83DDC0BU, }, + { 0xD83EDD88U, }, + { 0xD83DDC0AU, }, + { 0xD83DDC05U, }, + { 0xD83DDC06U, }, + { 0xD83EDD93U, }, + { 0xD83EDD8DU, }, + { 0xD83DDC18U, }, + { 0xD83EDD9BU, }, + { 0xD83EDD8FU, }, + { 0xD83DDC2AU, }, + { 0xD83DDC2BU, }, + { 0xD83EDD92U, }, + { 0xD83EDD98U, }, + { 0xD83DDC03U, }, + { 0xD83DDC02U, }, + { 0xD83DDC04U, }, + { 0xD83DDC0EU, }, + { 0xD83DDC16U, }, + { 0xD83DDC0FU, }, + { 0xD83DDC11U, }, + { 0xD83EDD99U, }, + { 0xD83DDC10U, }, + { 0xD83EDD8CU, }, + { 0xD83DDC15U, }, + { 0xD83DDC29U, }, + { 0xD83DDC08U, }, + { 0xD83DDC13U, }, + { 0xD83EDD83U, }, + { 0xD83EDD9AU, }, + { 0xD83EDD9CU, }, + { 0xD83EDDA2U, }, + { 0xD83DDD4AU, }, + { 0xD83DDC07U, }, + { 0xD83EDD9DU, }, + { 0xD83EDDA1U, }, + { 0xD83DDC01U, }, + { 0xD83DDC00U, }, + { 0xD83DDC3FU, }, + { 0xD83EDD94U, }, + { 0xD83DDC3EU, }, + { 0xD83DDC09U, }, + { 0xD83DDC32U, }, + { 0xD83CDF35U, }, + { 0xD83CDF84U, }, + { 0xD83CDF32U, }, + { 0xD83CDF33U, }, + { 0xD83CDF34U, }, + { 0xD83CDF31U, }, + { 0xD83CDF3FU, }, + { 0x2618U, 0xFE0FU, }, + { 0xD83CDF40U, }, + { 0xD83CDF8DU, }, + { 0xD83CDF8BU, }, + { 0xD83CDF43U, }, + { 0xD83CDF42U, }, + { 0xD83CDF41U, }, + { 0xD83CDF44U, }, + { 0xD83DDC1AU, }, + { 0xD83CDF3EU, }, + { 0xD83DDC90U, }, + { 0xD83CDF37U, }, + { 0xD83CDF39U, }, + { 0xD83EDD40U, }, + { 0xD83CDF3AU, }, + { 0xD83CDF38U, }, + { 0xD83CDF3CU, }, + { 0xD83CDF3BU, }, + { 0xD83CDF1EU, }, + { 0xD83CDF1DU, }, + { 0xD83CDF1BU, }, + { 0xD83CDF1CU, }, + { 0xD83CDF1AU, }, + { 0xD83CDF15U, }, + { 0xD83CDF16U, }, + { 0xD83CDF17U, }, + { 0xD83CDF18U, }, + { 0xD83CDF11U, }, + { 0xD83CDF12U, }, + { 0xD83CDF13U, }, + { 0xD83CDF14U, }, + { 0xD83CDF19U, }, + { 0xD83CDF0EU, }, + { 0xD83CDF0DU, }, + { 0xD83CDF0FU, }, + { 0xD83DDCABU, }, + { 0x2B50U, 0xFE0FU, }, + { 0xD83CDF1FU, }, + { 0x2728U, }, + { 0x26A1U, 0xFE0FU, }, + { 0x2604U, 0xFE0FU, }, + { 0xD83DDCA5U, }, + { 0xD83DDD25U, }, + { 0xD83CDF2AU, }, + { 0xD83CDF08U, }, + { 0x2600U, 0xFE0FU, }, + { 0xD83CDF24U, }, + { 0x26C5U, 0xFE0FU, }, + { 0xD83CDF25U, }, + { 0x2601U, 0xFE0FU, }, + { 0xD83CDF26U, }, + { 0xD83CDF27U, }, + { 0x26C8U, }, + { 0xD83CDF29U, }, + { 0xD83CDF28U, }, + { 0x2744U, 0xFE0FU, }, + { 0x2603U, 0xFE0FU, }, + { 0x26C4U, 0xFE0FU, }, + { 0xD83CDF2CU, }, + { 0xD83DDCA8U, }, + { 0xD83DDCA7U, }, + { 0xD83DDCA6U, }, + { 0x2614U, 0xFE0FU, }, + { 0x2602U, 0xFE0FU, }, + { 0xD83CDF0AU, }, + { 0xD83CDF2BU, }, +}; + +InputCategory Category3 = { + { 0xD83CDF4FU, }, + { 0xD83CDF4EU, }, + { 0xD83CDF50U, }, + { 0xD83CDF4AU, }, + { 0xD83CDF4BU, }, + { 0xD83CDF4CU, }, + { 0xD83CDF49U, }, + { 0xD83CDF47U, }, + { 0xD83CDF53U, }, + { 0xD83CDF48U, }, + { 0xD83CDF52U, }, + { 0xD83CDF51U, }, + { 0xD83EDD6DU, }, + { 0xD83CDF4DU, }, + { 0xD83EDD65U, }, + { 0xD83EDD5DU, }, + { 0xD83CDF45U, }, + { 0xD83CDF46U, }, + { 0xD83EDD51U, }, + { 0xD83EDD66U, }, + { 0xD83EDD6CU, }, + { 0xD83EDD52U, }, + { 0xD83CDF36U, }, + { 0xD83CDF3DU, }, + { 0xD83EDD55U, }, + { 0xD83EDD54U, }, + { 0xD83CDF60U, }, + { 0xD83EDD50U, }, + { 0xD83EDD6FU, }, + { 0xD83CDF5EU, }, + { 0xD83EDD56U, }, + { 0xD83EDD68U, }, + { 0xD83EDDC0U, }, + { 0xD83EDD5AU, }, + { 0xD83CDF73U, }, + { 0xD83EDD5EU, }, + { 0xD83EDD53U, }, + { 0xD83EDD69U, }, + { 0xD83CDF57U, }, + { 0xD83CDF56U, }, + { 0xD83EDDB4U, }, + { 0xD83CDF2DU, }, + { 0xD83CDF54U, }, + { 0xD83CDF5FU, }, + { 0xD83CDF55U, }, + { 0xD83EDD6AU, }, + { 0xD83EDD59U, }, + { 0xD83CDF2EU, }, + { 0xD83CDF2FU, }, + { 0xD83EDD57U, }, + { 0xD83EDD58U, }, + { 0xD83EDD6BU, }, + { 0xD83CDF5DU, }, + { 0xD83CDF5CU, }, + { 0xD83CDF72U, }, + { 0xD83CDF5BU, }, + { 0xD83CDF63U, }, + { 0xD83CDF71U, }, + { 0xD83EDD5FU, }, + { 0xD83CDF64U, }, + { 0xD83CDF59U, }, + { 0xD83CDF5AU, }, + { 0xD83CDF58U, }, + { 0xD83CDF65U, }, + { 0xD83EDD60U, }, + { 0xD83EDD6EU, }, + { 0xD83CDF62U, }, + { 0xD83CDF61U, }, + { 0xD83CDF67U, }, + { 0xD83CDF68U, }, + { 0xD83CDF66U, }, + { 0xD83EDD67U, }, + { 0xD83EDDC1U, }, + { 0xD83CDF70U, }, + { 0xD83CDF82U, }, + { 0xD83CDF6EU, }, + { 0xD83CDF6DU, }, + { 0xD83CDF6CU, }, + { 0xD83CDF6BU, }, + { 0xD83CDF7FU, }, + { 0xD83CDF69U, }, + { 0xD83CDF6AU, }, + { 0xD83CDF30U, }, + { 0xD83EDD5CU, }, + { 0xD83CDF6FU, }, + { 0xD83EDD5BU, }, + { 0xD83CDF7CU, }, + { 0x2615U, 0xFE0FU, }, + { 0xD83CDF75U, }, + { 0xD83EDD64U, }, + { 0xD83CDF76U, }, + { 0xD83CDF7AU, }, + { 0xD83CDF7BU, }, + { 0xD83EDD42U, }, + { 0xD83CDF77U, }, + { 0xD83EDD43U, }, + { 0xD83CDF78U, }, + { 0xD83CDF79U, }, + { 0xD83CDF7EU, }, + { 0xD83EDD44U, }, + { 0xD83CDF74U, }, + { 0xD83CDF7DU, }, + { 0xD83EDD63U, }, + { 0xD83EDD61U, }, + { 0xD83EDD62U, }, + { 0xD83EDDC2U, }, +}; + +InputCategory Category4 = { + { 0x26BDU, 0xFE0FU, }, + { 0xD83CDFC0U, }, + { 0xD83CDFC8U, }, + { 0x26BEU, 0xFE0FU, }, + { 0xD83EDD4EU, }, + { 0xD83CDFBEU, }, + { 0xD83CDFD0U, }, + { 0xD83CDFC9U, }, + { 0xD83EDD4FU, }, + { 0xD83CDFB1U, }, + { 0xD83CDFD3U, }, + { 0xD83CDFF8U, }, + { 0xD83CDFD2U, }, + { 0xD83CDFD1U, }, + { 0xD83EDD4DU, }, + { 0xD83CDFCFU, }, + { 0xD83EDD45U, }, + { 0x26F3U, 0xFE0FU, }, + { 0xD83CDFF9U, }, + { 0xD83CDFA3U, }, + { 0xD83EDD4AU, }, + { 0xD83EDD4BU, }, + { 0xD83CDFBDU, }, + { 0xD83DDEF9U, 0x20U, }, + { 0xD83DDEF7U, }, + { 0x26F8U, }, + { 0xD83EDD4CU, }, + { 0xD83CDFBFU, }, + { 0x26F7U, }, + { 0xD83CDFC2U, }, + { 0xD83CDFCBU, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFCBU, 0xFE0FU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD3CU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD3CU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD38U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD38U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0x26F9U, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0x26F9U, 0xFE0FU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD3AU, }, + { 0xD83EDD3EU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD3EU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFCCU, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFCCU, 0xFE0FU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFC7U, }, + { 0xD83EDDD8U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD8U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFC4U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFC4U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFCAU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83CDFCAU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDD3DU, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD3DU, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDEA3U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEA3U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83EDDD7U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDDD7U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDEB5U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEB5U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83DDEB4U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83DDEB4U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFC6U, }, + { 0xD83EDD47U, }, + { 0xD83EDD48U, }, + { 0xD83EDD49U, }, + { 0xD83CDFC5U, }, + { 0xD83CDF96U, }, + { 0xD83CDFF5U, }, + { 0xD83CDF97U, }, + { 0xD83CDFABU, }, + { 0xD83CDF9FU, }, + { 0xD83CDFAAU, }, + { 0xD83EDD39U, 0x200DU, 0x2640U, 0xFE0FU, }, + { 0xD83EDD39U, 0x200DU, 0x2642U, 0xFE0FU, }, + { 0xD83CDFADU, }, + { 0xD83CDFA8U, }, + { 0xD83CDFACU, }, + { 0xD83CDFA4U, }, + { 0xD83CDFA7U, }, + { 0xD83CDFBCU, }, + { 0xD83CDFB9U, }, + { 0xD83EDD41U, }, + { 0xD83CDFB7U, }, + { 0xD83CDFBAU, }, + { 0xD83CDFB8U, }, + { 0xD83CDFBBU, }, + { 0xD83CDFB2U, }, + { 0x265FU, }, + { 0xD83CDFAFU, }, + { 0xD83CDFB3U, }, + { 0xD83CDFAEU, }, + { 0xD83CDFB0U, }, + { 0xD83EDDE9U, }, +}; + +InputCategory Category5 = { + { 0xD83DDE97U, }, + { 0xD83DDE95U, }, + { 0xD83DDE99U, }, + { 0xD83DDE8CU, }, + { 0xD83DDE8EU, }, + { 0xD83CDFCEU, }, + { 0xD83DDE93U, }, + { 0xD83DDE91U, }, + { 0xD83DDE92U, }, + { 0xD83DDE90U, }, + { 0xD83DDE9AU, }, + { 0xD83DDE9BU, }, + { 0xD83DDE9CU, }, + { 0xD83DDEF4U, }, + { 0xD83DDEB2U, }, + { 0xD83DDEF5U, }, + { 0xD83CDFCDU, }, + { 0xD83DDEA8U, }, + { 0xD83DDE94U, }, + { 0xD83DDE8DU, }, + { 0xD83DDE98U, }, + { 0xD83DDE96U, }, + { 0xD83DDEA1U, }, + { 0xD83DDEA0U, }, + { 0xD83DDE9FU, }, + { 0xD83DDE83U, }, + { 0xD83DDE8BU, }, + { 0xD83DDE9EU, }, + { 0xD83DDE9DU, }, + { 0xD83DDE84U, }, + { 0xD83DDE85U, }, + { 0xD83DDE88U, }, + { 0xD83DDE82U, }, + { 0xD83DDE86U, }, + { 0xD83DDE87U, }, + { 0xD83DDE8AU, }, + { 0xD83DDE89U, }, + { 0x2708U, 0xFE0FU, }, + { 0xD83DDEEBU, }, + { 0xD83DDEECU, }, + { 0xD83DDEE9U, }, + { 0xD83DDCBAU, }, + { 0xD83DDEF0U, }, + { 0xD83DDE80U, }, + { 0xD83DDEF8U, }, + { 0xD83DDE81U, }, + { 0xD83DDEF6U, }, + { 0x26F5U, 0xFE0FU, }, + { 0xD83DDEA4U, }, + { 0xD83DDEE5U, }, + { 0xD83DDEF3U, }, + { 0x26F4U, }, + { 0xD83DDEA2U, }, + { 0x2693U, 0xFE0FU, }, + { 0x26FDU, 0xFE0FU, }, + { 0xD83DDEA7U, }, + { 0xD83DDEA6U, }, + { 0xD83DDEA5U, }, + { 0xD83DDE8FU, }, + { 0xD83DDDFAU, }, + { 0xD83DDDFFU, }, + { 0xD83DDDFDU, }, + { 0xD83DDDFCU, }, + { 0xD83CDFF0U, }, + { 0xD83CDFEFU, }, + { 0xD83CDFDFU, }, + { 0xD83CDFA1U, }, + { 0xD83CDFA2U, }, + { 0xD83CDFA0U, }, + { 0x26F2U, 0xFE0FU, }, + { 0x26F1U, }, + { 0xD83CDFD6U, }, + { 0xD83CDFDDU, }, + { 0xD83CDFDCU, }, + { 0xD83CDF0BU, }, + { 0x26F0U, }, + { 0xD83CDFD4U, }, + { 0xD83DDDFBU, }, + { 0xD83CDFD5U, }, + { 0x26FAU, 0xFE0FU, }, + { 0xD83CDFE0U, }, + { 0xD83CDFE1U, }, + { 0xD83CDFD8U, }, + { 0xD83CDFDAU, }, + { 0xD83CDFD7U, }, + { 0xD83CDFEDU, }, + { 0xD83CDFE2U, }, + { 0xD83CDFECU, }, + { 0xD83CDFE3U, }, + { 0xD83CDFE4U, }, + { 0xD83CDFE5U, }, + { 0xD83CDFE6U, }, + { 0xD83CDFE8U, }, + { 0xD83CDFEAU, }, + { 0xD83CDFEBU, }, + { 0xD83CDFE9U, }, + { 0xD83DDC92U, }, + { 0xD83CDFDBU, }, + { 0x26EAU, 0xFE0FU, }, + { 0xD83DDD4CU, }, + { 0xD83DDD4DU, }, + { 0xD83DDD4BU, }, + { 0x26E9U, }, + { 0xD83DDEE4U, }, + { 0xD83DDEE3U, }, + { 0xD83DDDFEU, }, + { 0xD83CDF91U, }, + { 0xD83CDFDEU, }, + { 0xD83CDF05U, }, + { 0xD83CDF04U, }, + { 0xD83CDF20U, }, + { 0xD83CDF87U, }, + { 0xD83CDF86U, }, + { 0xD83CDF07U, }, + { 0xD83CDF06U, }, + { 0xD83CDFD9U, }, + { 0xD83CDF03U, }, + { 0xD83CDF0CU, }, + { 0xD83CDF09U, }, + { 0xD83CDF01U, }, +}; + +InputCategory Category6 = { + { 0x231AU, 0xFE0FU, }, + { 0xD83DDCF1U, }, + { 0xD83DDCF2U, }, + { 0xD83DDCBBU, }, + { 0x2328U, 0xFE0FU, }, + { 0xD83DDDA5U, }, + { 0xD83DDDA8U, }, + { 0xD83DDDB1U, }, + { 0xD83DDDB2U, }, + { 0xD83DDD79U, }, + { 0xD83DDDDCU, }, + { 0xD83DDCBDU, }, + { 0xD83DDCBEU, }, + { 0xD83DDCBFU, }, + { 0xD83DDCC0U, }, + { 0xD83DDCFCU, }, + { 0xD83DDCF7U, }, + { 0xD83DDCF8U, }, + { 0xD83DDCF9U, }, + { 0xD83CDFA5U, }, + { 0xD83DDCFDU, }, + { 0xD83CDF9EU, }, + { 0xD83DDCDEU, }, + { 0x260EU, 0xFE0FU, }, + { 0xD83DDCDFU, }, + { 0xD83DDCE0U, }, + { 0xD83DDCFAU, }, + { 0xD83DDCFBU, }, + { 0xD83CDF99U, }, + { 0xD83CDF9AU, }, + { 0xD83CDF9BU, }, + { 0xD83EDDEDU, }, + { 0x23F1U, }, + { 0x23F2U, }, + { 0x23F0U, }, + { 0xD83DDD70U, }, + { 0x231BU, 0xFE0FU, }, + { 0x23F3U, }, + { 0xD83DDCE1U, }, + { 0xD83DDD0BU, }, + { 0xD83DDD0CU, }, + { 0xD83DDCA1U, }, + { 0xD83DDD26U, }, + { 0xD83DDD6FU, }, + { 0xD83EDDEFU, }, + { 0xD83DDEE2U, }, + { 0xD83DDCB8U, }, + { 0xD83DDCB5U, }, + { 0xD83DDCB4U, }, + { 0xD83DDCB6U, }, + { 0xD83DDCB7U, }, + { 0xD83DDCB0U, }, + { 0xD83DDCB3U, }, + { 0xD83DDC8EU, }, + { 0x2696U, 0xFE0FU, }, + { 0xD83EDDF0U, }, + { 0xD83DDD27U, }, + { 0xD83DDD28U, }, + { 0x2692U, }, + { 0xD83DDEE0U, }, + { 0x26CFU, }, + { 0xD83DDD29U, }, + { 0x2699U, 0xFE0FU, }, + { 0xD83EDDF1U, }, + { 0x26D3U, }, + { 0xD83EDDF2U, }, + { 0xD83DDD2BU, }, + { 0xD83DDCA3U, }, + { 0xD83EDDE8U, }, + { 0xD83DDD2AU, }, + { 0xD83DDDE1U, }, + { 0x2694U, 0xFE0FU, }, + { 0xD83DDEE1U, }, + { 0xD83DDEACU, }, + { 0x26B0U, 0xFE0FU, }, + { 0x26B1U, 0xFE0FU, }, + { 0xD83CDFFAU, }, + { 0xD83DDD2EU, }, + { 0xD83DDCFFU, }, + { 0xD83EDDFFU, }, + { 0xD83DDC88U, }, + { 0x2697U, 0xFE0FU, }, + { 0xD83DDD2DU, }, + { 0xD83DDD2CU, }, + { 0xD83DDD73U, }, + { 0xD83DDC8AU, }, + { 0xD83DDC89U, }, + { 0xD83EDDECU, }, + { 0xD83EDDA0U, }, + { 0xD83EDDEBU, }, + { 0xD83EDDEAU, }, + { 0xD83CDF21U, }, + { 0xD83EDDF9U, }, + { 0xD83EDDFAU, }, + { 0xD83EDDFBU, }, + { 0xD83DDEBDU, }, + { 0xD83DDEB0U, }, + { 0xD83DDEBFU, }, + { 0xD83DDEC1U, }, + { 0xD83DDEC0U, }, + { 0xD83EDDFCU, }, + { 0xD83EDDFDU, }, + { 0xD83EDDF4U, }, + { 0xD83DDECEU, }, + { 0xD83DDD11U, }, + { 0xD83DDDDDU, }, + { 0xD83DDEAAU, }, + { 0xD83DDECBU, }, + { 0xD83DDECFU, }, + { 0xD83DDECCU, }, + { 0xD83EDDF8U, }, + { 0xD83DDDBCU, }, + { 0xD83DDECDU, }, + { 0xD83DDED2U, }, + { 0xD83CDF81U, }, + { 0xD83CDF88U, }, + { 0xD83CDF8FU, }, + { 0xD83CDF80U, }, + { 0xD83CDF8AU, }, + { 0xD83CDF89U, }, + { 0xD83CDF8EU, }, + { 0xD83CDFEEU, }, + { 0xD83CDF90U, }, + { 0xD83EDDE7U, }, + { 0x2709U, 0xFE0FU, }, + { 0xD83DDCE9U, }, + { 0xD83DDCE8U, }, + { 0xD83DDCE7U, }, + { 0xD83DDC8CU, }, + { 0xD83DDCE5U, }, + { 0xD83DDCE4U, }, + { 0xD83DDCE6U, }, + { 0xD83CDFF7U, }, + { 0xD83DDCEAU, }, + { 0xD83DDCEBU, }, + { 0xD83DDCECU, }, + { 0xD83DDCEDU, }, + { 0xD83DDCEEU, }, + { 0xD83DDCEFU, }, + { 0xD83DDCDCU, }, + { 0xD83DDCC3U, }, + { 0xD83DDCC4U, }, + { 0xD83DDCD1U, }, + { 0xD83EDDFEU, }, + { 0xD83DDCCAU, }, + { 0xD83DDCC8U, }, + { 0xD83DDCC9U, }, + { 0xD83DDDD2U, }, + { 0xD83DDDD3U, }, + { 0xD83DDCC6U, }, + { 0xD83DDCC5U, }, + { 0xD83DDDD1U, }, + { 0xD83DDCC7U, }, + { 0xD83DDDC3U, }, + { 0xD83DDDF3U, }, + { 0xD83DDDC4U, }, + { 0xD83DDCCBU, }, + { 0xD83DDCC1U, }, + { 0xD83DDCC2U, }, + { 0xD83DDDC2U, }, + { 0xD83DDDDEU, }, + { 0xD83DDCF0U, }, + { 0xD83DDCD3U, }, + { 0xD83DDCD4U, }, + { 0xD83DDCD2U, }, + { 0xD83DDCD5U, }, + { 0xD83DDCD7U, }, + { 0xD83DDCD8U, }, + { 0xD83DDCD9U, }, + { 0xD83DDCDAU, }, + { 0xD83DDCD6U, }, + { 0xD83DDD16U, }, + { 0xD83EDDF7U, }, + { 0xD83DDD17U, }, + { 0xD83DDCCEU, }, + { 0xD83DDD87U, }, + { 0xD83DDCD0U, }, + { 0xD83DDCCFU, }, + { 0xD83EDDEEU, }, + { 0xD83DDCCCU, }, + { 0xD83DDCCDU, }, + { 0x2702U, 0xFE0FU, }, + { 0xD83DDD8AU, }, + { 0xD83DDD8BU, }, + { 0x2712U, 0xFE0FU, }, + { 0xD83DDD8CU, }, + { 0xD83DDD8DU, }, + { 0xD83DDCDDU, }, + { 0x270FU, 0xFE0FU, }, + { 0xD83DDD0DU, }, + { 0xD83DDD0EU, }, + { 0xD83DDD0FU, }, + { 0xD83DDD10U, }, + { 0xD83DDD12U, }, + { 0xD83DDD13U, }, +}; + +InputCategory Category7 = { + { 0x2764U, 0xFE0FU, }, + { 0xD83EDDE1U, }, + { 0xD83DDC9BU, }, + { 0xD83DDC9AU, }, + { 0xD83DDC99U, }, + { 0xD83DDC9CU, }, + { 0xD83DDDA4U, }, + { 0xD83DDC94U, }, + { 0x2763U, 0xFE0FU, }, + { 0xD83DDC95U, }, + { 0xD83DDC9EU, }, + { 0xD83DDC93U, }, + { 0xD83DDC97U, }, + { 0xD83DDC96U, }, + { 0xD83DDC98U, }, + { 0xD83DDC9DU, }, + { 0xD83DDC9FU, }, + { 0x262EU, 0xFE0FU, }, + { 0x271DU, 0xFE0FU, }, + { 0x262AU, 0xFE0FU, }, + { 0xD83DDD49U, }, + { 0x2638U, 0xFE0FU, }, + { 0x2721U, 0xFE0FU, }, + { 0xD83DDD2FU, }, + { 0xD83DDD4EU, }, + { 0x262FU, 0xFE0FU, }, + { 0x2626U, 0xFE0FU, }, + { 0xD83DDED0U, }, + { 0x26CEU, }, + { 0x2648U, 0xFE0FU, }, + { 0x2649U, 0xFE0FU, }, + { 0x264AU, 0xFE0FU, }, + { 0x264BU, 0xFE0FU, }, + { 0x264CU, 0xFE0FU, }, + { 0x264DU, 0xFE0FU, }, + { 0x264EU, 0xFE0FU, }, + { 0x264FU, 0xFE0FU, }, + { 0x2650U, 0xFE0FU, }, + { 0x2651U, 0xFE0FU, }, + { 0x2652U, 0xFE0FU, }, + { 0x2653U, 0xFE0FU, }, + { 0xD83CDD94U, }, + { 0x269BU, 0xFE0FU, }, + { 0xD83CDE51U, }, + { 0x2622U, 0xFE0FU, }, + { 0x2623U, 0xFE0FU, }, + { 0xD83DDCF4U, }, + { 0xD83DDCF3U, }, + { 0xD83CDE36U, }, + { 0xD83CDE1AU, 0xFE0FU, }, + { 0xD83CDE38U, }, + { 0xD83CDE3AU, }, + { 0xD83CDE37U, 0xFE0FU, }, + { 0x2734U, 0xFE0FU, }, + { 0xD83CDD9AU, }, + { 0xD83DDCAEU, }, + { 0xD83CDE50U, }, + { 0x3299U, 0xFE0FU, }, + { 0x3297U, 0xFE0FU, }, + { 0xD83CDE34U, }, + { 0xD83CDE35U, }, + { 0xD83CDE39U, }, + { 0xD83CDE32U, }, + { 0xD83CDD70U, 0xFE0FU, }, + { 0xD83CDD71U, 0xFE0FU, }, + { 0xD83CDD8EU, }, + { 0xD83CDD91U, }, + { 0xD83CDD7EU, 0xFE0FU, }, + { 0xD83CDD98U, }, + { 0x274CU, }, + { 0x2B55U, 0xFE0FU, }, + { 0xD83DDED1U, }, + { 0x26D4U, 0xFE0FU, }, + { 0xD83DDCDBU, }, + { 0xD83DDEABU, }, + { 0xD83DDCAFU, }, + { 0xD83DDCA2U, }, + { 0x2668U, 0xFE0FU, }, + { 0xD83DDEB7U, }, + { 0xD83DDEAFU, }, + { 0xD83DDEB3U, }, + { 0xD83DDEB1U, }, + { 0xD83DDD1EU, }, + { 0xD83DDCF5U, }, + { 0xD83DDEADU, }, + { 0x2757U, 0xFE0FU, }, + { 0x2755U, }, + { 0x2753U, }, + { 0x2754U, }, + { 0x203CU, 0xFE0FU, }, + { 0x2049U, 0xFE0FU, }, + { 0xD83DDD05U, }, + { 0xD83DDD06U, }, + { 0x303DU, 0xFE0FU, }, + { 0x26A0U, 0xFE0FU, }, + { 0xD83DDEB8U, }, + { 0xD83DDD31U, }, + { 0x269CU, 0xFE0FU, }, + { 0xD83DDD30U, }, + { 0x267BU, 0xFE0FU, }, + { 0x2705U, }, + { 0xD83CDE2FU, 0xFE0FU, }, + { 0xD83DDCB9U, }, + { 0x2747U, 0xFE0FU, }, + { 0x2733U, 0xFE0FU, }, + { 0x274EU, }, + { 0xD83CDF10U, }, + { 0xD83DDCA0U, }, + { 0x24C2U, 0xFE0FU, }, + { 0xD83CDF00U, }, + { 0xD83DDCA4U, }, + { 0xD83CDFE7U, }, + { 0xD83DDEBEU, }, + { 0x267FU, 0xFE0FU, }, + { 0xD83CDD7FU, 0xFE0FU, }, + { 0xD83CDE33U, }, + { 0xD83CDE02U, 0xFE0FU, }, + { 0xD83DDEC2U, }, + { 0xD83DDEC3U, }, + { 0xD83DDEC4U, }, + { 0xD83DDEC5U, }, + { 0xD83DDEB9U, }, + { 0xD83DDEBAU, }, + { 0xD83DDEBCU, }, + { 0xD83DDEBBU, }, + { 0xD83DDEAEU, }, + { 0xD83CDFA6U, }, + { 0xD83DDCF6U, }, + { 0xD83CDE01U, }, + { 0xD83DDD23U, }, + { 0x2139U, 0xFE0FU, }, + { 0xD83DDD24U, }, + { 0xD83DDD21U, }, + { 0xD83DDD20U, }, + { 0xD83CDD96U, }, + { 0xD83CDD97U, }, + { 0xD83CDD99U, }, + { 0xD83CDD92U, }, + { 0xD83CDD95U, }, + { 0xD83CDD93U, }, + { 0x30U, 0xFE0FU, 0x20E3U, }, + { 0x31U, 0xFE0FU, 0x20E3U, }, + { 0x32U, 0xFE0FU, 0x20E3U, }, + { 0x33U, 0xFE0FU, 0x20E3U, }, + { 0x34U, 0xFE0FU, 0x20E3U, }, + { 0x35U, 0xFE0FU, 0x20E3U, }, + { 0x36U, 0xFE0FU, 0x20E3U, }, + { 0x37U, 0xFE0FU, 0x20E3U, }, + { 0x38U, 0xFE0FU, 0x20E3U, }, + { 0x39U, 0xFE0FU, 0x20E3U, }, + { 0xD83DDD1FU, }, + { 0xD83DDD22U, }, + { 0x23U, 0xFE0FU, 0x20E3U, }, + { 0x2AU, 0xFE0FU, 0x20E3U, }, + { 0x23CFU, 0xFE0FU, }, + { 0x25B6U, 0xFE0FU, }, + { 0x23F8U, }, + { 0x23EFU, }, + { 0x23F9U, }, + { 0x23FAU, }, + { 0x23EDU, }, + { 0x23EEU, }, + { 0x23E9U, }, + { 0x23EAU, }, + { 0x23EBU, }, + { 0x23ECU, }, + { 0x25C0U, 0xFE0FU, }, + { 0xD83DDD3CU, }, + { 0xD83DDD3DU, }, + { 0x27A1U, 0xFE0FU, }, + { 0x2B05U, 0xFE0FU, }, + { 0x2B06U, 0xFE0FU, }, + { 0x2B07U, 0xFE0FU, }, + { 0x2197U, 0xFE0FU, }, + { 0x2198U, 0xFE0FU, }, + { 0x2199U, 0xFE0FU, }, + { 0x2196U, 0xFE0FU, }, + { 0x2195U, 0xFE0FU, }, + { 0x2194U, 0xFE0FU, }, + { 0x21AAU, 0xFE0FU, }, + { 0x21A9U, 0xFE0FU, }, + { 0x2934U, 0xFE0FU, }, + { 0x2935U, 0xFE0FU, }, + { 0xD83DDD00U, }, + { 0xD83DDD01U, }, + { 0xD83DDD02U, }, + { 0xD83DDD04U, }, + { 0xD83DDD03U, }, + { 0xD83CDFB5U, }, + { 0xD83CDFB6U, }, + { 0x2795U, }, + { 0x2796U, }, + { 0x2797U, }, + { 0x2716U, 0xFE0FU, }, + { 0x267EU, }, + { 0xD83DDCB2U, }, + { 0xD83DDCB1U, }, + { 0x2122U, 0xFE0FU, }, + { 0xA9U, 0xFE0FU, }, + { 0xAEU, 0xFE0FU, }, + { 0xD83DDC41U, 0x200DU, 0xD83DDDE8U, }, + { 0xD83DDD1AU, }, + { 0xD83DDD19U, }, + { 0xD83DDD1BU, }, + { 0xD83DDD1DU, }, + { 0xD83DDD1CU, }, + { 0x3030U, 0xFE0FU, }, + { 0x27B0U, }, + { 0x27BFU, }, + { 0x2714U, 0xFE0FU, }, + { 0x2611U, 0xFE0FU, }, + { 0xD83DDD18U, }, + { 0x26AAU, 0xFE0FU, }, + { 0x26ABU, 0xFE0FU, }, + { 0xD83DDD34U, }, + { 0xD83DDD35U, }, + { 0xD83DDD3AU, }, + { 0xD83DDD3BU, }, + { 0xD83DDD38U, }, + { 0xD83DDD39U, }, + { 0xD83DDD36U, }, + { 0xD83DDD37U, }, + { 0xD83DDD33U, }, + { 0xD83DDD32U, }, + { 0x25AAU, 0xFE0FU, }, + { 0x25ABU, 0xFE0FU, }, + { 0x25FEU, 0xFE0FU, }, + { 0x25FDU, 0xFE0FU, }, + { 0x25FCU, 0xFE0FU, }, + { 0x25FBU, 0xFE0FU, }, + { 0x2B1BU, 0xFE0FU, }, + { 0x2B1CU, 0xFE0FU, }, + { 0xD83DDD08U, }, + { 0xD83DDD07U, }, + { 0xD83DDD09U, }, + { 0xD83DDD0AU, }, + { 0xD83DDD14U, }, + { 0xD83DDD15U, }, + { 0xD83DDCE3U, }, + { 0xD83DDCE2U, }, + { 0xD83DDCACU, }, + { 0xD83DDCADU, }, + { 0xD83DDDEFU, }, + { 0x2660U, 0xFE0FU, }, + { 0x2663U, 0xFE0FU, }, + { 0x2665U, 0xFE0FU, }, + { 0x2666U, 0xFE0FU, }, + { 0xD83CDCCFU, }, + { 0xD83CDFB4U, }, + { 0xD83CDC04U, 0xFE0FU, }, + { 0xD83DDD50U, }, + { 0xD83DDD51U, }, + { 0xD83DDD52U, }, + { 0xD83DDD53U, }, + { 0xD83DDD54U, }, + { 0xD83DDD55U, }, + { 0xD83DDD56U, }, + { 0xD83DDD57U, }, + { 0xD83DDD58U, }, + { 0xD83DDD59U, }, + { 0xD83DDD5AU, }, + { 0xD83DDD5BU, }, + { 0xD83DDD5CU, }, + { 0xD83DDD5DU, }, + { 0xD83DDD5EU, }, + { 0xD83DDD5FU, }, + { 0xD83DDD60U, }, + { 0xD83DDD61U, }, + { 0xD83DDD62U, }, + { 0xD83DDD63U, }, + { 0xD83DDD64U, }, + { 0xD83DDD65U, }, + { 0xD83DDD66U, }, + { 0xD83DDD67U, }, + +//}; +// +//InputCategory Category8 = { + + { 0xD83CDFF3U, 0xFE0FU, }, + { 0xD83CDFF4U, }, + { 0xD83CDFF4U, 0x200DU, 0x2620U, 0xFE0FU, }, + { 0xD83CDFC1U, }, + { 0xD83DDEA9U, }, + { 0xD83CDFF3U, 0xFE0FU, 0x200DU, 0xD83CDF08U, }, + { 0xD83CDDFAU, 0xD83CDDF3U, }, + { 0xD83CDDE6U, 0xD83CDDEBU, }, + { 0xD83CDDE6U, 0xD83CDDFDU, }, + { 0xD83CDDE6U, 0xD83CDDF1U, }, + { 0xD83CDDE9U, 0xD83CDDFFU, }, + { 0xD83CDDE6U, 0xD83CDDF8U, }, + { 0xD83CDDE6U, 0xD83CDDE9U, }, + { 0xD83CDDE6U, 0xD83CDDF4U, }, + { 0xD83CDDE6U, 0xD83CDDEEU, }, + { 0xD83CDDE6U, 0xD83CDDF6U, }, + { 0xD83CDDE6U, 0xD83CDDECU, }, + { 0xD83CDDE6U, 0xD83CDDF7U, }, + { 0xD83CDDE6U, 0xD83CDDF2U, }, + { 0xD83CDDE6U, 0xD83CDDFCU, }, + { 0xD83CDDE6U, 0xD83CDDFAU, }, + { 0xD83CDDE6U, 0xD83CDDF9U, }, + { 0xD83CDDE6U, 0xD83CDDFFU, }, + { 0xD83CDDE7U, 0xD83CDDF8U, }, + { 0xD83CDDE7U, 0xD83CDDEDU, }, + { 0xD83CDDE7U, 0xD83CDDE9U, }, + { 0xD83CDDE7U, 0xD83CDDE7U, }, + { 0xD83CDDE7U, 0xD83CDDFEU, }, + { 0xD83CDDE7U, 0xD83CDDEAU, }, + { 0xD83CDDE7U, 0xD83CDDFFU, }, + { 0xD83CDDE7U, 0xD83CDDEFU, }, + { 0xD83CDDE7U, 0xD83CDDF2U, }, + { 0xD83CDDE7U, 0xD83CDDF9U, }, + { 0xD83CDDE7U, 0xD83CDDF4U, }, + { 0xD83CDDE7U, 0xD83CDDE6U, }, + { 0xD83CDDE7U, 0xD83CDDFCU, }, + { 0xD83CDDE7U, 0xD83CDDF7U, }, + { 0xD83CDDEEU, 0xD83CDDF4U, }, + { 0xD83CDDFBU, 0xD83CDDECU, }, + { 0xD83CDDE7U, 0xD83CDDF3U, }, + { 0xD83CDDE7U, 0xD83CDDECU, }, + { 0xD83CDDE7U, 0xD83CDDEBU, }, + { 0xD83CDDE7U, 0xD83CDDEEU, }, + { 0xD83CDDF0U, 0xD83CDDEDU, }, + { 0xD83CDDE8U, 0xD83CDDF2U, }, + { 0xD83CDDE8U, 0xD83CDDE6U, }, + { 0xD83CDDEEU, 0xD83CDDE8U, }, + { 0xD83CDDE8U, 0xD83CDDFBU, }, + { 0xD83CDDE7U, 0xD83CDDF6U, }, + { 0xD83CDDF0U, 0xD83CDDFEU, }, + { 0xD83CDDE8U, 0xD83CDDEBU, }, + { 0xD83CDDF9U, 0xD83CDDE9U, }, + { 0xD83CDDE8U, 0xD83CDDF1U, }, + { 0xD83CDDE8U, 0xD83CDDF3U, }, + { 0xD83CDDE8U, 0xD83CDDFDU, }, + { 0xD83CDDE8U, 0xD83CDDE8U, }, + { 0xD83CDDE8U, 0xD83CDDF4U, }, + { 0xD83CDDF0U, 0xD83CDDF2U, }, + { 0xD83CDDE8U, 0xD83CDDECU, }, + { 0xD83CDDE8U, 0xD83CDDE9U, }, + { 0xD83CDDE8U, 0xD83CDDF0U, }, + { 0xD83CDDE8U, 0xD83CDDF7U, }, + { 0xD83CDDE8U, 0xD83CDDEEU, }, + { 0xD83CDDEDU, 0xD83CDDF7U, }, + { 0xD83CDDE8U, 0xD83CDDFAU, }, + { 0xD83CDDE8U, 0xD83CDDFCU, }, + { 0xD83CDDE8U, 0xD83CDDFEU, }, + { 0xD83CDDE8U, 0xD83CDDFFU, }, + { 0xD83CDDE9U, 0xD83CDDF0U, }, + { 0xD83CDDE9U, 0xD83CDDEFU, }, + { 0xD83CDDE9U, 0xD83CDDF2U, }, + { 0xD83CDDE9U, 0xD83CDDF4U, }, + { 0xD83CDDEAU, 0xD83CDDE8U, }, + { 0xD83CDDEAU, 0xD83CDDECU, }, + { 0xD83CDDF8U, 0xD83CDDFBU, }, + { 0xD83CDDECU, 0xD83CDDF6U, }, + { 0xD83CDDEAU, 0xD83CDDF7U, }, + { 0xD83CDDEAU, 0xD83CDDEAU, }, + { 0xD83CDDEAU, 0xD83CDDF9U, }, + { 0xD83CDDEAU, 0xD83CDDFAU, }, + { 0xD83CDDEBU, 0xD83CDDF0U, }, + { 0xD83CDDEBU, 0xD83CDDF4U, }, + { 0xD83CDDEBU, 0xD83CDDEFU, }, + { 0xD83CDDEBU, 0xD83CDDEEU, }, + { 0xD83CDDEBU, 0xD83CDDF7U, }, + { 0xD83CDDECU, 0xD83CDDEBU, }, + { 0xD83CDDF5U, 0xD83CDDEBU, }, + { 0xD83CDDF9U, 0xD83CDDEBU, }, + { 0xD83CDDECU, 0xD83CDDE6U, }, + { 0xD83CDDECU, 0xD83CDDF2U, }, + { 0xD83CDDECU, 0xD83CDDEAU, }, + { 0xD83CDDE9U, 0xD83CDDEAU, }, + { 0xD83CDDECU, 0xD83CDDEDU, }, + { 0xD83CDDECU, 0xD83CDDEEU, }, + { 0xD83CDDECU, 0xD83CDDF7U, }, + { 0xD83CDDECU, 0xD83CDDF1U, }, + { 0xD83CDDECU, 0xD83CDDE9U, }, + { 0xD83CDDECU, 0xD83CDDF5U, }, + { 0xD83CDDECU, 0xD83CDDFAU, }, + { 0xD83CDDECU, 0xD83CDDF9U, }, + { 0xD83CDDECU, 0xD83CDDECU, }, + { 0xD83CDDECU, 0xD83CDDF3U, }, + { 0xD83CDDECU, 0xD83CDDFCU, }, + { 0xD83CDDECU, 0xD83CDDFEU, }, + { 0xD83CDDEDU, 0xD83CDDF9U, }, + { 0xD83CDDEDU, 0xD83CDDF3U, }, + { 0xD83CDDEDU, 0xD83CDDF0U, }, + { 0xD83CDDEDU, 0xD83CDDFAU, }, + { 0xD83CDDEEU, 0xD83CDDF8U, }, + { 0xD83CDDEEU, 0xD83CDDF3U, }, + { 0xD83CDDEEU, 0xD83CDDE9U, }, + { 0xD83CDDEEU, 0xD83CDDF7U, }, + { 0xD83CDDEEU, 0xD83CDDF6U, }, + { 0xD83CDDEEU, 0xD83CDDEAU, }, + { 0xD83CDDEEU, 0xD83CDDF2U, }, + { 0xD83CDDEEU, 0xD83CDDF1U, }, + { 0xD83CDDEEU, 0xD83CDDF9U, }, + { 0xD83CDDEFU, 0xD83CDDF2U, }, + { 0xD83CDDEFU, 0xD83CDDF5U, }, + { 0xD83CDF8CU, }, + { 0xD83CDDEFU, 0xD83CDDEAU, }, + { 0xD83CDDEFU, 0xD83CDDF4U, }, + { 0xD83CDDF0U, 0xD83CDDFFU, }, + { 0xD83CDDF0U, 0xD83CDDEAU, }, + { 0xD83CDDF0U, 0xD83CDDEEU, }, + { 0xD83CDDFDU, 0xD83CDDF0U, }, + { 0xD83CDDF0U, 0xD83CDDFCU, }, + { 0xD83CDDF0U, 0xD83CDDECU, }, + { 0xD83CDDF1U, 0xD83CDDE6U, }, + { 0xD83CDDF1U, 0xD83CDDFBU, }, + { 0xD83CDDF1U, 0xD83CDDE7U, }, + { 0xD83CDDF1U, 0xD83CDDF8U, }, + { 0xD83CDDF1U, 0xD83CDDF7U, }, + { 0xD83CDDF1U, 0xD83CDDFEU, }, + { 0xD83CDDF1U, 0xD83CDDEEU, }, + { 0xD83CDDF1U, 0xD83CDDF9U, }, + { 0xD83CDDF1U, 0xD83CDDFAU, }, + { 0xD83CDDF2U, 0xD83CDDF4U, }, + { 0xD83CDDF2U, 0xD83CDDF0U, }, + { 0xD83CDDF2U, 0xD83CDDECU, }, + { 0xD83CDDF2U, 0xD83CDDFCU, }, + { 0xD83CDDF2U, 0xD83CDDFEU, }, + { 0xD83CDDF2U, 0xD83CDDFBU, }, + { 0xD83CDDF2U, 0xD83CDDF1U, }, + { 0xD83CDDF2U, 0xD83CDDF9U, }, + { 0xD83CDDF2U, 0xD83CDDEDU, }, + { 0xD83CDDF2U, 0xD83CDDF6U, }, + { 0xD83CDDF2U, 0xD83CDDF7U, }, + { 0xD83CDDF2U, 0xD83CDDFAU, }, + { 0xD83CDDFEU, 0xD83CDDF9U, }, + { 0xD83CDDF2U, 0xD83CDDFDU, }, + { 0xD83CDDEBU, 0xD83CDDF2U, }, + { 0xD83CDDF2U, 0xD83CDDE9U, }, + { 0xD83CDDF2U, 0xD83CDDE8U, }, + { 0xD83CDDF2U, 0xD83CDDF3U, }, + { 0xD83CDDF2U, 0xD83CDDEAU, }, + { 0xD83CDDF2U, 0xD83CDDF8U, }, + { 0xD83CDDF2U, 0xD83CDDE6U, }, + { 0xD83CDDF2U, 0xD83CDDFFU, }, + { 0xD83CDDF2U, 0xD83CDDF2U, }, + { 0xD83CDDF3U, 0xD83CDDE6U, }, + { 0xD83CDDF3U, 0xD83CDDF7U, }, + { 0xD83CDDF3U, 0xD83CDDF5U, }, + { 0xD83CDDF3U, 0xD83CDDF1U, }, + { 0xD83CDDF3U, 0xD83CDDE8U, }, + { 0xD83CDDF3U, 0xD83CDDFFU, }, + { 0xD83CDDF3U, 0xD83CDDEEU, }, + { 0xD83CDDF3U, 0xD83CDDEAU, }, + { 0xD83CDDF3U, 0xD83CDDECU, }, + { 0xD83CDDF3U, 0xD83CDDFAU, }, + { 0xD83CDDF3U, 0xD83CDDEBU, }, + { 0xD83CDDF0U, 0xD83CDDF5U, }, + { 0xD83CDDF2U, 0xD83CDDF5U, }, + { 0xD83CDDF3U, 0xD83CDDF4U, }, + { 0xD83CDDF4U, 0xD83CDDF2U, }, + { 0xD83CDDF5U, 0xD83CDDF0U, }, + { 0xD83CDDF5U, 0xD83CDDFCU, }, + { 0xD83CDDF5U, 0xD83CDDF8U, }, + { 0xD83CDDF5U, 0xD83CDDE6U, }, + { 0xD83CDDF5U, 0xD83CDDECU, }, + { 0xD83CDDF5U, 0xD83CDDFEU, }, + { 0xD83CDDF5U, 0xD83CDDEAU, }, + { 0xD83CDDF5U, 0xD83CDDEDU, }, + { 0xD83CDDF5U, 0xD83CDDF3U, }, + { 0xD83CDDF5U, 0xD83CDDF1U, }, + { 0xD83CDDF5U, 0xD83CDDF9U, }, + { 0xD83CDDF5U, 0xD83CDDF7U, }, + { 0xD83CDDF6U, 0xD83CDDE6U, }, + { 0xD83CDDF7U, 0xD83CDDEAU, }, + { 0xD83CDDF7U, 0xD83CDDF4U, }, + { 0xD83CDDF7U, 0xD83CDDFAU, }, + { 0xD83CDDF7U, 0xD83CDDFCU, }, + { 0xD83CDDFCU, 0xD83CDDF8U, }, + { 0xD83CDDF8U, 0xD83CDDF2U, }, + { 0xD83CDDF8U, 0xD83CDDF9U, }, + { 0xD83CDDF8U, 0xD83CDDE6U, }, + { 0xD83CDDF8U, 0xD83CDDF3U, }, + { 0xD83CDDF7U, 0xD83CDDF8U, }, + { 0xD83CDDF8U, 0xD83CDDE8U, }, + { 0xD83CDDF8U, 0xD83CDDF1U, }, + { 0xD83CDDF8U, 0xD83CDDECU, }, + { 0xD83CDDF8U, 0xD83CDDFDU, }, + { 0xD83CDDF8U, 0xD83CDDF0U, }, + { 0xD83CDDF8U, 0xD83CDDEEU, }, + { 0xD83CDDECU, 0xD83CDDF8U, }, + { 0xD83CDDF8U, 0xD83CDDE7U, }, + { 0xD83CDDF8U, 0xD83CDDF4U, }, + { 0xD83CDDFFU, 0xD83CDDE6U, }, + { 0xD83CDDF0U, 0xD83CDDF7U, }, + { 0xD83CDDF8U, 0xD83CDDF8U, }, + { 0xD83CDDEAU, 0xD83CDDF8U, }, + { 0xD83CDDF1U, 0xD83CDDF0U, }, + { 0xD83CDDE7U, 0xD83CDDF1U, }, + { 0xD83CDDF8U, 0xD83CDDEDU, }, + { 0xD83CDDF0U, 0xD83CDDF3U, }, + { 0xD83CDDF1U, 0xD83CDDE8U, }, + { 0xD83CDDF5U, 0xD83CDDF2U, }, + { 0xD83CDDFBU, 0xD83CDDE8U, }, + { 0xD83CDDF8U, 0xD83CDDE9U, }, + { 0xD83CDDF8U, 0xD83CDDF7U, }, + { 0xD83CDDF8U, 0xD83CDDFFU, }, + { 0xD83CDDF8U, 0xD83CDDEAU, }, + { 0xD83CDDE8U, 0xD83CDDEDU, }, + { 0xD83CDDF8U, 0xD83CDDFEU, }, + { 0xD83CDDF9U, 0xD83CDDFCU, }, + { 0xD83CDDF9U, 0xD83CDDEFU, }, + { 0xD83CDDF9U, 0xD83CDDFFU, }, + { 0xD83CDDF9U, 0xD83CDDEDU, }, + { 0xD83CDDF9U, 0xD83CDDF1U, }, + { 0xD83CDDF9U, 0xD83CDDECU, }, + { 0xD83CDDF9U, 0xD83CDDF0U, }, + { 0xD83CDDF9U, 0xD83CDDF4U, }, + { 0xD83CDDF9U, 0xD83CDDF9U, }, + { 0xD83CDDF9U, 0xD83CDDF3U, }, + { 0xD83CDDF9U, 0xD83CDDF7U, }, + { 0xD83CDDF9U, 0xD83CDDF2U, }, + { 0xD83CDDF9U, 0xD83CDDE8U, }, + { 0xD83CDDF9U, 0xD83CDDFBU, }, + { 0xD83CDDFBU, 0xD83CDDEEU, }, + { 0xD83CDDFAU, 0xD83CDDECU, }, + { 0xD83CDDFAU, 0xD83CDDE6U, }, + { 0xD83CDDE6U, 0xD83CDDEAU, }, + { 0xD83CDDECU, 0xD83CDDE7U, }, + { 0xD83CDFF4U, 0xDB40DC67U, 0xDB40DC62U, 0xDB40DC65U, 0xDB40DC6EU, 0xDB40DC67U, 0xDB40DC7FU, }, + { 0xD83CDFF4U, 0xDB40DC67U, 0xDB40DC62U, 0xDB40DC73U, 0xDB40DC63U, 0xDB40DC74U, 0xDB40DC7FU, }, + { 0xD83CDFF4U, 0xDB40DC67U, 0xDB40DC62U, 0xDB40DC77U, 0xDB40DC6CU, 0xDB40DC73U, 0xDB40DC7FU, }, + { 0xD83CDDFAU, 0xD83CDDF8U, }, + { 0xD83CDDFAU, 0xD83CDDFEU, }, + { 0xD83CDDFAU, 0xD83CDDFFU, }, + { 0xD83CDDFBU, 0xD83CDDFAU, }, + { 0xD83CDDFBU, 0xD83CDDE6U, }, + { 0xD83CDDFBU, 0xD83CDDEAU, }, + { 0xD83CDDFBU, 0xD83CDDF3U, }, + { 0xD83CDDFCU, 0xD83CDDEBU, }, + { 0xD83CDDEAU, 0xD83CDDEDU, }, + { 0xD83CDDFEU, 0xD83CDDEAU, }, + { 0xD83CDDFFU, 0xD83CDDF2U, }, + { 0xD83CDDFFU, 0xD83CDDFCU, }, +}; + +std::map Aliases; + +constexpr auto kErrorBadData = 401; + +void append(Id &id, uint32 code) { + if (auto first = static_cast((code >> 16) & 0xFFFFU)) { + id.append(QChar(first)); + } + id.append(QChar(static_cast(code & 0xFFFFU))); +} + +Id BareIdFromInput(const InputId &id) { + auto result = Id(); + for (const auto unicode : id) { + if (unicode != kPostfix) { + append(result, unicode); + } + } + return result; +} + +using VariatedIds = map; +VariatedIds fillVariatedIds() { + auto result = VariatedIds(); + for (auto &row : ColoredEmoji) { + auto variatedId = Id(); + if (row.size() < 2) { + logDataError() << "colored string should have at least two characters."; + return VariatedIds(); + } + for (auto i = size_t(0), size = row.size(); i != size; ++i) { + auto code = row[i]; + if (i == 1) { + if (code != ColorMask) { + logDataError() << "color code should appear at index 1."; + return VariatedIds(); + } + } else if (code == ColorMask) { + logDataError() << "color code should appear only at index 1."; + return VariatedIds(); + } else if (code != kPostfix) { + append(variatedId, code); + } + } + result.insert(make_pair(variatedId, true)); + } + return result; +} + +void appendCategory(Data &result, const InputCategory &category, const VariatedIds &variatedIds) { + result.categories.push_back(vector()); + for (auto &id : category) { + auto emoji = Emoji(); + auto bareId = BareIdFromInput(id); + auto from = id.cbegin(), to = id.cend(); + if (to - from == 2 && *(to - 1) == kPostfix) { + emoji.postfixed = true; + --to; + } + for (auto i = from; i != to; ++i) { + auto code = *i; + if (find(begin(Colors), end(Colors), code) != end(Colors)) { + logDataError() << "color code found in a category emoji."; + result = Data(); + return; + } + append(emoji.id, code); + } + if (bareId.isEmpty()) { + logDataError() << "empty emoji id found."; + result = Data(); + return; + } + auto it = result.map.find(bareId); + if (it == result.map.cend()) { + const auto index = result.list.size(); + it = result.map.emplace(bareId, index).first; + result.list.push_back(move(emoji)); + if (const auto a = Aliases.find(bareId); a != end(Aliases)) { + result.map.emplace(a->second, index); + } + } else if (result.list[it->second].postfixed != emoji.postfixed) { + logDataError() << "same emoji found with different postfixed property."; + result = Data(); + return; + } else if (result.list[it->second].id != emoji.id) { + logDataError() << "same emoji found with different id."; + result = Data(); + return; + } + if (variatedIds.find(bareId) != variatedIds.cend()) { + result.list[it->second].variated = true; + + auto baseId = Id(); + if (*from == kPostfix) { + logDataError() << "bad first symbol in emoji."; + result = Data(); + return; + } + append(baseId, *from++); + for (auto color : Colors) { + auto colored = Emoji(); + colored.id = baseId; + colored.colored = true; + append(colored.id, color); + auto bareColoredId = colored.id; + for (auto i = from; i != to; ++i) { + append(colored.id, *i); + if (*i != kPostfix) { + append(bareColoredId, *i); + } + } + auto it = result.map.find(bareColoredId); + if (it == result.map.cend()) { + const auto index = result.list.size(); + it = result.map.emplace(bareColoredId, index).first; + result.list.push_back(move(colored)); + if (const auto a = Aliases.find(bareColoredId); a != end(Aliases)) { + result.map.emplace(a->second, index); + } + } else if (result.list[it->second].postfixed != colored.postfixed) { + logDataError() << "same emoji found with different postfixed property."; + result = Data(); + return; + } else if (result.list[it->second].id != colored.id) { + logDataError() << "same emoji found with different id."; + result = Data(); + return; + } + } + } + result.categories.back().push_back(it->second); + } +} + +void fillReplaces(Data &result) { + for (auto &replace : Replaces) { + auto id = Id(); + for (auto code : replace.code) { + append(id, code); + } + auto it = result.map.find(id); + if (it == result.map.cend()) { + logDataError() << "emoji from replaces not found in the map."; + result = Data(); + return; + } + result.replaces.insert(make_pair(QString::fromUtf8(replace.replace), it->second)); + } +} + +bool AddItemBeforeItem(const InputId &add, const InputId &before) { + auto addToCategory = (InputCategory*)nullptr; + auto addBeforeIterator = InputCategory::iterator(); + for (auto category : { + &Category1, + &Category2, + &Category3, + &Category4, + &Category5, + &Category6, + &Category7, + }) { + for (auto i = category->begin(), e = category->end(); i != e; ++i) { + if (*i == add) { + return true; + } else if (*i == before) { + addToCategory = category; + addBeforeIterator = i; + } + } + } + if (!addToCategory) { + return false; + } + addToCategory->insert(addBeforeIterator, add); + return true; +} + +bool CheckOldInCurrent() { + const auto categories = { + &Category1, + &Category2, + &Category3, + &Category4, + &Category5, + &Category6, + &Category7, + }; + const auto old = { + &old::Category1, + &old::Category2, + &old::Category3, + &old::Category4, + &old::Category5, + &old::Category6, + &old::Category7, + }; + const auto genders = { 0x2640U, 0x2642U }; + const auto addGender = [&](const InputId &was, int index) { + auto result = was; + result.push_back(0x200DU); + result.push_back(*(begin(genders) + index)); + result.push_back(0xFE0FU); + return result; + }; + auto result = true; + for (auto c = begin(old); c != end(old); ++c) { + const auto category = *c; + for (auto i = begin(*category); i != end(*category); ++i) { + const auto find = []( + std::initializer_list list, + const InputId &id) { + for (const auto current : list) { + if (std::find(begin(*current), end(*current), id) != end(*current)) { + return true; + } + } + return false; + }; + if (find(categories, *i)) { + continue; + } + + // Some emoji were ending with 0xFE0FU and now are not. + if (i->back() == 0xFE0FU) { + auto other = *i; + other.pop_back(); + if (find(categories, other)) { + continue; + } + } + + // Some emoji were not ending with 0xFE0FU and now are. + if (i->back() != 0xFE0FU) { + auto other = *i; + other.push_back(0xFE0FU); + if (find(categories, other)) { + continue; + } + } + + // Some emoji were without gender symbol and now have gender symbol. + // Try adding 0x200DU, 0x2640U, 0xFE0FU or 0x200DU, 0x2642U, 0xFE0FU. + const auto otherGenderIndex = [&] { + for (auto g = begin(genders); g != end(genders); ++g) { + auto altered = *i; + altered.push_back(0x200DU); + altered.push_back(*g); + altered.push_back(0xFE0FU); + if (find(old, altered)) { + return int(g - begin(genders)); + } + } + return -1; + }(); + if (otherGenderIndex < 0) { + common::logError(kErrorBadData, "input") + << "Bad data: old emoji (category " + << (c - begin(old)) + << ", index " + << (i - begin(*category)) + << ") not found in current."; + result = false; + continue; + } + + const auto genderIndex = (1 - otherGenderIndex); + const auto real = addGender(*i, genderIndex); + const auto bare = BareIdFromInput(real); + if (!find(categories, real)) { + common::logError(kErrorBadData, "input") + << "Bad data: old emoji (category " + << (c - begin(old)) + << ", index " + << (i - begin(*category)) + << ") not found in current with added gender: " + << genderIndex + << "."; + result = false; + } else if (Aliases.find(bare) != end(Aliases)) { + common::logError(kErrorBadData, "input") + << "Bad data: two aliases for a gendered emoji."; + result = false; + } else { + Aliases.emplace(bare, BareIdFromInput(*i)); + } + } + } + for (auto i = begin(old::ColoredEmoji); i != end(old::ColoredEmoji); ++i) { + const auto find = []( + const InputCategory &list, + const InputId &id) { + return (std::find(begin(list), end(list), id) != end(list)); + }; + if (find(ColoredEmoji, *i)) { + continue; + } + + const auto otherGenderIndex = [&] { + for (auto g = begin(genders); g != end(genders); ++g) { + auto altered = *i; + altered.push_back(0x200DU); + altered.push_back(*g); + altered.push_back(0xFE0FU); + if (find(old::ColoredEmoji, altered)) { + return int(g - begin(genders)); + } + } + return -1; + }(); + if (otherGenderIndex < 0) { + common::logError(kErrorBadData, "input") + << "Bad data: old colored emoji (index " + << (i - begin(old::ColoredEmoji)) + << ") not found in current."; + result = false; + continue; + } + + const auto genderIndex = (1 - otherGenderIndex); + const auto real = addGender(*i, genderIndex); + const auto bare = BareIdFromInput(real); + if (!find(ColoredEmoji, real)) { + common::logError(kErrorBadData, "input") + << "Bad data: old colored emoji (index " + << (i - begin(old::ColoredEmoji)) + << ") not found in current with added gender: " + << genderIndex + << "."; + result = false; + continue; + } else if (Aliases.find(bare) != end(Aliases)) { + common::logError(kErrorBadData, "input") + << "Bad data: two aliases for a gendered emoji."; + result = false; + } else { + const auto emplaceAlias = [&](uint32_t color) { + if (real.size() < 2 || i->size() < 2 || real[1] != Colors[0] || (*i)[1] != Colors[0]) { + return false; + } + auto key = real; + key[1] = color; + auto value = *i; + value[1] = color; + Aliases.emplace(BareIdFromInput(key), BareIdFromInput(value)); + return true; + }; + for (const auto color : Colors) { + if (!emplaceAlias(color)) { + common::logError(kErrorBadData, "input") + << "Bad data: bad colored emoji."; + result = false; + break; + } + } + } + } + return result; +} + +} // namespace + +common::LogStream logDataError() { + return common::logError(kErrorBadData, "input") << "Bad data: "; +} + +Data PrepareData() { + Data result; + + auto variatedIds = fillVariatedIds(); + if (variatedIds.empty()) { + return Data(); + } + + // Manually add :speech_left: emoji before eye-with-speech emoji. + if (!AddItemBeforeItem({ 0xD83DDDE8U }, { 0xD83DDC41U, 0x200DU, 0xD83DDDE8U })) { + return Data(); + } + + if (!CheckOldInCurrent()) { + return Data(); + } + + const auto categories = { + &Category1, + &Category2, + &Category3, + &Category4, + &Category5, + &Category6, + &Category7, + }; + for (const auto category : categories) { + appendCategory(result, *category, variatedIds); + if (result.list.empty()) { + return Data(); + } + } + + fillReplaces(result); + if (result.list.empty()) { + return Data(); + } + + return result; +} + +namespace { +namespace old { + InputCategory ColoredEmoji = { { 0xD83DDC50U, 0xD83CDFFBU, }, { 0xD83DDE4CU, 0xD83CDFFBU, }, @@ -1688,209 +3902,7 @@ InputCategory Category7 = { { 0xD83CDDFFU, 0xD83CDDFCU, }, }; -constexpr auto kErrorBadData = 401; - -void append(Id &id, uint32 code) { - if (auto first = static_cast((code >> 16) & 0xFFFFU)) { - id.append(QChar(first)); - } - id.append(QChar(static_cast(code & 0xFFFFU))); -} - -using VariatedIds = map; -VariatedIds fillVariatedIds() { - auto result = VariatedIds(); - for (auto &row : ColoredEmoji) { - auto variatedId = Id(); - if (row.size() < 2) { - logDataError() << "colored string should have at least two characters."; - return VariatedIds(); - } - for (auto i = size_t(0), size = row.size(); i != size; ++i) { - auto code = row[i]; - if (i == 1) { - if (code != ColorMask) { - logDataError() << "color code should appear at index 1."; - return VariatedIds(); - } - } else if (code == ColorMask) { - logDataError() << "color code should appear only at index 1."; - return VariatedIds(); - } else if (code != kPostfix) { - append(variatedId, code); - } - } - result.insert(make_pair(variatedId, true)); - } - return result; -} - -void appendCategory(Data &result, const InputCategory &category, const VariatedIds &variatedIds) { - result.categories.push_back(vector()); - for (auto &id : category) { - auto emoji = Emoji(); - auto bareId = Id(); - auto from = id.cbegin(), to = id.cend(); - if (to - from == 2 && *(to - 1) == kPostfix) { - emoji.postfixed = true; - --to; - } - for (auto i = from; i != to; ++i) { - auto code = *i; - if (find(begin(Colors), end(Colors), code) != end(Colors)) { - logDataError() << "color code found in a category emoji."; - result = Data(); - return; - } - append(emoji.id, code); - if (code != kPostfix) { - append(bareId, code); - } - } - if (bareId.isEmpty()) { - logDataError() << "empty emoji id found."; - result = Data(); - return; - } - auto it = result.map.find(bareId); - if (it == result.map.cend()) { - it = result.map.insert(make_pair(bareId, result.list.size())).first; - result.list.push_back(move(emoji)); - } else if (result.list[it->second].postfixed != emoji.postfixed) { - logDataError() << "same emoji found with different postfixed property."; - result = Data(); - return; - } else if (result.list[it->second].id != emoji.id) { - logDataError() << "same emoji found with different id."; - result = Data(); - return; - } - if (variatedIds.find(bareId) != variatedIds.cend()) { - result.list[it->second].variated = true; - - auto baseId = Id(); - if (*from == kPostfix) { - logDataError() << "bad first symbol in emoji."; - result = Data(); - return; - } - append(baseId, *from++); - for (auto color : Colors) { - auto colored = Emoji(); - colored.id = baseId; - colored.colored = true; - append(colored.id, color); - auto bareColoredId = colored.id; - for (auto i = from; i != to; ++i) { - append(colored.id, *i); - if (*i != kPostfix) { - append(bareColoredId, *i); - } - } - auto it = result.map.find(bareColoredId); - if (it == result.map.cend()) { - it = result.map.insert(make_pair(bareColoredId, result.list.size())).first; - result.list.push_back(move(colored)); - } else if (result.list[it->second].postfixed != colored.postfixed) { - logDataError() << "same emoji found with different postfixed property."; - result = Data(); - return; - } else if (result.list[it->second].id != colored.id) { - logDataError() << "same emoji found with different id."; - result = Data(); - return; - } - } - } - result.categories.back().push_back(it->second); - } -} - -void fillReplaces(Data &result) { - for (auto &replace : Replaces) { - auto id = Id(); - for (auto code : replace.code) { - append(id, code); - } - auto it = result.map.find(id); - if (it == result.map.cend()) { - logDataError() << "emoji from replaces not found in the map."; - result = Data(); - return; - } - result.replaces.insert(make_pair(QString::fromUtf8(replace.replace), it->second)); - } -} - -bool AddItemBeforeItem(const InputId &add, const InputId &before) { - auto addToCategory = (InputCategory*)nullptr; - auto addBeforeIterator = InputCategory::iterator(); - for (auto category : { - &Category1, - &Category2, - &Category3, - &Category4, - &Category5, - &Category6, - &Category7, - }) { - for (auto i = category->begin(), e = category->end(); i != e; ++i) { - if (*i == add) { - return true; - } else if (*i == before) { - addToCategory = category; - addBeforeIterator = i; - } - } - } - if (!addToCategory) { - return false; - } - addToCategory->insert(addBeforeIterator, add); - return true; -} - +} // namespace old } // namespace - -common::LogStream logDataError() { - return common::logError(kErrorBadData, "input") << "Bad data: "; -} - -Data PrepareData() { - Data result; - - auto variatedIds = fillVariatedIds(); - if (variatedIds.empty()) { - return Data(); - } - - // Manually add :speech_left: emoji before eye-with-speech emoji. - if (!AddItemBeforeItem({ 0xD83DDDE8U }, { 0xD83DDC41U, 0x200DU, 0xD83DDDE8U })) { - return Data(); - } - - for (auto category : { - &Category1, - &Category2, - &Category3, - &Category4, - &Category5, - &Category6, - &Category7, - }) { - appendCategory(result, *category, variatedIds); - if (result.list.empty()) { - return Data(); - } - } - - fillReplaces(result); - if (result.list.empty()) { - return Data(); - } - - return result; -} - } // namespace emoji } // namespace codegen diff --git a/Telegram/SourceFiles/codegen/emoji/options.h b/Telegram/SourceFiles/codegen/emoji/options.h index c29b86b969..6803ce657e 100644 --- a/Telegram/SourceFiles/codegen/emoji/options.h +++ b/Telegram/SourceFiles/codegen/emoji/options.h @@ -10,6 +10,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include +#ifdef __APPLE__ +#define SUPPORT_IMAGE_GENERATION +#endif // __APPLE__ + namespace codegen { namespace emoji { diff --git a/Telegram/SourceFiles/codegen/emoji/replaces.cpp b/Telegram/SourceFiles/codegen/emoji/replaces.cpp index 76583c50d6..5924bfbf1f 100644 --- a/Telegram/SourceFiles/codegen/emoji/replaces.cpp +++ b/Telegram/SourceFiles/codegen/emoji/replaces.cpp @@ -107,7 +107,7 @@ QString ComposeString(const std::initializer_list &chars) { return result; } -const auto NotSupported = ([] { +const auto NotSupported = [] { auto result = QSet(); auto insert = [&result](auto... args) { result.insert(ComposeString({ args... })); @@ -123,97 +123,12 @@ const auto NotSupported = ([] { for (auto i = 0; i != 26; ++i) { insert(0xD83C, 0xDDE6 + i); // :regional_indicator_a: ... :regional_indicator_z: } - insert(0xD83C, 0xDDFA, 0xD83C, 0xDDF3); // :united_nations: - - insert(0xD83C, 0xDFF4, 0xDB40, 0xDC67, 0xDB40, 0xDC62, 0xDB40, 0xDC65, 0xDB40, 0xDC6E, 0xDB40, 0xDC67, 0xDB40, 0xDC7F); // :england: - insert(0xD83C, 0xDFF4, 0xDB40, 0xDC67, 0xDB40, 0xDC62, 0xDB40, 0xDC73, 0xDB40, 0xDC63, 0xDB40, 0xDC74, 0xDB40, 0xDC7F); // :scotland: - insert(0xD83C, 0xDFF4, 0xDB40, 0xDC67, 0xDB40, 0xDC62, 0xDB40, 0xDC77, 0xDB40, 0xDC6C, 0xDB40, 0xDC73, 0xDB40, 0xDC7F); // :wales: - - insert(0xD83D, 0xDEF7); // :sled: - insert(0xD83D, 0xDEF8); // :flying_saucer: - insert(0xD83E, 0xDD1F); // :love_you_gesture: - insert(0xD83E, 0xDD28); // :face_with_raised_eyebrow: - insert(0xD83E, 0xDD29); // :star_struck: - insert(0xD83E, 0xDD2A); // :crazy_face: - insert(0xD83E, 0xDD2B); // :shushing_face: - insert(0xD83E, 0xDD2C); // :face_with_symbols_over_mouth: - insert(0xD83E, 0xDD2D); // :face_with_hand_over_mouth: - insert(0xD83E, 0xDD2E); // :face_vomiting: - insert(0xD83E, 0xDD2F); // :exploding_head: - insert(0xD83E, 0xDD31); // :breast_feeding: - insert(0xD83E, 0xDD32); // :palms_up_together: - insert(0xD83E, 0xDD4C); // :curling_stone: - insert(0xD83E, 0xDD5F); // :dumpling: - insert(0xD83E, 0xDD60); // :fortune_cookie: - insert(0xD83E, 0xDD61); // :takeout_box: - insert(0xD83E, 0xDD62); // :chopsticks: - insert(0xD83E, 0xDD63); // :bowl_with_spoon: - insert(0xD83E, 0xDD64); // :cup_with_straw: - insert(0xD83E, 0xDD65); // :coconut: - insert(0xD83E, 0xDD66); // :broccoli: - insert(0xD83E, 0xDD67); // :pie: - insert(0xD83E, 0xDD68); // :pretzel: - insert(0xD83E, 0xDD69); // :cut_of_meat: - insert(0xD83E, 0xDD6A); // :sandwich: - insert(0xD83E, 0xDD6B); // :canned_food: - insert(0xD83E, 0xDD92); // :giraffe: - insert(0xD83E, 0xDD93); // :zebra: - insert(0xD83E, 0xDD94); // :hedgehog: - insert(0xD83E, 0xDD95); // :sauropod: - insert(0xD83E, 0xDD96); // :t_rex: - insert(0xD83E, 0xDD97); // :cricket: - insert(0xD83E, 0xDDD0); // :face_with_monocle: - insert(0xD83E, 0xDDD1); // :adult: - insert(0xD83E, 0xDDD2); // :child: - insert(0xD83E, 0xDDD3); // :older_adult: - insert(0xD83E, 0xDDD4); // :bearded_person: - insert(0xD83E, 0xDDD5); // :woman_with_headscarf: - insert(0xD83E, 0xDDD6); // :person_in_steamy_room: - insert(0xD83E, 0xDDD6, 0x200D, 0x2640, 0xFE0F); // :woman_in_steamy_room: - insert(0xD83E, 0xDDD6, 0x200D, 0x2642, 0xFE0F); // :man_in_steamy_room: - insert(0xD83E, 0xDDD7); // :person_climbing: - insert(0xD83E, 0xDDD7, 0x200D, 0x2640, 0xFE0F); // :woman_climbing: - insert(0xD83E, 0xDDD7, 0x200D, 0x2642, 0xFE0F); // :man_climbing: - insert(0xD83E, 0xDDD8); // :person_in_lotus_position: - insert(0xD83E, 0xDDD8, 0x200D, 0x2640, 0xFE0F); // :woman_in_lotus_position: - insert(0xD83E, 0xDDD8, 0x200D, 0x2642, 0xFE0F); // :man_in_lotus_position: - insert(0xD83E, 0xDDD9); // :mage: - insert(0xD83E, 0xDDD9, 0x200D, 0x2640, 0xFE0F); // :woman_mage: - insert(0xD83E, 0xDDD9, 0x200D, 0x2642, 0xFE0F); // :man_mage: - insert(0xD83E, 0xDDDA); // :fairy: - insert(0xD83E, 0xDDDA, 0x200D, 0x2640, 0xFE0F); // :woman_fairy: - insert(0xD83E, 0xDDDA, 0x200D, 0x2642, 0xFE0F); // :man_fairy: - insert(0xD83E, 0xDDDB); // :vampire: - insert(0xD83E, 0xDDDB, 0x200D, 0x2640, 0xFE0F); // :woman_vampire: - insert(0xD83E, 0xDDDB, 0x200D, 0x2642, 0xFE0F); // :man_vampire: - insert(0xD83E, 0xDDDC); // :merperson: - insert(0xD83E, 0xDDDC, 0x200D, 0x2640, 0xFE0F); // :mermaid: - insert(0xD83E, 0xDDDC, 0x200D, 0x2642, 0xFE0F); // :merman: - insert(0xD83E, 0xDDDD); // :elf: - insert(0xD83E, 0xDDDD, 0x200D, 0x2640, 0xFE0F); // :woman_elf: - insert(0xD83E, 0xDDDD, 0x200D, 0x2642, 0xFE0F); // :man_elf: - insert(0xD83E, 0xDDDE); // :genie: - insert(0xD83E, 0xDDDE, 0x200D, 0x2640, 0xFE0F); // :woman_genie: - insert(0xD83E, 0xDDDE, 0x200D, 0x2642, 0xFE0F); // :man_genie: - insert(0xD83E, 0xDDDF); // :zombie: - insert(0xD83E, 0xDDDF, 0x200D, 0x2640, 0xFE0F); // :woman_zombie: - insert(0xD83E, 0xDDDF, 0x200D, 0x2642, 0xFE0F); // :man_zombie: - insert(0xD83E, 0xDDE0); // :brain: - insert(0xD83E, 0xDDE1); // :orange_heart: - insert(0xD83E, 0xDDE2); // :billed_cap: - insert(0xD83E, 0xDDE3); // :scarf: - insert(0xD83E, 0xDDE4); // :gloves: - insert(0xD83E, 0xDDE5); // :coat: - insert(0xD83E, 0xDDE6); // :socks: - - insert(0x23CF, 0xFE0F); // :eject: - insert(0x2640, 0xFE0F); // :female_sign: insert(0x2642, 0xFE0F); // :male_sign: insert(0x2695, 0xFE0F); // :medical_symbol: return result; -})(); +}(); const auto ConvertMap = ([] { auto result = QMap(); diff --git a/Telegram/gyp/settings_mac.gypi b/Telegram/gyp/settings_mac.gypi index c1427a5849..445b1a33de 100644 --- a/Telegram/gyp/settings_mac.gypi +++ b/Telegram/gyp/settings_mac.gypi @@ -62,6 +62,7 @@ 'CLANG_CXX_LANGUAGE_STANDARD': 'c++1z', 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES', 'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', + 'GCC_OPTIMIZATION_LEVEL': '0', 'ALWAYS_SEARCH_USER_PATHS': 'NO', }, 'configurations': {