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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user