Gesloten. Deze vraag is off-topic . Het accepteert momenteel geen antwoorden.

Opmerkingen

  • Ik zou beginnen met het lezen van de API-documentatie die hier te vinden is freedesktop.org/software/ fontconfig / fontconfig-devel
  • @PaulH. Ik heb deze documentatie eerder abstract gelezen. Eigenlijk legt dit document meer uit over de functies en datatypes enz. Maar niet hoe elke module werkt of enig idee dat daarmee verband houdt 🙁
  • OK. Maar als je de broncode wilt begrijpen, zal die documentatie nuttig zijn aangezien de gegevenstypen en functies worden gebruikt in de broncode. Wat is precies uw doel? Is het om te weten hoe u de genoemde opdrachten moet gebruiken of om te begrijpen wat er precies aan de hand is " onder the hood "?
  • @PaulH. Mijn belangrijkste doel is dat jullie allebei genoemd worden, maar het eerste doel is wat er werkelijk gebeurt?

Answer

TL; DR: Om fontconfig te begrijpen, moet u begrijpen waarom het is gemaakt en welke problemen het probeert op te lossen. Dat vereist veel kennis van Xorg.

Lettertype-configuratie op UNIX-machines heeft verschillende fasen doorlopen en fontconfig is gewoon een van de mogelijkheden die u kunt gebruiken gebruik lettertypen via Xorg. Het lezen van de broncode van fontconfig zonder een goed begrip van de bron van Xorg is waarschijnlijk erg moeilijk. Maar ik geloof dat een goed begrip van de concepten achter de evolutie van lettertypen een goed startpunt kan zijn.

Disclaimer: ik heb veel te maken met lettertypen op Linux, maar ik hoefde nooit echt de Xorg-code te wijzigen met betrekking tot naar lettertypen.

De Arch Linux-wiki heeft hier ook veel informatie over

Een beetje geschiedenis

Originele UNIX-lettertypen waren gewoon bitmaplettertypen. Tegenwoordig zijn deze te vinden in /usr/share/fonts/misc, de PCF (portable gecompileerd formaat) wordt tegenwoordig voor vrijwel allemaal gebruikt. Het is een binair formaat. Er zijn andere formaten van binaire lettertypen geweest, maar ik moet toegeven dat ik nooit een ander formaat dan PCF hoefde te gebruiken voor binaire lettertypen. Met xfontsel kun je een Xorg-string configureren om onder andere de punten, de afstand, de pixelgrootte, het gewicht van de terminal (vet, schuin), codering en andere lettertypen te definiëren.

De bitmaplettertypen hebben verschillende bestanden voor verschillende pixelgroottes van het lettertype. De bitmap-lettertypen introduceren al het concept van lettertypefamilie.

Postscript (en tot op zekere hoogte TeX) heeft Type 1-lettertypen gemaakt die op vector gebaseerde lettertypen zijn. Deze staan in /usr/share/fonts/Type1. Vectorlettertypen zijn geconfigureerd met verschillende configuratiewaarden, bijv. antialias, aanmoedigen, dpi of grootte (dit keer niet noodzakelijk puntgebaseerd).

Vectorgebaseerde lettertypen zijn geschaald en vereisen niet meerdere bestanden.

Xorg gebruikte zowel bitmap- als Type1-lettertypen . En het creëerde de XFT (nou, X FreeType is een interface naar FreeType, een GPL / BSD-bibliotheek die Type1 nabootst en uitbreidt). XFT maakt niet alleen het gebruik van Type1- en FreeType-lettertypen mogelijk, maar ook van andere formaten: OTF door Adobe en Microsoft, TTF door Apple. Bovendien maakt XFT het schalen van de oude bitmaplettertypen mogelijk om eruit te zien als Type1-lettertypen.

Verschillende andere kenmerken, zoals hinting of hintstyle , werden toegevoegd om attributen te definiëren van deze lettertypen.

Dat alles is te vinden in submappen van /usr/share/fonts. En XFT-parameters kunnen worden geconfigureerd in uw Xresources.

FontConfig

En fontconfig moet alle discrepanties van de bovenstaande oplossen. Met andere woorden fontconfig is een poging om alle lettertypen hierboven te configureren op een manier die gebruik kan maken van de attributen die de verschillende lettertypen hebben met een gemeenschappelijke syntaxis.

