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 واحد تھریڈ سیف نفاذ ہے۔ تجزیہ کرنے کے تمام طریقے مستقل ہیں۔ واحد استثنا متغیر فونٹس کے لیے کوآرڈینیٹ ترتیب دینا ہے، لیکن یہ فنکشن دوبارہ داخل ہے۔ فری ٹائپ بنیادی طور پر سنگل تھریڈڈ ہے۔ stb_truetype - دوبارہ داخل کرنے والا (آپ مختلف دھاگوں میں انفرادی کاپیاں استعمال کر سکتے ہیں، لیکن بہت سے میں سے ایک نہیں)۔
  4. ttf-parser واحد نفاذ ہے جو ہیپ ایلوکیشن کا استعمال نہیں کرتا ہے۔ یہ آپ کو تجزیہ کو تیز کرنے اور OOM کے ساتھ مسائل سے بچنے کی اجازت دیتا ہے۔
  5. نیز، تقریباً تمام ریاضی کی کارروائیوں اور عددی اقسام کے تبادلوں کو چیک کیا جاتا ہے (بشمول جامد طور پر)۔
  6. بدترین صورت میں، لائبریری ایک استثناء پھینک سکتی ہے۔ اس صورت میں، C API میں، مستثنیات پکڑے جائیں گے اور فنکشن ایک خرابی لوٹائے گا، لیکن کریش نہیں ہوگا۔

اور تمام حفاظتی ضمانتوں کے باوجود، ttf-parser بھی تیز ترین نفاذ ہے۔ مثال کے طور پر، CFF2 کو پارس کرنا FreeType سے 3.5 گنا تیز ہے۔ اس دوران، glyf کو پارس کرنا stb_truetype کے مقابلے میں 10% سست ہے، لیکن یہ اس حقیقت کی وجہ سے ہے کہ یہ متغیر فونٹس کو سپورٹ نہیں کرتا، جس کے نفاذ کے لیے اضافی ذخیرہ کرنے کی ضرورت ہے۔ معلومات. مزید تفصیلات میں پڑھیں.

ماخذ: linux.org.ru

نیا تبصرہ شامل کریں