FONTS-CONF(5) FONTS-CONF(5)

fonts.conf - پرونده‌های پیکربندی قلم

/etc/fonts/fonts.conf
/etc/fonts/fonts.dtd
/etc/fonts/conf.d
$XDG_CONFIG_HOME/fontconfig/conf.d
$XDG_CONFIG_HOME/fontconfig/fonts.conf
~/.fonts.conf.d
~/.fonts.conf

کتابخانهٔ Fontconfig برای ارائهٔ پیکربندی، سفارشی‌سازی و دسترسی به قلم‌ها در سطح سامانه برای برنامه‌ها طراحی شده است.

کتابخانهٔ Fontconfig از دو بخش اساسی تشکیل شده است: بخش پیکربندی که یک پیکربندی درونی را بر اساس پرونده‌های XML می‌سازد، و بخش تطبیق که الگوهای قلم را دریافت کرده و نزدیک‌ترین قلم منطبق را برمی‌گرداند.

بخش پیکربندی شامل نوع‌دادهٔ FcConfig، کتابخانهٔ libexpat و تابع FcConfigParse است که درخت XML را پیمایش کرده و پیکربندی را با داده‌های یافت‌شده در آن تکمیل می‌کند. از دیدگاه بیرونی، پیکربندی کتابخانه شامل تولید یک درخت معتبر XML و ارسال آن به FcConfigParse است. تنها سازوکار دیگری که برای تغییر پیکربندی در حال اجرا به برنامه‌ها ارائه شده، افزودن قلم‌ها و شاخه‌ها به فهرست پرونده‌های قلم ارائه‌شده توسط برنامه است.

هدف این است که پیکربندی‌های قلم نسبتاً ایستا بوده و میان بیشترین تعداد برنامه‌های ممکن به اشتراک گذاشته شوند. امید می‌رود که این کار به گزینش پایدارتر قلم در زمان انتقال نام‌ها از یک برنامه به برنامهٔ دیگر منجر شود. XML به عنوان قالب پروندهٔ پیکربندی انتخاب شد زیرا قالبی را فراهم می‌کند که ویرایش آن برای ابزارهای خارجی آسان است و هم‌زمان ساختار و نحو صحیح را حفظ می‌کند.

پیکربندی قلم از تطبیق قلم جدا است؛ برنامه‌هایی که نیاز به انجام تطبیق اختصاصی خود دارند می‌توانند به قلم‌های موجود در کتابخانه دسترسی داشته باشند و تطبیق خصوصی را انجام دهند. هدف این است که به برنامه‌ها اجازه داده شود قابلیت‌های مناسب را از کتابخانه انتخاب کنند، به جای آنکه مجبور شوند میان این کتابخانه و یک سازوکار پیکربندی خصوصی یکی را برگزینند. امید است که این امر متمرکز شدن پیکربندی قلم‌ها برای همهٔ برنامه‌ها را در یک مکان تضمین کند. متمرکز کردن پیکربندی قلم، نصب و سفارشی‌سازی قلم‌ها را ساده و منظم خواهد کرد.

اگرچه الگوهای قلم می‌توانند اساساً شامل هر ویژگی باشند، اما برخی ویژگی‌های شناخته‌شده با انواع دادهٔ مشخص وجود دارند. Fontconfig از برخی از این ویژگی‌ها برای تطبیق و تکمیل قلم استفاده می‌کند. سایر موارد برای تسهیل سازوکار رندر برنامه‌ها ارائه شده‌اند.

ویژگی           نوع     توضیحات
--------------------------------------------------------------
family          String  نام‌های خانواده قلم
familylang      String  زبان‌های متناظر با هر خانواده
style           String  سبک قلم؛ بر وزن (weight) و شیب (slant) تقدم دارد
stylelang       String  زبان‌های متناظر با هر سبک
fullname        String  نام‌های کامل قلم (اغلب شامل سبک است)
fullnamelang    String  زبان‌های متناظر با هر نام کامل
slant           Int     ایتالیک (italic)، اریب (oblique) یا رومی (roman)
weight          Int     نازک (light)، متوسط (medium)، نیمه‌پررنگ (demibold)، پررنگ (bold) یا سیاه (black)
width           Int     فشرده (condensed)، عادی (normal) یا باز (expanded)
size            Double  اندازه به پوینت (point size)
aspect          Double  کشیدگی افقی گلیف‌ها پیش از هینتینگ
pixelsize       Double  اندازه به پیکسل
spacing         Int     متناسب (proportional)، عرض دوگانه (dual-width)، تک‌عرض (monospace) یا خانه نویسه (charcell)
foundry         String  نام شرکت سازنده قلم (foundry)
antialias       Bool    آیا گلیف‌ها می‌توانند هموارسازی (antialiased) شوند
hintstyle       Int     سبک هینتینگ خودکار
hinting         Bool    آیا رسترساز باید از هینتینگ استفاده کند
verticallayout  Bool    استفاده از چیدمان عمودی
autohint        Bool    استفاده از هینتر خودکار به جای هینتر معمولی
globaladvance   Bool    استفاده از داده‌های پیشروی سراسری قلم (منسوخ شده)
file            String  نام پرونده حاوی قلم
index           Int     نمایه قلم در داخل پرونده
ftface          FT_Face استفاده از شیء FreeType face مشخص‌شده
rasterizer      String  کدام رسترساز در حال استفاده است (منسوخ شده)
outline         Bool    آیا گلیف‌ها برداری (outline) هستند
scalable        Bool    آیا گلیف‌ها برداری هستند یا رنگی
dpi             Double  تعداد نقاط در اینچ هدف (DPI)
rgba            Int     ناشناخته (unknown)، rgb، bgr، vrgb، vbgr،
                        none - هندسه زیرپیکسل
