ttf-parser 0.5 - یک کتابخانه جدید برای کار با فونت های TrueType

تجزیه کننده ttf یک کتابخانه برای تجزیه فونت های TrueType/OpenType است.
نسخه جدید از فونت های متغیر پشتیبانی کامل دارد
(فونت های متغیر) و C API، در نتیجه تصمیم گرفتم آن را در لور تبلیغ کنم.

تا همین اواخر، اگر نیاز به کار با فونت های TrueType بود، دقیقا دو گزینه وجود داشت: FreeType و stb_truetype. اولی یک ترکیب بزرگ است، دومی تعداد نسبتا کمی از توابع را پشتیبانی می کند.

ttf-parser جایی در وسط است. از تمام جداول TrueType یکسان (فرمت TrueType شامل بسیاری از جداول باینری جداگانه) به عنوان FreeType پشتیبانی می‌کند، اما خود حروف‌ها را رسم نمی‌کند.

در عین حال، ttf-parser دارای بسیاری از تفاوت های مهم دیگر است:

  1. ttf-parser در Rust بدون استفاده از ناامن نوشته شده است. FreeType و stb_truetype به زبان C نوشته شده اند.
  2. ttf-parser تنها پیاده سازی ایمن برای حافظه است. خواندن حافظه تصادفی امکان پذیر نیست. آسیب پذیری ها به طور مداوم در FreeType رفع می شوند و stb_truetype در اصل برای خواندن فونت های دلخواه طراحی نشده است.
  3. ttf-parser تنها پیاده سازی ایمن برای رشته است. همه روش های تجزیه ثابت هستند. تنها استثنا، تنظیم مختصات برای فونت های متغیر است، اما این تابع مجددا وارد می شود. FreeType اساساً تک رشته ای است. stb_truetype - reentrant (شما می توانید از نسخه های جداگانه در رشته های مختلف استفاده کنید، اما نه یکی از بسیاری از آنها).
  4. ttf-parser تنها پیاده سازی است که از تخصیص هیپ استفاده نمی کند. این به شما امکان می دهد تا تجزیه را تسریع کنید و از مشکلات با OOM جلوگیری کنید.
  5. همچنین تقریباً تمام عملیات حسابی و تبدیل انواع عددی (از جمله به صورت استاتیک) بررسی می شود.
  6. در بدترین حالت، کتابخانه ممکن است یک استثنا ایجاد کند. در این حالت، در C API، استثناها گرفته می‌شوند و تابع یک خطا برمی‌گرداند، اما خراب نمی‌شود.

و با وجود تمام ضمانت‌های امنیتی، ttf-parser سریع‌ترین پیاده‌سازی است. به عنوان مثال، تجزیه CFF2 3.5 برابر سریعتر از FreeType است. در همین حال، تجزیه glyf 10٪ کندتر از stb_truetype است، اما این به دلیل این واقعیت است که از فونت های متغیر پشتیبانی نمی کند، که اجرای آن نیاز به ذخیره سازی اضافی دارد. اطلاعات جزئیات بیشتر در README.

منبع: linux.org.ru

اضافه کردن نظر