Comentários
- Eu começaria lendo a documentação da API que pode ser encontrada aqui freedesktop.org/software/ fontconfig / fontconfig-devel
- @PaulH. Li abstratamente esta documentação antes. Na verdade, este documento explica mais sobre as funções e tipos de dados etc., mas não como cada módulo funciona ou qualquer ideia relacionada a isso 🙁
- OK. Mas se você quiser entender o código-fonte, essa documentação será útil, pois os tipos de dados e funções são usados no código-fonte. Qual é exatamente o seu objetivo? É saber como usar os comandos que você mencionou ou entender o que exatamente está acontecendo " em o capô "?
- @PaulH. Meu objetivo principal são os dois que você mencionou, mas o primeiro objetivo é o que realmente está acontecendo?
Resposta
TL; DR: Para entender o fontconfig, é necessário entender por que ele foi criado e quais problemas está tentando resolver. Isso requer muito conhecimento do Xorg.
A configuração da fonte em máquinas UNIX passou por diferentes fases e fontconfig é simplesmente uma das possibilidades que você pode usar para use fontes através do Xorg. Ler o código-fonte do fontconfig sem um bom entendimento do código-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.
Aviso: Eu lido muito com fontes no Linux, mas nunca precisei realmente mudar o código do Xorg relacionado às 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, eles 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 qualquer 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 terminal (negrito, inclinação), codificação, entre outros da fonte.
As fontes de bitmap possuem arquivos diferentes para diferentes tamanhos de pixel da fonte. As fontes bitmap já introduzem o conceito de família de fontes.
Postscript (e TeX até certo ponto) criou fontes Tipo 1 que são fontes baseadas em vetores. Eles estão em /usr/share/fonts/Type1
. As fontes vetoriais são configuradas com vários valores de configuração, por exemplo, antialias, embolden, dpi ou size (não necessariamente com base em pontos desta vez).
Fontes baseadas em vetor são dimensionadas e não requerem vários arquivos.
Xorg usou fontes bitmap e Type1 . E criou o XFT (bem, o X FreeType é uma interface para o FreeType que é uma biblioteca GPL / BSD que imita e estende o Type1). O XFT não só permite o uso de fontes Type1 e FreeType, mas também de outros formatos: OTF da Adobe e Microsoft, TTF da Apple. Além disso, o XFT permite dimensionar as fontes de bitmap antigas para se parecerem 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 em seu Xresources
.
FontConfig
E fontconfig
precisa lidar com todas as discrepâncias do acima. Em outras palavras, fontconfig é uma tentativa de configurar todos os tipos de fonte acima de uma maneira que possa explorar os atributos que as fontes distintas têm 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 vetor:
- o dimensionamento leva tempo, especialmente se vários parâmetros são usados
- nem todos os atributos de fonte afetam diferentes tipos de fonte da mesma maneira
E ambos o problema de que existem muitos formatos de fonte e que um usuário pode querer instalar fontes próprias em sua casa. Fontconfig tenta resolver esses problemas.
fc-query
diz a você o que o fontconfig entende sobre o arquivo de fonte. Notavelmente para quais atributos o arquivo se destina (para fontes de bitmap, por exemplo) e quais atributos podem ser usados (para fontes de vetor).
fc-list
é uma maneira de dizer quais fontes podem ser encontradas nos diretórios que o fontconfig está procurando e, portanto, podem ser usadas pelos aplicativos. Finalmente, fc-cache
realiza uma indexação dessas fontes para encontrá-las mais facilmente e dimensioná-las (entre outras coisas) para uso do aplicativo.
A biblioteca compartilhada fontocnfig por outro a mão é a parte mais interessante. Ele usa os arquivos de configuração (/etc/fonts
, ~/.config/fontconfig
) e o cache de fontes para fornecer fontes pré-preparadas diretamente para aplicativos vinculados a ele. Como a maioria dos aplicativos usava XFT (e, portanto, FreeType) e a biblioteca FreeType usa chamadas da biblioteca fontconfig, o uso dessas fontes se tornou 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.
Comentários
- Obrigado por sua resposta detalhada, entendo o que você está tentando dizer. Na verdade, você definiu Fc-query e fc-list, mas eu quero saber coisas como quando algum programa de nível de brinquedo tenta usar FC e suas funções, onde a solicitação é enviada pela primeira vez? quero dizer, qual é o ponto de partida? Tentei adicionar uma instrução como printf (" testing ") na função principal fc-query e então escrevi o comando fc-query do terminal, mas eu não conseguia ver isso. eu o compilei novamente pelo comando make
- @AmmarUlHassan – Heh,
printf("something")
nunca usará a biblioteca fontconfig ' porque o que está lidando com a fonte é o emulador de terminal. Para usar o fontconfig, você precisa de um programa vinculado ao X11 e ele precisa desenhar as fontes na tela sozinho. Mas se você puder ' obter umprintf
em main () para mostrar no terminal, provavelmente é um problema de PATH, ' porque você certamente já tem o fontconfig instalado. - tudo bem. Mas e se eu quiser algum pequeno script em fontconfig que pode realmente chamar alguma função de alguma outra biblioteca compartilhada em meu sistema. O cenário ideal é que eu adicionarei um arquivo de cabeçalho dessa lib no fontconfig (algum arquivo que não sei qual) e, então, recompilarei o fontconfig e executarei esse arquivo para que ele chame a função daquela biblioteca.
- @AmmarUlHassan – Isso ' é muitas coisas. Fontconfig não é um ambiente de script, ele simplesmente faz o que deve fazer: fornecer fontes pré-compiladas / armazenadas em cache para o Xorg exibir quando estiver atualizando a tela. Se você precisa que os aplicativos usem a biblioteca compartilhada do fontconfig compilado, você precisa reconfigurar
ldconfig
para usar sua biblioteca compartilhada em vez da biblioteca quelibfreetype2
está chamando no momento. Tenho a impressão de que você ' está tentando morder muitas coisas de uma vez. - ha ha sim pode ser … Portanto, a conclusão é que antes de cavar profundo eu preciso entender sobre a história? Xft? e do que funções e tipos de dados FC?