scale           Double  ضریب مقیاس برای تبدیل پوینت به پیکسل (منسوخ شده)
minspace        Bool    حذف فاصله سرخط از فاصله خطوط
charset         CharSet نویسه‌های یونیکد کدگذاری‌شده توسط قلم
lang            String  فهرست زبان‌های سبک RFC-3066 که این قلم پشتیبانی می‌کند
fontversion     Int     شماره نسخه قلم
capability      String  فهرست قابلیت‌های چیدمان در قلم
fontformat      String  نام رشته‌ای قالب قلم
embolden        Bool    رسترساز باید قلم را به صورت مصنوعی پررنگ کند
embeddedbitmap  Bool    استفاده از بیت‌مپ جاسازی‌شده به جای طرح برداری
decorative      Bool    آیا سبک یک گونهٔ تزیینی است
lcdfilter       Int     نوع فیلتر LCD
namelang        String  نام زبان مورد استفاده برای مقدار پیش‌فرض
                        familylang، stylelang و fullnamelang
fontfeatures    String  فهرست برچسب‌های ویژگی‌های OpenType جهت فعال‌سازی
prgname         String  نام برنامه در حال اجرا
postscriptname  String  نام خانواده قلم در PostScript
color           Bool    آیا گلیفی دارای رنگ است
symbol          Bool    آیا قلم از کدگذاری نماد مایکروسافت استفاده می‌کند
fontvariations  String  رشته جدا شده با کاما از محورها در قلم متغیر
variable        Bool    آیا قلم از نوع قلم متغیر (Variable Font) است
fonthashint     Bool    آیا قلم دارای هینتینگ است
order           Int     شماره ترتیب قلم
desktop         String  نام میزکار فعلی
namedinstance   Bool    آیا قلم یک نمونه نام‌گذاری‌شده (named instance) است
fontwrapper     String  قالب بسته‌بندی قلم، مقادیر فعلی WOFF، WOFF2،
                        SFNT برای سایر قلم‌های SFNT، و CFF برای قلم‌های مستقل CFF هستند.
genericfamily   Int     نوع خانواده عمومی (Generic Family)

کتابخانهٔ Fontconfig تطبیق را با سنجش فاصله از یک الگوی ارائه‌شده تا تمام قلم‌های موجود در سامانه انجام می‌دهد. نزدیک‌ترین قلم منطبق انتخاب می‌شود. این امر تضمین می‌کند که همواره یک قلم بازگردانده خواهد شد، اما تضمین نمی‌کند که دقیقاً شبیه به الگوی درخواستی باشد.

تطبیق قلم با یک الگوی ساخته‌شده توسط برنامه آغاز می‌شود. ویژگی‌های مورد نظر برای قلم نهایی در یک الگو جمع‌آوری می‌شوند. هر ویژگی الگو می‌تواند شامل یک یا چند مقدار باشد؛ این مقادیر بر اساس اولویت مرتب شده‌اند؛ مواردی که در ابتدای فهرست قرار دارند "نزدیک‌تر" از موارد بعدی تلقی می‌شوند.

الگوی اولیه با اعمال فهرستی از دستورالعمل‌های ویرایش ویژهٔ الگوها که در پیکربندی یافت می‌شوند تغییر می‌یابد؛ هر یک شامل یک شرط تطبیق و مجموعه‌ای از عملیات ویرایش است. این دستورالعمل‌ها به ترتیبی که در پیکربندی ظاهر شده‌اند اجرا می‌شوند. هر تطبیق موجب اعمال توالی متناظر عملیات ویرایش می‌گردد.

پس از ویرایش الگو، توالی‌ای از جایگزینی‌های پیش‌فرض برای استانداردسازی مجموعه ویژگی‌های موجود انجام می‌شود؛ این کار از نیاز لایه‌های پایینی به ارائه مداوم مقادیر پیش‌فرض برای ویژگی‌های مختلف قلم در هنگام رندر جلوگیری می‌کند.

الگوی استانداردشدهٔ قلم سرانجام با تمام قلم‌های موجود مقایسه می‌شود. فاصله الگو تا قلم برای چندین ویژگی سنجیده می‌شود: foundry، charset، family، lang، spacing، pixelsize، style، slant، weight، antialias، rasterizer و outline. این فهرست بر اساس اولویت مرتب شده است -- نتایج مقایسه عناصر ابتدایی این فهرست وزن بیشتری نسبت به عناصر بعدی دارند.

یک حالت خاص برای این قاعده وجود دارد؛ نام‌های خانواده به دو پیوند قوی (strong) و ضعیف (weak) تقسیم می‌شوند. به نام‌های خانواده قوی در تطبیق اولویت بیشتری نسبت به عناصر lang داده می‌شود، در حالی که نام‌های خانواده ضعیف اولویت کمتری نسبت به عناصر lang دریافت می‌کنند. این امر به زبان سند اجازه می‌دهد تا در صورت عدم دسترسی به قلم مشخص‌شده در سند، هدایت انتخاب قلم را بر عهده بگیرد.

الگوی نمایندهٔ آن قلم گسترش می‌یابد تا شامل هر ویژگی موجود در الگو باشد که در خود قلم یافت نشده است؛ این به برنامه اجازه می‌دهد تا دستورالعمل‌های رندر یا هر دادهٔ دیگری را از طریق سامانه تطبیق منتقل کند. سرانجام، فهرست دستورالعمل‌های ویرایش ویژهٔ قلم‌ها که در پیکربندی موجود است بر الگو اعمال می‌شود. این الگوی تغییریافته به برنامه بازگردانده می‌شود.

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

توالی‌های تطبیق/ویرایش در پیکربندی طی دو مرحله انجام می‌شوند، زیرا اساساً دو عملیات مختلف لازم است -- نخستین عملیات اصلاح نحوه انتخاب قلم‌ها است؛ نام‌های مستعار خانواده‌ها و افزودن پیش‌فرض‌های مناسب. دومین عملیات اصلاح نحوه رسترسازی قلم‌های انتخاب‌شده است. این موارد باید روی قلم انتخاب‌شده اعمال شوند، نه الگوی اولیه، زیرا تطبیق‌های نادرست مکرراً رخ می‌دهند.

