محلل خطوط عالي المستوى وآمن وبدون تخصيص لـ TrueType وOpenType وAAT.
يمكن استخدامها كمكتبة Rust أو C.
no_std
/WASM.من الصعب جدًا مقارنة المكتبات المختلفة، لذلك نستخدم المقارنة القائمة على الجدول. هناك ثلاثة أنواع تقريبًا من جداول TrueType:
head
و OS/2
وما إلى ذلك).glyf
، CFF
(kinda)، hmtx
، وما إلى ذلك).cmap
، kern
، GPOS
، إلخ).الميزة/المكتبة | ttf-محلل | نوع مجاني | stb_truetype |
---|---|---|---|
الذاكرة آمنة | ✓ | ||
موضوع آمن | ✓ | ~ (في الغالب إعادة الدخول) | |
التخصيص صفر | ✓ | ||
الخطوط المتغيرة | ✓ | ✓ | |
التقديم | - 1 | ✓ | ~ (بدائية جداً) |
طاولة ankr | ✓ | ||
جدول avar | ✓ | ✓ | |
جدول bdat | ~ (رقم 4) | ✓ | |
جدول bloc | ✓ | ✓ | |
جدول CBDT | ~ (رقم 8، 9) | ✓ | |
جدول CBLC | ✓ | ✓ | |
جدول COLR | ✓ | ✓ | |
جدول CPAL | ✓ | ✓ | |
جدول CFF | ✓ | ✓ | ~ (لا يوجد دعم seac ) |
جدول CFF2 | ✓ | ✓ | |
جدول cmap | ~ (رقم 8) | ✓ | ~ (رقم 2،8،10،14؛ Unicode فقط) |
جدول EBDT | ~ (رقم 8، 9) | ✓ | |
جدول EBLC | ✓ | ✓ | |
جدول feat | ✓ | ||
جدول fvar | ✓ | ✓ | |
طاولة gasp | ✓ | ||
جدول GDEF | ~ | ||
جدول glyf | ~ 2 | ✓ | ~ 2 |
جدول GPOS | ✓ | ~ (2 فقط) | |
جدول GSUB | ✓ | ||
جدول gvar | ✓ | ✓ | |
طاولة head | ✓ | ✓ | ✓ |
جدول hhea | ✓ | ✓ | ✓ |
جدول hmtx | ✓ | ✓ | ✓ |
جدول HVAR | ✓ | ✓ | |
جدول kern | ✓ | ~ (0 فقط) | ~ (0 فقط) |
جدول kerx | ✓ | ||
جدول MATH | ✓ | ||
جدول maxp | ✓ | ✓ | ✓ |
طاولة morx | ✓ | ||
جدول MVAR | ✓ | ✓ | |
جدول name | ✓ | ✓ | |
جدول OS/2 | ✓ | ✓ | |
جدول post | ✓ | ✓ | |
جدول sbix | ~ (بصيغة PNG فقط) | ~ (بصيغة PNG فقط) | |
جدول STAT | ✓ | ||
جدول SVG | ✓ | ✓ | ✓ |
طاولة trak | ✓ | ||
جدول vhea | ✓ | ✓ | |
جدول vmtx | ✓ | ✓ | |
طاولة VORG | ✓ | ✓ | |
جدول VVAR | ✓ | ✓ | |
لغة | الصدأ + C API | ج | ج |
النسخة المختبرة | 0.17.0 | 2.12.0 | 1.24 |
رخصة | معهد ماساتشوستس للتكنولوجيا/أباتشي-2.0 | FTL/GPLv2 | المجال العام |
أسطورة:
ملحوظات:
ttf-parser
لا يدعم العرض بمفرده، إلا أن هناك مكتبات عرض متعددة فوقه: Rusttype، وab-glyph، وfontdue.تم تصميم خطوط TrueType للاستعلام السريع، لذا فإن معظم الطرق سريعة جدًا. الاستثناء الرئيسي هو الخطوط العريضة للصورة الرمزية. يمكن تخزين الحروف الرسومية باستخدام طريقتين مختلفتين: استخدام تنسيق بيانات الحروف الرسومية وتنسيق الخط المضغوط (pdf). الأول بسيط إلى حد ما مما يجعله أسرع في المعالجة. أما الثانية فهي في الأساس لغة صغيرة تحتوي على جهاز افتراضي قائم على المكدس، مما يجعل معالجتها أكثر صعوبة.
يختبر المعيار المدة التي يستغرقها تحديد كافة الحروف الرسومية في الخط.
x86 (أيه إم دي 3700X)
الجدول / المكتبة | ttf-محلل | نوع مجاني | stb_truetype |
---|---|---|---|
glyf | 0.901 ms | 1.171 ms | 0.675 ms |
gvar | 2.972 ms | 4.132 ms | - |
CFF | 1.197 ms | 5.647 ms | 2.813 ms |
CFF2 | 1.968 ms | 6.392 ms | - |
أرم (أبل M1)
الجدول / المكتبة | ttf-محلل | نوع مجاني | stb_truetype |
---|---|---|---|
glyf | 0.550 ms | 0.854 ms | 0.703 ms |
gvar | 2.270 ms | 4.594 ms | - |
CFF | 1.054 ms | 5.223 ms | 3.262 ms |
CFF2 | 1.765 ms | 5.995 ms | - |
ملحوظة: FreeType بطيء بشكل مدهش، لذا أشعر بالقلق من أنني قد أفسدت شيئًا ما.
وإليك بعض معايير الأساليب:
test outline_glyph_276_from_cff2 ... bench: 867 ns/iter (+/- 15)
test from_data_otf_cff ... bench: 968 ns/iter (+/- 13)
test from_data_otf_cff2 ... bench: 887 ns/iter (+/- 25)
test outline_glyph_276_from_cff ... bench: 678 ns/iter (+/- 41)
test outline_glyph_276_from_glyf ... bench: 649 ns/iter (+/- 11)
test outline_glyph_8_from_cff2 ... bench: 534 ns/iter (+/- 14)
test from_data_ttf ... bench: 467 ns/iter (+/- 11)
test glyph_name_post_276 ... bench: 223 ns/iter (+/- 5)
test outline_glyph_8_from_cff ... bench: 315 ns/iter (+/- 13)
test outline_glyph_8_from_glyf ... bench: 291 ns/iter (+/- 5)
test family_name ... bench: 183 ns/iter (+/- 102)
test glyph_name_cff_276 ... bench: 62 ns/iter (+/- 1)
test glyph_index_u41 ... bench: 16 ns/iter (+/- 0)
test glyph_name_cff_8 ... bench: 5 ns/iter (+/- 0)
test glyph_name_post_8 ... bench: 2 ns/iter (+/- 0)
test subscript_metrics ... bench: 2 ns/iter (+/- 0)
test glyph_hor_advance ... bench: 2 ns/iter (+/- 0)
test glyph_hor_side_bearing ... bench: 2 ns/iter (+/- 0)
test glyph_name_8 ... bench: 1 ns/iter (+/- 0)
test ascender ... bench: 1 ns/iter (+/- 0)
test underline_metrics ... bench: 1 ns/iter (+/- 0)
test strikeout_metrics ... bench: 1 ns/iter (+/- 0)
test x_height ... bench: 1 ns/iter (+/- 0)
test units_per_em ... bench: 0.5 ns/iter (+/- 0)
test width ... bench: 0.2 ns/iter (+/- 0)
مرخص بموجب أي من
في خيارك.
ما لم تنص صراحةً على خلاف ذلك، فإن أي مساهمة يتم تقديمها عمدًا لتضمينها في العمل بواسطتك، كما هو محدد في ترخيص Apache-2.0، يجب أن تكون مرخصة بشكل مزدوج على النحو الوارد أعلاه، دون أي شروط أو أحكام إضافية.