ttf-parser TrueType/OpenType şriftlərinin təhlili üçün kitabxanadır.
Yeni versiyada dəyişən şriftlər üçün tam dəstək var
(dəyişən şriftlər) və C API, bunun nəticəsində mən onu irfanda reklam etmək qərarına gəldim.
Son vaxtlara qədər TrueType şriftləri ilə işləməyə ehtiyac var idisə, tam olaraq iki seçim var idi: FreeType və stb_truetype. Birincisi nəhəng bir kombindir, ikincisi kifayət qədər az sayda funksiyanı dəstəkləyir.
ttf-parser ortada bir yerdədir. O, FreeType kimi eyni TrueType cədvəllərini (TrueType formatı bir çox ayrı ikili cədvəllərdən ibarətdir) dəstəkləyir, lakin qliflərin özlərini çəkmir.
Eyni zamanda, ttf-parser bir çox digər əhəmiyyətli fərqləri ehtiva edir:
- ttf-parser təhlükəli istifadə etmədən Rustda yazılmışdır. FreeType və stb_truetype C dilində yazılmışdır.
- ttf-parser yaddaş üçün təhlükəsiz olan yeganə proqramdır. Təsadüfi yaddaşı oxumaq mümkün deyil. FreeType-də zəifliklər daim düzəldilir və stb_truetype, prinsipcə, ixtiyari şriftləri oxumaq üçün nəzərdə tutulmayıb.
- ttf-parser yalnız mövzu üçün təhlükəsiz tətbiqdir. Bütün təhlil üsulları sabitdir. Yeganə istisna dəyişən şriftlər üçün koordinatların təyin edilməsidir, lakin bu funksiya yenidən daxil olur. FreeType əsasən tək yivlidir. stb_truetype - reentrant (müxtəlif mövzularda fərdi nüsxələrdən istifadə edə bilərsiniz, lakin çoxlarından birini deyil).
- ttf-parser, yığın ayırmalarından istifadə etməyən yeganə tətbiqdir. Bu, təhlili sürətləndirməyə və OOM ilə bağlı problemlərin qarşısını almağa imkan verir.
- Həmçinin, demək olar ki, bütün arifmetik əməliyyatlar və ədədi tiplərin çevrilməsi yoxlanılır (statik də daxil olmaqla).
- Ən pis halda, kitabxana bir istisna ata bilər. Bu halda, C API-də istisnalar tutulacaq və funksiya xəta qaytaracaq, lakin qəzaya uğramayacaq.
Bütün təhlükəsizlik zəmanətlərinə baxmayaraq, ttf-parser həm də ən sürətli tətbiqdir. Məsələn, CFF2-nin təhlili FreeType-dan 3.5 dəfə daha sürətlidir. Bu arada glyf təhlili stb_truetype ilə müqayisədə 10% daha yavaşdır, lakin bu, onun həyata keçirilməsi əlavə saxlama tələb edən dəyişən şriftləri dəstəkləməməsi ilə əlaqədardır. məlumat. Ətraflı təfərrüatlarda README.
Mənbə: linux.org.ru