→ بازگشت به وبلاگ

تعویض قلم، و سطر فارسی

صفحه‌ی فارسی در همین سایت وزیرمتن را برای fa-IR اول می‌گذارد. Inter این سایت فقط لاتین و لاتین گسترده است، با font-display: swap، و وزن ۱۰۰ تا ۹۰۰.

محمد هنرورنوشته‌ی محمد هنرور
· ۴ دقیقه مطالعه

نقاشی اول صفحه باید جمله را نشان بدهد، حتی اگر قلم دلخواه هنوز نرسیده باشد. این سایت برای فارسی وزیرمتن می‌گذارد و برای لاتین Inter. هر دو font-display: swap دارند. تعویض یعنی مرورگر حق دارد اول با قلم جایگزین بکشد و وقتی فایل رسید عوض کند. جمله‌ی قایم تا تمام شدن فایل، معامله‌ای نیست که این استایل قبول کرده باشد.

عرض سطر و اینکه ch با عوض شدن صفر کمی جابه‌جا می‌شود در عرض سطر، و ضرب خواندن آمده. این یادداشت فقط خود قلم است: کدام خانواده، کدام زیرمجموعه، و چرا فارسی به Inter نمی‌افتد.

زبان سند ترتیب را عوض می‌کند

پشته‌ی پیش‌فرض Inter است، بعد وزیرمتن، بعد system-ui. این ترتیب مال صفحه‌ی انگلیسی است. برای فارسی دو انتخابگر پشته را برمی‌گردانند: :lang(fa) و [lang|='fa']. سند فارسی lang="fa-IR" دارد. هر دو انتخابگر با fa-IR جور می‌شوند. انتخابگری که دقیقاً مقدار fa را می‌خواست روشن نمی‌شد، چون ویژگی زبان fa-IR است نه fa تنها.

وقتی وزیرمتن اول است، حرف فارسی به طراحی لاتین Inter نمی‌افتد. Inter برای آن حرف فایل ندارد. وزیرمتن دارد. اگر ترتیب برعکس بماند، کلمه یا جا می‌افتد یا با قلم سیستم کشیده می‌شود و صفحه دو چهره پیدا می‌کند. برگرداندن پشته همین را جلویش می‌گیرد، نه یک قانون کلی درباره‌ی همه‌ی سایت‌های دوزبانه.

هر دو خانواده متغیرند. وزن از ۱۰۰ تا ۹۰۰ در یک فایل است. عنوان لازم نیست فایل جدا برای وزن ۸۰۰ بگیرد. وزن از همان فایل می‌آید، به شرطی که خانواده درست برنده شده باشد. فونت متغیر کمکی نمی‌کند اگر پشته غلط باشد.

Inter خط‌های بی‌استفاده را ندارد

در fonts.css فقط دو وجه برای Inter هست. یکی لاتین است و یکی لاتین گسترده. توضیح بالای فایل می‌گوید یونانی و سیریلیک و ویتنامی در این سایت به کار نمی‌روند، و در src هم نیستند. هر دو وجه font-display: swap دارند و وزن ۱۰۰ تا ۹۰۰. قالب فایل woff2 متغیر است.

زیرمجموعه‌ی لاتین بازه‌ی معمولی اروپای غربی را می‌پوشاند. لاتین گسترده نویسه‌هایی را می‌پوشاند که در اسم‌ها و نشانه‌های همین صفحات پیش می‌آیند، بدون اینکه سه الفبای دیگر را هم دانلود کنیم. صفحه‌ی فارسی برای کلمه‌ی فارسی به این فایل محتاج نیست. صفحه‌ی انگلیسی برای بدنه‌ی متن به آن محتاج است، چون در پشته‌ی انگلیسی Inter اول است.

تعویض روی همین فایل‌ها اعلام شده، نه به‌صورت یک قاعده‌ی سراسری جدا. هر @font-face خودش font-display دارد. اگر یکی از فایل‌ها دیر برسد، فقط همان بازه با جایگزین می‌ماند و بقیه می‌تواند با فایلی که رسیده کشیده شود. این همان دلیلی است که زیرمجموعه جداست: تأخیر یک خط، همه‌ی جمله را گروگان نمی‌گیرد.

