TL; DR: Для понимания fontconfig необходимо понять, почему он был создан и какие проблемы он пытается решить. Это требует глубокого понимания Xorg.
Конфигурация шрифтов на машинах UNIX проходила разные этапы, и fontconfig - это просто одна из возможностей, которые вы можете использовать для использования шрифтов через Xorg. Читать исходный код fontconfig без хорошего понимания источника Xorg, вероятно, очень сложно.Но я считаю, что понимание концепций, лежащих в основе эволюции шрифтов, может оказаться хорошей отправной точкой.
Отказ от ответственности: я много работаю со шрифтами в Linux, но мне никогда не приходилось менять код Xorg, относящийся к шрифтам.
Вики Arch Linux также содержит много информации об этом
Исходные шрифты UNIX были просто растровыми шрифтами. Сегодня их можно найти в / usr / share / fonts / misc
, PCF (переносимый скомпилированный формат) сегодня используется практически для всех из них. Это двоичный формат. Были и другие форматы двоичных шрифтов, но я должен признать, что мне никогда не приходилось использовать какой-либо другой формат, кроме PCF, для двоичных шрифтов. Используя xfontsel
, вы можете настроить строку Xorg для определения точек, интервала, размера пикселя, веса терминала (жирный, наклонный), кодировки и прочего шрифта.
Растровые шрифты имеют разные файлы для разных размеров шрифта в пикселях. Растровые шрифты уже представляют концепцию семейства шрифтов.
Postscript (и в некоторой степени TeX) создал шрифты Type 1, которые являются векторными шрифтами. Они находятся в / usr / share / fonts / Type1
. Векторные шрифты имеют несколько значений конфигурации, например сглаживание, жирный шрифт, dpi или размер (на этот раз не обязательно по точкам).
Векторные шрифты масштабируются и не требуют нескольких файлов.
Xorg использовал как растровые, так и шрифты Type1. И он создал XFT (ну, X FreeType - это интерфейс к FreeType, который является библиотекой GPL / BSD, имитирующей и расширяющей Type1). XFT позволяет использовать не только шрифты Type1 и FreeType, но и другие форматы: OTF от Adobe и Microsoft, TTF от Apple. Более того, XFT позволяет масштабировать старые растровые шрифты, чтобы они выглядели как шрифты Type1.
Несколько других атрибутов, например хинтинг или стиль хинта , были добавлены для определения атрибутов этих шрифтов.
Все, что можно найти в подпапках / usr / share / fonts
. А параметры XFT можно настроить в ваших Xresources
.
и fontconfig
должны иметь дело со всеми несоответствиями вышеупомянутого . Другими словами, fontconfig - это попытка настроить все вышеперечисленные типы шрифтов таким образом, чтобы можно было использовать атрибуты, которые имеют отдельные шрифты, с общим синтаксисом.
Растровые шрифты имеют свои проблемы:
Но то же самое относится и к векторным шрифтам:
И у обоих есть проблема, заключающаяся в том, что многие форматы шрифтов, и что пользователь может пожелать установить свои собственные шрифты у себя дома. Fontconfig пытается решить эти проблемы.
fc-query
сообщает вам, что fontconfig понимает в файле шрифта. В частности, для каких атрибутов предназначен файл (например, для растровых шрифтов) и какие атрибуты можно использовать (для векторных шрифтов).
fc-list
- это способ сообщить вам, какие шрифты можно найти в каталогах, которые просматривает fontconfig, и, следовательно, они могут использоваться приложениями. Наконец, fc-cache
выполняет индексацию этих шрифтов, чтобы их было легче найти и масштабировать (среди прочего) для использования в приложениях.
С другой стороны, наиболее интересной является разделяемая библиотека fontocnfig. Он использует файлы конфигурации ( / etc / fonts
, ~ / .config / fontconfig
) и кэш шрифтов, чтобы передавать подготовленные шрифты непосредственно приложениям, которые связаны с ним. Поскольку большинство приложений использовали XFT (и, следовательно, FreeType), а библиотека FreeType использует вызовы из библиотеки fontconfig, использование этих шрифтов стало повсеместным.
Но обратите внимание, что вы можете скомпилировать программу, которая будет запрашивать у Xorg растровый шрифт в старом стиле (например, - * - terminus-medium-r-normal - * - * - 200 - * - * - c - * - * - u
), и вызов не будет проходить через общую библиотеку fontconfig.