ttf-parser 0.5 - perpustakaan baru untuk bekerja dengan font TrueType

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:

  1. ttf-parser ditulis dalam Rust tanpa menggunakan tidak aman. FreeType dan stb_truetype ditulis dalam C.
  2. 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.
  3. 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).
  4. ttf-parser adalah satu-satunya implementasi yang tidak menggunakan alokasi heap. Ini memungkinkan Anda mempercepat penguraian dan menghindari masalah dengan OOM.
  5. Selain itu, hampir semua operasi aritmatika dan konversi tipe numerik diperiksa (termasuk secara statis).
  6. 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

Tambah komentar