Hamza es una biblioteca de conformación y renderizado solo de encabezado, rápida y portátil C99 C99. Está diseñado para ser un shaper pequeño, portátil y optimizado que es fácil de integrar en cualquier proyecto existente. A continuación se muestra una imagen de una breve cadena de árabe con esta biblioteca utilizando una fuente bastante compleja, se asignan colores aleatorios a cada glifo. 
Hamza incluye los programas de un solo archivo update_ucd_ftp y generate_ucd_headers . El primero extrae los archivos UCD necesarios del servidor FTP en ftp.unicode.org y requiere curl. El segundo genera encabezados C optimizados a partir de esos archivos UCD. Ambos programas utilizan la biblioteca POSIX Regex para filtrar y análisis.
Descargue el UCD TXT, esto podría tomar unos minutos, así que solo lo haga si los encabezados de UCD están desactualizados:
./build/update_ucd_ftpGenere los archivos de encabezado para las versiones de UCD:
./build/generate_ucd_headers Para comenzar a usar Hamza, defina HZ_IMPLEMENTATION antes de incluir hz.h Opcionalmente puede definir HZ_NO_STDLIB . También es necesario incluir el encabezado para el UCD para la versión que necesita. Más adelante explicaremos cómo se generan estos y cómo puede actualizarlos usted mismo.
#define HZ_IMPLEMENTATION
#include <hz/hz_ucd_15_0_0.h>
#include <hz/hz.h> Para inicializar la biblioteca, primero llene un hz_config_t struct y llame hz_init :
hz_config_t cfg = {
};
if ( hz_init ( & cfg ) != HZ_OK ) {
fprintf ( stderr , "%sn" , "Failed to initialize Hamza!" );
return -1 ;
} A continuación, antes de que pueda dar forma a cualquier texto, debe proporcionar datos de fuentes. Desea cargar una fuente en una estructura stbtt_fontinfo . Hamza incluye stb_truetype.h que está destinado a usarse en fuentes de lectura. Para crear un hz_font_t desde una fuente STBTT, escriba:
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Hamza tiene como objetivo permitir que el usuario administre la asignación de memoria y los datos tanto como sea posible. Antes de dar forma a los datos de fuente, se deben analizar en una estructura hz_font_data_t . Esto contiene todos los datos de la tabla OpenType requeridos para configurar con una fuente específica. La función hz_font_data_init toma como argumento cuánta memoria se asignará para mantener los datos de esa fuente:
hz_font_data_t font_data ;
hz_font_data_init ( & font_data , 1024 * 1024 ); // 1MiB
hz_font_data_load ( & font_data , font );Crea un Shaper e inicializa:
hz_shaper_t shaper ;
hz_shaper_init ( & shaper );Establezca los parámetros requeridos del 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 );Establezca las características de tipografía de 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 ]));¡Crea búfer y forma de glifo!
hz_buffer_t buffer ;
hz_buffer_init ( & buffer );
hz_shape_sz1 ( & shaper , & font_data , HZ_ENCODING_UTF8 , "السلام عليكم" , & buffer );Después de esto, puede acceder a los datos del glifo del búfer y renderizar. Después de haber terminado con todo lo que tienes que desinitializar.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woff Y .woff2 FORMATOS Hamza tiene licencia bajo LGPLV3.