From: ssabah Date: Wed, 13 Jul 2022 12:01:44 +0000 (+0300) Subject: Fix: VS15 hides non-Emoji Negative Squared Latin Capital Letter X-Git-Tag: dali_2.1.32~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ae561afb0a1688449949d5249ca6f5fe6b3914fd;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git Fix: VS15 hides non-Emoji Negative Squared Latin Capital Letter The non-emoji letters form Negative-Squared-Latin-Capital-Letter become invisible when use VS16 or Emoji Color Font. Examples: "1F170 ~ 1F174 with variation selector, text vs emoji: 🅰️🅱️🅲︎🅳︎🅴︎\n" "1F170 ~ 1F174 with VS15: 🅰︎🅱︎🅲︎🅳︎🅴︎\n" "1F170 ~ 1F174 with VS16: 🅰️🅱️🅲️🅳️🅴️\n"; In Negative-Squared-Latin-Capital-Letter from enclosed-alphanumeric-supplement, The Letters A,B,O,P are Emoji Variation Sequences. https://unicode-table.com/en/blocks/enclosed-alphanumeric-supplement/ This patch should be preceded by the patch below: https://review.tizen.org/gerrit/c/platform/core/uifw/dali-adaptor/+/277666 Change-Id: Ie61ef6744ebfee1b58a07ab302d9151ce765677d --- diff --git a/automated-tests/src/dali-adaptor/utc-Dali-TextScript.cpp b/automated-tests/src/dali-adaptor/utc-Dali-TextScript.cpp index ad9d6de..2e09c19 100644 --- a/automated-tests/src/dali-adaptor/utc-Dali-TextScript.cpp +++ b/automated-tests/src/dali-adaptor/utc-Dali-TextScript.cpp @@ -215,7 +215,8 @@ int UtcDaliGetCharacterScript(void) GetCharacterScriptCheckRange(0xFF5B, 0xFFEF, HWFW_S, TEST_LOCATION); GetCharacterScriptCheckRange(0x1ee00, 0x1eeff, ARABIC, TEST_LOCATION); - GetCharacterScriptCheckRange(0x1f170, 0x1f6ff, EMOJI, TEST_LOCATION); + GetCharacterScriptCheckRange(0x1f170, 0x1f189, SYMBOLS_NSLCL, TEST_LOCATION); + GetCharacterScriptCheckRange(0x1f18a, 0x1f6ff, EMOJI, TEST_LOCATION); GetCharacterScriptCheckRange(0x1f900, 0x1f9ff, EMOJI, TEST_LOCATION); GetCharacterScriptCheckRange(0x20000, 0x215ff, CJK, TEST_LOCATION); GetCharacterScriptCheckRange(0x21600, 0x230ff, CJK, TEST_LOCATION); diff --git a/dali/devel-api/text-abstraction/emoji-character-properties.cpp b/dali/devel-api/text-abstraction/emoji-character-properties.cpp index c6c8f99..7aef4ed 100644 --- a/dali/devel-api/text-abstraction/emoji-character-properties.cpp +++ b/dali/devel-api/text-abstraction/emoji-character-properties.cpp @@ -435,8 +435,8 @@ DALI_ADAPTOR_API bool IsEmojiItem(Character character) { return (IsEmojiComponent(character) || IsEmojiModifier(character) || - IsTextPresentationSelector(character) || - IsEmojiPresentationSelector(character) || + // IsTextPresentationSelector(character) || + // IsEmojiPresentationSelector(character) || IsTagSpec(character) || IsTagEnd(character)); } @@ -464,6 +464,12 @@ DALI_ADAPTOR_API bool IsEmojiVariationSequences(Character character) return SET_CHAR_EMOJI_VARIATION_SEQUENCES.find(character) != SET_CHAR_EMOJI_VARIATION_SEQUENCES.end(); } +DALI_ADAPTOR_API bool IsNegativeSquaredLatinCapitalLetter(Character character) +{ + return (0x1F170 <= character && + 0x1F189 >= character); +} + } // namespace TextAbstraction } // namespace Dali diff --git a/dali/devel-api/text-abstraction/emoji-character-properties.h b/dali/devel-api/text-abstraction/emoji-character-properties.h index 13287e3..2eb95b2 100644 --- a/dali/devel-api/text-abstraction/emoji-character-properties.h +++ b/dali/devel-api/text-abstraction/emoji-character-properties.h @@ -183,6 +183,17 @@ DALI_ADAPTOR_API bool IsASCIIDigits(Character character); */ DALI_ADAPTOR_API bool IsEmojiVariationSequences(Character character); +/** + * @brief Whether the character is Negative Squared Latin Capital Letter. + * Read more at White on black squared Latin letters: https://unicode-table.com/en/blocks/enclosed-alphanumeric-supplement/ + * + * + * @param[in] character The character. + * + * @return @e true if the character is Negative Squared Latin Capital Letter. + */ +DALI_ADAPTOR_API bool IsNegativeSquaredLatinCapitalLetter(Character character); + } // namespace TextAbstraction } // namespace Dali diff --git a/dali/devel-api/text-abstraction/emoji-helper.cpp b/dali/devel-api/text-abstraction/emoji-helper.cpp index a86572f..c7ecc37 100644 --- a/dali/devel-api/text-abstraction/emoji-helper.cpp +++ b/dali/devel-api/text-abstraction/emoji-helper.cpp @@ -28,7 +28,8 @@ DALI_ADAPTOR_API bool IsSymbolScript(const TextAbstraction::Script& script) TextAbstraction::SYMBOLS2 == script || TextAbstraction::SYMBOLS3 == script || TextAbstraction::SYMBOLS4 == script || - TextAbstraction::SYMBOLS5 == script); + TextAbstraction::SYMBOLS5 == script || + TextAbstraction::SYMBOLS_NSLCL == script); } DALI_ADAPTOR_API bool IsEmojiScript(const TextAbstraction::Script& script) diff --git a/dali/devel-api/text-abstraction/script.cpp b/dali/devel-api/text-abstraction/script.cpp index 1a5b742..ef4ecff 100644 --- a/dali/devel-api/text-abstraction/script.cpp +++ b/dali/devel-api/text-abstraction/script.cpp @@ -863,6 +863,7 @@ inline Script GetScriptAboveArabicPresentationFormsA(Character character) } // U+1f170 4. Enclosed characters: negative squared latin capital letter A // U+1f6ff 6b. Additional transport and map symbols + // Exclude U+1f170 ~ U+1f189. They are SYMBOLS_NSLCL (negative squared latin capital letter) else if((0x1f170 <= character) && (character <= 0x1f6ff)) { script = EMOJI; @@ -941,10 +942,22 @@ Script GetCharacterScript(Character character) { Script script = UNKNOWN; - if(IsEmojiItem(character)) + if(IsTextPresentationSelector(character)) + { + script = EMOJI_TEXT; + } + else if(IsEmojiPresentationSelector(character)) + { + script = EMOJI_COLOR; + } + else if(IsEmojiItem(character)) { script = EMOJI; } + else if(IsNegativeSquaredLatinCapitalLetter(character)) + { + script = SYMBOLS_NSLCL; + } else if(IsCommonScript(character)) { script = COMMON; @@ -1041,7 +1054,7 @@ bool HasLigatureMustBreak(Script script) Length GetNumberOfScripts() { - return EMOJI_COLOR + 1; + return SYMBOLS_NSLCL + 1; } } // namespace TextAbstraction diff --git a/dali/devel-api/text-abstraction/script.h b/dali/devel-api/text-abstraction/script.h index ab22ac7..71d3087 100644 --- a/dali/devel-api/text-abstraction/script.h +++ b/dali/devel-api/text-abstraction/script.h @@ -102,9 +102,10 @@ enum Script SYMBOLS4, ///< Some symbols. SYMBOLS5, ///< Some symbols. - UNKNOWN, ///< The script is unknown. - EMOJI_TEXT, ///< The Emoji request a text presentation for an emoji character. - EMOJI_COLOR ///< The Emoji request a color-emoji presentation for an emoji character. + UNKNOWN, ///< The script is unknown. + EMOJI_TEXT, ///< The Emoji request a text presentation for an emoji character. + EMOJI_COLOR, ///< The Emoji request a color-emoji presentation for an emoji character. + SYMBOLS_NSLCL ///< THe Negative Squared Latin Capital Letter //Note: update ScriptName and GetNumberOfScripts when adding new script }; @@ -179,9 +180,10 @@ const char* const ScriptName[] = "SYMBOLS4", ///< Some symbols. "SYMBOLS5", ///< Some symbols. - "UNKNOWN", ///< The script is unknown. - "EMOJI_TEXT", ///< The Emoji request a text presentation for an emoji character. - "EMOJI_COLOR" ///< The Emoji request a color-emoji presentation for an emoji character. + "UNKNOWN", ///< The script is unknown. + "EMOJI_TEXT", ///< The Emoji request a text presentation for an emoji character. + "EMOJI_COLOR", ///< The Emoji request a color-emoji presentation for an emoji character. + "SYMBOLS_NSLCL" ///< THe Negative Squared Latin Capital Letter }; /** diff --git a/dali/internal/text/text-abstraction/shaping-impl.cpp b/dali/internal/text/text-abstraction/shaping-impl.cpp index 75074d5..7ce76bc 100644 --- a/dali/internal/text/text-abstraction/shaping-impl.cpp +++ b/dali/internal/text/text-abstraction/shaping-impl.cpp @@ -114,7 +114,8 @@ const hb_script_t SCRIPT_TO_HARFBUZZ[] = HB_SCRIPT_UNKNOWN, // SYMBOLS5 HB_SCRIPT_UNKNOWN, // UNKNOWN HB_SCRIPT_UNKNOWN, // EMOJI_TEXT - HB_SCRIPT_UNKNOWN}; // EMOJI_COLOR + HB_SCRIPT_UNKNOWN, // EMOJI_COLOR + HB_SCRIPT_UNKNOWN}; // SYMBOLS_NSLCL struct Shaping::Plugin {