Hamza عبارة عن مكتبة C99 Unicode/Opentype FASTERS فقط ، سريعة ومحمولة. تم تصميمه ليكون مشكلًا صغيرًا ومحمولًا ومحسّنًا يسهل دمجه في أي مشروع موجود. فيما يلي صورة لسلسلة قصيرة من العربية على شكل هذه المكتبة باستخدام خط معقد إلى حد ما ، يتم تعيين ألوان عشوائية لكل رسول. 
يشتمل Hamza على برامج الملف الواحد update_ucd_ftp و generate_ucd_headers . يقوم الأول بسحب ملفات UCD اللازمة من خادم FTP على ftp.unicode.org ويتطلب حليقة. والثاني يولد رؤوس C المحسنة من ملفات UCD هذه. يستفيد كلا البرنامجين من مكتبة Posix Regex للتصفية والتحليل.
قم بتنزيل txt UCD ، قد يستغرق هذا بضع دقائق ، لذا لا تفعل إلا إذا كانت رؤوس UCD قديمة:
./build/update_ucd_ftpقم بإنشاء ملفات الرأس لإصدارات UCD:
./build/generate_ucd_headers للبدء في استخدام حمزة ، حدد HZ_IMPLEMENTATION قبل تضمين hz.h يمكنك اختياريا تحديد HZ_NO_STDLIB ل. من الضروري أيضًا تضمين رأس UCD للإصدار الذي تحتاجه. سنشرح لاحقًا كيف يتم توليدها وكيف يمكنك تحديثها بنفسك.
#define HZ_IMPLEMENTATION
#include <hz/hz_ucd_15_0_0.h>
#include <hz/hz.h> لتهيئة المكتبة أولاً املأ بنية hz_config_t واتصل 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 الذي يهدف إلى استخدامه في قراءة الخطوط. لإنشاء hz_font_t من خط STBTT ، اكتب:
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 ]));إنشاء المخزن المؤقت Glyph والشكل!
hz_buffer_t buffer ;
hz_buffer_init ( & buffer );
hz_shape_sz1 ( & shaper , & font_data , HZ_ENCODING_UTF8 , "السلام عليكم" , & buffer );بعد ذلك ، يمكنك الوصول إلى بيانات Glyph العازلة وتقديمها. بعد الانتهاء من كل ما لديك لإلغاء تحديده.
hz_buffer_release ( & buffer );
hz_font_data_release ( & font_data );
hz_font_destroy ( font );
hz_deinit ();.woff2 .aat .woff حمزة مرخصة بموجب LGPLV3.