TL; DR: Comprender fontconfig requiere comprender por qué se creó y qué problemas está tratando de resolver. Eso requiere mucha comprensión de Xorg.
La configuración de fuentes en máquinas UNIX pasó por diferentes fases y fontconfig es simplemente una de las posibilidades que puede utilizar para use fuentes a través de Xorg. Probablemente sea muy difícil leer la fuente de fontconfig sin una buena comprensión de la fuente de Xorg. Pero creo que comprender los conceptos detrás de la evolución de las fuentes puede resultar un buen punto de partida.
Descargo de responsabilidad: trato mucho con fuentes en Linux, pero nunca necesité cambiar el código Xorg relacionado con a las fuentes.
La wiki de Arch Linux también tiene mucha información sobre esto
Un poco de historia
Las fuentes originales de UNIX eran simplemente fuentes de mapa de bits. Hoy en día, estos se pueden encontrar en /usr/share/fonts/misc
, el PCF (formato compilado portátil) se usa para casi todos en la actualidad. Es un formato binario. Ha habido otros formatos de fuentes binarias, pero debo admitir que nunca necesité usar ningún otro formato que no sea PCF para fuentes binarias. Usando xfontsel
puedes configurar una cadena Xorg para definir los puntos, espaciado, tamaño de píxel, peso del terminal (negrita, inclinación), codificación, entre otros de la fuente.
Las fuentes de mapa de bits tienen diferentes archivos para diferentes tamaños de píxeles de la fuente. Las fuentes de mapa de bits ya introducen el concepto de familia de fuentes.
Postscript (y hasta cierto punto TeX) crearon fuentes Type 1 que son fuentes basadas en vectores. Están en /usr/share/fonts/Type1
. Las fuentes vectoriales se configuran con varios valores de configuración, p. Ej. antialias, embolden, dpi o tamaño (no necesariamente basado en puntos esta vez).
Las fuentes basadas en vectores están escaladas y no requieren varios archivos.
Xorg usó fuentes de mapa de bits y Type1 . Y creó el XFT (bueno, X FreeType es una interfaz para FreeType, que es una biblioteca GPL / BSD que imita y extiende Type1). XFT no solo permite el uso de fuentes Type1 y FreeType, sino también otros formatos: OTF de Adobe y Microsoft, TTF de Apple. Además, XFT permite escalar las antiguas fuentes de mapa de bits para que se vean como fuentes Type1.
Se agregaron varios otros atributos, como hinting o hintstyle , para definir atributos de estas fuentes.
Todo lo que se puede encontrar en las subcarpetas de /usr/share/fonts
. Y los parámetros XFT se pueden configurar en su Xresources
.
FontConfig
Y fontconfig
necesita lidiar con todas las discrepancias del anterior. En otras palabras, fontconfig es un intento de configurar todos los tipos de fuentes anteriores de una manera que pueda explotar los atributos que tienen las distintas fuentes con una sintaxis común.
Las fuentes de mapa de bits tienen sus problemas:
- varios archivos diferentes para una sola fuente
- tamaños limitados por puntos y tamaños de píxeles.
Pero también lo hacen las fuentes basadas en vectores:
- el escalado lleva tiempo, especialmente si se utilizan varios parámetros
- no todos los atributos de fuente afectan a diferentes tipos de fuentes de la misma manera
Y ambos tienen el problema de que hay muchos formatos de fuente y de que un usuario puede desear instalar fuentes propias en su hogar. Fontconfig intenta resolver estos problemas.
fc-query
le dice lo que fontconfig entiende sobre el archivo de fuente. En particular, para qué atributos es el archivo (para fuentes de mapa de bits, por ejemplo) y qué atributos se pueden usar (para fuentes vectoriales).
fc-list
es una forma de decirle qué fuentes se pueden encontrar en los directorios que está buscando fontconfig y, por lo tanto, pueden ser utilizadas por las aplicaciones. Finalmente, fc-cache
realiza una indexación de estas fuentes para encontrarlas más fácilmente y escalarlas (entre otras cosas) para el uso de la aplicación.
La biblioteca compartida fontocnfig en el otro la mano es la parte más interesante. Utiliza los archivos de configuración (/etc/fonts
, ~/.config/fontconfig
) y el caché de fuentes para proporcionar fuentes preparadas directamente a las aplicaciones que están vinculadas a ella. Dado que la mayoría de las aplicaciones usaban XFT (y por lo tanto FreeType) y la biblioteca FreeType usa llamadas de la biblioteca fontconfig, el uso de estas fuentes se vuelve omnipresente.
Pero tenga en cuenta que puede compilar un programa que le pedirá a Xorg una fuente de mapa de bits en el estilo antiguo (por ejemplo, -*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u
) y la llamada no pasará por la biblioteca compartida de fontconfig.
Comentarios
- Gracias por tu respuesta detallada. Entiendo lo que intentas decir. En realidad, definió Fc-query y fc-list, pero quiero saber cosas como cuando algún programa de nivel de juguete intenta usar FC y sus funciones, ¿dónde se envía la solicitud por primera vez? Quiero decir, ¿cuál es el punto de partida? Intenté agregar una declaración como printf (" testing ") en la función principal de fc-query y luego escribí el comando fc-query desde la terminal pero no pude ver eso. Sin embargo, lo compilé de nuevo con el comando make
- @AmmarUlHassan – Je,
printf("something")
nunca usará la biblioteca fontconfig ' porque lo que está tratando con la fuente es el emulador de terminal. Para usar fontconfig necesitas un programa vinculado a X11, y necesita dibujar las fuentes en la pantalla por sí mismo. Pero si puede ' obtener un printf
en main () para mostrar en la terminal que probablemente sea un problema de PATH, ' porque ciertamente ya tienes instalado fontconfig.
- ok bien. Pero, ¿qué pasa si quiero un pequeño script en fontconfig que realmente pueda llamar a alguna función de alguna otra biblioteca compartida en mi sistema? El escenario ideal es que agregaré un archivo de encabezado de esa biblioteca en fontconfig (algún archivo no sé cuál 1) y luego recompilaré el fontconfig y ejecutaré ese archivo para que llame a la función de esa biblioteca.
- @AmmarUlHassan – Eso ' es demasiadas cosas. Fontconfig no es un entorno de secuencias de comandos, simplemente hace lo que se supone que debe hacer: proporcionar fuentes precopiadas / almacenadas en caché para que Xorg las muestre cuando está actualizando la pantalla. Si necesita que las aplicaciones utilicen la biblioteca compartida de fontconfig que compiló, debe reconfigurar
ldconfig
para usar su biblioteca compartida en lugar de la biblioteca que libfreetype2
está llamando actualmente. Tengo la impresión de que ' estás tratando de morder demasiadas cosas a la vez.
- ja ja sí puede ser … Así que la conclusión es que antes de indagar profundo necesito entender acerca de la historia? Xft? y que las funciones y tipos de datos de FC?