Hamza-это только заголовок, быстрая и портативная библиотека C99 Unicode/Opentype Forming и рендеринг. Он предназначен для того, чтобы быть небольшим, портативным и оптимизированным формированием, который легко интегрироваться в любой существующий проект. Ниже приведено изображение короткой строки арабской формы с этой библиотекой с использованием довольно сложного шрифта, случайные цвета присваиваются каждому глифу. 
Hamza включает в себя однофильные программы update_ucd_ftp и generate_ucd_headers . Первый извлекает необходимые файлы UCD с FTP -сервера по адресу ftp.unicode.org и требует curl. Второй генерирует оптимизированные заголовки C из этих файлов UCD. Обе эти программы используют библиотеку Regex Posix для фильтрации и анализа.
Загрузите UCD TXT, это может занять несколько минут, так что сделайте только в том случае, если заголовки UCD устарели:
./build/update_ucd_ftpСоздайте файлы заголовков для версий UCD:
./build/generate_ucd_headers Чтобы начать использовать Hamza, определите HZ_IMPLEMENTATION , прежде чем включать hz.h Вы можете определить HZ_NO_STDLIB для. Также необходимо включить заголовок для UCD для требуемой вам версии. Позже мы объясним, как они генерируются и как вы можете обновить их самостоятельно.
#define HZ_IMPLEMENTATION
#include <hz/hz_ucd_15_0_0.h>
#include <hz/hz.h> Для инициализации библиотеки сначала заполните hz_config_t struct и вызовите hz_init :
hz_config_t cfg = {
};
if ( hz_init ( & cfg ) != HZ_OK ) {
fprintf ( stderr , "%sn" , "Failed to initialize Hamza!" );
return -1 ;
} Далее, прежде чем вы сможете сформировать любой текст, вы должны предоставить данные шрифта. Вы хотите загрузить шрифт в stbtt_fontinfo struct. Hamza включает в себя stb_truetype.h , который предназначен для использования в шрифтах чтения. Чтобы создать hz_font_t из шрифта STBTT, напишите:
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Хамза стремится позволить пользователю управлять распределением памяти и данных как можно больше. Перед формированием данных шрифта должны быть проанализированы в hz_font_data_t struct. Это содержит все данные о таблице Opentype, необходимые для формирования с определенным шрифтом. Функция hz_font_data_init принимает как аргумент, сколько памяти будет выделено для сохранения данных этого шрифта:
hz_font_data_t font_data ;
hz_font_data_init ( & font_data , 1024 * 1024 ); // 1MiB
hz_font_data_load ( & font_data , font );Создайте формирование и инициализируйте его:
hz_shaper_t shaper ;
hz_shaper_init ( & shaper );Установите необходимые параметры формирования:
hz_shaper_set_direction ( & shaper , HZ_DIRECTION_RTL );
hz_shaper_set_script ( & shaper , HZ_SCRIPT_ARABIC );
hz_shaper_set_language ( & shaper , HZ_LANGUAGE_ARABIC );Установите функции типографии Shaper:
hz_feature_t features [] = {
HZ_FEATURE_ISOL ,
HZ_FEATURE_INIT ,
HZ_FEATURE_MEDI ,
HZ_FEATURE_FINA ,
HZ_FEATURE_RLIG ,
HZ_FEATURE_LIGA ,
};
hz_shaper_set_features ( & shaper , features , sizeof ( features )/ sizeof ( features [ 0 ]));Создайте буфер и форму Glyph!
hz_buffer_t buffer ;
hz_buffer_init ( & buffer );
hz_shape_sz1 ( & shaper , & font_data , HZ_ENCODING_UTF8 , "السلام عليكم" , & buffer );После этого вы можете получить доступ к данным и рендерину буфера. После того, как вы закончите со всем, что вам нужно деинитировать.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woff и .woff2 форматы Хамза лицензирован в рамках LGPLV3.