TL; DR: Zrozumienie fontconfig wymaga zrozumienia, dlaczego został utworzony i jakie problemy próbuje rozwiązać. Wymaga to dużej wiedzy na temat Xorg.
Konfiguracja czcionek na komputerach z systemem UNIX przechodziła różne fazy i fontconfig to po prostu jedna z możliwości, z których możesz skorzystać użyj czcionek za pośrednictwem Xorg. Odczytanie źródła fontconfig bez dobrego zrozumienia źródła Xorg jest prawdopodobnie bardzo trudne. Ale uważam, że zrozumienie koncepcji stojących za ewolucją czcionek może okazać się dobrym punktem wyjścia.
Zastrzeżenie: Dużo zajmuję się czcionkami w Linuksie, ale tak naprawdę nigdy nie potrzebowałem zmieniać kodu Xorg związanego z do czcionek.
Wiki Arch Linuksa też zawiera wiele informacji na ten temat
Trochę historii
Oryginalne czcionki UNIX były po prostu czcionkami bitmapowymi. Dziś można je znaleźć w /usr/share/fonts/misc
, PCF (przenośny format skompilowany) jest dziś używany do większości z nich. Jest to format binarny. Były inne formaty czcionek binarnych, ale muszę przyznać, że nigdy nie musiałem używać innego formatu niż PCF dla czcionek binarnych. Używając xfontsel
, możesz skonfigurować ciąg Xorg, aby zdefiniować punkty, odstępy, rozmiar piksela, grubość terminala (pogrubienie, pochylenie), kodowanie, między innymi czcionki.
Czcionki bitmapowe mają różne pliki dla różnych rozmiarów pikseli czcionki. Czcionki bitmapowe już wprowadzają pojęcie rodziny czcionek.
Postscript (i do pewnego stopnia TeX) stworzył czcionki Type 1, które są czcionkami wektorowymi. Znajdują się one w /usr/share/fonts/Type1
. Czcionki wektorowe są konfigurowane z kilkoma wartościami konfiguracyjnymi, np. antialias, bolden, dpi lub rozmiar (tym razem niekoniecznie oparte na punktach).
Czcionki wektorowe są skalowane i nie wymagają kilku plików.
Xorg używał zarówno czcionek bitmapowych, jak i Type1 . I stworzył XFT (cóż, X FreeType jest interfejsem do FreeType, który jest biblioteką GPL / BSD, która naśladuje i rozszerza Type1). XFT pozwala nie tylko na użycie czcionek Type1 i FreeType, ale także innych formatów: OTF firmy Adobe i Microsoft, TTF firmy Apple. Ponadto XFT umożliwia skalowanie starych czcionek bitmapowych, aby wyglądały jak czcionki Type1.
Kilka innych atrybutów, takich jak podpowiedź lub podpowiedź , zostało dodanych w celu zdefiniowania atrybutów tych czcionek.
Wszystko, co można znaleźć w podfolderach /usr/share/fonts
. Parametry XFT można skonfigurować w Xresources
.
FontConfig
I fontconfig
musi poradzić sobie ze wszystkimi rozbieżnościami powyższego . Innymi słowy, fontconfig jest próbą skonfigurowania wszystkich powyższych typów czcionek w sposób, który może wykorzystywać atrybuty poszczególnych czcionek o wspólnej składni.
Czcionki bitmapowe mają swoje problemy:
- kilka różnych plików dla jednej czcionki
- ograniczone rozmiary przez liczbę punktów i wielkość pikseli.
Ale tak samo jak czcionki wektorowe:
- skalowanie zajmuje dużo czasu, zwłaszcza jeśli używanych jest kilka parametrów
- nie wszystkie atrybuty czcionek wpływają na różne typy czcionek w ten sam sposób
I oba mają problem polegający na tym, że istnieje wiele formatów czcionek i że użytkownik może chcieć zainstalować własne czcionki w swoim domu. Fontconfig próbuje rozwiązać te problemy.
fc-query
mówi, co fontconfig rozumie o pliku czcionki. W szczególności, dla jakich atrybutów plik jest przeznaczony (na przykład dla czcionek bitmapowych) i jakich atrybutów można użyć (dla czcionek wektorowych).
fc-list
to sposób na poinformowanie Cię, jakie czcionki można znaleźć w katalogach przeglądanych przez fontconfig, a zatem mogą być używane przez aplikacje. Wreszcie fc-cache
wykonuje indeksowanie tych czcionek, aby łatwiej je znaleźć i przeskalować je (między innymi) do użytku aplikacji.
Biblioteka współdzielona fontocnfig z drugiej strony ręka jest najciekawszą częścią. Używa plików konfiguracyjnych (/etc/fonts
, ~/.config/fontconfig
) i pamięci podręcznej czcionek, aby przekazać gotowe czcionki bezpośrednio do aplikacji, które są z nią połączone. Ponieważ większość aplikacji używa XFT (a tym samym FreeType), a biblioteka FreeType używa wywołań z biblioteki fontconfig, użycie tych czcionek stało się wszechobecne.
Ale pamiętaj, że możesz skompilować program, który poprosi Xorg o czcionka bitmapowa w starym stylu (np. -*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u
), a połączenie nie przejdzie przez udostępnioną bibliotekę fontconfig.
Komentarze
- Dziękuję za szczegółową odpowiedź. Rozumiem, co próbujesz powiedzieć. Właściwie zdefiniowałeś Fc-query i fc-list, ale chcę wiedzieć, kiedy jakiś program na poziomie zabawek próbuje używać FC i jego funkcji, gdzie żądanie jest wysyłane po raz pierwszy? mam na myśli, jaki jest punkt wyjścia? Próbowałem dodać instrukcję taką jak printf (" testing ") w funkcji głównej fc-query, a następnie napisałem polecenie fc-query z terminala, ale nie mogłem tego zobaczyć. skompilowałem go ponownie za pomocą polecenia make
- @AmmarUlHassan – Heh,
printf("something")
nigdy nie użyję biblioteki fontconfig ' ponieważ tym, co ma do czynienia z czcionką, jest emulator terminala. Aby użyć fontconfig, potrzebujesz programu połączonego z X11, który musi samodzielnie rysować czcionki na ekranie. Ale jeśli możesz ' t uzyskać printf
w main (), aby wyświetlić na terminalu, prawdopodobnie jest to problem z PATH, ' ponieważ na pewno masz już zainstalowany fontconfig.
- ok w porządku. Ale co, jeśli chcę mały skrypt w fontconfig, który może faktycznie wywołać jakąś funkcję innej biblioteki współdzielonej w moim systemie. Idealnym scenariuszem jest to, że dodam jeden plik nagłówkowy tej biblioteki w fontconfig (jakiś plik, którego nie wiem, który 1), a następnie ponownie skompiluję fontconfig i uruchomię ten plik tak, aby wywoływał funkcję tej biblioteki.
- @AmmarUlHassan – To ' to za dużo rzeczy. Fontconfig nie jest środowiskiem skryptowym, po prostu robi to, do czego jest przeznaczony: dostarcza wstępnie skompilowane / zbuforowane czcionki, które Xorg będzie wyświetlał, gdy ti odświeża ekran. Jeśli chcesz, aby aplikacje korzystały ze współdzielonej biblioteki fontconfig, który skompilowałeś, musisz ponownie skonfigurować
ldconfig
tak, aby używały Twojej biblioteki współdzielonej zamiast tej, która libfreetype2
aktualnie dzwoni. Mam wrażenie, że ' próbujesz ugryźć zbyt dużo rzeczy naraz.
- ha ha tak, może być … Wniosek jest taki, że przed kopaniem głęboko muszę zrozumieć historię? Xft? a niż funkcje FC i typy danych?