وزیرمتن وجه فارسی است

وزیرمتن از بسته‌ی فونت می‌آید، با همان font-display: swap و همان دامنه‌ی وزن. سه فایل دارد. بازه‌ی عربی برای فارسی است، از جمله فاصله‌ی مجازی و شکل‌هایی که اتصال لازم دارد. یک فایل لاتین و یک فایل لاتین گسترده هم هست تا اسم ابزار داخل جمله‌ی فارسی، مثل Astro یا Three.js، در همان خانواده گلیف داشته باشد.

روی صفحه‌ی فارسی وزیرمتن اول است، پس هم حرف فارسی و هم لاتینِ داخل جمله اول سراغ وزیرمتن می‌روند، اگر آن نویسه در بازه‌ی او باشد. Inter پشت سر اوست برای چیزی که وزیرمتن ندارد. روی صفحه‌ی انگلیسی ترتیب برعکس است و بدنه‌ی لاتین با Inter کشیده می‌شود، نه با لاتینِ وزیرمتن. دو پشته برای این است که هر زبان چهره‌ی خودش را بگیرد.

آخر پشته system-ui است. اگر فایل‌ها دیر برسند یا خطا بدهند، جمله با قلم سیستم کشیده می‌شود و صفحه خالی نمی‌ماند. swap و این پشته یک کار را می‌کنند: متن را به فایل گره نمی‌زنند. اعلام font-display روی هر @font-face تکرار شده است. از یک قاعده‌ی ارثی نمی‌آید. وجه لاتین Inter و وجه لاتین گسترده‌اش هر کدام برای خودشان swap دارند، و سه وجه وزیرمتن هم همین‌طور.

این را با رقم عوض نمی‌کنم. شکل رقم فارسی کار fa-IR در جاوااسکریپت است، نه ویژگی‌ای در fonts.css که لاتین را فارسی کند. Inter آن رقم را در فایل لاتینش ندارد. اگر عددی باید فارسی دیده شود، نویسنده باید فارسی باشد و بعد وزیرمتن آن را بکشد. این یادداشت آن مسیر را باز نمی‌کند. فقط می‌گوید قلم، نویسه‌ای را که در فایلش نیست اختراع نمی‌کند.

تعویض یعنی جمله دیده شود

swap متن را پنهان نمی‌کند. قلم جایگزین فوراً به کار می‌رود و قلم واقعی بعداً جایش را می‌گیرد. سطر ممکن است کمی بپرد، چون عرض مقاله با ch است و صفرِ Inter و صفرِ وزیرمتن و صفرِ قلم سیستم یکی نیستند. این پرش هزینه‌ی خوانده شدن جمله در حین بار است. متن نامرئی تا رسیدن فایل دلخواه هزینه‌ای است که نمی‌گیرم.

مهلت معرفی خانه با همین واقعیت جور است، ولی معرفی این یادداشت نیست. نقاشی ذره حداکثر ۱۲۰ میلی‌ثانیه برای document.fonts.load صبر می‌کند و بعد با هر قلمی که هست شروع می‌شود. عنوان خانه در آن مسابقه نیست. عنوان با همان تعویض قلم صفحه خوانده می‌شود، چه ذره شروع شده باشد چه نه.

به این رفتار امتیاز آزمایشگاهی وصل نمی‌کنم. عددی برای سرعت بار قلم این‌جا ندارم و یکی هم نمی‌سازم. ادعای قابل‌دیدن در استایل این است: دو خانواده، زیرمجموعه‌ی لازم، و swap به‌جای پنهان کردن متن.

یادداشت‌های عرض و فاصله در تایپ و فاصله کنار هم آمده‌اند. چه کاری را برمی‌دارم در همکاری است، و شرح مشتری آن‌جا هم ساخته نمی‌شود.

↑↓EnterEsc

guest@mh-honarvar: ~