Subject: Re: bug#39799: 28.0.50; Most emoji sequences don’t render correctly

From: Robert Pluim <[email-masked]>
Date: Tue, 21 Sep 2021 16:43:17 +0200

>>>>> On Tue, 21 Sep 2021 17:19:23 +0300, Eli Zaretskii <[email-masked]> said:

    >> From: Robert Pluim <[email-masked]>
    >> Cc: Eli Zaretskii <[email-masked]>,  [email-masked],  [email-masked]
    >> Date: Tue, 21 Sep 2021 15:53:52 +0200
    >> 
    Mike> It does work with hb-view.
    >> 
    >> Itʼs a problem with the way we generate the auto composition
    >> sequences. If I remove the ZWJ sequences for eg 1f469, then all the
    >> skin tone sequences for 1f469 work

    Eli> Not sure I understand.  The sequence U+1F4F9,U+1F3FD indeed does not
    Eli> appear in emoji-zwj.el, but it does appear in emoji-sequences.txt.
    Eli> However, the string "👩🏽" doesn't match the regexp in the
    Eli> composition-function-table's slot for U+1F4F9.  Why is this?

Because for skin tones we index on the modifier, and use lookback:

;; Skin tones
(set-char-table-range composition-function-table
                      '(#x1F3FB . #x1F3FF)
                      (nconc (char-table-range composition-function-table '(#x1F3FB . #x1F3FF))
                             (list (vector ".[\U0001F3FB-\U0001F3FF]"
                                           1
                                    'compose-gstring-for-graphic))))

Iʼve just tried adding "\N{U+1F469}\N{U+1F3FE}" to the composition
function table regexp for U+1F469 manually, and now I get correct
composition. That means we could process the
RGI_Emoji_Modifier_Sequence entries from emoji-sequences.txt with
emoji-zwj.awk and add them, indexed on the base character (and remove
the above code).

Iʼd still like to understand where things are going wrong though.

Robert
--