Kommentare
- Ich würde mit dem Lesen der API-Dokumentation beginnen, die hier zu finden ist. freedesktop.org/software/ fontconfig / fontconfig-devel
- @PaulH. Ich habe diese Dokumentation früher abstrakt gelesen. Tatsächlich erklärt dieses Dokument mehr über die Funktionen und Datentypen usw., aber nicht über die Funktionsweise der einzelnen Module oder eine damit verbundene Idee 🙁
- OK. Wenn Sie jedoch den Quellcode verstehen möchten, ist diese Dokumentation seitdem hilfreich Die Datentypen und Funktionen werden im Quellcode verwendet. Was genau ist Ihr Ziel? Möchten Sie wissen, wie Sie die von Ihnen erwähnten Befehle verwenden oder was genau unter " unter " vor sich geht die Haube "?
- @PaulH. Mein Hauptziel sind beide, die Sie erwähnt haben, aber das erste Ziel ist, was tatsächlich passiert?
Antwort
TL; DR: Um fontconfig zu verstehen, muss man verstehen, warum es erstellt wurde und welche Probleme es zu lösen versucht. Dies erfordert viel Verständnis von Xorg.
Die Schriftkonfiguration auf UNIX-Computern durchlief verschiedene Phasen und fontconfig ist einfach eine der Möglichkeiten, die Sie nutzen können Verwenden Sie Schriftarten über Xorg. Das Lesen der Quelle von fontconfig ohne ein gutes Verständnis der Quelle von Xorg ist wahrscheinlich sehr schwierig. Ich glaube jedoch, dass sich ein Verständnis der Konzepte hinter der Entwicklung von Schriftarten als guter Ausgangspunkt erweisen kann.
Haftungsausschluss: Ich beschäftige mich viel mit Schriftarten unter Linux, musste aber den Xorg-Code nie wirklich ändern zu Schriftarten.
Das Arch Linux-Wiki enthält auch hierzu viele Informationen
Ein bisschen Geschichte
Ursprüngliche UNIX-Schriftarten waren einfach Bitmap-Schriftarten. Heute sind diese in /usr/share/fonts/misc
zu finden. Das PCF (Portable Compiled Format) wird heute für so ziemlich alle verwendet. Es ist ein Binärformat. Es gab andere Formate für binäre Schriftarten, aber ich muss zugeben, dass ich für binäre Schriftarten nie ein anderes Format als PCF verwenden musste. Mit xfontsel
können Sie eine Xorg-Zeichenfolge konfigurieren, um unter anderem die Punkte, den Abstand, die Pixelgröße, das Terminalgewicht (fett, schräg) und die Codierung der Schriftart zu definieren.
Die Bitmap-Schriftarten haben unterschiedliche Dateien für unterschiedliche Pixelgrößen der Schriftart. Die Bitmap-Schriftarten führen bereits das Konzept der Schriftfamilie ein.
Postscript (und teilweise TeX) erstellten Typ 1-Schriftarten, bei denen es sich um vektorbasierte Schriftarten handelt. Diese befinden sich in /usr/share/fonts/Type1
. Vektorschriftarten werden mit mehreren Konfigurationswerten konfiguriert, z. Antialias, Embolden, DPI oder Größe (diesmal nicht unbedingt punktbasiert).
Vektorbasierte Schriftarten werden skaliert und erfordern nicht mehrere Dateien.
Xorg verwendete sowohl Bitmap- als auch Type1-Schriftarten . Und es wurde die XFT erstellt (nun, X FreeType ist eine Schnittstelle zu FreeType, einer GPL / BSD-Bibliothek, die Type1 nachahmt und erweitert). XFT ermöglicht nicht nur die Verwendung von Type1- und FreeType-Schriftarten, sondern auch andere Formate: OTF von Adobe und Microsoft, TTF von Apple. Darüber hinaus ermöglicht XFT die Skalierung der alten Bitmap-Schriftarten, um wie Typ1-Schriftarten auszusehen.
Zur Definition von Attributen wurden mehrere andere Attribute wie Hinweis oder Hinweisstil hinzugefügt
Alles, was in Unterordnern von /usr/share/fonts
zu finden ist. Und XFT-Parameter können in Ihrem Xresources
konfiguriert werden.
FontConfig
Und fontconfig
muss sich mit allen Diskrepanzen der oben genannten befassen. Mit anderen Worten, fontconfig ist ein Versuch, alle oben genannten Schriftarten so zu konfigurieren, dass die Attribute der verschiedenen Schriftarten mit einer gemeinsamen Syntax ausgenutzt werden können.
Die Bitmap-Schriftarten haben ihre Probleme:
- Mehrere verschiedene Dateien für eine einzelne Schriftart
- begrenzte Größe durch Punkte und Pixelgrößen.
Aber auch die vektorbasierten Schriftarten:
- Die Skalierung braucht Zeit, insbesondere wenn mehrere Parameter verwendet werden.
- Nicht alle Schriftattribute wirken sich auf verschiedene Schriftarten auf dieselbe Weise aus das Problem, dass es viele Schriftformate gibt und ein Benutzer möglicherweise eigene Schriftarten in seinem Haus installieren möchte. Fontconfig versucht, diese Probleme zu lösen.
fc-query
gibt an, was fontconfig über die Schriftdatei versteht. Insbesondere für welche Attribute die Datei bestimmt ist (z. B. für Bitmap-Schriftarten) und welche Attribute verwendet werden können (für Vektorschriftarten).fc-list
zeigt Ihnen, welche Schriftarten in den Verzeichnissen enthalten sind, die fontconfig betrachtet, und wird daher von Anwendungen verwendet. Schließlich führtfc-cache
eine Indizierung dieser Schriftarten durch, um sie einfacher zu finden und (unter anderem) für die Verwendung durch Anwendungen zu skalieren.Die gemeinsam genutzte Bibliothek fontocnfig auf der anderen Seite Hand ist der interessanteste Teil. Es verwendet die Konfigurationsdateien (
/etc/fonts
,~/.config/fontconfig
) und den Schriftcache, um vorbereitete Schriftarten direkt an Anwendungen zu vergeben, die damit verknüpft sind. Da die meisten Anwendungen XFT (und damit FreeType) verwendeten und die FreeType-Bibliothek Aufrufe aus der fontconfig-Bibliothek verwendet, ist die Verwendung dieser Schriftarten allgegenwärtig.Beachten Sie jedoch, dass Sie ein Programm kompilieren können, nach dem Xorg gefragt wird Eine Bitmap-Schriftart im alten Stil (z. B.
-*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u
) und der Aufruf werden nicht über die gemeinsam genutzte lib fontconfig geleitet.Kommentare
- Vielen Dank für Ihre ausführliche Antwort. Ich verstehe, was Sie sagen wollen. Eigentlich haben Sie Fc-Abfrage und Fc-Liste definiert, aber ich möchte wissen, wann ein Programm auf Spielzeugebene versucht, FC und seine Funktionen zu verwenden. Wohin wird die Anfrage zuerst gesendet? Ich meine, was ist der Ausgangspunkt? Ich habe versucht, eine Anweisung wie printf (" Test ") in die Hauptfunktion von fc-query einzufügen, und dann habe ich den Befehl fc-query geschrieben vom Terminal, aber ich konnte das nicht sehen. Ich habe es erneut mit dem Befehl make kompiliert, obwohl
- @AmmarUlHassan – Heh,
printf("something")
niemals die fontconfig-Bibliothek ' verwenden wird Denn was mit der Schriftart zu tun hat, ist der Terminalemulator. Um fontconfig verwenden zu können, benötigen Sie ein mit X11 verknüpftes Programm, das die Schriftarten selbst auf dem Bildschirm zeichnet. Wenn Sie jedoch ' keinprintf
in main () erhalten können, um auf dem Terminal anzuzeigen, dass es sich wahrscheinlich um ein PATH-Problem handelt, ' weil Sie sicherlich bereits fontconfig installiert haben. - ok gut. Aber was ist, wenn ich ein kleines Skript in fontconfig möchte, das tatsächlich eine Funktion einer anderen gemeinsam genutzten Bibliothek auf meinem System aufrufen kann? Ideales Szenario ist, dass ich eine Header-Datei dieser Bibliothek in fontconfig hinzufüge (einige Dateien, von denen ich nicht weiß, welche 1) und dann die fontconfig neu kompiliere und diese Datei ausführe, damit sie die Funktion dieser Bibliothek aufruft.
- @AmmarUlHassan – Das ' ist zu viel. Fontconfig ist keine Skriptumgebung, sondern macht einfach das, was es tun soll: Stellen Sie vorgepackte / zwischengespeicherte Schriftarten bereit, die Xorg anzeigen kann, wenn ti den Bildschirm aktualisiert. Wenn Sie Anwendungen benötigen, um die gemeinsam genutzte Bibliothek der von Ihnen kompilierten fontconfig zu verwenden, müssen Sie
ldconfig
neu konfigurieren, um Ihre gemeinsam genutzte Bibliothek anstelle der Bibliothek zu verwenden, dielibfreetype2
ruft gerade an. Ich habe den Eindruck, dass Sie ' versuchen, auf zu viel Zeug auf einmal zu beißen. - ha ha yeah kann sein … Die Schlussfolgerung ist also, dass vor dem Graben tief muss ich über die Geschichte verstehen? Xft? und als FC-Funktionen und Datentypen?