currentCharacterScript = TextAbstraction::EMOJI;
}
// Emoji sequences
- else if(IsEmojiSequence(currentRunScript, character, currentCharacterScript))
+ else if(IsEmojiSequence(currentRunScript, character, currentCharacterScript) && currentCharacterScript != TextAbstraction::EMOJI_TEXT)
{
// Emoji request an emoji presentation for an emoji character.
isUpdated = (currentCharacterScript != TextAbstraction::EMOJI_COLOR);
}
else if(IsScriptChangedToFollowSequence(currentScriptRun.script, character, script))
{
- currentScriptRun.script = script;
+ // To guarantee behavior of VARIATION_SELECTOR_15.
+ if(currentScriptRun.script != TextAbstraction::EMOJI_TEXT)
+ {
+ currentScriptRun.script = script;
+ }
}
else if(IsOneOfEmojiScripts(currentScriptRun.script) && (TextAbstraction::COMMON == script))
{
if(isModifiedByVariationSelector)
{
- FontId requestedFontId = fontClient.FindDefaultFont(character, currentFontPointSize, IsEmojiColorScript(script));
+ FontId requestedFontId = 0u;
+ if(TextAbstraction::IsEmojiTextScript(script))
+ {
+ // Find a fallback-font.
+ requestedFontId = fontClient.FindFallbackFont(character,
+ currentFontDescription,
+ currentFontPointSize,
+ false);
+
+ if(fontClient.IsColorGlyph(requestedFontId, glyphIndexChar))
+ {
+ // Try to find text style glyph.
+ requestedFontId = 0;
+ }
+ }
+ if(0u == requestedFontId)
+ {
+ requestedFontId = fontClient.FindDefaultFont(character, currentFontPointSize, IsEmojiColorScript(script));
+ }
if(0u != requestedFontId)
{
currentFontRun.fontId = fontId = requestedFontId;