HAMZA是一個僅標題,快速和便攜式C99 Unicode/Opentype構建和渲染庫。它旨在是一個易於集成到任何現有項目的小型,便攜式和優化的塑造器。下面是使用相當複雜的字體,將隨機顏色分配給每個字形的簡短的阿拉伯語形狀的短字符串。 
HAMZA包括單文件程序update_ucd_ftp和generate_ucd_headers 。第一個從ftp.unicode.org上從FTP服務器中摘取必要的UCD文件,並需要捲曲。第二個從這些UCD文件中生成了優化的C標頭。這兩個程序都利用Posix Regex庫進行過濾和解析。
下載UCD TXT,這可能需要幾分鐘,因此只有在UCD標題過時時才這樣做:
./build/update_ucd_ftp生成UCD版本的標頭文件:
./build/generate_ucd_headers要開始使用HAMZA,請在包括hz.h之前定義HZ_IMPLEMENTATION 。您可以選擇為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結構中。 HAMZA包含stb_truetype.h ,旨在用於讀取字體。要從STBTT字體創建hz_font_t ,請寫下:
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); HAMZA的目的是讓用戶盡可能管理內存分配和數據。在構建字體之前,必須將數據解析為hz_font_data_t結構。這保留了使用特定字體塑造所需的所有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 );設置塑造器的排版功能:
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 ]));創建字形緩衝液和形狀!
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格式HAMZA獲得了LGPLV3的許可。