لیگیچر دو یا زیادہ حروف کا ایک ٹائپوگرافک نشان میں گرافک امتزاج ہے جو متن کی پڑھنے کی اہلیت اور خوبصورتی کو بہتر بناتا ہے۔ کلاسک مثالوں میں fi, fl, ff, ffi کے جوڑے شامل ہیں — جہاں حرف f کا ابھرا ہوا حصہ ملحقہ حرف میں ضم ہو جاتا ہے، بصری تصادم کو روکتا ہے۔ جدید موبائل اور ویب ڈیولپمنٹ میں، لیگیچرز کو OpenType فیچرز کے ذریعے فونٹ کی سطح پر کنٹرول کیا جاتا ہے اور یہ iOS، Android اور براؤزرز میں سپورٹ ہوتے ہیں۔ MDN Web Docs کے مطابق، CSS پراپرٹی font-variant-ligatures ڈیولپر کو مختلف اقسام کے لیگیچر کو فعال اور غیر فعال کرنے کی اجازت دیتی ہے: معیاری، صوابدیدی (آرائشی) اور سیاق و سباق کے لحاظ سے۔
اہم نکات
لیگیچر ایک ٹائپوگرافک تکنیک ہے جس میں دو یا زیادہ حروف کو ایک خاص طور پر ڈیزائن کردہ گلِف سے بدل دیا جاتا ہے۔ لیگیچر کا بنیادی مقصد ملحقہ حروف کے درمیان بصری تصادم کو ختم کرنا اور متن کے ادراک کو بہتر بنانا ہے۔ مثال کے طور پر، fi جوڑے میں، حرف f کا اوپری ابھار حرف i کے نقطے سے ٹکراتا ہے — لیگیچر انہیں ایک ہی خوبصورت علامت میں ملا دیتا ہے۔
لیگیچر لازمی (معیاری) اور اختیاری (آرائشی) میں تقسیم ہوتے ہیں۔ معیاری لیگیچر وہ جوڑے ہیں جو زیادہ تر فونٹس میں پائے جاتے ہیں: fi, fl, ff, ffi, ffl۔ یہ معیاری ٹائپوگرافی کے لیے ضروری سمجھے جاتے ہیں اور فونٹ میں بطور ڈیفالٹ فعال ہوتے ہیں۔ OpenType تصریحات کے مطابق، معیاری لیگیچر کو 'liga' ٹیگ سے کوڈ کیا جاتا ہے اور کسی بھی پیشہ ورانہ فونٹ میں موجود ہونا چاہیے۔
بصری اثر: لیگیچر کے بغیر، fi جوڑا ناپسندیدہ تصادم کے ساتھ دو علیحدہ حروف جیسا لگتا ہے۔ لیگیچر کے ساتھ، یہ ایک ہم آہنگ علامت جیسا لگتا ہے۔ فرق خاص طور پر بڑے سائز (سرخیاں، لوگو) اور بہت سے دہرائے جانے والے جوڑوں والے متن میں نمایاں ہوتا ہے (مثال کے طور پر، جرمن میں häufigen Buchstabenkombinationen کے ساتھ)۔
OpenType فونٹس کئی اقسام کے لیگیچر کو سپورٹ کرتے ہیں، ہر ایک کا اپنا ٹیگ اور مقصد ہوتا ہے۔ معیاری (ٹیگ 'liga') لازمی لیگیچر ہیں جو فونٹ میں بطور ڈیفالٹ فعال ہوتے ہیں۔ یہ پڑھنے کی اہلیت کو بہتر بناتے ہیں اور بغیر کسی معقول وجہ کے غیر فعال نہیں ہونے چاہئیں۔ ان میں fi, fl, ff, ffi, ffl اور ٹائپ فیس کے لیے مخصوص دیگر جوڑے شامل ہیں۔
صوابدیدی لیگیچر (ٹیگ 'dlig') آرائشی لیگیچر ہیں جو ڈیزائنر کی صوابدید پر اختیاری طور پر فعال کیے جاتے ہیں۔ یہ پڑھنے کی اہلیت کے لیے ضروری نہیں ہیں اور متن کی اسٹائلنگ کے لیے استعمال ہوتے ہیں: ct, st, sp, Th, Qu اور دیگر۔ صوابدیدی لیگیچر اکثر تاریخی یا خطاطی خصوصیات والے فونٹس میں پائے جاتے ہیں — مثال کے طور پر، Garamond یا Adobe Caslon میں۔ انتباہ: صوابدیدی لیگیچر کا زیادہ استعمال پڑھنے کی اہلیت کو خراب کرتا ہے، خاص طور پر ڈسلیکسیا کے شکار صارفین کے لیے۔
سیاقی لیگیچر (ٹیگ 'clig') وہ لیگیچر ہیں جو حرف کے ارد گرد کے سیاق و سباق پر منحصر ہوتے ہیں۔ یہ صرف مخصوص شرائط میں لاگو ہوتے ہیں: اگر حرف کسی لفظ کے شروع یا آخر میں ہو، کسی مخصوص اوقاف کے نشان کے بعد، وغیرہ۔ سیاقی لیگیچر ایک اعلیٰ درجے کی OpenType خصوصیت ہے جسے تمام فونٹس سپورٹ نہیں کرتے۔ تاریخی لیگیچر (ٹیگ 'hlig') فرسودہ لیگیچر ہیں جو پرانی چھپی ہوئی کتابوں کے انداز کی نقل کرتے ہیں (long s, &)۔ یہ شاذ و نادر ہی استعمال ہوتے ہیں، صرف تاریخی یا اسٹائلائزڈ متن میں۔
| لیگیچر کی قسم | OpenType ٹیگ | مثالیں | ڈیفالٹ |
|---|---|---|---|
| معیاری | liga | fi, fl, ff, ffi | فعال |
| صوابدیدی | dlig | ct, st, sp, Th | غیر فعال |
| سیاقی | clig | مقام پر منحصر | فعال |
| تاریخی | hlig | long s, ct (تاریخی) | غیر فعال |
نایاب اقسام: ریاضیاتی ٹائپ سیٹنگ کے لیے لیگیچر (ریاضیاتی علامتوں کے لیے ٹیگ 'dlig') اور ابتدائی لیگیچر (ڈراپ کیپس) بھی موجود ہیں، لیکن یہ انٹرفیس ٹائپوگرافی میں استعمال نہیں ہوتے اور صرف خصوصی فونٹس کے ذریعے سپورٹ ہوتے ہیں۔
لیگیچر ڈیجیٹل ٹائپوگرافی سے بہت پہلے — 15ویں صدی میں دھاتی ٹائپ کے دور میں ظاہر ہوئے۔ پہلے پرنٹر جوہانس گوٹن برگ نے اپنی 42-سطر والی بائبل کی سطروں میں جگہ بچانے کے لیے لیگیچر استعمال کیے۔ ہر ٹائپ کا ٹکڑا ایک جسمانی دھاتی بلاک تھا، اور دو حروف کو ایک ٹکڑے میں یکجا کرنے سے سیسہ بچتا تھا اور ٹائپ سیٹنگ آسان ہوتی تھی۔ معیاری لیگیچر fi, fl, ffi, ffl اس دور کی وراثت ہیں۔
فوٹو ٹائپ سیٹنگ (20ویں صدی) میں، لیگیچر نے اپنا عملی کام کھو دیا لیکن معیاری ٹائپوگرافی کے ایک جمالیاتی عنصر کے طور پر برقرار رہے۔ فونٹ ڈیزائنرز اپنے ٹائپ فیس میں لیگیچر شامل کرتے رہے کیونکہ وہ پیشہ ورانہ مہارت اور تفصیل پر توجہ کی علامت بن گئے تھے۔ ڈیجیٹل فونٹس (PostScript, TrueType) کے دور میں، لیگیچر کو پروگراماتی تبدیلی کے ساتھ علیحدہ گلِف کے طور پر لاگو کیا گیا تھا۔
OpenType (1996) ایک انقلاب تھا: اس نے GSUB طریقہ کار (گلِف متبادل جدول) متعارف کرایا، جو صارف کی مداخلت کے بغیر خود بخود حروف کی ترتیب کو لیگیچر سے بدل دیتا ہے۔ GSUB سیاقی متبادلات، شرائط اور فال بیک متغیرات کو سپورٹ کرتا ہے۔ اس نے فونٹس کو سینکڑوں لیگیچر رکھنے کی اجازت دی جنہیں ٹیگ کے ذریعے فعال/غیر فعال کیا جا سکتا ہے۔ جدید فونٹس — SF Pro, Roboto, Inter — تمام پلیٹ فارمز پر OpenType لیگیچر کو سپورٹ کرتے ہیں: iOS، Android، macOS، Windows، ویب۔
iOS پر، لیگیچر کو UIFontDescriptor کے ذریعے featureSettings وصف استعمال کرکے کنٹرول کیا جا سکتا ہے۔ یہ وصف لغات کی ایک صف قبول کرتا ہے، جن میں سے ہر ایک ایک OpenType خصوصیت کی وضاحت کرتا ہے۔ کسی ڈسکرپٹر کے ذریعے لیگیچر کو کنٹرول کرنا فونٹ کی دیگر OpenType خصوصیات کو متاثر کیے بغیر انفرادی اقسام کے لیگیچر کا انتظام کرنے کا واحد طریقہ ہے۔
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// صوابدیدی لیگیچر کو فعال کریں
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString بھی ligature وصف کو سپورٹ کرتا ہے: NSNumber۔ قدر 0 تمام لیگیچر کو غیر فعال کرتی ہے، 1 معیاری کو فعال کرتی ہے (ڈیفالٹ)، 2 سب کو فعال کرتی ہے (صوابدیدی سمیت)۔ تاہم، NSAttributedString میں ligature وصف لیگیچر کی اقسام پر باریک کنٹرول فراہم نہیں کرتا — صرف عالمی فعال/غیر فعال۔ انتخابی کنٹرول کے لیے، featureSettings کے ساتھ UIFontDescriptor استعمال کریں۔
SwiftUI لیگیچر کے لیے کوئی براہ راست ترمیم کنندہ فراہم نہیں کرتا۔ SwiftUI میں لیگیچر کو کنٹرول کرنے کے لیے، UIFontDescriptor کے ذریعے مطلوبہ ترتیبات کے ساتھ UIFont بنائیں اور Font(descriptor:size:) کے ذریعے استعمال کریں۔ متبادل طور پر، AppKit/UIKit ویوز میں NSMutableAttributedString کے لیے .ligature وصف کے ساتھ AttributedString (iOS 15+) استعمال کریں۔
// AttributedString کے ذریعے حسب ضرورت لیگیچر کے ساتھ SwiftUI
var attributedText: AttributedString {
var text = AttributedString(
"Effective typography with ligatures"
)
// پورے متن کے لیے تمام لیگیچر کو فعال کریں
text.ligature = .all
return text
}
var body: some View {
Text(attributedText)
}
ویب پر، لیگیچر کو CSS پراپرٹی font-variant-ligatures کے ذریعے کنٹرول کیا جاتا ہے، جو کلیدی الفاظ قبول کرتی ہے: common-ligatures (معیاری فعال)، no-common-ligatures (معیاری غیر فعال)، discretionary-ligatures، no-discretionary-ligatures، contextual، no-contextual۔ یہ پراپرٹی 2015 سے تمام جدید براؤزرز کے ذریعے سپورٹ ہے۔ بطور ڈیفالٹ، براؤزر معیاری اور سیاقی لیگیچر کو فعال کرتے ہیں۔
/* Disable all ligatures for monospace */
code, pre {
font-variant-ligatures: none;
}
/* Enable discretionary ligatures for headings */
.title-fancy {
font-variant-ligatures:
common-ligatures
discretionary-ligatures
contextual;
}
Android کے پاس لیگیچر کو کنٹرول کرنے کے لیے کوئی براہ راست API نہیں ہے۔ Android پر، لیگیچر کو فونٹ کی سطح پر اور Minikin رینڈرنگ انجن (Android 10+) کے ذریعے کنٹرول کیا جاتا ہے۔ اگر فونٹ میں OpenType GSUB جدول ہے، تو لیگیچر خود بخود لاگو ہوتے ہیں۔ Android پر لیگیچر کو غیر فعال کرنے کے لیے، Typeface.Builder کے ذریعے بنائے گئے کسٹم Typeface یا ٹیکسٹ پری پروسیسنگ (ڈسپلے سے پہلے حروف کی تبدیلی) استعمال کی جاتی ہے۔ حدود: Android 10 سے نیچے، کچھ TTF فونٹس کے ساتھ لیگیچر صحیح طریقے سے کام نہیں کر سکتے۔
نچلی سطح کا کنٹرول: تمام پلیٹ فارمز پر، آپ OpenType خصوصیات کے لیے font-feature-settings پیرامیٹر کے ساتھ CSS @font-face استعمال کر سکتے ہیں۔ یہ طریقہ لیگیچر سمیت کسی بھی OpenType ٹیگ تک رسائی فراہم کرتا ہے۔ مثال: font-feature-settings: 'liga' 1, 'dlig' 1۔ تاہم، font-feature-settings ایک نچلی سطح کا نحو ہے، اور MDN اعلیٰ سطح کے متبادل کے طور پر font-variant-ligatures استعمال کرنے کی سفارش کرتا ہے۔
لیگیچر کی ایک خاص کلاس — پروگرامنگ لیگیچر — آپریٹرز اور کوڈ کی علامتوں کو زیادہ پڑھنے کے قابل گلِف میں یکجا کرتی ہے۔ Fira Code، JetBrains Mono، Cascadia Code جیسے پروگرامنگ فونٹس عام آپریٹرز کے لیے صوابدیدی لیگیچر شامل کرتے ہیں: != (≠ بن جاتا ہے)، >= (≥ بن جاتا ہے)، -> (تیز بن جاتا ہے)، => (موٹا تیر بن جاتا ہے)، === (ٹرپل ایکولز بن جاتا ہے)۔
پروگرامنگ لیگیچر ڈیولپر کمیونٹی میں ایک متنازعہ موضوع ہے۔ حامیوں کا کہنا ہے کہ لیگیچر کوڈ پڑھنے کو تیز کرتے ہیں کیونکہ آپریٹرز کو ایک واحد تصور کے طور پر سمجھا جاتا ہے۔ ایک مطالعہ (Kera et al., PLATEAU 2020) نے دکھایا کہ لیگیچر کوڈ پڑھنے کی رفتار کو متاثر نہیں کرتے، لیکن 67% ڈیولپر انہیں موضوعی طور پر پسند کرتے ہیں۔ لیگیچر کے مخالفین نوٹ کرتے ہیں کہ وہ کوڈ کو بگاڑ دیتے ہیں: ایڈیٹر میں != علامت ≠ کے طور پر ظاہر ہوتی ہے، لیکن ٹیکسٹ فائل میں یہ دو حروف کے طور پر محفوظ ہوتی ہے، جو تعاون کے دوران الجھن کا باعث بن سکتی ہے۔
تکنیکی نفاذ: پروگرامنگ لیگیچر صوابدیدی OpenType لیگیچر ہیں (ٹیگ 'dlig')۔ یہ بطور ڈیفالٹ غیر فعال ہوتے ہیں اور کوڈ ایڈیٹر میں فونٹ کی ترتیبات کے ذریعے فعال کیے جاتے ہیں۔ ایسے فونٹس استعمال کرنے والے ڈیولپرز کو صوابدیدی لیگیچر فعال کرنے کے لیے ایڈیٹر کو ترتیب دینا چاہیے۔ ٹرمینلز (iTerm2, Windows Terminal) میں، لیگیچر بھی فونٹ کی ترتیبات کے ذریعے سپورٹ ہوتے ہیں۔ مطابقت: تمام ایڈیٹرز اور ٹرمینلز OpenType لیگیچر کو سپورٹ نہیں کرتے۔ فونٹ منتخب کرنے سے پہلے، اپنے ٹول چین کے ساتھ مطابقت چیک کریں۔
// مثال: JetBrains Mono میں آپریٹر لیگیچر
val isEqual = a != b // != ≠ کے طور پر پیش کیا گیا
val arrow = x -> x + 1 // -> → کے طور پر پیش کیا گیا
val range = 1 .. 10 // .. رینج کے طور پر پیش کیا گیا
مقبول فونٹس پروگرامنگ لیگیچر کے ساتھ: Fira Code (لیگیچر والا پہلا بڑے پیمانے کا فونٹ، 2015)، JetBrains Mono (کوڈ پڑھنے کے لیے بہتر بنایا گیا، 2020)، Cascadia Code (مائیکروسافٹ سے، 2019)، Iosevka (ماڈیولر لیگیچر سسٹم کے ساتھ حسب ضرورت فونٹ)۔ ہر فونٹ کا اپنا لیگیچر سیٹ ہوتا ہے — 50 سے 150+ تبدیلیاں۔ سفارش: Fira Code یا JetBrains Mono سے شروع کریں — ایڈیٹرز اور IDE میں ان کی بہترین سپورٹ ہے۔
اکثر پوچھے گئے سوالات
NSAttributedString میں attribute ligature = 0 سیٹ کریں یا kCommonLigaturesOffSelector کے ساتھ UIFontDescriptor استعمال کریں۔ SwiftUI میں، .ligature = .disabled کے ساتھ AttributedString بنائیں۔
لیگیچر دو حروف کو ایک نئے گلِف سے بدلتا ہے، ان کی شکل تبدیل کرتا ہے۔ کرننگ حروف کی شکل تبدیل کیے بغیر ان کے درمیان فاصلہ کو ایڈجسٹ کرتا ہے۔ لیگیچر ایک گرافک کنکشن ہے؛ کرننگ ایک مقامی ایڈجسٹمنٹ ہے۔
ہاں، Android 10 (API 29) سے شروع کرکے۔ Minikin رینڈرنگ OpenType GSUB جدولوں کو مکمل طور پر سپورٹ کرتی ہے۔ پرانے ورژنز پر، سپورٹ ڈیوائس بنانے والے اور فونٹ انجن کے ورژن پر منحصر ہے۔
بنیادی متن کے لیے، معیاری لیگیچر (fi, fl, ff) کافی ہیں — یہ پڑھنے کی اہلیت کو بہتر بناتے ہیں اور صارف کو نظر نہیں آتے۔ صوابدیدی لیگیچر صرف سرخیوں یا آرائشی متن میں استعمال کریں، کیونکہ یہ لمبے متن کی پڑھنے کی اہلیت کو کم کرتے ہیں۔
ایڈیٹر کو OpenType 'dlig' ٹیگ کو سپورٹ کرنا چاہیے اور صوابدیدی لیگیچر رینڈر کرنے کے قابل ہونا چاہیے۔ VS Code، IntelliJ IDEA، Sublime Text انہیں سپورٹ کرتے ہیں۔ پرانے ٹرمینلز اور ایڈیٹرز (nano، GUI کے بغیر vim) نہیں کرتے۔ اپنی ایڈیٹر سیٹنگز چیک کریں: font-ligatures کو فعال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں