TL; DR: Entender o fontconfig requer entender por que ele foi criado e quais problemas ele está tentando resolver. Isso requer muita compreensão do Xorg.
A configuração de fontes em máquinas UNIX passou por fases diferentes e fontconfig é simplesmente uma das possibilidades que você pode usar para usar fontes através do Xorg. Ler a fonte do fontconfig sem uma boa compreensão da fonte do Xorg é provavelmente muito difícil. Mas, acredito que uma compreensão dos conceitos por trás da evolução das fontes pode ser um ponto de partida decente.
Disclaimer: Eu lido muito com fontes no Linux, mas eu nunca precisei mudar o código do Xorg relacionado a fontes.
O Wiki do Arch Linux tem muitas informações sobre isso também
Um pouco de história
As fontes originais do UNIX eram simplesmente fontes de bitmap. Hoje, estes podem ser encontrados em /usr/share/fonts/misc
, o PCF (formato compilado portátil) é usado para praticamente todos eles hoje. É um formato binário. Existem outros formatos de fontes binárias, mas preciso admitir que nunca precisei usar nenhum outro formato além do PCF para fontes binárias. Usando xfontsel
você pode configurar uma string Xorg para definir os pontos, espaçamento, tamanho do pixel, peso do terminal (negrito, inclinação), codificação, entre outros da fonte.
As fontes de bitmap têm arquivos diferentes para diferentes tamanhos de pixel da fonte. As fontes de bitmap já apresentam o conceito de família de fontes.
Postscript (e TeX até certo ponto) criaram fontes Type 1 que são fontes baseadas em vetores. Estes estão em /usr/share/fonts/Type1
. Fontes vetoriais são configuradas com vários valores de configuração, por exemplo antialias, embolden, dpi, ou tamanho (não necessariamente baseado em pontos desta vez).
As fontes baseadas em vetor são dimensionadas e não exigem vários arquivos.
O Xorg usava fontes bitmap e Type1. E ele criou o XFT (bem X FreeType é uma interface para FreeType que é uma biblioteca GPL / BSD que imita e estende Type1). O XFT não apenas permite o uso de fontes Type1 e FreeType, mas também outros formatos: OTF da Adobe e Microsoft, TTF da Apple. Além disso, o XFT permite que o dimensionamento das fontes de bitmap antigas se pareçam com fontes Type1.
Vários outros atributos, como hinting ou hintstyle , foram adicionados para definir os atributos dessas fontes.
Tudo o que pode ser encontrado nas subpastas de /usr/share/fonts
. E os parâmetros XFT podem ser configurados no seu Xresources
.
FontConfig
E fontconfig
precisa lidar com todas as discrepâncias do acima . Em outras palavras, o fontconfig é uma tentativa de configurar todos os tipos de fontes acima de uma maneira que possa explorar os atributos que as fontes distintas possuem com uma sintaxe comum.
As fontes de bitmap têm seus problemas:
- vários arquivos diferentes para uma única fonte
- tamanhos limitados por pontos e tamanhos de pixel.
Mas o mesmo acontece com as fontes baseadas em vetores:
-
O dimensionamento
- leva tempo, especialmente se vários parâmetros forem usados
- nem todos os atributos de fonte afetam diferentes tipos de fonte da mesma forma
E ambos têm o problema de que existem muitos formatos de fonte, e que um usuário pode querer instalar fontes próprias em sua casa. O Fontconfig tenta resolver esses problemas.
fc-query
informa o que o fontconfig entende sobre o arquivo de fonte. Notavelmente, para quais atributos o arquivo é (para fontes de bitmap, por exemplo) e quais atributos podem ser usados (para fontes vetoriais).
fc-list
é uma maneira de dizer quais fontes podem ser encontradas nos diretórios que o fontconfig está olhando e, portanto, pode ser usado pelos aplicativos. Finalmente fc-cache
realiza uma indexação dessas fontes para encontrá-las mais facilmente e escalá-las (entre outras coisas) para o uso do aplicativo.
A biblioteca compartilhada fontocnfig, por outro lado, é a parte mais interessante. Ele usa os arquivos de configuração ( /etc/fonts
, ~/.config/fontconfig
) e o cache de fontes para fornecer fontes pré-configuradas diretamente aos aplicativos vinculados a ele. Como a maioria dos aplicativos usa o XFT (e, portanto, o FreeType) e a biblioteca FreeType está usando chamadas da biblioteca fontconfig, o uso dessas fontes se torna onipresente.
Mas observe que você pode compilar um programa que solicitará ao Xorg uma fonte de bitmap no estilo antigo (por exemplo, -*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u
) e a chamada não passará pela biblioteca compartilhada fontconfig.