2016-07-01 24 views
1

我有一個名爲MyriadHebrew-Regular.otf系統字體的HarfBuzz選擇本地斜線字符

我所用「斜線」字符(代碼47),但後來我發現它使用 由Adobe後,一個效果有點不同。然後我檢查了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(標準的)。

任何幫助將不勝感激。

回答

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

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

+0

由於這是一個AALT字形,它是否仍然需要設置本地化語言「他」?還是獨立於使用的語言? – usr2564301