1

MyriadHebrew-Regular.otf というシステム フォントがあります。

「スラッシュ」文字 (コード 47) を使用していましたが、Adobe After Effects で使用されているものとは少し異なることに気付きました。その後、FontCreator プログラムでフォントを調べたところ、デフォルトの文字 (コード 47) を使用できることがわかりました。 47)、またはそれのローカライズ版 (slash.1 として表示されます) で、フォント グリフ マップの末尾にあります。そのグリフ インデックスは 587 です。そのため、Halfbuzz でローカライズされたグリフにアクセスしようとしています。

.......
 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 (標準のもの) のままです。

どんな助けでも大歓迎です。

4

1 に答える 1

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);

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

于 2016-07-01T13:16:33.010 に答える