EVG — one engine, three targets Emoji
One cluster, one glyph
👨‍👩‍👧
Joined family Five codepoints joined by U+200D. GSUB substitutes one ligature for all five, so it measures one advance and draws one glyph.
🇫🇮
Flag A pair of regional indicators — and exactly a pair, or two flags in a row would fuse into one cluster and neither would resolve.
1⃣
Keycap Digit, variation selector, enclosing keycap. The base character is in the text face, which is why the face has to be chosen for the whole cluster rather than per codepoint.
👍🏽
Skin tone A modifier attaches to the emoji before it. This face is monochrome, so it resolves to the base glyph — one glyph either way.
A colour of their own Rose emoji, dark text 🎉 🚀 Blue emoji, dark text 🎉 🚀 Green emoji, dark text 🎉 🚀 A monochrome face is outlines, so it takes whatever colour it is filled with. The emoji-color property is inherited the way color is, and unset it is the text colour — so a page that does not ask for one renders byte-identically to before it existed. In a sentence Text and emoji share a line and a baseline 😀, the run is cut only where the face has to change 🎉, and the PDF still extracts every one of them as the codepoints they were written with 🚀.