De bitmaplettertypen hebben hun problemen:

  • verschillende bestanden voor een enkel lettertype
  • beperkte grootte door punten en pixelgroottes.

Maar dat geldt ook voor de vectorgebaseerde lettertypen:

  • schalen kost tijd, vooral als er meerdere parameters worden gebruikt
  • niet alle fontattributen hebben op dezelfde manier invloed op verschillende fonttypes

En beide hebben het probleem dat er veel lettertypeformaten zijn, en dat een gebruiker wellicht zijn eigen lettertypen in zijn huis wil installeren. Fontconfig probeert deze problemen op te lossen.

fc-query vertelt je wat fontconfig begrijpt over het lettertypebestand. Met name voor welke attributen het bestand is (bijvoorbeeld voor bitmaplettertypen) en welke attributen kunnen worden gebruikt (voor vectorlettertypen).

fc-list is een manier om u te vertellen welke lettertypen kunnen worden gevonden in de mappen waar fontconfig naar kijkt, en die daarom door applicaties kunnen worden gebruikt. Ten slotte voert fc-cache een indexering van deze lettertypen uit om ze gemakkelijker te vinden en ze te schalen (onder andere) voor gebruik in de toepassing.

De fontocnfig gedeelde bibliotheek aan de andere kant hand is het meest interessante deel. Het gebruikt de configuratiebestanden (/etc/fonts, ~/.config/fontconfig) en de lettertypecache om vooraf voorbereide lettertypen rechtstreeks aan toepassingen te geven die eraan zijn gekoppeld. Aangezien de meeste toepassingen XFT (en dus FreeType) gebruikten en de FreeType-bibliotheek aanroepen uit de fontconfig-bibliotheek gebruikt, wordt het gebruik van deze lettertypen alomtegenwoordig.

Maar merk op dat u een programma kunt compileren dat Xorg om een bitmap-lettertype in de oude stijl (bijv. -*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u) en de oproep zal niet door de fontconfig gedeelde lib gaan.

Opmerkingen

  • Bedankt voor je gedetailleerde antwoord, ik begrijp wat je probeert te zeggen. Eigenlijk heb je Fc-query en fc-list gedefinieerd, maar ik wil dingen weten zoals wanneer een speelgoedniveau-programma FC en zijn functies probeert te gebruiken, waar wordt het verzoek voor het eerst verzonden? ik bedoel, wat is het startpunt? Ik heb geprobeerd een statement toe te voegen zoals printf (" testing ") in de hoofdfunctie van fc-query en toen schreef ik het fc-query commando van terminal maar ik kon dat niet zien. ik heb het echter opnieuw gecompileerd met het make-commando.
  • @AmmarUlHassan – Heh, printf("something") zal nooit fontconfig library ' gebruiken want wat met het lettertype te maken heeft, is de terminalemulator. Om fontconfig te gebruiken heb je een programma nodig dat is gekoppeld aan X11, en het moet de fonts zelf op het scherm tekenen. Maar als je ' t een printf in main () kunt krijgen om op de terminal te laten zien dat dit waarschijnlijk een PATH-probleem is, ' want je hebt zeker fontconfig al geïnstalleerd.
  • ok prima. Maar wat als ik een klein script in fontconfig wil dat eigenlijk een functie van een andere gedeelde bibliotheek op mijn systeem kan aanroepen? Ideaal scenario is dat ik een header-bestand van die lib in fontconfig zal toevoegen (een bestand waarvan ik niet weet welke 1) en dan zal ik de fontconfig opnieuw compileren en dat bestand uitvoeren zodat het de functie van die bibliotheek aanroept.
  • @AmmarUlHassan – Dat ' zijn te veel dingen. Fontconfig is geen scriptomgeving, het doet gewoon waarvoor het bedoeld is: vooraf gekopieerde / gecachte lettertypen leveren die Xorg weergeeft wanneer het scherm wordt vernieuwd. Als u toepassingen nodig heeft om de gedeelde bibliotheek van de fontconfig die u heeft gecompileerd te gebruiken, moet u ldconfig opnieuw configureren om uw gedeelde bibliotheek te gebruiken in plaats van de bibliotheek die libfreetype2 belt momenteel. Ik heb de indruk dat je ' probeert te veel dingen tegelijk te bijten.
  • ha ha ja misschien … Dus de conclusie is dat voordat je gaat graven diep moet ik de geschiedenis begrijpen? Xft? en dan FC-functies en datatypes?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *