سعادت
تکنیکی معاون
پچھلے مہینے (مئی ۲۰۲۳ میں) منعقد ہونے والی ATypI 2023 کانفرنس میں ایک دلچسپ پینل گفتگو، OpenType 2.0، پیش کی گئی تھی۔ اس گفتگو میں اوپنٹائپ سٹینڈرڈ میں تبدیلیوں اور اضافوں کی مختلف تجاویز شامل تھیں، اور کچھ ڈیموز بھی دکھائے گئے تھے۔ ان تجاویز کا ایک اچھا خلاصہ اس مضمون میں موجود ہے، اور گفتگو کی سلائیڈز (از بهداد اسفهبد) بھی ملاحظہ کی جا سکتی ہیں۔
دو تجاویز ایسی ہیں جو عربی خط/اردو کے لیے دلچسپ ہیں، اور میں اِس لڑی میں انھی پر کچھ بات کرنا چاہوں گا…
ویریایبل فونٹس یا فونٹ ویریایشنز کے منظرِ عام پر آنے کے بعد مجھ سمیت کئی احباب متجسس تھے کہ کیا اِن کے ذریعے ویریایبل کشیدہ کی سہولت ممکن بنائی جا سکتی ہے (یعنی، کیا ایسا ممکن ہو سکے گا کہ سطروں کی جسٹِفیکیشن کے لیے کشیدہ خط یا کشیدہ اشکال کی لمبائی کو حسبِ ضرورت اور خودکار طور پر کم یا زیادہ کیا جا سکے)۔
سو اِس بارے میں ایک تجویز یہ پیش کی گئی ہے کہ فونٹ کے اندر ایک عدد jstf ویریایبل ایکسِس (axis) موجود ہو، جس میں جسٹِفیکیشن کی تمام ترجیحات درج ہوں، اور ٹائپسیٹنگ انجن سطر کو برابر کرتے ہوئے اُن ترجیحات میں سے موزوں سیٹنگ کا انتخاب کر لیا کرے۔
اِس کی ایک مثال درج ذیل تصویر میں ہے (گفتگو کی سلائیڈ ۳۷ سے لی گئی)، جس میں خالد حُسنی کے رقّ فونٹ کے jstf ایکسِس کو کام کرتے ہوئے دیکھا جا سکتا ہے:
ویریایبل جسٹِفیکیشن کی تجرباتی سپّورٹ حرفباز میں شامل ہے۔
”پیچیدہ“ خطوط پر مبنی فونٹس اکثر اوپنٹائپ کی حدود کو آزماتے رہتے ہیں۔ اگر اپنے نستعلیق ہی کی بات کی جائے تو اس کی درج ذیل باتیں اوپنٹائپ میں مسائل/بگز کا باعث بنتی ہیں:
ان سب مسائل کے حل کے لیے ایک تجویز یہ ہے (جو اس گفتگو میں پیش کی گئی) کہ فونٹ کے اندر ایک نیا ٹیبل متعارف کیا جائے، جس کے اندر ویباسمبلی (WebAssembly یا Wasm یا واسم ) میں شیپنگ کا کوڈ موجود ہو، جو runtime پر حساب لگائے کہ کہاں کہاں کس ایڈجسٹمنٹ کی ضرورت ہے (مثلاً نقطوں کو آگے پیچھے کرنا، یا کرننگ کو بہتر کرنا)، اور پھر اُس ایڈجسٹمنٹ کا اطلاق کرے۔ اس کی ایک مثال اس تصویر میں دیکھیے (جو گفتگو کی سلائیڈ ۵۳ سے لی گئی ہے):
اس تصویر میں:
یہاں ایک اور دلچسپ بات: اِس مثال میں موجود متن کو پہلے اوپنٹائپ شیپنگ سے گزارا گیا ہے، اور اُس کے نتیجے کی ویباسمبلی میں شیپنگ کی گئی ہے۔ یوں ویباسمبلی میں صرف وہی کام کیا گیا ہے جو اوپنٹائپ میں بوجھل یا ناممکن ہو۔ البتہ، اگر آپ اوپنٹائپ شیپنگ سے بالکل ہی غیرمطمئن ہوں، تو ایک کسٹم اور مکمل شیپنگ انجن کو بھی ویباسمبلی میں لکھ کر فونٹ میں ایمبیڈ کیا جا سکتا ہے! مثال کے طور پر، محفل پر گریفائٹ کے بارے میں کئی مقامات پر گفتگو ہوتی رہی ہے۔ ویباسمبلی شیپنگ کی بدولت گریفائٹ کا پورا انجن ہی فونٹ میں شامل کیا جا سکتا ہے (اور کِیا گیا بھی ہے!) یہی نہیں، بلکہ ڈیکوٹائپ کا ACE، اور ڈیجیٹل خط، اور دیگر کسٹم تراکیب وغیرہ بھی فونٹ کے Wasm ٹیبل میں سموئی جا سکتی ہیں۔ یوں اوپنٹائپ کے ڈھانچے میں رہتے ہوئے دیگر شیپنگ انجنز کا (جن میں نستعلیق، یا کسی بھی اور تحریری نظام، کی بہتر شیپنگ کی صلاحیت ہو) استعمال ممکن ہو سکتا ہے۔
ویباسمبلی شیپنگ کی سپّورٹ فی الحال صرف حرفباز میں شامل ہے، اور ابھی یہ تجرباتی ٹیکنالوجی ہی ہے۔ اوپنٹائپ سٹینڈرڈ اور دیگر شیپنگ انجنز (مائکروسوفٹ کا ڈائریکٹرائٹ، ایپل کا کورٹیکسٹ، وغیرہ) میں اس کی شمولیت ابھی کافی دور ہے۔ البتہ اگر آپ اس کے بارے میں مزید جاننا چاہیں تو درج ذیل روابط ملاحظہ کر سکتے ہیں:
دو تجاویز ایسی ہیں جو عربی خط/اردو کے لیے دلچسپ ہیں، اور میں اِس لڑی میں انھی پر کچھ بات کرنا چاہوں گا…
ویریایبل جسٹِفیکیشن
ویریایبل فونٹس یا فونٹ ویریایشنز کے منظرِ عام پر آنے کے بعد مجھ سمیت کئی احباب متجسس تھے کہ کیا اِن کے ذریعے ویریایبل کشیدہ کی سہولت ممکن بنائی جا سکتی ہے (یعنی، کیا ایسا ممکن ہو سکے گا کہ سطروں کی جسٹِفیکیشن کے لیے کشیدہ خط یا کشیدہ اشکال کی لمبائی کو حسبِ ضرورت اور خودکار طور پر کم یا زیادہ کیا جا سکے)۔
سو اِس بارے میں ایک تجویز یہ پیش کی گئی ہے کہ فونٹ کے اندر ایک عدد jstf ویریایبل ایکسِس (axis) موجود ہو، جس میں جسٹِفیکیشن کی تمام ترجیحات درج ہوں، اور ٹائپسیٹنگ انجن سطر کو برابر کرتے ہوئے اُن ترجیحات میں سے موزوں سیٹنگ کا انتخاب کر لیا کرے۔
اِس کی ایک مثال درج ذیل تصویر میں ہے (گفتگو کی سلائیڈ ۳۷ سے لی گئی)، جس میں خالد حُسنی کے رقّ فونٹ کے jstf ایکسِس کو کام کرتے ہوئے دیکھا جا سکتا ہے:
ویریایبل جسٹِفیکیشن کی تجرباتی سپّورٹ حرفباز میں شامل ہے۔
”سمارٹ“ فونٹس
”پیچیدہ“ خطوط پر مبنی فونٹس اکثر اوپنٹائپ کی حدود کو آزماتے رہتے ہیں۔ اگر اپنے نستعلیق ہی کی بات کی جائے تو اس کی درج ذیل باتیں اوپنٹائپ میں مسائل/بگز کا باعث بنتی ہیں:
- بڑی ے پر ختم ہونے والے سلسلے۔ بڑی ے کے نچلے سٹروک کی وجہ سے پچھلے حروف کے زیریں نقطوں کو اکثر ایڈجسٹ کرنا پڑتا ہے۔ اس کے علاوہ، بڑی ے پر ختم ہونے والے الفاظ/سلسلوں کی کرننگ بھی خود اس لفظ/سلسلے کی لمبائی پر منحصر ہوتی ہے۔
- نقطوں اور اعراب کی اپنے بنیادی گلف کے ساتھ پوزیشننگ، اور دیگر گلفس، نقطوں، یا اعراب کے ساتھ ان کا ٹکراؤ۔ نقطوں، اعراب، اور گلفس کے ٹکراؤ کی جانچ (collision detection) اور اس کی پیشبندی اوپنٹائپ کے کمزور ترین پہلوؤں میں شامل ہیں۔
- الفاظ (یا لیٹرگروپس) کی آپس میں کرننگ، جس کی غیرموجودگی میں سطر میں خالی جگہوں کا توازن بگڑ جاتا ہے۔
ان سب مسائل کے حل کے لیے ایک تجویز یہ ہے (جو اس گفتگو میں پیش کی گئی) کہ فونٹ کے اندر ایک نیا ٹیبل متعارف کیا جائے، جس کے اندر ویباسمبلی (WebAssembly یا Wasm یا واسم ) میں شیپنگ کا کوڈ موجود ہو، جو runtime پر حساب لگائے کہ کہاں کہاں کس ایڈجسٹمنٹ کی ضرورت ہے (مثلاً نقطوں کو آگے پیچھے کرنا، یا کرننگ کو بہتر کرنا)، اور پھر اُس ایڈجسٹمنٹ کا اطلاق کرے۔ اس کی ایک مثال اس تصویر میں دیکھیے (جو گفتگو کی سلائیڈ ۵۳ سے لی گئی ہے):
اس تصویر میں:
- بائیں ہاتھ پر اوپنٹائپ شیپنگ کا نتیجہ ہے، جس میں نکتوں کے ٹکراؤ وغیرہ کے لیے کچھ بھی نہیں کِیا گیا۔
- درمیان میں بھی اوپنٹائپ شیپنگ کا نتیجہ ہے، لیکن یہاں اوپنٹائپ کی حدود میں رہتے ہوئے نکتوں کو ایڈجسٹ کیا گیا ہے۔
- دائیں جانب ویباسمبلی میں کی جانے والی شیپنگ کا نتیجہ ہے۔ یہاں نہ صرف نکتوں کی ترتیب بلکہ ”جر“ اور ”پپل“ کے درمیان کرننگ بھی بہتر ہے۔
یہاں ایک اور دلچسپ بات: اِس مثال میں موجود متن کو پہلے اوپنٹائپ شیپنگ سے گزارا گیا ہے، اور اُس کے نتیجے کی ویباسمبلی میں شیپنگ کی گئی ہے۔ یوں ویباسمبلی میں صرف وہی کام کیا گیا ہے جو اوپنٹائپ میں بوجھل یا ناممکن ہو۔ البتہ، اگر آپ اوپنٹائپ شیپنگ سے بالکل ہی غیرمطمئن ہوں، تو ایک کسٹم اور مکمل شیپنگ انجن کو بھی ویباسمبلی میں لکھ کر فونٹ میں ایمبیڈ کیا جا سکتا ہے! مثال کے طور پر، محفل پر گریفائٹ کے بارے میں کئی مقامات پر گفتگو ہوتی رہی ہے۔ ویباسمبلی شیپنگ کی بدولت گریفائٹ کا پورا انجن ہی فونٹ میں شامل کیا جا سکتا ہے (اور کِیا گیا بھی ہے!) یہی نہیں، بلکہ ڈیکوٹائپ کا ACE، اور ڈیجیٹل خط، اور دیگر کسٹم تراکیب وغیرہ بھی فونٹ کے Wasm ٹیبل میں سموئی جا سکتی ہیں۔ یوں اوپنٹائپ کے ڈھانچے میں رہتے ہوئے دیگر شیپنگ انجنز کا (جن میں نستعلیق، یا کسی بھی اور تحریری نظام، کی بہتر شیپنگ کی صلاحیت ہو) استعمال ممکن ہو سکتا ہے۔
ویباسمبلی شیپنگ کی سپّورٹ فی الحال صرف حرفباز میں شامل ہے، اور ابھی یہ تجرباتی ٹیکنالوجی ہی ہے۔ اوپنٹائپ سٹینڈرڈ اور دیگر شیپنگ انجنز (مائکروسوفٹ کا ڈائریکٹرائٹ، ایپل کا کورٹیکسٹ، وغیرہ) میں اس کی شمولیت ابھی کافی دور ہے۔ البتہ اگر آپ اس کے بارے میں مزید جاننا چاہیں تو درج ذیل روابط ملاحظہ کر سکتے ہیں:
- گفتگو کی سلائیڈز (سلائیڈ ۴۳ اور آگے)
- گِٹہب پر سائمن کزنز کی ریپو، جس میں ویباسمبلی کو استعمال کرنے والے فونٹس (مع سورس کوڈ) موجود ہیں۔ یہ فونٹس عام ایپلیکیشنز میں تو کام نہیں کریں گے، لیکن ریپو میں FontGoggles نامی ایپلیکیشن کی ایک بِلڈ بھی شامل ہے جس کے ذریعے آپ ان فونٹس کے ساتھ کھیل سکتے ہیں (البتہ یہ ایپلیکیشن بھی صرف میکاوایس پر چلے گی۔ ) ریپو کی README فائل بھی پڑھنے کے لائق ہے۔
- حرفباز کی ڈاکیومینٹیشن میں ویباسمبلی شیپر کا صفحہ۔
آخری تدوین: