【问题标题】:Are all ZWJ sequences valid?所有 ZWJ 序列都有效吗?
【发布时间】:2020-08-15 17:25:03
【问题描述】:

创建表情符号字体时,ZERO WIDTH JOINER 的任何序列是否有效?

例如:我可以使用????‍★‍???? (Waving White Flag + zwj + Black Star + zwj + Green Square) 来表示上面带有绿星的白旗吗?然后渲染它,比如说Esperanto flag?

【问题讨论】:

    标签: unicode fonts emoji


    【解决方案1】:

    对于什么可以成为 ZWJ 序列的一部分和什么不能是有限制的。 Unicode Technical Standard #51 列出了这些规则。

    根据ED-15a的定义,一个良构的ZWJ序列只能包括:

    • 表情符号字符(具有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 WAVING WHITE FLAG 的旁注:此字符是一个表情符号,但它具有Emoji_Presentation=False 属性,这意味着它旨在显示为文本样式(单色而不是多彩)默认情况下。要强制 emoji-style 显示,必须将 U+FE0F VARIATION SELECTOR-16 附加到它。建议始终为Emoji_Presentation=False 的字符包含这些变体选择器。

    U+2B50 WHITE MEDIUM STAR 也是此类表情符号呈现序列的有效基础,但默认情况下它具有Emoji_Presentation=True,因此变体选择器是完全可选的。同时,U+1F7E9 大绿色正方形 不是 表情符号演示序列的有效基础,因此 绝不能 后跟 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>

    【讨论】:

    • 这是一个非常有见地的答案。非常感谢!
    【解决方案2】:

    我注意到您对创建世界语标志感兴趣,但我认为字体渲染比仅仅排列代码点更复杂。

    您的蛮力方法不起作用“as is”。

    <div>
        &#x1F3F3;&#xFE0F;&#x200D;&#x2605;&#x200D;&#x1F7E9;
    </div>
    

    Unicode 标准在Recommended Emoji ZWJ Sequences, v13.0 中说:

    以下是推荐的 emoji zwj 序列,它们使用 U+200D ZERO WIDTH JOINER (ZWJ) 将字符连接成单个 字形如果可用当不可用时,ZWJ 字符是 忽略并显示一个单独的表情符号的后备序列。因此 仅应在回退的情况下支持 emoji zwj 序列 顺序对观众来说也是有意义的。

    我想知道字体渲染机制的哪一部分将负责检查“可用性”(即支持某个Unicode版本的渲染引擎,或应用程序,或字体),并猜测“字体”。

    所以我在Emoji fonts 上看到了这篇文章,确实,字体文件可以包含关于连字替换的数据,例如,参见OpenType。 Microsoft 提供了一个名为VOLT 的工具,它允许定义连字。

    我对字体设计一无所知,但我会尝试使用字体编辑器 (sketched here) 创建一个彩色标志字形,并定义连字替换。 (没有默示保证;))

    【讨论】:

    • 我知道现有的表情符号实现可能支持该连字。我的问题是,如果他们这样做会有效吗?
    • 但是在您链接到的文档中有一个有趣的引述:因此,只有在回退序列对查看者也有意义的情况下,才应支持 emoji zwj 序列。
    • 我的理解是字体定义决定了它是否有效
    • 因为这个问题不完全是编程问题,也许可以在另一个 SE 网站上回答:graphicdesign.stackexchange.com/?tags=fonts
    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多