opentype.js 1.3.5: نسخه جدید کتابخانه پردازش فونت
خلاصهٔ کاملتر
opentype.js یه کتابخانه متنباز جاوااسکریپته که به توسعهدهندهها اجازه میده مستقیماً با فایلهای فونت (TTF، OTF، WOFF و WOFF2) کار کنن؛ هم توی مرورگر و هم توی محیط Node.js. این کتابخانه با بیش از ۴.۹ هزار ستاره روی گیتهاب، یکی از محبوبترین ابزارها برای پردازش و رندر فونت در دنیای وبه.
نسخه ۱.۳.۵ که تازه منتشر شده، در واقع همون نسخه ۲.۰.۰ پریریلیزه که به اشتباه با این شماره روی npm آپلود شده. این نسخه حاصل کار تعداد زیادی از مشارکتکنندههای مختلفه و یه جهش بزرگ نسبت به نسخههای قبلیه.
یکی از مهمترین بخشهای این نسخه، پشتیبانی کامل از فونتهای متغیر (Variable Fonts) هست. جداول fvar، STAT، avar، GVAR، CVAR و HVAR حالا قابل خواندن و نوشتن هستن، و رندر واقعی فونتهای متغیر هم پیادهسازی شده. این یعنی میتونی یه فونت رو با محورهای مختلف مثل وزن یا عرض به صورت داینامیک رندر کنی.
در حوزه امنیت، چند آسیبپذیری مهم برطرف شده: یه باگ بازگشتی (recursion) در CFF subroutine که میتونست stack overflow ایجاد کنه رفع شده (CVE-2024-XXXXX)، جلوگیری از حلقه بینهایت در موتور TrueType hinting VM، و پیشگیری از stack overflow ناشی از ارجاعات دایرهای در composite glyph ها. اینها باگهایی بودن که با فونتهای دستکاریشده میتونستن برنامه رو از کار بیندازن.
پشتیبانی از COLRv0 و CPALv0 هم اضافه شده که امکان رندر گلیفهای رنگی رو فراهم میکنه. پشتیبانی از جدول SVG هم اضافه شده. فرمتهای مختلف cmap (فرمت ۱۳ و ۱۴) حالا پشتیبانی میشن، و بهینهسازی جدول cmap برای ادغام بخشهای پیوسته هم انجام شده.
پرفورمنس کلی کتابخانه هم بهتر شده؛ استفاده از حلقه for به جای forEach، جایگزینی concat با push برای آرایهها، و پیادهسازی کش برای تابع roundDecimal از جمله این بهینهسازیهاست. همچنین loadFromUrl حالا از محیط Node.js هم پشتیبانی میکنه.
یه سری باگهای قدیمی هم بالاخره رفع شدن؛ از جمله مشکل در انتخاب جدول cmap، پارس کردن اسامی در جدول fvar، مشکل hasChar برای فونتهای CMAP و مشکل در نوشتن name table برای فونتهایی که از صفر ساخته میشن.
نکات کلیدی:
- پشتیبانی کامل از Variable Fonts با جداول gvar، avar، cvar و hvar
- رفع چند آسیبپذیری امنیتی جدی از جمله stack overflow در CFF و TrueType hinting
- اضافه شدن پشتیبانی COLRv0/CPALv0 برای فونتهای رنگی
- پشتیبانی از WOFF2 در مرورگر و demo pages
- بهبود پرفورمنس با جایگزینی forEach با for و بهینهسازیهای دیگه
- این نسخه در واقع همان ۲.۰.۰ پریریلیز است که به اشتباه با شماره ۱.۳.۵ منتشر شده




