pengurai ttf adalah perpustakaan untuk mengurai font TrueType/OpenType.
Versi baru memiliki dukungan penuh untuk font variabel
(font variabel) dan C API, sebagai hasilnya saya memutuskan untuk mengiklankannya di pengetahuan.
Sampai saat ini, jika ada kebutuhan untuk bekerja dengan font TrueType, ada dua opsi: FreeType dan stb_truetype. Yang pertama adalah kombinasi yang sangat besar, yang kedua mendukung sejumlah kecil fungsi.
ttf-parser ada di tengah-tengah. Ini mendukung semua tabel TrueType yang sama (format TrueType terdiri dari banyak tabel biner terpisah) seperti FreeType, tetapi tidak menggambar mesin terbang itu sendiri.
Pada saat yang sama, ttf-parser mengandung banyak perbedaan signifikan lainnya:
- ttf-parser ditulis dalam Rust tanpa menggunakan tidak aman. FreeType dan stb_truetype ditulis dalam C.
- ttf-parser adalah satu-satunya implementasi yang aman untuk memori. Membaca memori acak tidak dimungkinkan. Kerentanan terus diperbaiki di FreeType, dan stb_truetype, pada prinsipnya, tidak dirancang untuk membaca font sembarangan.
- ttf-parser adalah satu-satunya implementasi thread-safe. Semua metode penguraian bersifat konstan. Satu-satunya pengecualian adalah pengaturan koordinat untuk font variabel, tetapi fungsi ini masuk kembali. FreeType pada dasarnya adalah single-threaded. stb_truetype - masuk kembali (Anda dapat menggunakan salinan individual di thread yang berbeda, tetapi tidak satu dari banyak).
- ttf-parser adalah satu-satunya implementasi yang tidak menggunakan alokasi heap. Ini memungkinkan Anda mempercepat penguraian dan menghindari masalah dengan OOM.
- Selain itu, hampir semua operasi aritmatika dan konversi tipe numerik diperiksa (termasuk secara statis).
- Dalam kasus terburuk, perpustakaan mungkin mengeluarkan pengecualian. Dalam hal ini, di C API, pengecualian akan ditangkap dan fungsi akan mengembalikan kesalahan, tetapi tidak akan mogok.
Dan terlepas dari semua jaminan keamanannya, ttf-parser juga merupakan implementasi tercepat. Misalnya, parsing CFF2 3.5 kali lebih cepat dibandingkan FreeType. Sementara itu, penguraian glyf 10% lebih lambat dibandingkan di stb_truetype, tetapi hal ini disebabkan oleh fakta bahwa ia tidak mendukung font variabel, yang implementasinya memerlukan penyimpanan tambahan. informasi. Lebih detailnya di README.
Sumber: linux.org.ru