2016-07-01 33 views
1

Ich habe ein System font MyriadHebrew-Regular.otf genanntHarfBuzz Auswahl lokaler slash char in Font-Datei

Ich war mit "slash" char (Code 47), aber dann bemerkte ich, dass derjenige, der von Adobe verwendet Nach Effekte ist ein bisschen anders. Dann inspizierte ich die Schriftart im FontCreator-Programm und festgestellt, dass es möglich ist, Standard-char (47), oder lokalisierte Version davon (erscheint als slash.1), die an der liegt Ende der Schriftart glyph maps.Its Glyph-Index ist 587. So habe ich versucht, auf die lokalisierte Glyphe mit Harfuzz zugreifen:

....... 
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 
....... 

In diesem Code erwartete ich, dass glyph_index = 587 (lokal wie in Adobe Nachwirkung), aber es ist immer noch 400 (Standard eins).

Jede Hilfe wird geschätzt.

Antwort

1

Zur Lösung dieses Problems ist es zusätzlich Feature "aalt", die Substitution tun können muss:

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

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

Da es sich um ein AALT Glyphe, Muss die lokalisierte Sprache "er" noch eingestellt sein? Oder ist es unabhängig von der verwendeten Sprache? – usr2564301