Fix: VS15 hides non-Emoji Negative Squared Latin Capital Letter 22/277822/9
authorssabah <s.sabah@samsung.com>
Wed, 13 Jul 2022 12:02:24 +0000 (15:02 +0300)
committershrouq Sabah <s.sabah@samsung.com>
Mon, 18 Jul 2022 13:08:20 +0000 (13:08 +0000)
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: &#x1f170;&#xfe0f;&#x1f171;&#xfe0f;&#x1f172;&#xfe0e;&#x1f173;&#xfe0e;&#x1f174;&#xfe0e;\n"
   "1F170 ~ 1F174 with VS15: &#x1f170;&#xfe0e;&#x1f171;&#xfe0e;&#x1f172;&#xfe0e;&#x1f173;&#xfe0e;&#x1f174;&#xfe0e;\n"
   "1F170 ~ 1F174 with VS16: &#x1f170;&#xfe0f;&#x1f171;&#xfe0f;&#x1f172;&#xfe0f;&#x1f173;&#xfe0f;&#x1f174;&#xfe0f;\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 depends on the patch below:
https://review.tizen.org/gerrit/c/platform/core/uifw/dali-adaptor/+/277821

Change-Id: I890d7c74e7b71d9d074d1fb1cd68af578b56e16c

automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp
dali-toolkit/internal/text/emoji-helper.cpp

index f7bf429..0ece717 100644 (file)
@@ -1146,22 +1146,27 @@ int UtcDaliToolkitTextLabelEmojisP(void)
     "Default &#x262a; \n"                                                                  //default presentation
     "FamilyManWomanGirlBoy &#x1F468;&#x200D;&#x1F469;&#x200D;&#x1F467;&#x200D;&#x1F466;\n" // emoji multi zwj sequence
     "WomanScientist &#x1f469;&#x200d;&#x1f52c;\n"                                          // emoji zwj sequence
     "Default &#x262a; \n"                                                                  //default presentation
     "FamilyManWomanGirlBoy &#x1F468;&#x200D;&#x1F469;&#x200D;&#x1F467;&#x200D;&#x1F466;\n" // emoji multi zwj sequence
     "WomanScientist &#x1f469;&#x200d;&#x1f52c;\n"                                          // emoji zwj sequence
-    "WomanScientistLightSkinTone&#x1F469;&#x1F3FB;&#x200D;&#x1F52C; \n"                    //emoji modifier sequence: skin tone & JWZ
-    "LeftRightArrowText&#x2194;&#xfe0e;\n"                                                 //text presentation sequence and selector
-    "LeftRightArrowEmoji&#x2194;&#xfe0f;\n"                                                //emoji presentation sequence and selector
-    "SouthKoreaFlag&#x1f1f0;&#x1f1f7;\n"                                                   //emoji flag sequence
+    "WomanScientistLightSkinTone&#x1F469;&#x1F3FB;&#x200D;&#x1F52C; \n"                    // emoji modifier sequence: skin tone & JWZ
+    "LeftRightArrowText&#x2194;&#xfe0e;\n"                                                 // text presentation sequence and selector
+    "LeftRightArrowEmoji&#x2194;&#xfe0f;\n"                                                // emoji presentation sequence and selector
+    "SouthKoreaFlag&#x1f1f0;&#x1f1f7;\n"                                                   // emoji flag sequence
     "JordanFlag&#x1f1ef;&#x1f1f4;\n"                                                       // emoji flag sequence
     "JordanFlag&#x1f1ef;&#x1f1f4;\n"                                                       // emoji flag sequence
-    "EnglandFlag&#x1F3F4;&#xE0067;&#xE0062;&#xE0065;&#xE006E;&#xE0067;&#xE007F;\n"         //emoji tag sequence like England flag
+    "EnglandFlag&#x1F3F4;&#xE0067;&#xE0062;&#xE0065;&#xE006E;&#xE0067;&#xE007F;\n"         // emoji tag sequence like England flag
     "Runner &#x1f3c3;&#x200d;&#x27a1;&#xfe0f; \n"
     "Runner &#x1f3c3;&#x200d;&#x27a1;&#xfe0f; \n"