کتابخانهٔ Fontconfig یک نمایش متنی برای الگوها فراهم می‌کند که هم می‌تواند آن را دریافت کند و هم تولید نماید. این نمایش از سه بخش تشکیل شده است: ابتدا فهرستی از نام‌های خانواده، سپس فهرستی از اندازه‌های پوینت و در نهایت فهرستی از ویژگی‌های اضافی:

<families>-<point sizes>:<name1>=<values1>:<name2>=<values2>...

مقادیر موجود در یک فهرست با کاما جدا می‌شوند. نام لزوماً نباید شامل خانواده یا اندازه پوینت باشد؛ این موارد را می‌توان حذف کرد. علاوه بر این، ثوابت نمادینی وجود دارند که هم‌زمان یک نام و یک مقدار را مشخص می‌کنند. در اینجا چند نمونه آورده شده است:

نام                             معنی
----------------------------------------------------------
Times-12                        قلم Times Roman با اندازه ۱۲ پوینت
Times-12:bold                   قلم Times Bold با اندازه ۱۲ پوینت
Courier:italic                  قلم Courier Italic در اندازه پیش‌فرض
Monospace:matrix=1 .1 0 1       قلم تک‌عرض ترجیحی کاربر
                                همراه با اریب‌سازی مصنوعی

نویسه‌های '\'، '-'، ':' و ',' در نام‌های خانواده باید با یک نویسهٔ '\' همراه شوند تا از تفسیر اشتباه آن‌ها جلوگیری شود. به‌طور مشابه، مقادیر حاوی '\'، '='، '_'، ':' و ',' نیز باید با نویسهٔ '\' همراه شوند. هنگام خوانده شدن نام قلم، نویسه‌های '\' از نام خانواده و مقادیر حذف می‌شوند.

برای کمک به عیب‌یابی مشکلات قلم و برنامه‌ها، fontconfig همراه با مقدار زیادی قابلیت اشکال‌زدایی داخلی فعال ساخته شده است. این قابلیت از طریق متغیر محیطی FC_DEBUG کنترل می‌شود. مقدار این متغیر به عنوان یک عدد تفسیر می‌شود و هر بیت در آن مقدار، پیام‌های اشکال‌زدایی متفاوتی را کنترل می‌کند.

نام          مقدار    معنی
---------------------------------------------------------
MATCH            1    اطلاعات مختصر درباره تطبیق قلم
MATCHV           2    اطلاعات تفصیلی تطبیق قلم
EDIT             4    نظارت بر اجرای تطبیق/آزمون/ویرایش (match/test/edit)
FONTSET          8    ردیابی بارگذاری اطلاعات قلم هنگام راه‌اندازی
CACHE           16    مشاهده پرونده‌های حافظه پنهان در حال نوشتن
CACHEV          32    اطلاعات تفصیلی نوشتن پرونده حافظه پنهان
PARSE           64    (دیگر استفاده نمی‌شود)
SCAN           128    مشاهده پرونده‌های قلم هنگام پویش برای ساخت حافظه پنهان
SCANV          256    اطلاعات تفصیلی پویش پرونده‌های قلم
MEMORY         512    نظارت بر مصرف حافظه fontconfig
CONFIG        1024    نظارت بر پرونده‌های پیکربندی بارگذاری‌شده
LANGSET       2048    نمایش مجموعه‌های نویسه برای ساخت مقادیر lang
MATCH2        4096    نمایش تبدیل‌های تطبیق قلم در الگوها

مقادیر سطوح اشکال‌زدایی مورد نظر را با هم جمع کرده و مقدار حاصل را (در مبنای ۱۰) پیش از اجرای برنامه به متغیر محیطی FC_DEBUG اختصاص دهید. خروجی این گزارش‌ها به خروجی استاندارد (stdout) ارسال می‌شود.

هر قلم در پایگاه داده شامل فهرستی از زبان‌هایی است که پشتیبانی می‌کند. این مقدار با مقایسه پوشش یونیکد قلم با شیوه نگارش هر زبان محاسبه می‌شود. زبان‌ها با استفاده از نام‌گذاری سازگار با RFC-3066 برچسب‌گذاری می‌شوند و از دو بخش تشکیل شده‌اند -- برچسب زبان بر اساس ISO 639 به همراه یک خط تیره و سپس کد کشور بر اساس ISO 3166. خط تیره و کد کشور می‌توانند حذف شوند.

کتابخانهٔ Fontconfig شیوه‌های نگارش چندین زبان را به‌صورت درون‌ساخت داراست. به جز بازسازی کتابخانه، سازوکاری برای افزودن موارد جدید در نظر گرفته نشده است. این کتابخانه در حال حاضر از ۱۲۲ زبان از ۱۳۹ زبان نام‌برده در ISO 639-1، ۱۴۱ زبان دارای کد دوحرفی از ISO 639-2 و ۳۰ زبان دیگر که تنها کد سه‌حرفی دارند پشتیبانی می‌کند. زبان‌هایی که دارای هر دو کد دو و سه‌حرفی هستند تنها با کد دوحرفی ارائه شده‌اند.

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

پرونده‌های پیکربندی fontconfig در قالب XML ذخیره می‌شوند؛ این قالب نوشتن ابزارهای پیکربندی خارجی را آسان‌تر کرده و اطمینان می‌دهد که آن‌ها پرونده‌های پیکربندی با نحو صحیح تولید می‌کنند. از آنجا که پرونده‌های XML متن ساده هستند، کاربران پیشرفته می‌توانند آن‌ها را با ویرایشگر متن نیز ویرایش کنند.

