A Hamza é uma biblioteca C99 UNICODE/OPETYPET FAST e PORTATE, SOBRE CDONDOTETE. Ele foi projetado para ser um modelador pequeno, portátil e otimizado, fácil de integrar a qualquer projeto existente. Abaixo está uma imagem de uma pequena série de árabe em forma de biblioteca usando uma fonte bastante complexa, as cores aleatórias são atribuídas a cada glifo. 
Hamza inclui os programas de arquivo único update_ucd_ftp e generate_ucd_headers . O primeiro puxa os arquivos UCD necessários do servidor FTP em ftp.unicode.org e requer CURL. O segundo gera cabeçalhos C otimizados a partir desses arquivos UCD. Ambos os programas usam a biblioteca Posix Regex para filtragem e análise.
Faça o download do UCD TXT, isso pode levar alguns minutos, então só faz o que os cabeçalhos UCD estiverem desatualizados:
./build/update_ucd_ftpGere os arquivos de cabeçalho para as versões UCD:
./build/generate_ucd_headers Para começar a usar o Hamza, defina HZ_IMPLEMENTATION antes de incluir hz.h Opcionalmente, você pode definir HZ_NO_STDLIB . Também é necessário incluir o cabeçalho do UCD para a versão que você precisa. Explicaremos mais adiante como eles são gerados e como você pode atualizá -los você mesmo.
#define HZ_IMPLEMENTATION
#include <hz/hz_ucd_15_0_0.h>
#include <hz/hz.h> Para inicializar a biblioteca, preencha primeiro um hz_config_t struct e ligue para hz_init :
hz_config_t cfg = {
};
if ( hz_init ( & cfg ) != HZ_OK ) {
fprintf ( stderr , "%sn" , "Failed to initialize Hamza!" );
return -1 ;
} Em seguida, antes que você possa moldar qualquer texto, você deve fornecer dados de fonte. Você deseja carregar uma fonte em uma estrutura stbtt_fontinfo . Hamza inclui stb_truetype.h , que deve ser usado na leitura de fontes. Para criar uma hz_font_t a partir de uma fonte STBTT, escreva:
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Hamza pretende permitir que o usuário gerencie a alocação de memória e os dados o máximo possível. Antes de moldar os dados da fonte, deve ser analisado em uma estrutura hz_font_data_t . Isso contém todos os dados da tabela OpenType necessários para moldar com uma fonte específica. A função hz_font_data_init leva como argumento quanta memória será alocada para manter os dados dessa fonte:
hz_font_data_t font_data ;
hz_font_data_init ( & font_data , 1024 * 1024 ); // 1MiB
hz_font_data_load ( & font_data , font );Crie um modelador e inicialize:
hz_shaper_t shaper ;
hz_shaper_init ( & shaper );Defina os parâmetros necessários do modelador:
hz_shaper_set_direction ( & shaper , HZ_DIRECTION_RTL );
hz_shaper_set_script ( & shaper , HZ_SCRIPT_ARABIC );
hz_shaper_set_language ( & shaper , HZ_LANGUAGE_ARABIC );Defina os recursos de tipografia do modelador:
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 ]));Crie buffer e forma de glifos!
hz_buffer_t buffer ;
hz_buffer_init ( & buffer );
hz_shape_sz1 ( & shaper , & font_data , HZ_ENCODING_UTF8 , "السلام عليكم" , & buffer );Depois disso, você pode acessar os dados de glifos do buffer e renderizar. Depois de terminar com tudo o que você tem que desinacionar.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woff e .woff2 Hamza é licenciado sob LGPLV3.