ttf-parser TrueType/OpenType shriftlarini tahlil qilish uchun kutubxonadir.
Yangi versiya o'zgaruvchan shriftlarni to'liq qo'llab-quvvatlaydi
(o'zgaruvchan shriftlar) va C API, buning natijasida men uni ilm-fanda reklama qilishga qaror qildim.
Yaqin vaqtgacha, agar TrueType shriftlari bilan ishlash zarurati tug'ilsa, aniq ikkita variant mavjud edi: FreeType va stb_truetype. Birinchisi - ulkan kombayn, ikkinchisi juda kam sonli funktsiyalarni qo'llab-quvvatlaydi.
ttf-parser o'rtada joylashgan. U FreeType kabi bir xil TrueType jadvallarini (TrueType formati ko'plab alohida ikkilik jadvallardan iborat) qo'llab-quvvatlaydi, lekin gliflarning o'zini chizmaydi.
Shu bilan birga, ttf-parser boshqa ko'plab muhim farqlarni o'z ichiga oladi:
- ttf-parser xavfsiz bo'lmagan holda Rustda yozilgan. FreeType va stb_truetype C tilida yozilgan.
- ttf-parser - bu xotira uchun xavfsiz yagona dastur. Tasodifiy xotirani o'qish mumkin emas. FreeType-da zaifliklar doimiy ravishda tuzatiladi va stb_truetype, qoida tariqasida, ixtiyoriy shriftlarni o'qish uchun mo'ljallanmagan.
- ttf-parser - bu yagona xavfsiz dastur. Barcha tahlil usullari doimiydir. Istisno faqat o'zgaruvchan shriftlar uchun koordinatalarni o'rnatishdir, ammo bu funktsiya qayta kiritiladi. FreeType asosan bitta ipli. stb_truetype - reentrant (siz turli mavzularda alohida nusxalardan foydalanishingiz mumkin, lekin ko'p nusxalardan biri emas).
- ttf-parser - bu yig'ma taqsimotlardan foydalanmaydigan yagona dastur. Bu sizga tahlilni tezlashtirish va OOM bilan bog'liq muammolardan qochish imkonini beradi.
- Shuningdek, deyarli barcha arifmetik amallar va sonli turdagi konvertatsiyalar (shu jumladan statik) tekshiriladi.
- Eng yomon holatda, kutubxona istisno qilishi mumkin. Bunday holda, C API-da istisnolar ushlanib qoladi va funksiya xatolikni qaytaradi, lekin buzilmaydi.
Va barcha xavfsizlik kafolatlariga qaramay, ttf-parser ham eng tezkor dastur hisoblanadi. Masalan, CFF2-ni tahlil qilish FreeType-dan 3.5 baravar tezroq. Shu bilan birga, glyfni tahlil qilish stb_truetype-ga qaraganda 10% sekinroq, ammo bu o'zgaruvchan shriftlarni qo'llab-quvvatlamasligi bilan bog'liq, ularni amalga oshirish qo'shimcha saqlashni talab qiladi. ma `lumot. Batafsil ma'lumot README.
Manba: linux.org.ru