تعریف نوع سند (DTD) کتابخانهٔ fontconfig در موجودیت خارجی "fonts.dtd" قرار دارد؛ این پرونده معمولاً در شاخه پیش‌فرض پیکربندی قلم (/etc/fonts) ذخیره می‌شود. هر پرونده پیکربندی باید ساختار زیر را داشته باشد:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
...
</fontconfig>

این عنصر، عنصر سطح بالا برای یک پیکربندی قلم است و می‌تواند شامل عناصر <dir>، <cachedir>، <include>، <match> و <alias> با هر ترتیبی باشد.

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

اگر 'prefix' روی "default" یا "cwd" تنظیم شود، شاخه کاری جاری به عنوان پیشوند مسیر قبل از مقدار اضافه می‌شود. اگر 'prefix' روی "xdg" تنظیم شود، مقدار متغیر محیطی XDG_DATA_HOME به عنوان پیشوند مسیر اضافه خواهد شد؛ لطفاً برای جزئیات بیشتر به مشخصات XDG Base Directory مراجعه کنید. اگر 'prefix' روی "relative" تنظیم شود، مسیر پرونده جاری قبل از مقدار اضافه می‌شود.

ویژگی 'salt' بر تعیین نام پرونده حافظه پنهان تأثیر می‌گذارد. این ویژگی برای نمونه هنگام داشتن مجموعه‌های متفاوتی از قلم‌ها در مسیر یکسان در کانتینر و اشتراک‌گذاری قلم‌ها از میزبان در مسیر قلم متفاوت مفید است.

این عنصر حاوی نام شاخه‌ای است که قرار است حافظه پنهان اطلاعات قلم در آن ذخیره یا از آن خوانده شود. اگر چندین عنصر در پرونده پیکربندی مشخص شده باشد، شاخه‌ای که در فهرست ابتدا قابل دسترسی باشد برای ذخیره پرونده‌های حافظه پنهان استفاده خواهد شد. اگر با '~' آغاز شود، به شاخه‌ای در شاخه خانگی کاربر اشاره دارد. اگر 'prefix' روی "xdg" تنظیم شود، مقدار متغیر محیطی XDG_CACHE_HOME به عنوان پیشوند مسیر اضافه می‌شود. شاخه پیش‌فرض ``$XDG_CACHE_HOME/fontconfig'' است و شامل پرونده‌های حافظه پنهانی با نام ``<hash value>-<architecture>.cache-<version>'' است، که در آن <version> شماره نسخه پرونده حافظه پنهان fontconfig است (در حال حاضر ۱۲).

این عنصر حاوی نام یک پرونده یا شاخه پیکربندی اضافی است. در صورت شاخه بودن، هر پرونده درون آن شاخه که با یک رقم اسکی (U+0030 - U+0039) شروع شده و به رشته ``.conf'' ختم شود به ترتیب مرتب‌شده پردازش می‌شود. هنگامی که نوع داده XML توسط FcConfigParse پیمایش می‌شود، محتویات پرونده(ها) نیز با ارسال نام پرونده(ها) به FcConfigLoadAndParse در پیکربندی ادغام می‌شود. اگر 'ignore_missing' به جای مقدار پیش‌فرض "no" روی "yes" تنظیم شود، گم شدن پرونده یا شاخه هیچ پیام هشداری از سوی کتابخانه صادر نخواهد کرد. اگر 'prefix' روی "xdg" تنظیم شود، مقدار متغیر محیطی XDG_CONFIG_HOME به عنوان پیشوند مسیر اضافه خواهد شد.

این عنصر مکانی را برای یکپارچه‌سازی اطلاعات پیکربندی اضافی فراهم می‌کند. عنصر <config> می‌تواند شامل عناصر <blank> و <rescan> با هر ترتیبی باشد.

این عنصر برای نگهداری رشته‌هایی است که کاربرد یک پیکربندی را توصیف می‌کنند. این رشته می‌تواند از طریق gettext ترجمه شود. ویژگی 'domain' باید روی نام مناسب تنظیم شود تا اعمال گردد. کتابخانهٔ fontconfig تلاش خواهد کرد ترجمه‌ها را با 'domain' از gettext دریافت کند.

قلم‌ها اغلب شامل گلیف‌های "خراب" هستند که در کدگذاری ظاهر می‌شوند اما روی صفحه به‌صورت خالی رسم می‌شوند. درون عنصر <blank>، هر نویسه یونیکد را که باید خالی باشد در یک عنصر <int> قرار دهید. نویسه‌های خارج از این مجموعه که به‌صورت خالی رسم شوند، از مجموعه نویسه‌های پشتیبانی‌شده توسط قلم حذف خواهند شد.

این عنصر حاوی نام شاخه‌ای است که به عنوان مسیر 'as-path' در اطلاعات حافظه پنهان نگاشت خواهد شد. این ویژگی زمانی مفید است که نام شاخه یک نام مستعار (از طریق bind mount یا پیوند نمادین) به شاخه دیگری در سامانه باشد که اطلاعات قلم در حافظه پنهان آن احتمالاً از پیش موجود است.

ویژگی 'salt' مانند عنصر <dir> بر تعیین نام پرونده حافظه پنهان اثر می‌گذارد.

این عنصر تمام شاخه‌های قلم که توسط عناصر <dir> اضافه شده‌اند را حذف می‌کند. این ویژگی برای بازنویسی شاخه‌های قلم سامانه و استفاده انحصاری از شاخه‌های قلم اختصاصی مفید است.

عنصر <rescan> یک عنصر <int> را در بر دارد که فاصله زمانی پیش‌فرض بین بررسی‌های خودکار برای تغییرات پیکربندی قلم را مشخص می‌کند. Fontconfig تمام پرونده‌ها و شاخه‌های پیکربندی را اعتبارسنجی کرده و با سپری شدن این بازه زمانی، ساختارهای داده داخلی را به‌طور خودکار بازسازی می‌کند.

