Все ли последовательности ZWJ действительны? - PullRequest
1 голос
/ 01 мая 2020

При создании шрифта эмодзи допустима ли последовательность ZERO WIDTH JOINER?

Например: могу ли я использовать ?‍★‍? (Waving White Flag + zwj + Black Star + zwj + Green Square), чтобы представить белый флаг с зеленой звездой на нем? А затем отрендерить его, скажем, как флаг эсперанто ?

Ответы [ 2 ]

3 голосов
/ 01 мая 2020

Существуют ограничения на то, что может быть частью последовательностей ZWJ, а что нет. Технический стандарт Unicode # 51 устанавливает эти правила.

Согласно определению ED-15a , правильно сформированная последовательность ZWJ может состоять только из:

  • символы Emoji (символ со свойством Emoji=True)
  • последовательности представления Emoji (символ Emoji, за которым следует U + FE0F VARIATION SELECTOR-16, все допустимые комбинации которых перечислены в этот файл данных )
  • Последовательности модификатора Emoji (символ со свойством Emoji_Modifier_Base=True, за которым следует символ со свойством Emoji_Modifier=True)

Все соответствующие свойства могут можно найти в этом файле данных .

U + 2605 ЧЕРНАЯ ЗВЕЗДА не является символом эмодзи (и, очевидно, это также не один из этих типов последовательностей), поэтому он не будет действительным для использования в последовательностях ZWJ на момент написания, но вместо этого вы можете заменить U + 2B50 WHITE MEDIUM STAR (которая является эмодзи). Кроме этого, ?️ и ? являются честной игрой.

Примечание на U + 1F3F3 WAVING WHITE FLAG: Этот персонаж является смайликом, но у него есть свойство Emoji_Presentation=False, что означает, что он должен отображаться как текстовый стиль (моно chrome вместо цветного) по умолчанию. Для отображения в стиле эмодзи к нему должен быть добавлен 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>

1 голос
/ 01 мая 2020

Я заметил ваш интерес к созданию флага Esperanto, но я думаю, что рендеринг шрифтов сложнее, чем просто выравнивание кодовых точек.

Ваш грубый метод не работает " как есть " ,

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

Стандарт Unicode гласит: Рекомендуемые последовательности Emoji ZWJ, v13.0 :

Ниже приведены рекомендуемые последовательности emoji zwj, в которых используется U + 200D ZERO WIDTH JOINER (ZWJ) для объединения символов в один глиф , если доступно . Когда они недоступны, символы ZWJ игнорируются, и отображается резервная последовательность отдельных смайликов. Таким образом, последовательность emoji zwj должна поддерживаться только в том случае, если резервная последовательность также имеет смысл для зрителя.

Мне было интересно, какая часть механизма рендеринга шрифтов будет отвечать за проверку «доступности» (т. Е. Механизм рендеринга, поддерживающий определенную версию Unicode, или приложение, или шрифт), и угадал «шрифт» .

Итак, я наткнулся на эту статью о шрифтах Emoji , и действительно, файлы шрифтов могут содержать данные о замене лигатуры, см., Например, OpenType . Microsoft предоставляет инструмент под названием VOLT , который позволяет определять лигатуры.

Я понятия не имею о дизайне шрифтов, но я бы попытался создать цветной глиф флажка с помощью редактора шрифтов ( набросал здесь ) и определите замену лигатуры. (без подразумеваемой гарантии;))

...