Hamza adalah header saja, cepat dan portabel C99 Unicode/Opentype membentuk dan rendering pustaka. Ini dirancang untuk menjadi pembentuk kecil, portabel dan dioptimalkan yang mudah diintegrasikan ke dalam proyek yang ada. Di bawah ini adalah gambar string pendek bahasa Arab yang dibentuk dengan perpustakaan ini menggunakan font yang cukup kompleks, warna acak ditugaskan untuk masing -masing mesin terbang. 
Hamza menyertakan program satu file update_ucd_ftp dan generate_ucd_headers . Yang pertama menarik file UCD yang diperlukan dari server FTP di ftp.unicode.org dan membutuhkan curl. Yang kedua menghasilkan header C yang dioptimalkan dari file UCD tersebut. Kedua program ini memanfaatkan pustaka Regex POSIX untuk memfilter dan parsing.
Unduh UCD TXT, ini mungkin memakan waktu beberapa menit jadi hanya lakukan jika header UCD kedaluwarsa:
./build/update_ucd_ftpHasilkan file header untuk versi UCD:
./build/generate_ucd_headers Untuk mulai menggunakan Hamza, tentukan HZ_IMPLEMENTATION sebelum memasukkan hz.h Anda secara opsional dapat mendefinisikan HZ_NO_STDLIB untuk. Juga perlu untuk memasukkan header untuk UCD untuk versi yang Anda butuhkan. Kami akan menjelaskan nanti bagaimana ini dihasilkan dan bagaimana Anda dapat memperbaruinya sendiri.
#define HZ_IMPLEMENTATION
#include <hz/hz_ucd_15_0_0.h>
#include <hz/hz.h> Untuk menginisialisasi pustaka pertama -tama isi struct hz_config_t dan hubungi hz_init :
hz_config_t cfg = {
};
if ( hz_init ( & cfg ) != HZ_OK ) {
fprintf ( stderr , "%sn" , "Failed to initialize Hamza!" );
return -1 ;
} Selanjutnya, sebelum Anda dapat membentuk teks apa pun yang harus Anda berikan data font. Anda ingin memuat font ke dalam struct stbtt_fontinfo . Hamza termasuk stb_truetype.h yang dimaksudkan untuk digunakan dalam membaca font. Untuk membuat hz_font_t dari font STBTT, tulis:
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Hamza bertujuan untuk membiarkan pengguna mengelola alokasi memori dan data sebanyak mungkin. Sebelum membentuk data font harus diuraikan menjadi struct hz_font_data_t . Ini menyimpan semua data tabel OpenType yang diperlukan untuk membentuk dengan font tertentu. Fungsi hz_font_data_init mengambil argumen berapa banyak memori yang akan dialokasikan untuk menyimpan data font itu:
hz_font_data_t font_data ;
hz_font_data_init ( & font_data , 1024 * 1024 ); // 1MiB
hz_font_data_load ( & font_data , font );Buat pembentuk dan inisialisasi:
hz_shaper_t shaper ;
hz_shaper_init ( & shaper );Atur parameter yang diperlukan pembentuk:
hz_shaper_set_direction ( & shaper , HZ_DIRECTION_RTL );
hz_shaper_set_script ( & shaper , HZ_SCRIPT_ARABIC );
hz_shaper_set_language ( & shaper , HZ_LANGUAGE_ARABIC );Atur fitur tipografi pembentuk:
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 ]));Buat buffer dan bentuk mesin terbang!
hz_buffer_t buffer ;
hz_buffer_init ( & buffer );
hz_shape_sz1 ( & shaper , & font_data , HZ_ENCODING_UTF8 , "السلام عليكم" , & buffer );Setelah ini, Anda dapat mengakses data mesin terbang buffer dan membuat. Setelah Anda selesai dengan semua yang harus Anda deinitialize.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woff dan .woff2 format Hamza dilisensikan di bawah LGPLV3.