Unicode Harfbuzz选择字体文件中的本地斜杠字符

Unicode Harfbuzz选择字体文件中的本地斜杠字符,unicode,fonts,opentype,freetype2,harfbuzz,Unicode,Fonts,Opentype,Freetype2,Harfbuzz,我有一个名为MyriadHebrew-Regular.otf的系统字体 我用的是“斜杠”字符(代码47),但后来我注意到 Adobe使用的After Effects有点不同。然后我检查了 FontCreator程序中的字体,并发现可以使用默认字符(47), 或其本地化版本(显示为斜杠.1),位于字体字形映射的末尾。其字形索引为587。 因此,我一直在尝试使用Harfbuzz访问本地化标志符号: ....... hb_buffer_t *m_hb_buffer = NULL; hb_font_

我有一个名为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(标准索引)


任何帮助都将不胜感激。

要解决此问题,需要添加允许进行替换的功能“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);

由于这是AALT图示符,是否仍需要设置本地化语言
he
?或者它与使用的语言无关?
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);