این عنصر برای قرار دادن قلم‌ها در فهرست مجاز/غیرمجاز جهت فهرست شدن یا تطبیق استفاده می‌شود. این عنصر شامل عناصر acceptfont و rejectfont است. این فهرست تنها یک‌بار هنگام بارگذاری حافظه پنهان اعمال می‌شود؛ بنابراین اگر می‌خواهید با الگوهایی فیلتر کنید، الگوها تنها با موارد موجود در حافظه پنهان ارزیابی می‌شوند. به عبارت دیگر، الگوهای هدف به جز "scan" هیچ اثری نخواهند داشت.

قلم‌های منطبق با یک عنصر acceptfont "مجاز" تلقی می‌شوند؛ چنین قلم‌هایی صریحاً در مجموعه قلم‌های مورد استفاده برای پاسخ به درخواست‌های فهرست و تطبیق گنجانده می‌شوند؛ گنجاندن آن‌ها در این فهرست از "غیرمجاز" شدن آن‌ها توسط یک عنصر rejectfont محافظت می‌کند. عناصر acceptfont شامل عناصر glob و pattern هستند که برای تطبیق قلم‌ها به کار می‌روند.

قلم‌های منطبق با یک عنصر rejectfont "غیرمجاز" تلقی می‌شوند؛ چنین قلم‌هایی از مجموعه قلم‌های مورد استفاده برای پاسخ به درخواست‌های فهرست و تطبیق حذف می‌شوند، گویی در سامانه وجود ندارند. عناصر rejectfont شامل عناصر glob و pattern هستند که برای تطبیق قلم‌ها به کار می‌روند.

عناصر glob الگوهای تطبیق نام پرونده به سبک پوسته (شامل ? و *) را نگه می‌دارند که قلم‌ها را بر اساس مسیر کامل آن‌ها مطابقت می‌دهد. اگر با '~' آغاز شود، به شاخه‌ای در شاخه خانگی کاربر اشاره دارد. این عنصر می‌تواند برای حذف مجموعه‌ای از شاخه‌ها (/usr/share/fonts/uglyfont*) یا انواع خاصی از پرونده‌های قلم (*.pcf.gz) استفاده شود، اما سازوکار اخیر به شدت به قراردادهای نام‌گذاری پرونده وابسته است که قابل اتکا نیستند. توجه داشته باشید که globها فقط برای شاخه‌ها اعمال می‌شوند، نه قلم‌های تکی.

عناصر pattern تطبیق به سبک فهرست را روی قلم‌های ورودی انجام می‌دهند؛ یعنی شامل فهرستی از عناصر و مقادیر متناظر هستند. اگر همهٔ آن عناصر دارای مقدار منطبق باشند، الگو با قلم مطابقت دارد. این روش می‌تواند برای انتخاب قلم‌ها بر اساس ویژگی‌های قلم (scalable، bold و غیره) استفاده شود که سازوکاری قابل‌اعتمادتر از پسوندهای پرونده است. عناصر pattern شامل عناصر patelt هستند.

عناصر patelt یک عنصر الگوی منفرد و فهرستی از مقادیر را نگه می‌دارند. آن‌ها باید یک ویژگی 'name' داشته باشند که نام عنصر الگو را مشخص می‌کند. عناصر patelt شامل عناصر int، double، string، matrix، bool، charset و const هستند.

این عنصر ابتدا فهرستی (احتمالاً خالی) از عناصر <test> و سپس فهرستی (احتمالاً خالی) از عناصر <edit> را نگه می‌دارد. الگوهایی که با تمام آزمون‌ها مطابقت داشته باشند مشمول تمام ویرایش‌ها می‌شوند. اگر 'target' به جای مقدار پیش‌فرض "pattern" روی "font" تنظیم شود، این عنصر به جای الگوی قلمِ در حال تطبیق، بر نام قلم حاصل از یک تطبیق اعمال می‌شود. اگر 'target' روی "scan" تنظیم شود، این عنصر هنگام پویش قلم برای ساخت پایگاه داده fontconfig اعمال می‌گردد.

این عنصر شامل یک مقدار منفرد است که با ویژگی "property" هدف ('pattern'، 'font'، 'scan' یا 'default') مقایسه می‌شود. 'compare' می‌تواند یکی از مقادیر "eq"، "not_eq"، "less"، "less_eq"، "more"، "more_eq"، "contains" یا "not_contains" باشد. 'qual' می‌تواند مقدار پیش‌فرض "any" باشد (که در آن صورت اگر هر مقداری مرتبط با ویژگی با مقدار آزمون مطابقت داشته باشد تطبیق موفق است) یا "all" باشد (که در این صورت تمام مقادیر مرتبط با ویژگی باید با مقدار آزمون مطابقت داشته باشند). 'ignore-blanks' یک مقدار بولی می‌گیرد؛ اگر روی "true" تنظیم شود، فاصله‌های خالی در رشته هنگام مقایسه نادیده گرفته می‌شوند. این گزینه تنها زمانی مؤثر است که compare="eq" یا compare="not_eq" باشد. هنگامی که در یک عنصر <match target="font"> استفاده می‌شود، ویژگی target= در عنصر <test> مشخص می‌کند که تطبیق روی الگوی اصلی انجام شود یا روی قلم. مقدار "default" همان هدفی را انتخاب می‌کند که عنصر <match> بیرونی انتخاب کرده است.

این عنصر حاوی فهرستی از عناصر عبارت (هر یک از عناصر مقدار یا عملگر) است. عناصر عبارت در زمان اجرا ارزیابی شده و ویژگی "property" را تغییر می‌دهند. این تغییر بستگی به این دارد که آیا "property" توسط یکی از عناصر <test> مرتبط تطبیق داده شده است یا خیر؛ در این صورت، تغییر ممکن است نخستین مقدار منطبق را تحت تأثیر قرار دهد. هر مقداری که در ویژگی درج شود پیوند مشخص‌شده ("strong"، "weak" یا "same") را دریافت می‌کند که در پیوند "same" از مقدار عنصر الگوی منطبق استفاده می‌شود. مقدار 'mode' یکی از موارد زیر است:

