(Я новичок как в арабском языке, так и в работе с Unicode, поэтому, возможно, я упускаю из виду некоторые бросающиеся в глаза детали.)
Итак, я использую шрифт SIL Lateef и хочу получить доступ к глифу начальной формы BEH в HTML. (Поскольку в MSA «с/через» переводится как префикс ﺑِ
, поэтому я хочу включить его в исходную форму, чтобы было понятно, что это префикс, а не слово само по себе.)
Глиф начальной формы BEH имеет код Unicode U+FE91 . Однако Латиф не включает глиф в этом «местоположении» (не совсем уверен, как его назвать), а вместо этого включает глиф в U + 1016F («Греческий акрофонический каристиан Пятьсот»), а затем использует таблицу подстановки для использования это. (Использование таблицы замещения логично, но я не понимаю, почему Lateef помещает глиф в это странное место.)
Поскольку мое приложение определенно использует Lateef, включенный в качестве веб-шрифта, я решил просто сослаться на него как U+1016F в javascript ( ) \u{1016F}
или HTML ( 𐅯
или 𐅯
) --- я знаю, что это некрасиво, потому что это не семантика, но я не мог выбрать лучший способ. Однако, несмотря на то, что рассматриваемый элемент действительно использовал Lateef в качестве шрифта, Chrome вместо этого отображал «Греческий акрофонный каристийский пятьсот»:
Тогда мои вопросы:
Причина, по которой глиф был недоступен
По-видимому, хотя глиф начальной формы BEH был «сохранен» по адресу 0x1016f, ему не было «назначено» значение Unicode U+1016f. Насколько я понимаю, в этом случае глиф не будет отображаться в cmap
таблице, которая является основным местом для процесса выбора символа механизма рендеринга -> процесса выбора глифа.
Я обнаружил это, когда возился с Fontforge. В FontForge, чтобы просмотреть символы, помеченные значением Unicode, вместо изображения глифа, выберите «Просмотр» > «Пометить глиф по» > «Unicode»; и чтобы установить значение Unicode для рассматриваемого глифа, выберите глиф, щелкните правой кнопкой мыши, затем установите «Информация о глифе ...»> «Unicode»> «Значение Unicode» соответствующим образом.
Я предполагаю, что это ошибка шрифта Lateef; «правильным» способом было бы сделать глиф доступным в таблице cmap
, но также поместить его в 0xfe91 в первую очередь вместо 0x1016f (где он семантически не принадлежит).
Как получить доступ к глифу в любом случае
ЛЕГКО: просто используйте U+0640 : بـ
.
СТАРЫЙ/СЛОЖНЫЙ:
Помимо изменения шрифта, как следует из решения проблемы выше, я придумал еще один необычный способ доступа к глифу без изменения шрифта.
<div style="direction: rtl;">ب‍<span style="color:#fff; width: 0px; display: inline-block;">ن</span></div>
Поскольку к глифу можно получить неявный доступ, в сочетании с последующими буквами можно просто скрыть эти последующие буквы и в итоге получить только глиф начальной формы BEH. Однако необходимо использовать дополнительный трюк: добавить соединение нулевой ширины ‍
, чтобы символы могли соединяться через вкрапленный <span>
элемент.
Куртка Janus Bahs
Келли ван Эверт
Куртка Janus Bahs
Келли ван Эверт
Куртка Janus Bahs
Келли ван Эверт
Куртка Janus Bahs
Куртка Janus Bahs
Келли ван Эверт