ttf-parser — este o bibliotecă pentru analiza fonturilor TrueType/OpenType.
Noua versiune include suport complet pentru fonturi variabile.
(fonturi variabile) și API C, motiv pentru care am decis să o promovez pe lor.
Până de curând, dacă era necesară lucrul cu fonturi TrueType, existau exact două opțiuni: FreeType și stb_truetype. Prima este un motor imens, iar a doua suportă un număr destul de limitat de funcții.
ttf-parser se află undeva la mijloc. Suportă toate aceleași tabele TrueType (formatul TrueType este compus din numeroase tabele binare separate) ca și FreeType, dar nu se ocupă cu redarea glyph-urilor.
În plus, ttf-parser conține multe alte diferențe semnificative:
- ttf-parser este scris în Rust, fără a folosi unsafe. FreeType și stb_truetype sunt scrise în C.
- ttf-parser este singura implementare sigură (memory-safe). Citirea memoriei arbitrare este imposibilă. FreeType corectează constant vulnerabilitățile, iar stb_truetype nu este destinat citirii fonturilor arbitrare.
- ttf-parser este singura implementare thread-safe. Toate metodele de analiză sunt constante. Singura excepție este stabilirea coordonatelor pentru fonturile variabile, dar această funcție este reentrantă. FreeType este de fapt single-threaded. stb_truetype — reentrant (poate folosi copii separate în fire diferite, dar nu una din mai multe).
- ttf-parser este singura implementare care nu utilizează alocarea în „heap”. Aceasta permite accelerarea analizei și evitarea problemelor în caz de OOM.
- De asemenea, aproape toate operațiile aritmetice și conversiile tipurilor numerice sunt verificate (inclusiv static).
- În cel mai rău caz, biblioteca poate arunca o excepție. În API C, excepțiile vor fi interceptate, iar funcția va returna o eroare, dar nu va cădea.
Și în ciuda tuturor garanțiilor de siguranță, ttf-parser este, de asemenea, cea mai rapidă implementare. De exemplu, analiza CFF2 este de 3.5 ori mai rapidă decât în FreeType. Analiza glyf este cu 10% mai lentă decât în stb_truetype, dar aceasta se datorează faptului că nu suportă fonturi variabile, pentru implementarea cărora este necesară stocarea unor informații suplimentare. Mai multe detalii în README.
Sursa: linux.org.ru
