Hamza est une bibliothèque de mise en forme et de rendu UNICODE / OpenType C99, rapide et portable. Il est conçu pour être un petit shaper portable et optimisé facile à intégrer dans tout projet existant. Vous trouverez ci-dessous une image d'une courte chaîne de forme arabe avec cette bibliothèque en utilisant une police assez complexe, des couleurs aléatoires sont affectées à chaque glyphe. 
Hamza inclut les programmes à fichier unique update_ucd_ftp et generate_ucd_headers . Le premier tire les fichiers UCD nécessaires du serveur FTP sur ftp.unicode.org et nécessite des curl. Le second génère des en-têtes C optimisés à partir de ces fichiers UCD. Ces deux programmes utilisent la bibliothèque POSIX Regex pour le filtrage et l'analyse.
Téléchargez l'UCD TXT, cela peut prendre quelques minutes, donc ne faites que si les en-têtes UCD sont obsolètes:
./build/update_ucd_ftpGénérez les fichiers d'en-tête pour les versions UCD:
./build/generate_ucd_headers Pour commencer à utiliser Hamza, définissez HZ_IMPLEMENTATION avant d'inclure hz.h Vous pouvez éventuellement définir HZ_NO_STDLIB pour. Il est également nécessaire d'inclure l'en-tête de l'UCD pour la version dont vous avez besoin. Nous expliquerons plus tard comment ceux-ci sont générés et comment vous pouvez les mettre à jour vous-même.
#define HZ_IMPLEMENTATION
#include <hz/hz_ucd_15_0_0.h>
#include <hz/hz.h> Pour initialiser la bibliothèque, remplissez d'abord une structure hz_config_t et appelez hz_init :
hz_config_t cfg = {
};
if ( hz_init ( & cfg ) != HZ_OK ) {
fprintf ( stderr , "%sn" , "Failed to initialize Hamza!" );
return -1 ;
} Ensuite, avant de pouvoir façonner tout texte, vous devez fournir des données de police. Vous souhaitez charger une police dans une structure stbtt_fontinfo . Hamza comprend stb_truetype.h qui est destiné à être utilisé dans les polices de lecture. Pour créer un hz_font_t à partir d'une police STBTT, écrivez:
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Hamza vise à permettre à l'utilisateur de gérer l'allocation de mémoire et les données autant que possible. Avant de façonner les données de police, doit être analysé dans une structure hz_font_data_t . Cela contient toutes les données de table OpenType requises pour la mise en forme avec une police spécifique. La fonction hz_font_data_init prend comme argument combien de mémoire sera allouée pour maintenir les données de cette police:
hz_font_data_t font_data ;
hz_font_data_init ( & font_data , 1024 * 1024 ); // 1MiB
hz_font_data_load ( & font_data , font );Créez un shaper et initialisez-le:
hz_shaper_t shaper ;
hz_shaper_init ( & shaper );Définissez les paramètres requis du 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 );Définissez les fonctionnalités de la typographie du 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 ]));Créez du tampon et de la forme des glyphes!
hz_buffer_t buffer ;
hz_buffer_init ( & buffer );
hz_shape_sz1 ( & shaper , & font_data , HZ_ENCODING_UTF8 , "السلام عليكم" , & buffer );Après cela, vous pouvez accéder aux données et rendu des glyphes du tampon. Une fois que vous avez terminé avec tout ce que vous avez à désinitialiser.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woff et .woff2 Formats Hamza est autorisé sous LGPLV3.