-    "VictoryHandMediumLightSkinTone:&#x270C;&#xFE0F;&#x1F3FC;\n"               //emoji modifier sequence: skin tone
-    "RainbowFlag:&#x1F3F3;&#xFE0F;&#x200D;&#x1F308; \n"                        //emoji zwj sequence: Rainbow Flag
-    "keycap# &#x0023;&#xFE0F;&#x20E3; \n"                                      // fully-qualified  emoji keycap sequence
-    "keycap#_text &#x0023;&#x20E3; \n"                                         // unqualified emoji keycap sequence
-    "keycap3 &#x0033;&#xfe0f;&#x20e3; \n"                                      // fully-qualified  emoji keycap sequence
-    "keycap3_text &#x0033;&#x20e3; \n"                                         // unqualified emoji keycap sequence
-    "two adjacent glyphs &#x262a;&#xfe0f;&#xfe0f;&#xfe0f;&#x262a;&#xfe0f;\n"   //This line should be rendered as two adjacent glyphs
-    "Digit 8&#xfe0f; 8&#xfe0e; 8\n"                                            // should be rendered according to selector
-    "Surfing Medium Skin Female:  &#x1f3c4;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"; // Person Surfing + Medium Skin Tone +? Zero Width Joiner + Female Sign
+    "VictoryHandMediumLightSkinTone:&#x270C;&#xFE0F;&#x1F3FC;\n"                                                                // emoji modifier sequence: skin tone
+    "RainbowFlag:&#x1F3F3;&#xFE0F;&#x200D;&#x1F308; \n"                                                                         // emoji zwj sequence: Rainbow Flag
+    "keycap# &#x0023;&#xFE0F;&#x20E3; \n"                                                                                       // fully-qualified  emoji keycap sequence
+    "keycap#_text &#x0023;&#x20E3; \n"                                                                                          // unqualified emoji keycap sequence
+    "keycap3 &#x0033;&#xfe0f;&#x20e3; \n"                                                                                       // fully-qualified  emoji keycap sequence
+    "keycap3_text &#x0033;&#x20e3; \n"                                                                                          // unqualified emoji keycap sequence
+    "two adjacent glyphs &#x262a;&#xfe0f;&#xfe0f;&#xfe0f;&#x262a;&#xfe0f;\n"                                                    // This line should be rendered as two adjacent glyphs
+    "Digit 8&#xfe0f; 8&#xfe0e; 8\n"                                                                                             // should be rendered according to selector
+    "Surfing Medium Skin Female:  &#x1f3c4;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;\n"                                                 // Person Surfing + Medium Skin Tone +? Zero Width Joiner + Female Sign
+    "SYMBOLS_NSLCL variation selector: &#x1f170;&#xfe0f;&#x1f171;&#xfe0f;&#x1f172;&#xfe0e;&#x1f173;&#xfe0e;&#x1f174;&#xfe0e;\n" // 1F170 ~ 1F174 with variation selector, text vs emoji
+    "SYMBOLS_NSLCL with VS15: &#x1f170;&#xfe0e;&#x1f171;&#xfe0e;&#x1f172;&#xfe0e;&#x1f173;&#xfe0e;&#x1f174;&#xfe0e;\n"          // 1F170 ~ 1F174 with VS15
+    "SYMBOLS_NSLCL with VS16: &#x1f170;&#xfe0f;&#x1f171;&#xfe0f;&#x1f172;&#xfe0f;&#x1f173;&#xfe0f;&#x1f174;&#xfe0f;\n"          // 1F170 ~ 1F174 with VS16
+
+    ;
 
   label.SetProperty(TextLabel::Property::TEXT, emojiSequences);
   label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
 
   label.SetProperty(TextLabel::Property::TEXT, emojiSequences);
   label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
index c458fd0..35a7760 100644 (file)
@@ -42,13 +42,14 @@ bool IsEmojiSequence(const TextAbstraction::Script&    currentRunScript,
                      const TextAbstraction::Character& character,
                      const TextAbstraction::Script&    characterScript)
 {
                      const TextAbstraction::Character& character,
                      const TextAbstraction::Script&    characterScript)
 {
-  return (IsOneOfEmojiScripts(currentRunScript) &&
-          (IsOneOfEmojiScripts(characterScript) ||
-           TextAbstraction::IsZeroWidthJoiner(character) ||
-           TextAbstraction::IsZeroWidthNonJoiner(character) ||
-           TextAbstraction::IsEmojiItem(character) ||
-           TextAbstraction::IsMiscellaneousSymbolsAndArrowsEmoji(character) ||
-           TextAbstraction::IsDingbatsEmoji(character)));
+  return (!(TextAbstraction::IsNegativeSquaredLatinCapitalLetter(character)) &&
+          (IsOneOfEmojiScripts(currentRunScript) &&
+           (IsOneOfEmojiScripts(characterScript) ||
+            TextAbstraction::IsZeroWidthJoiner(character) ||
+            TextAbstraction::IsZeroWidthNonJoiner(character) ||
+            TextAbstraction::IsEmojiItem(character) ||
+            TextAbstraction::IsMiscellaneousSymbolsAndArrowsEmoji(character) ||
+            TextAbstraction::IsDingbatsEmoji(character))));
 }
 
 bool IsNewSequence(const Character* const         textBuffer,
 }
 
 bool IsNewSequence(const Character* const         textBuffer,