Kommentarer
- Jeg vil starte med at læse API-dokumentationen, som kan findes her freedesktop.org/software/ fontconfig / fontconfig-devel
- @PaulH. Jeg læste abstrakt denne dokumentation tidligere. Faktisk forklarer dette dokument mere om funktionerne og datatyperne osv., Men ikke hvordan hvert modul fungerer eller nogen idé relateret til det 🙁
- OK. Men hvis du vil forstå kildekoden, vil denne dokumentation være nyttig siden datatyperne og funktionerne bruges i kildekoden. Hvad er dit mål præcist? Er det at vide, hvordan du bruger de kommandoer, du nævnte, eller at forstå, hvad der præcist foregår " under emhætten "?
- @PaulH. Mit hovedmål er begge du nævnte, men det første mål er, hvad der faktisk sker?
Svar
TL; DR: Forståelse af fontconfig kræver forståelse af, hvorfor den blev oprettet, og hvilke problemer den forsøger at løse. Det kræver en masse forståelse af Xorg.
Skrifttypekonfiguration på UNIX-maskiner gik gennem forskellige faser og fontconfig er simpelthen en af de muligheder, du kan bruge til brug skrifttyper gennem Xorg. At læse kilden til fontconfig uden en god forståelse af kilden til Xorg er sandsynligvis meget vanskelig. Men jeg tror, at en forståelse af begreberne bag udviklingen af skrifttyper kan vise sig at være et anstændigt udgangspunkt.
Ansvarsfraskrivelse: Jeg beskæftiger mig meget med skrifttyper på Linux, men jeg havde aldrig rigtig brug for at ændre Xorg-kode relateret til skrifttyper.
Arch Linux-wiki har også en masse information om dette
En smule historie
Originale UNIX-skrifttyper var simpelthen bitmap-skrifttyper. I dag kan disse findes i /usr/share/fonts/misc
, PCF (bærbart kompileret format) bruges til stort set alle dem i dag. Det er et binært format. Der har været andre formater for binære skrifttyper, men jeg må indrømme, at jeg aldrig havde brug for noget andet format end PCF til binære skrifttyper. Ved hjælp af xfontsel
kan du konfigurere en Xorg-streng til at definere punkter, afstand, pixelstørrelse, terminalvægt (fed, skrå), kodning, blandt andre skrifttyper.
Bitmap-skrifttyperne har forskellige filer til forskellige pixelstørrelser på skrifttypen. Bitmap-skrifttyperne introducerer allerede begrebet skrifttypefamilie.
Postscript (og til en vis grad TeX) oprettede Type 1-skrifttyper, der er vektorbaserede skrifttyper. Disse findes i /usr/share/fonts/Type1
. Vektorskrifttyper er konfigureret med flere konfigurationsværdier, f.eks. antialias, embolden, dpi eller størrelse (ikke nødvendigvis punktbaseret denne gang).
Vektorbaserede skrifttyper skaleres og kræver ikke flere filer.
Xorg brugte både bitmap- og Type1-skrifttyper . Og det skabte XFT (godt X FreeType er en grænseflade til FreeType, som er et GPL / BSD-bibliotek, der efterligner og udvider Type1). XFT tillader ikke kun brugen af Type1- og FreeType-skrifttyper, men også andre formater: OTF af Adobe og Microsoft, TTF af Apple. Desuden tillader XFT, at de gamle bitmap-skrifttyper skaleres til at ligne Type1-skrifttyper.
Flere andre attributter, som hinting eller hintstyle , blev tilføjet for at definere attributter af disse skrifttyper.
Alt, hvad der findes i undermapper til /usr/share/fonts
. Og XFT-parametre kan konfigureres i din Xresources
.
FontConfig
Og fontconfig
skal håndtere alle uoverensstemmelser i ovenstående . Med andre ord er fontconfig et forsøg på at konfigurere alle ovenstående skrifttyper på en måde, der kan udnytte de attributter, som de forskellige skrifttyper har med en fælles syntaks.
Bitmapskrifttyperne har deres problemer:
- flere forskellige filer til en enkelt skrifttype
- begrænset størrelse efter punkter og pixelstørrelser.
Men det gør også de vektorbaserede skrifttyper:
- skalering tager tid, især hvis der bruges flere parametre
- ikke alle skrifttypeattributter påvirker forskellige skrifttyper på samme måde
Og begge har problemet med, at der er mange skrifttypeformater, og at en bruger muligvis ønsker at installere egne skrifttyper i sit hjem. Fontconfig forsøger at løse disse problemer.
fc-query
fortæller dig, hvad fontconfig forstår om fontfilen. Især hvilke attributter filen er til (f.eks. For bitmap-skrifttyper), og hvilke attributter der kan bruges (for vektorskrifttyper).
fc-list
er en måde at fortælle dig, hvilke skrifttyper der findes i mapperne, fontconfig ser på, og derfor kan de bruges af applikationer. Endelig udfører fc-cache
en indeksering af disse skrifttyper for at finde dem lettere og til at skalere dem (blandt andet) til applikationsbrug.
Fontocnfig delte bibliotek på den anden hånd er den mest interessante del. Det bruger konfigurationsfilerne (/etc/fonts
, ~/.config/fontconfig
) og skrifttypecachen til at give forberedte skrifttyper direkte til applikationer, der er knyttet til den. Da de fleste applikationer brugte XFT (og derfor FreeType), og FreeType-biblioteket bruger opkald fra fontconfig-biblioteket, bliver brugen af disse skrifttyper allestedsnærværende.
Men bemærk at du kan kompilere et program, der beder Xorg om en bitmap-skrifttype i den gamle stil (f.eks. -*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u
), og opkaldet går ikke gennem fontconfig-delte lib.
Kommentarer
- Tak for dit detaljerede svar. Jeg forstår hvad du prøver at sige. Faktisk definerede du Fc-forespørgsel og fc-liste, men jeg vil gerne vide ting som når et eller andet legetøjsprogram prøver at bruge FC og dets funktioner, hvor sendes anmodningen først? jeg mener hvad er udgangspunktet? Jeg forsøgte at tilføje en erklæring som printf (" test ") i hovedfunktionen i fc-forespørgsel og end jeg skrev kommandoen fc-forespørgsel fra terminal, men det kunne jeg ikke se. jeg kompilerede det igen ved hjælp af kommandoen make
- @AmmarUlHassan – Heh,
printf("something")
bruger aldrig fontconfig-bibliotek ' fordi det, der beskæftiger sig med skrifttypen, er terminalemulatoren. For at bruge fontconfig har du brug for et program, der er knyttet til X11, og det skal tegne skrifttyperne på skærmen af sig selv. Men hvis du kan ' t få enprintf
i main () for at vise på terminalen, der sandsynligvis er et PATH-problem, ' fordi du bestemt ikke har fontconfig allerede installeret. - ok fint. Men hvad hvis jeg vil have et lille script i fontconfig, som faktisk kan kalde en eller anden funktion af et andet delt bibliotek på mit system. Ideelt scenarie er, at jeg vil tilføje en headerfil af den lib i fontconfig (en fil, jeg ikke ved hvilken 1), og end jeg vil kompilere fontconfig igen og køre den fil, så den kalder funktionen af dette bibliotek.
- @AmmarUlHassan – At ' er for mange ting. Fontconfig er ikke et scriptmiljø, det gør simpelthen, hvad det er meningen at gøre: Tilvejebring af forudpolerede / cachede skrifttyper, som Xorg kan vises, når ti opdaterer skærmen. Hvis du har brug for applikationer til at bruge det delte bibliotek i fontconfig, du har kompileret, skal du omkonfigurere
ldconfig
for at bruge dit delte bibliotek i stedet for det bibliotek, derlibfreetype2
ringer i øjeblikket. Jeg har indtryk af, at du ' forsøger at bide på for mange ting på én gang. - ha ha ja kan være … Så konklusionen er, at inden du graver dybt skal jeg forstå historien? Xft? og end FC-funktioner og datatyper?