所有 ZWJ 序列都有效吗?
Are all ZWJ sequences valid?
在创建表情符号字体时,ZERO WIDTH JOINER
的任何序列都有效吗?
例如:我可以用★
(Waving White Flag
+ zwj
+ Black Star
+ zwj
+ Green Square
) 来表示一个上面有绿星的白旗?然后渲染它,比如说 Esperanto flag?
我注意到您对创建世界语标志很感兴趣,但我认为字体渲染比仅仅排列代码点更复杂。
您的蛮力方法不起作用“as is”。
<div>
🏳️‍★‍🟩
</div>
Unicode 标准在 Recommended Emoji ZWJ Sequences, v13.0 中说:
The following are the recommended emoji zwj sequences, which use a
U+200D ZERO WIDTH JOINER (ZWJ) to join the characters into a single
glyph if available. When not available, the ZWJ characters are
ignored and a fallback sequence of separate emoji is displayed. Thus
an emoji zwj sequence should only be supported where the fallback
sequence would also make sense to a viewer.
我想知道字体渲染机制的哪一部分会负责检查 "availability"(即支持某个 Unicode 版本的渲染引擎,或应用程序,或字体),并猜测 "the font".
所以我在 Emoji fonts, and indeed, font files can contain data on Ligature Substitution, see OpenType for example. Microsoft provides a tool called VOLT 上看到了这篇允许连字定义的文章。
我对字体设计一无所知,但我会尝试使用字体编辑器 (sketched here) 创建彩色标志字形,并定义连字替换。 (无默示保证;))
对于什么可以成为 ZWJ 序列的一部分,什么不能。 Unicode Technical Standard #51 列出了这些规则。
根据定义ED-15a,一个合式的 ZWJ 序列只能包含:
- Emoji 字符(带有 属性
Emoji=True
的字符)
- 表情符号呈现序列(一个表情符号字符后跟 U+FE0F VARIATION SELECTOR-16,所有有效组合都在 this data file 中列出)
- 表情符号修饰符序列(一个带有 属性
Emoji_Modifier_Base=True
的字符后跟一个带有 属性 Emoji_Modifier=True
的字符)
所有相关属性都可以在this data file中找到。
U+2605 BLACK STAR 不是表情符号字符(而且它显然也不是那些类型的序列之一),因此在撰写本文时它不能用于 ZWJ 序列,但是你可以用 U+2B50 WHITE MEDIUM STAR(这是一个表情符号)代替。除此之外,️和都是公平的游戏。
关于 U+1F3F3 挥动白旗的旁注:这个字符是一个表情符号,但它有 属性 Emoji_Presentation=False
,这意味着它打算显示为 文本-style(单色而不是彩色)默认。要强制显示 emoji-style,必须附加 U+FE0F VARIATION SELECTOR-16。建议始终为 Emoji_Presentation=False
.
的字符包含这些变体选择器
U+2B50 WHITE MEDIUM STAR 也是此类表情符号呈现序列的有效基础,但默认情况下它具有 Emoji_Presentation=True
,因此变体选择器完全是可选的。 U+1F7E9 LARGE GREEN SQUARE 同时 不是 表情符号表示序列的有效基础,因此 绝不能 后跟 VARIATION SELECTOR-16。我知道,这很复杂。
这意味着对于要使用的代码点的精确序列,您有两种选择,这两种选择都同样有效。或者:
️⭐ <U+1F3F3, U+FE0F, U+200D, U+2B50, U+200D, U+1F7E9>
或:
️⭐️ <U+1F3F3, U+FE0F, U+200D, U+2B50, U+FE0F, U+200D, U+1F7E9>
在创建表情符号字体时,ZERO WIDTH JOINER
的任何序列都有效吗?
例如:我可以用★
(Waving White Flag
+ zwj
+ Black Star
+ zwj
+ Green Square
) 来表示一个上面有绿星的白旗?然后渲染它,比如说 Esperanto flag?
我注意到您对创建世界语标志很感兴趣,但我认为字体渲染比仅仅排列代码点更复杂。
您的蛮力方法不起作用“as is”。
<div>
🏳️‍★‍🟩
</div>
Unicode 标准在 Recommended Emoji ZWJ Sequences, v13.0 中说:
The following are the recommended emoji zwj sequences, which use a U+200D ZERO WIDTH JOINER (ZWJ) to join the characters into a single glyph if available. When not available, the ZWJ characters are ignored and a fallback sequence of separate emoji is displayed. Thus an emoji zwj sequence should only be supported where the fallback sequence would also make sense to a viewer.
我想知道字体渲染机制的哪一部分会负责检查 "availability"(即支持某个 Unicode 版本的渲染引擎,或应用程序,或字体),并猜测 "the font".
所以我在 Emoji fonts, and indeed, font files can contain data on Ligature Substitution, see OpenType for example. Microsoft provides a tool called VOLT 上看到了这篇允许连字定义的文章。
我对字体设计一无所知,但我会尝试使用字体编辑器 (sketched here) 创建彩色标志字形,并定义连字替换。 (无默示保证;))
对于什么可以成为 ZWJ 序列的一部分,什么不能。 Unicode Technical Standard #51 列出了这些规则。
根据定义ED-15a,一个合式的 ZWJ 序列只能包含:
- Emoji 字符(带有 属性
Emoji=True
的字符) - 表情符号呈现序列(一个表情符号字符后跟 U+FE0F VARIATION SELECTOR-16,所有有效组合都在 this data file 中列出)
- 表情符号修饰符序列(一个带有 属性
Emoji_Modifier_Base=True
的字符后跟一个带有 属性Emoji_Modifier=True
的字符)
所有相关属性都可以在this data file中找到。
U+2605 BLACK STAR 不是表情符号字符(而且它显然也不是那些类型的序列之一),因此在撰写本文时它不能用于 ZWJ 序列,但是你可以用 U+2B50 WHITE MEDIUM STAR(这是一个表情符号)代替。除此之外,️和都是公平的游戏。
关于 U+1F3F3 挥动白旗的旁注:这个字符是一个表情符号,但它有 属性 Emoji_Presentation=False
,这意味着它打算显示为 文本-style(单色而不是彩色)默认。要强制显示 emoji-style,必须附加 U+FE0F VARIATION SELECTOR-16。建议始终为 Emoji_Presentation=False
.
U+2B50 WHITE MEDIUM STAR 也是此类表情符号呈现序列的有效基础,但默认情况下它具有 Emoji_Presentation=True
,因此变体选择器完全是可选的。 U+1F7E9 LARGE GREEN SQUARE 同时 不是 表情符号表示序列的有效基础,因此 绝不能 后跟 VARIATION SELECTOR-16。我知道,这很复杂。
这意味着对于要使用的代码点的精确序列,您有两种选择,这两种选择都同样有效。或者:
️⭐ <U+1F3F3, U+FE0F, U+200D, U+2B50, U+200D, U+1F7E9>
或:
️⭐️ <U+1F3F3, U+FE0F, U+200D, U+2B50, U+FE0F, U+200D, U+1F7E9>