jmecn / jme3-freetype-font

freetype font support for jme3
BSD 3-Clause "New" or "Revised" License
4 stars 0 forks source link

准确识别emoji,处理ZWJ字符以及FitzType。 #3

Closed jmecn closed 6 months ago

jmecn commented 6 months ago

在 UTF-8 格式的字符串中,emoji 的 Unicode 码位是 0x1F600~0x1F64F,通常存储为 UTF-16 格式。

例如:😊存储为 "\uD83D\uDE0A",对应的 Unicode 是 0x1F60A。

零宽连接符, ZWJ (Zero Width Joiner)

多个 emoji 可以通过零宽连接符(\u200D)组合成新的 emoji。

例如:“👨‍👩‍👧‍👦”实际上是“👨 👩 👧 👦” 通过 ZWJ 符号连接在一起组合而成的,对应的存储为 "\uD83D\DC68\200D\uD83D\DC69\200D\uD83D\DC67\200D\uD83D\DC66"

菲茨派屈克修饰符, (Fitzpatrick modifier)

目前全世界人类的 虚色分级 (Fitzpatrick scale) 是 1975 年由一位叫做 Thomas B. Fitzpatrick 的人制定出來的,他当初定义了 6 种虚色等級。(Type 1 ~ Type 6)。 因为 Type 1 与 Type 2 颜色太相近了,在电脑屏幕上不容易区分,索性就合并了。这5个字元分別是:

Type Desc CodePoint Emoji UTF-16
fitz_1_2 pale white/white U+1F3FB 🏻 \uD83C\uDFFB
fitz_3 cream white U+1F3FC 🏼 \uD83C\uDFFC
fitz_4 moderate brown U+1F3FD 🏽 \uD83C\uDFFD
fitz_5 dark brown U+1F3FE 🏾 \uD83C\uDFFE
fitz_6 black U+1F3FF 🏿 \uD83C\uDFFF

在“人类”emoji后添加下列肤色修饰符,就可以改变emoji的肤色。

例如:在原始emoji 🧑后分别添加5个修饰符,最后得到 🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿。

jmecn commented 6 months ago

通过移植 pango-emoji.c 的代码,目前已经可以识别。