ما هو ملف CFF2؟
تنسيق ملف CFF2 هو الإصدار 2.0 من تنسيق ملف CFF ويسمح بالتخزين الفعال لمخططات الحروف الرسومية والبيانات الوصفية المشابهة لتنسيق ملف CFF. يختلف CFF2 عن CFF من حيث الغرض منه استخدامه في سياق خط OpenType كجدول ‘sfnt’ مع العلامة CFF2. لا يمكن استخدامه كبرنامج مستقل ويعتمد على البيانات الموجودة في جداول OpenType الأخرى.
تنسيق ملف CFF2
تحتوي مواصفات تنسيق ملف CFF2 على تفاصيل حول تخطيط البيانات الداخلية وأنواع البيانات والجداول والمعلومات الداخلية الأخرى حول تنسيق الملف. يمكن الرجوع إليها كمرجع للمطور. فيما يلي بعض التفاصيل حول هذه.
تخطيط البيانات
يتم تنظيم البيانات الثنائية الخاصة بتنسيق ملف CFF2 بشكل منطقي كعدد من هياكل البيانات المنفصلة. التخطيط داخل البيانات الثنائية كما هو موضح في الجدول التالي.
الإدخال | التعليقات |
---|---|
رأس | موقع ثابت |
أعلى DICT | موقع ثابت |
مؤشر Subr العالمي | موقع ثابت |
تغيير | متجر |
FDSelect | التقديم فقط في حالة وجود أكثر من DICT للخط في Font DICT INDEX. |
الخط DICT INDEX | |
صفيف DICT الخط | مضمن في Font DICT INDEX. |
DICT خاص | واحد لكل خط DICT. |
تعتمد الهياكل الثلاثة الأولى فقط على مواقع ثابتة. يتم الوصول إلى المتبقي عن طريق التعويضات ، ويمكن تغيير ترتيبها.
أنواع البيانات
يستخدم تنسيق ملف CFF2 أنواع البيانات التالية.
الاسم | النطاق | الوصف |
---|---|---|
uint8 | 0 إلى 255 | رقم 8 بت بدون إشارة |
uint16 | 0 إلى 65535 | رقم 16 بت غير موقع |
uint32 | 0 إلى 4294967295 | رقم غير موقع 32 بت |
الإزاحة | يختلف | إزاحة 1 أو 2 أو 3 أو 4 بايت (محددة بواسطة حقل OffSize في جدول فهرس) |
تغيير الحجم | 1 إلى 4 | رقم 1 بايت غير موقع يحدد حجم حقل الإزاحة أو الحقول |
يخزن جميع البيانات الرقمية متعددة البايت وحقول الإزاحة بترتيب بايت كبير. تنسيق CFF2 خالي من حشو البايت لأنه لا يحترم أي قيود محاذاة.
بيانات DICT
تحتوي ملفات CFF2 على بيانات قاموس الخطوط كأزواج مفتاح-قيمة بتنسيق رمزي مضغوط. يتم ترميز مفاتيح القاموس كمعامِلات 1 أو 2 بايت ويتم ترميز قيم القاموس كمعامِلات رقمية متغيرة الحجم. هناك ثلاثة هياكل تستخدم تنسيق بيانات DICT: “Top DICT” و “Font DICT” و “Private DICT”. يتم تحديد عدد من أنواع المعامل الصحيح بأحجام مختلفة ويتم ترميزها كما هو موضح في الجدول التالي (البايت الأول من المعامل هو b0 ، والثاني هو b1 ، وهكذا).
الحجم | نطاق b0 | نطاق القيمة | حساب القيمة |
---|---|---|---|
1 | 32 إلى 246 | -107 إلى +107 | b0 - 139 |
2 | 247 إلى 250 | +108 إلى +1131 | (b0 - 247) * 256 + b1 + 108 |
2 | 251 إلى 254 | -1131 إلى -108 | - (ب0 - 251) * 256 - ب 1 - 108 |
3 | 28 | -32768 إلى +32767 | ب 1 « 8 |
5 | 29 | - (2 ^ 31) إلى + (2 ^ 31-1) | ب 1 « 24 \ |
العنوان
تبدأ البيانات الثنائية برأس له التنسيق الموضح في الجدول أدناه.
النوع | الاسم | الوصف |
---|---|---|
uint8 | الإصدار الرئيسي | تنسيق الإصدار الرئيسي. قم بالتعيين إلى 2. |
uint8 | الإصدار | تنسيق نسخة ثانوية. تعيين إلى الصفر. |
uint8 | headerSize | حجم الرأس (بايت) |
uint16 | topDictLength | طول بنية أعلى DICT بالبايت. |