Harfbuzz выбирает локальную косую черту в файле шрифта

У меня есть системный шрифт MyriadHebrew-Regular.otf.

Я использовал символ «косая черта» (код 47), но потом заметил, что тот, который используется в Adobe After Effects, немного отличается. Затем я проверил шрифт в программе FontCreator и обнаружил, что можно использовать символ по умолчанию ( 47) или его локализованная версия (отображается как косая черта.1), которая находится в конце карты глифов шрифта. Его индекс глифа равен 587. Итак, я пытался получить доступ к локализованному глифу с помощью Harfbuzz:

.......
 hb_buffer_t *m_hb_buffer = NULL;
 hb_font_t *m_hb_font = NULL;
 std::wstring str = L"שתץףך /";
 const wchar_t* text = str.data();
 hb_buffer_t *m_hb_buffer = hb_buffer_create();
 hb_buffer_set_direction(m_hb_buffer, HB_DIRECTION_RTL);
 hb_buffer_set_script(m_hb_buffer, HB_SCRIPT_HEBREW);
 hb_buffer_set_language(m_hb_buffer, hb_language_from_string("he", 2));
 hb_buffer_add_utf16(m_hb_buffer, (uint16_t*)text, -1, 0, -1);
 hb_feature_t ft;
 hb_feature_from_string("locl",-1, &ft); // ft.tag = 1819239276; ft.value = 1
 hb_shape(m_hb_font, m_hb_buffer,&ft, 1);
 hb_glyph_info_t *m_info = hb_buffer_get_glyph_infos(m_hb_buffer, NULL);
 FT_UInt glyph_index = m_info[0].codepoint; // glyph_index = 400 instead of localized glyph_index=587
.......

В этом коде я ожидал, что glyph_index = 587 (локальный, как в Adobe aftereffect), но вместо этого все равно 400 (стандартный).

Любая помощь будет оценена.


person Pavel    schedule 01.07.2016    source источник


Ответы (1)


Для решения этой проблемы необходимо добавить функцию "aalt", позволяющую производить подстановку:

..............................

hb_feature_t ft[2];
hb_feature_from_string("aalt", -1, &ft[0]);
hb_feature_from_string("loca",-1, &ft[1]);
hb_shape(m_hb_font, m_hb_buffer,(const hb_feature_t*)&ft[0], 2);

............................

person Pavel    schedule 01.07.2016
comment
Поскольку это глиф AALT, нужно ли для него по-прежнему устанавливать локализованный язык he? Или это не зависит от используемого языка? - person Jongware; 01.07.2016