Mode                    With Match              Without Match
---------------------------------------------------------------------
"assign"                جایگزینی مقدار منطبق    جایگزینی تمام مقادیر
"assign_replace"        جایگزینی تمام مقادیر    جایگزینی تمام مقادیر
"prepend"               افزودن پیش از مقدار منطبق افزودن به ابتدای فهرست
"prepend_first"         افزودن به ابتدای فهرست  افزودن به ابتدای فهرست
"append"                افزودن پس از مقدار منطبق  افزودن به انتهای فهرست
"append_last"           افزودن به انتهای فهرست  افزودن به انتهای فهرست
"delete"                حذف مقدار منطبق         حذف تمام مقادیر
"delete_all"            حذف تمام مقادیر         حذف تمام مقادیر

این عناصر یک مقدار منفرد از نوع مشخص‌شده را نگه می‌دارند. عناصر <bool> مقدار true یا false را نگه می‌دارند. یک محدودیت مهم در پردازش اعداد اعشاری وجود دارد -- fontconfig نیاز دارد که بخش اعشاری با یک رقم آغاز شود نه با ممیز؛ بنابراین برای مقادیر کاملاً کسری یک صفر در ابتدا درج کنید (مثلاً از 0.5 به جای .5 و از -0.5 به جای -.5 استفاده کنید). همچنین ویژگی xsi:nil برای نشان دادن عنصر خالی پشتیبانی می‌شود.

این عنصر چهار عبارت عددی از یک تبدیل همگن (affine transformation) را نگه می‌دارد. در ساده‌ترین حالت این‌ها چهار عنصر <double> خواهند بود اما می‌توانند عبارات پیچیده‌تری نیز باشند.

این عنصر دو عنصر <int> برای نمایش یک بازه را در بر دارد.

این عنصر شامل حداقل یک یا چند عنصر <int> برای کدنویسهٔ یونیکد است. ویژگی xsi:nil نیز برای نشان دادن عنصر خالی پشتیبانی می‌شود.

این عنصر حداقل یک یا چند عنصر <string> از زبان‌های به سبک RFC-3066 را نگه می‌دارد. ویژگی xsi:nil نیز برای نشان دادن عنصر خالی پشتیبانی می‌شود.

نام یک ویژگی را نگه می‌دارد. به نخستین مقدار از ویژگی الگو ارزیابی می‌شود. اگر ویژگی 'target' وجود نداشته باشد، به طور پیش‌فرض روی 'default' تنظیم می‌شود که در این صورت در طول تطبیق target="font" ویژگی از الگوی قلم و در طول تطبیق target="pattern" از الگو بازگردانده می‌شود. این ویژگی همچنین می‌تواند مقادیر 'font' یا 'pattern' را بگیرد تا به صراحت مشخص کند کدام الگو استفاده شود. استفاده از هدف 'font' در تطبیقی که دارای target="pattern" است خطا محسوب می‌شود.

نام یک مقدار ثابت را نگه می‌دارد. ویژگی xsi:nil نیز برای نشان دادن عنصر خالی پشتیبانی می‌شود؛ این ثوابت همواره اعداد صحیح هستند و به عنوان نام‌های نمادین برای مقادیر رایج قلم به کار می‌روند:

Constant        Property        Value
-------------------------------------
thin            weight          0
extralight      weight          40
ultralight      weight          40
light           weight          50
demilight       weight          55
semilight       weight          55
book            weight          75
regular         weight          80
normal          weight          80
medium          weight          100
demibold        weight          180
semibold        weight          180
bold            weight          200
extrabold       weight          205
ultrabold       weight          205
black           weight          210
heavy           weight          210
extrablack      weight          215
ultrablack      weight          215
roman           slant           0
italic          slant           100
oblique         slant           110
ultracondensed  width           50
extracondensed  width           63
condensed       width           75
semicondensed   width           87
normal          width           100
semiexpanded    width           113
expanded        width           125
extraexpanded   width           150
ultraexpanded   width           200
proportional    spacing         0
dual            spacing         90
mono            spacing         100
charcell        spacing         110
unknown         rgba            0
rgb             rgba            1
bgr             rgba            2
vrgb            rgba            3
vbgr            rgba            4
none            rgba            5
lcdnone         lcdfilter       0
lcddefault      lcdfilter       1
lcdlight        lcdfilter       2
lcdlegacy       lcdfilter       3
hintnone        hintstyle       0
hintslight      hintstyle       1
hintmedium      hintstyle       2
hintfull        hintstyle       3
serif           genericfamily   1
sans-serif      genericfamily   2
monospace       genericfamily   3
cursive         genericfamily   4
fantasy         genericfamily   5
system-ui       genericfamily   6
ui-serif        genericfamily   7
ui-sans-serif   genericfamily   8
ui-monospace    genericfamily   9
ui-rounded      genericfamily   10
emoji           genericfamily   11
math            genericfamily   12
fangsong        genericfamily   13

این عناصر عملیات مشخص‌شده را روی فهرستی از عناصر عبارت انجام می‌دهند. عناصر <or> و <and> منطقی (بولی) هستند، نه بیتی.

این عناصر دو مقدار را با یکدیگر مقایسه کرده و یک نتیجه بولی تولید می‌کنند.

ارزش بولی تک‌عنصر عبارت خود را معکوس می‌کند.

این عنصر سه عنصر عبارت را می‌گیرد؛ اگر مقدار اولی true باشد، مقدار دومی را تولید می‌کند، در غیر این صورت مقدار سومی را بازمی‌گرداند.

