TL; DR: Înțelegerea fontconfig necesită înțelegerea de ce a fost creat și ce probleme încearcă să rezolve. Acest lucru necesită o înțelegere foarte mare a Xorg.
Configurarea fontului pe mașinile UNIX a trecut prin diferite faze și fontconfig este pur și simplu una dintre posibilitățile pe care le puteți folosi folosiți fonturi prin Xorg. Citirea sursei fontconfig fără o bună înțelegere a sursei Xorg este probabil foarte dificilă. Dar, cred că înțelegerea conceptelor din spatele evoluției fonturilor se poate dovedi un punct de plecare decent.
Disclaimer: Mă ocup foarte mult de fonturi pe Linux, dar niciodată nu am avut nevoie să schimb cu adevărat codul Xorg la fonturi.
wiki Arch Linux are multe informații și despre asta
Un pic de istorie
Fonturile originale UNIX erau pur și simplu fonturi bitmap. Astăzi acestea pot fi găsite în /usr/share/fonts/misc
, PCF (format portabil compilat) este folosit pentru aproape toate astăzi. Este un format binar. Au existat alte formate de fonturi binare, dar trebuie să recunosc că nu am avut niciodată nevoie să folosesc alt format decât PCF pentru fonturi binare. Folosind xfontsel
puteți configura un șir Xorg pentru a defini punctele, spațierea, dimensiunea pixelilor, greutatea terminalului (aldinată, înclinată), codificarea, printre altele, a fontului.
Fonturile bitmap au fișiere diferite pentru diferite dimensiuni de pixeli ale fontului. Fonturile bitmap introduc deja conceptul de familie de fonturi.
Postscript (și TeX într-o oarecare măsură) au creat fonturi de tip 1, care sunt fonturi vectoriale. Acestea sunt în /usr/share/fonts/Type1
. Fonturile vectoriale sunt configurate cu mai multe valori de configurare, de ex. antialias, embolden, dpi sau size (nu neapărat bazat pe puncte de data aceasta).
Fonturile bazate pe vector sunt scalate și nu necesită mai multe fișiere.
Xorg a folosit atât fonturi bitmap, cât și Type1 . Și a creat XFT (bine X FreeType este o interfață pentru FreeType care este o bibliotecă GPL / BSD care imită și extinde Type1). XFT permite nu numai utilizarea fonturilor Type1 și FreeType, ci și alte formate: OTF de Adobe și Microsoft, TTF de Apple. Mai mult, XFT permite scalarea vechilor fonturi bitmap să arate ca fonturile Type1.
Au fost adăugate câteva alte atribute, cum ar fi hinting sau hintstyle , pentru a defini atribute dintre aceste fonturi.
Tot ce se găsește în subfoldere ale /usr/share/fonts
. Și parametrii XFT pot fi configurați în Xresources
.
FontConfig
Și fontconfig
trebuie să facă față tuturor discrepanțelor celor de mai sus . Cu alte cuvinte, fontconfig este o încercare de a configura toate tipurile de font de mai sus într-un mod care poate exploata atributele pe care fonturile distincte le au cu o sintaxă comună.
Fonturile bitmap au problemele lor:
- mai multe fișiere diferite pentru un singur font
- dimensiuni limitate în funcție de puncte și dimensiuni de pixeli.
Dar și fonturile bazate pe vector:
- scalarea necesită timp, mai ales dacă sunt folosiți mai mulți parametri
- nu toate atributele fontului afectează diferite tipuri de fonturi în același mod
Și ambele au problema că există multe formate de fonturi și că un utilizator ar putea dori să instaleze fonturi proprii în casa sa. Fontconfig încearcă să rezolve aceste probleme.
fc-query
vă spune ce înțelegeți fontconfig despre fișierul fontului. În special pentru ce atribute este destinat fișierului (de exemplu, pentru fonturile bitmap) și ce atribute pot fi utilizate (pentru fonturile vectoriale).
fc-list
este o modalitate de a vă spune ce fonturi pot fi găsite în directoarele pe care fontconfig le privește și, prin urmare, pot fi utilizate de aplicații. În cele din urmă, fc-cache
efectuează o indexare a acestor fonturi pentru a le găsi mai ușor și pentru a le scala (printre altele) pentru utilizarea aplicației.
Biblioteca partajată fontocnfig pe cealaltă mâna este cea mai interesantă parte. Folosește fișierele de configurare (/etc/fonts
, ~/.config/fontconfig
) și cache-ul fontului pentru a oferi fonturi pregătite direct aplicațiilor care sunt legate de acesta. Deoarece majoritatea aplicațiilor foloseau XFT (și, prin urmare, FreeType) și biblioteca FreeType utilizează apeluri din biblioteca fontconfig, utilizarea acestor fonturi devine omniprezentă.
Dar rețineți că puteți compila un program care va cere Xorg pentru un font bitmap în stilul vechi (de ex. -*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u
) și apelul nu va trece prin fontconfig partajat lib.
Comentarii
- Vă mulțumim pentru răspunsul dvs. detaliat. Înțeleg ce încercați să spuneți. De fapt, ați definit Fc-query și fc-list, dar vreau să știu lucruri cum ar fi când un program la nivel de jucărie încearcă să folosească FC și funcțiile sale unde este trimisă mai întâi solicitarea? adică care este punctul de plecare? Am încercat să adaug o declarație precum printf (" testare ") în funcția principală fc-query și decât am scris comanda fc-query de la terminal, dar nu am putut vedea asta. L-am compilat din nou prin comanda make, deși
- @AmmarUlHassan – Heh,
printf("something")
nu va folosi niciodată biblioteca fontconfig ' deoarece ceea ce se ocupă cu fontul este emulatorul terminal. Pentru a utiliza fontconfig aveți nevoie de un program legat de X11 și trebuie să deseneze singur fonturile pe ecran. Dar dacă nu puteți ' obține un printf
în main () pentru a afișa pe terminal care este probabil o problemă PATH, ' deoarece sigur aveți deja instalat fontconfig.
- ok bine. Dar dacă vreau un mic script în fontconfig care să poată numi de fapt o funcție a altei biblioteci partajate din sistemul meu. Scenariul ideal este că voi adăuga un fișier antet al libului respectiv în fontconfig (un fișier nu știu care 1) și decât voi recompila fontconfig și voi rula acel fișier astfel încât să apeleze funcția bibliotecii respective.
- @AmmarUlHassan – Că ' sunt prea multe lucruri. Fontconfig nu este un mediu de scriptare, pur și simplu face ceea ce este menit să facă: furnizați fonturi precopilate / memorate în cache pentru ca Xorg să le afișeze când reîmprospătați ecranul. Dacă aveți nevoie de aplicații pentru a utiliza biblioteca partajată a fontconfig pe care ați compilat-o, trebuie să reconfigurați
ldconfig
pentru a utiliza biblioteca partajată în locul bibliotecii pe care libfreetype2
sună în prezent. Am impresia că ' încercați să mușcați prea multe lucruri simultan.
- ha, da, poate fi … Deci, concluzia este că, înainte de a săpa profund trebuie să înțeleg despre istorie? Xft? și decât funcțiile și tipurile de date FC?