Back in 2018, I was an intern at facebook . I was also very early into my transition, so I was very in-the-loop with my trans collegeaues - and I heard about how one of the messenging teams (messenger? whatsapp? maybe both?) was going to be rolling out a trans pride flag emoji, and was encouraging early testing.
My first and immediate find? Copy-and-pasting the emoji into any other text field would result in a singular unknown glyph (like, say, �) - these clowns wanted to map it to a private use area codepoint! Fair enough, I suppose, for a corporation that wishes to ship on their own timelines - so I did some digging.
some background
I found no good prior art to go off of - I believe that the eventually-accepted proposal was circulating as a draft at the time, but I haven't been able to find any references or records of it from that period of time; I did find reference here to the unicode consortium rejecting a proposal for a trans flag that year - I think it might have been an earlier version of the proposal, it might have been an alternate proposal; I do know that I recalled seeing requests for a new codepoint to be issued for a trans flag emoji glyph, and a proposal without all of the requisite U+FE0F's.
The initial approach and codepoint mapping taken a day or so later was 🏳⚧ - [U+1F3F3, U+200D, U+26A7] . That's pretty close to what the approved codepoints ended up being, and it likely displays correctly now, but it's lacking a couple U+FE0F's that were necessary at the time. Here's where things get into the weeds.
U+FE0F: Emoji Presentation Mode
Nowadays, if you go look at the listed codepoints for 🏳️⚧️, you'll see five codepoints (characters) that make it up, with two of them being U+FE0F . FEOF can be slapped after a symbol - without a ZWJ! - to indicate that the preceding codepoint should be interpreted for Emoji Presentation, and not textual mode - her sister, U+FE0E, does that. If you want to see this in action: [⚧︎⚧️] is [U+26A7 U+FE0E U+26A7 U+FEOF] . Same codepoint, two render modes!
There was some prior art on how to approach the trans flag codepoints - emoji presentation white flag, zero width joiner, and a rainbow emoji. So, just swap the rainbow emoji for U+26A7 and we're good to go, right?
U+200D: Zero-width joiner my beloved
There's a lot of technical details about what is and is not technically valid to do with zero-width joiners. I'm not here to say that there is a wrong way to use the ZWJ to combine codepoints, because language is always-changing, but I was there to ensure that there is no technical reason to deny the trans flag proposal. The existing and eventually accepted proposal L2/19-080 that I linked earlier, proposed a four-codepoint approach, but it lacked the trailing U+FE0F for ⚧.
... continue reading