عناصر alias نماد خلاصه‌شده‌ای برای مجموعه‌ای از عملیات تطبیق رایج جهت جایگزینی یک خانواده قلم با خانواده دیگر ارائه می‌دهند. آن‌ها شامل یک عنصر <family> و به دنبال آن عناصر اختیاری <prefer>، <accept> و <default> هستند. قلم‌های منطبق با عنصر <family> طوری ویرایش می‌شوند که فهرست خانواده‌های <prefer> پیش از <family> منطبق اضافه شده، خانواده‌های <accept> بعد از <family> منطبق درج گردند و خانواده‌های <default> به انتهای فهرست خانواده اضافه شوند.

یک نام منفرد از خانواده قلم را نگه می‌دارد.

این عناصر فهرستی از عناصر <family> را برای استفاده توسط عنصر <alias> نگهداری می‌کنند.

این نمونه‌ای از یک پرونده پیکربندی سراسری در سطح سامانه است:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<!-- پرونده /etc/fonts/fonts.conf برای پیکربندی دسترسی به قلم‌های سامانه -->
<fontconfig>
  <!--
    یافتن قلم‌ها در این شاخه‌ها
  -->
  <dir>/usr/share/fonts</dir>
  <dir>/usr/X11R6/lib/X11/fonts</dir>
  <!--
    پذیرش نام مستعار منسوخ 'mono' و جایگزینی آن با 'monospace'
  -->
  <match target="pattern">
    <test qual="any" name="family">
      <string>mono</string>
    </test>
    <edit name="family" mode="assign">
      <string>monospace</string>
    </edit>
  </match>
  <!--
    اختصاص 'sans-serif' به نام‌هایی که شامل هیچ نام مستعار شناخته‌شده‌ای نیستند
  -->
  <match target="pattern">
    <test qual="all" name="family" compare="not_eq">
      <string>sans-serif</string>
    </test>
    <test qual="all" name="family" compare="not_eq">
      <string>serif</string>
    </test>
    <test qual="all" name="family" compare="not_eq">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append_last">
      <string>sans-serif</string>
    </edit>
  </match>
  <!--
    بارگذاری پرونده سفارشی‌سازی کاربر، بدون خطا در صورت عدم وجود
  -->
  <include ignore_missing="yes" prefix="xdg">
    fontconfig/fonts.conf
  </include>
  <!--
    بارگذاری پرونده‌های سفارشی‌سازی محلی، بدون خطا در صورت عدم وجود
  -->
  <include ignore_missing="yes">conf.d</include>
  <include ignore_missing="yes">local.conf</include>
  <!--
    نام مستعار قلم‌های شناخته‌شده به قلم‌های موجود TrueType.
    این جایگزینی چهره‌های TrueType به جای Type1 مشابه ظاهر صفحه را بهبود می‌بخشد.
  -->
  <alias>
    <family>Times</family>
    <prefer>
      <family>Times New Roman</family>
    </prefer>
    <default>
      <family>serif</family>
    </default>
  </alias>
  <alias>
    <family>Helvetica</family>
    <prefer>
      <family>Arial</family>
    </prefer>
    <default>
      <family>sans-serif</family>
    </default>
  </alias>
  <alias>
    <family>Courier</family>
    <prefer>
      <family>Courier New</family>
    </prefer>
    <default>
      <family>monospace</family>
    </default>
  </alias>
  <!--
    ارائه نام‌های مستعار لازم برای نام‌های استاندارد.
    این کار پس از پرونده پیکربندی کاربر انجام می‌شود تا نام‌های مستعار کاربر در اولویت باشند.
  -->
  <alias>
    <family>serif</family>
    <prefer>
      <family>Times New Roman</family>
    </prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Arial</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Andale Mono</family>
    </prefer>
  </alias>
  <!--
    نمونه‌ای از نیازمندی‌های عملگر OR؛
    اگر 'family' شامل 'Courier New' یا 'Courier' باشد، 'monospace' به عنوان جایگزین افزوده شود
  -->
  <match target="pattern">
    <test name="family" compare="eq">
      <string>Courier New</string>
    </test>
    <edit name="family" mode="prepend">
      <string>monospace</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="family" compare="eq">
      <string>Courier</string>
    </test>
    <edit name="family" mode="prepend">
      <string>monospace</string>
    </edit>
  </match>
</fontconfig>

این نمونه‌ای از پرونده پیکربندی برای هر کاربر است که در $XDG_CONFIG_HOME/fontconfig/fonts.conf قرار می‌گیرد:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<!--
  پرونده $XDG_CONFIG_HOME/fontconfig/fonts.conf برای پیکربندی قلم کاربر
-->
<fontconfig>
  <!--
    شاخه اختصاصی قلم‌ها
  -->
  <dir prefix="xdg">fonts</dir>
  <!--
    استفاده از ترتیب زیرپیکسل rgb برای بهبود ظاهر گلیف‌ها در نمایشگرهای LCD.
    تغییراتی که روی رندر اثر می‌گذارند نه تطبیق، همیشه باید از target="font" استفاده کنند.
  -->
  <match target="font">
    <edit name="rgba" mode="assign">
      <const>rgb</const>
    </edit>
  </match>
  <!--
    استفاده از قلم WenQuanYi Zen Hei هنگامی که برای زبان چینی serif درخواست می‌شود
  -->
  <match>
    <!--
      اگر نمی‌خواهید از قلم WenQuanYi Zen Hei برای zh-tw و غیره استفاده کنید،
      می‌توانید از zh-cn به جای zh استفاده کنید.
      توجه داشته باشید حتی اگر zh-cn را تنظیم کنید، باز هم با zh تطبیق داده می‌شود.
      اگر مایل به این رفتار نیستید، می‌توانید از compare="eq" به جای compare="contains" استفاده کنید.
    -->
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>WenQuanYi Zen Hei</string>
    </edit>
  </match>
  <!--
    استفاده از قلم VL Gothic هنگامی که برای زبان ژاپنی sans-serif درخواست می‌شود
  -->
  <match>
    <test name="lang" compare="contains">
      <string>ja</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>VL Gothic</string>
    </edit>
  </match>
