1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-05-26 13:58:49 +00:00

Issue #2492 - Standardized use of Emoji Character Properties

Detection of Emoji Components, for use as suffixes of TextDefault.
Detection of Non-Presentation Emojis as TextDefault.
Detection of all Extended Pictographics as EmojiDefault.
This commit is contained in:
Andy
2024-03-30 04:57:12 -07:00
committed by roytam1
parent 5c296d7c4a
commit 69f3b4e199
5 changed files with 33 additions and 32 deletions
+6 -7
View File
@@ -212,13 +212,12 @@ gfxPlatformGtk::GetCommonFallbackFonts(uint32_t aCh, uint32_t aNextCh,
nsTArray<const char*>& aFontList)
{
EmojiPresentation emoji = GetEmojiPresentation(aCh);
if (emoji != EmojiPresentation::TextOnly) {
if (aNextCh == kVariationSelector16 ||
(aNextCh != kVariationSelector15 &&
emoji == EmojiPresentation::EmojiDefault)) {
// if char is followed by VS16, try for a color emoji glyph
aFontList.AppendElement(kFontTwemojiMozilla);
}
EmojiPresentation eNext = GetEmojiPresentation(aNextCh);
if (aNextCh != kVariationSelector15 &&
emoji != EmojiPresentation::TextOnly &&
(emoji != EmojiPresentation::TextDefault ||
eNext == EmojiPresentation::EmojiComponent)) {
aFontList.AppendElement(kFontTwemojiMozilla);
}
aFontList.AppendElement(kFontDejaVuSerif);
+6 -7
View File
@@ -191,13 +191,12 @@ gfxPlatformMac::GetCommonFallbackFonts(uint32_t aCh, uint32_t aNextCh,
nsTArray<const char*>& aFontList)
{
EmojiPresentation emoji = GetEmojiPresentation(aCh);
if (emoji != EmojiPresentation::TextOnly) {
if (aNextCh == kVariationSelector16 ||
(aNextCh != kVariationSelector15 &&
emoji == EmojiPresentation::EmojiDefault)) {
// if char is followed by VS16, try for a color emoji glyph
aFontList.AppendElement(kFontAppleColorEmoji);
}
EmojiPresentation eNext = GetEmojiPresentation(aNextCh);
if (aNextCh != kVariationSelector15 &&
emoji != EmojiPresentation::TextOnly &&
(emoji != EmojiPresentation::TextDefault ||
eNext == EmojiPresentation::EmojiComponent)) {
aFontList.AppendElement(kFontAppleColorEmoji);
}
aFontList.AppendElement(kFontLucidaGrande);
+5 -4
View File
@@ -3113,10 +3113,11 @@ gfxFontGroup::WhichPrefFontSupportsChar(uint32_t aCh, uint32_t aNextCh)
gfxPlatformFontList* pfl = gfxPlatformFontList::PlatformFontList();
EmojiPresentation emoji = GetEmojiPresentation(aCh);
if ((emoji != EmojiPresentation::TextOnly &&
(aNextCh == kVariationSelector16 ||
(emoji == EmojiPresentation::EmojiDefault &&
aNextCh != kVariationSelector15)))) {
EmojiPresentation eNext = GetEmojiPresentation(aNextCh);
if (aNextCh != kVariationSelector15 &&
emoji != EmojiPresentation::TextOnly &&
(emoji != EmojiPresentation::TextDefault ||
eNext == EmojiPresentation::EmojiComponent)) {
charLang = eFontPrefLang_Emoji;
} else {
// get the pref font list if it hasn't been set up already
+6 -8
View File
@@ -638,14 +638,12 @@ gfxWindowsPlatform::GetCommonFallbackFonts(uint32_t aCh, uint32_t aNextCh,
nsTArray<const char*>& aFontList)
{
EmojiPresentation emoji = GetEmojiPresentation(aCh);
if (emoji != EmojiPresentation::TextOnly) {
if (aNextCh == kVariationSelector16 ||
(aNextCh != kVariationSelector15 &&
emoji == EmojiPresentation::EmojiDefault)) {
// if char is followed by VS16, try for a color emoji glyph
// XXX: For Win8+ native, aFontList.AppendElement(kFontSegoeUIEmoji);
aFontList.AppendElement(kFontTwemojiMozilla);
}
EmojiPresentation eNext = GetEmojiPresentation(aNextCh);
if (aNextCh != kVariationSelector15 &&
emoji != EmojiPresentation::TextOnly &&
(emoji != EmojiPresentation::TextDefault ||
eNext == EmojiPresentation::EmojiComponent)) {
aFontList.AppendElement(kFontTwemojiMozilla);
}
// Arial is used as the default fallback for system fallback
+10 -6
View File
@@ -48,7 +48,8 @@ enum IdentifierType {
enum EmojiPresentation {
TextOnly = 0,
TextDefault = 1,
EmojiDefault = 2
EmojiDefault = 2,
EmojiComponent = 3
};
const uint32_t kVariationSelector15 = 0xFE0E; // text presentation
@@ -179,14 +180,17 @@ IsDefaultIgnorable(uint32_t aCh)
inline EmojiPresentation
GetEmojiPresentation(uint32_t aCh)
{
if (!u_hasBinaryProperty(aCh, UCHAR_EMOJI)) {
return TextOnly;
if (u_hasBinaryProperty(aCh, UCHAR_EMOJI_COMPONENT)) {
return EmojiComponent;
}
if (u_hasBinaryProperty(aCh, UCHAR_EMOJI_PRESENTATION)) {
if (u_hasBinaryProperty(aCh, UCHAR_EMOJI) &&
!u_hasBinaryProperty(aCh, UCHAR_EMOJI_PRESENTATION)) {
return TextDefault;
}
if (u_hasBinaryProperty(aCh, UCHAR_EXTENDED_PICTOGRAPHIC)) {
return EmojiDefault;
}
return TextDefault;
return TextOnly;
}
// returns the simplified Gen Category as defined in nsIUGenCategory