Hamza ist nur Header, schnell und tragbares C99 Unicode/OpenType-Formen- und Rendering-Bibliothek. Es ist ein kleiner, tragbarer und optimierter Shaper, der sich leicht in jedes vorhandene Projekt integrieren kann. Im Folgenden finden Sie ein Bild einer kurzen Arabischfolge, die mit dieser Bibliothek mit einer ziemlich komplexen Schriftart mit dieser Bibliothek geformt sind. Jeder Glyphen werden zufällige Farben zugeordnet. 
Hamza enthält die Single-File-Programme update_ucd_ftp und generate_ucd_headers . Der erste zieht die erforderlichen UCD -Dateien vom FTP -Server unter ftp.unicode.org aus und erfordert Curl. Die zweite erzeugt optimierte C -Header aus diesen UCD -Dateien. Beide Programme verwenden die POSIX Regex -Bibliothek zum Filtern und Parsen.
Laden Sie den UCD -TXT herunter. Dies kann einige Minuten dauern, also tun Sie nur dann, wenn die UCD -Header veraltet sind:
./build/update_ucd_ftpGenerieren Sie die Header -Dateien für die UCD -Versionen:
./build/generate_ucd_headers Definieren Sie HZ_IMPLEMENTATION , bevor Sie hz.h einschließen. Sie können optional HZ_NO_STDLIB definieren. Es ist auch erforderlich, den Header für die UCD für die von Ihnen benötigte Version einzubeziehen. Wir werden später erklären, wie diese generiert werden und wie Sie sie selbst aktualisieren können.
#define HZ_IMPLEMENTATION
#include <hz/hz_ucd_15_0_0.h>
#include <hz/hz.h> So initialisieren Sie die Bibliothek zuerst eine hz_config_t struct und rufen Sie hz_init an:
hz_config_t cfg = {
};
if ( hz_init ( & cfg ) != HZ_OK ) {
fprintf ( stderr , "%sn" , "Failed to initialize Hamza!" );
return -1 ;
} Bevor Sie einen Text formen können, müssen Sie Schriftstellungsdaten angeben. Sie möchten eine Schriftart in eine stbtt_fontinfo -Struktur laden. Hamza enthält stb_truetype.h , das für das Lesen von Schriftarten verwendet werden soll. Um ein hz_font_t aus einer STBTT -Schriftart zu erstellen, schreiben Sie:
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Hamza zielt darauf ab, den Benutzer die Speicherzuweisung und die Daten so weit wie möglich verwalten zu lassen. Vor der Gestaltung der Schriftart müssen Daten in eine hz_font_data_t struct unterrichtet werden. Dadurch enthält alle OpenType -Tabellendaten, die für die Gestaltung mit einer bestimmten Schriftart erforderlich sind. Die Funktion hz_font_data_init nimmt als Argument an, wie viel Speicher zugewiesen wird, um die Daten der Schriftart zu behalten:
hz_font_data_t font_data ;
hz_font_data_init ( & font_data , 1024 * 1024 ); // 1MiB
hz_font_data_load ( & font_data , font );Erstellen Sie einen Shaper und initialisieren Sie ihn:
hz_shaper_t shaper ;
hz_shaper_init ( & shaper );Stellen Sie die erforderlichen Parameter des Shapers fest:
hz_shaper_set_direction ( & shaper , HZ_DIRECTION_RTL );
hz_shaper_set_script ( & shaper , HZ_SCRIPT_ARABIC );
hz_shaper_set_language ( & shaper , HZ_LANGUAGE_ARABIC );Stellen Sie die Typografie -Funktionen des Shaper fest:
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 ]));Erstellen Sie Glyphenpuffer und Form!
hz_buffer_t buffer ;
hz_buffer_init ( & buffer );
hz_shape_sz1 ( & shaper , & font_data , HZ_ENCODING_UTF8 , "السلام عليكم" , & buffer );Danach können Sie auf die Glyphendaten des Puffer zugreifen und das Rendern rendern. Nachdem Sie mit allem fertig sind, müssen Sie Deinitialisieren.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woff und .woff2 -Formate Hamza ist unter LGPLV3 lizenziert.