</fontconfig>

fonts.conf شامل اطلاعات پیکربندی کتابخانه fontconfig است که از شاخه‌های مورد جستجو برای یافتن اطلاعات قلم و همچنین دستورالعمل‌های ویرایش الگوهای مشخص‌شده توسط برنامه قبل از تطبیق با قلم‌های موجود تشکیل شده است. این پرونده در قالب XML است.

conf.d نام مرسوم برای شاخه‌ای از پرونده‌های پیکربندی اضافی است که توسط برنامه‌های خارجی یا مدیر محلی سامانه مدیریت می‌شوند. نام پرونده‌هایی که با ارقام ده‌دهی آغاز می‌شوند به ترتیب واژگانی مرتب شده و به عنوان پرونده‌های پیکربندی اضافی استفاده می‌شوند. تمام این پرونده‌ها در قالب XML هستند. پرونده اصلی fonts.conf از طریق یک دستور <include> به این شاخه ارجاع می‌دهد.

fonts.dtd یک DTD است که قالب پرونده‌های پیکربندی را توصیف می‌کند.

$XDG_CONFIG_HOME/fontconfig/conf.d و ~/.fonts.conf.d نام‌های مرسوم برای شاخه پیکربندی‌های اختصاصی هر کاربر (معمولاً تولیدشده به صورت خودکار) هستند، اگرچه مکان واقعی در پرونده سراسری fonts.conf مشخص می‌شود. لطفاً توجه داشته باشید که ~/.fonts.conf.d اکنون منسوخ شده است و در نسخه‌های آینده به طور پیش‌فرض خوانده نخواهد شد.

$XDG_CONFIG_HOME/fontconfig/fonts.conf و ~/.fonts.conf مکان مرسوم برای پیکربندی قلم اختصاصی هر کاربر هستند، اگرچه مکان واقعی در پرونده سراسری fonts.conf مشخص می‌شود. لطفاً توجه داشته باشید که ~/.fonts.conf اکنون منسوخ شده است و در نسخه‌های آینده به طور پیش‌فرض خوانده نخواهد شد.

$XDG_CACHE_HOME/fontconfig/*.cache-* و ~/.fontconfig/*.cache-* مخزن مرسوم اطلاعات قلم است که در حافظه پنهان مربوط به هر شاخه یافت نمی‌شود. این پرونده به صورت خودکار توسط fontconfig نگهداری می‌شود. لطفاً توجه داشته باشید که ~/.fontconfig/*.cache-* اکنون منسوخ شده است و در نسخه‌های آینده به طور پیش‌فرض خوانده نخواهد شد.

FONTCONFIG_FILE برای بازنویسی و تغییر پرونده پیکربندی پیش‌فرض استفاده می‌شود.

FONTCONFIG_PATH برای بازنویسی و تغییر شاخه پیکربندی پیش‌فرض استفاده می‌شود.

FONTCONFIG_SYSROOT برای تعیین شاخه ریشه سامانه (sysroot) پیش‌فرض استفاده می‌شود.

FC_DEBUG برای خروجی دادن پیام‌های تفصیلی اشکال‌زدایی استفاده می‌شود. برای جزئیات بیشتر به بخش «اشکال‌زدایی برنامه‌ها» مراجعه کنید.

FC_DBG_MATCH_FILTER برای فیلتر کردن الگوها استفاده می‌شود. این متغیر فهرستی از نام‌های شیء جدا شده با کاما را دریافت می‌کند و تنها زمانی اثر دارد که FC_DEBUG شامل MATCH2 باشد. برای جزئیات بیشتر به بخش «اشکال‌زدایی برنامه‌ها» مراجعه کنید.

FC_LANG برای مشخص کردن زبان پیش‌فرض به عنوان پیوند ضعیف در پرس‌وجو استفاده می‌شود. اگر تنظیم نشده باشد، زبان پیش‌فرض از محلی (locale) جاری سامانه تعیین می‌شود.

FONTCONFIG_USE_MMAP برای کنترل استفاده از mmap(2) برای پرونده‌های حافظه پنهان در صورت وجود استفاده می‌شود. این متغیر یک مقدار بولی می‌گیرد. کتابخانه Fontconfig بررسی می‌کند که آیا پرونده‌های حافظه پنهان روی سامانه‌پرونده‌ای ذخیره شده‌اند که استفاده از mmap(2) برای آن امن است یا خیر. تنظیم صریح این متغیر محیطی موجب نادیده گرفتن این بررسی و اجبار به استفاده یا عدم استفاده از mmap(2) می‌شود.

SOURCE_DATE_EPOCH برای اطمینان از اینکه fc-cache(1) پرونده‌ها را به صورت قطعی و تکرارپذیر جهت پشتیبانی از ساخت‌های تکرارپذیر (reproducible builds) تولید می‌کند استفاده می‌شود. هنگامی که روی یک نمایش عددی از برچسب زمان یونیکس (UNIX timestamp) تنظیم شود، fontconfig این مقدار را بر استفاده از برچسب‌های زمانی تغییر پرونده‌های ورودی ترجیح می‌دهد تا تشخیص دهد کدام پرونده‌های حافظه پنهان نیاز به بازتولید دارند. اگر SOURCE_DATE_EPOCH تنظیم نشده باشد (یا جدیدتر از mtime شاخه باشد)، رفتار پیشین بدون تغییر باقی می‌ماند.

FONTCONFIG_WARN_INVALID_ATTRS برای فعال‌سازی مجدد هشدارهای ویژگی‌های نامعتبر در پرونده‌های پیکربندی استفاده می‌شود.

fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1), SOURCE_DATE_EPOCH <URL:https://reproducible-builds.org/specs/source-date-epoch/>.

Fontconfig نسخه 2.18.3

23 August 2026