Hamza는 헤더 전용, 빠르고 휴대용 C99 Unicode/Opentype 형성 및 렌더링 라이브러리입니다. 기존 프로젝트에 쉽게 통합 할 수있는 작고 휴대용이며 최적화 된 셰이퍼로 설계되었습니다. 아래는 상당히 복잡한 글꼴을 사용 하여이 라이브러리로 형성된 짧은 아랍어 모양의 이미지입니다. 각 글리프에 임의의 색상이 할당됩니다. 
Hamza에는 단일 파일 프로그램 update_ucd_ftp 및 generate_ucd_headers 포함되어 있습니다. 첫 번째는 FTP 서버에서 FTP.unicode.org에서 필요한 UCD 파일을 가져오고 컬이 필요합니다. 두 번째는 해당 UCD 파일에서 최적화 된 C 헤더를 생성합니다. 이 두 프로그램 모두 필터링 및 구문 분석을 위해 Posix Regex 라이브러리를 사용합니다.
UCD TXT를 다운로드하면 몇 분이 걸릴 수 있으므로 UCD 헤더가 오래된 경우에만 수행하십시오.
./build/update_ucd_ftpUCD 버전의 헤더 파일을 생성하십시오.
./build/generate_ucd_headers hamza 사용을 시작하려면 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 ;
} 다음으로 텍스트를 만들기 전에 글꼴 데이터를 제공해야합니다. 글꼴을 stbtt_fontinfo 구조물에로드하려고합니다. Hamza에는 글꼴을 읽는 데 사용되는 stb_truetype.h 포함되어 있습니다. STBTT 글꼴에서 hz_font_t 만들려면 다음을 작성하십시오.
hz_font_t * font = hz_stbtt_font_create ( & fontinfo ); Hamza는 사용자가 메모리 할당과 데이터를 가능한 한 많이 관리 할 수 있도록 목표로합니다. 형성하기 전에 글꼴 데이터를 hz_font_data_t 구조로 구문 분석해야합니다. 이것은 특정 글꼴로 형성하는 데 필요한 모든 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 );그런 다음 버퍼의 글리프 데이터에 액세스하고 렌더링 할 수 있습니다. 당신이 모든 것을 끝내고 나면, 당신은 신청해야합니다.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.aat .woff 및 .woff2 형식을 엽니 다 Hamza는 LGPLV3에 따라 라이센스가 부여됩니다.