Hamzaは、ヘッダーのみの、高速でポータブルC99 Unicode/Opentypeシェーピングおよびレンダリングライブラリです。既存のプロジェクトに簡単に統合できる、小規模でポータブルで最適化されたシェーパーになるように設計されています。以下は、かなり複雑なフォントを使用して、このライブラリで形をしたアラビア語の短い文字列の画像で、ランダムな色が各グリフに割り当てられています。 
Hamzaには、単一ファイルプログラムupdate_ucd_ftpとgenerate_ucd_headersが含まれています。最初は、FTP.Unicode.orgのFTPサーバーから必要なUCDファイルをプルし、Curlが必要です。 2番目は、これらのUCDファイルから最適化されたCヘッダーを生成します。これらのプログラムはどちらも、フィルタリングと解析のためにPOSIX Regexライブラリを使用しています。
UCD TXTをダウンロードすると、これには数分かかる場合があるため、UCDヘッダーが古くなっている場合にのみ行う場合があります。
./build/update_ucd_ftpUCDバージョンのヘッダーファイルを生成します。
./build/generate_ucd_headersHAMZAの使用を開始するには、 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 ;
}次に、テキストを形成する前に、フォントデータを提供する必要があります。 Fontをstbtt_fontinfo structにロードします。 HAMZAには、Fontsの読み取りに使用することを目的としたstb_truetype.hが含まれています。 STBTTフォントからhz_font_t作成するには、次のことを書き込みます。
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Hamzaは、ユーザーがメモリの割り当てとデータを可能な限り管理できるようにすることを目指しています。形成する前に、フォントデータを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 );シェーパーのタイポグラフィ機能を設定します。
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 );この後、バッファーのGlyphデータにアクセスしてレンダリングできます。すべてが完了した後、あなたは無効化する必要があります。
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woffおよび.woff2フォーマットHamzaはLGPLV3の下でライセンスされています。