Низкоуровневое представление шрифтов
Обычно нет необходимости напрямую манипулировать шрифтами. Если вам всё же нужно это сделать, в этом разделе объясняется, как это сделать.
В Emacs Lisp шрифты представлены с помощью трёх различных типов объектов Lisp: объектов шрифтов, спецификаций шрифтов и сущностей шрифтов.
- Функция: fontp object &optional type
-
Возвращает
t, если object является объектом шрифта, спецификацией шрифта или сущностью шрифта. В противном случае возвращаетnil.Необязательный аргумент type, если он не равен
nil, определяет точный тип проверяемого объекта Lisp. В этом случае type должен быть одним изfont-object,font-specилиfont-entity.
Объект шрифта — это объект Lisp, представляющий шрифт, который Emacs открыл. Объекты шрифтов нельзя изменять в Lisp, но их можно исследовать.
- Функция: font-at position &optional window string
Возвращает объект шрифта, используемый для отображения символа в позиции position в окне window. Если window равен
nil, по умолчанию используется выбранное окно. Если string равенnil, position задаёт позицию в текущем буфере; в противном случае string должен быть строкой, а position задаёт позицию в этой строке.
Спецификация шрифта — это объект Lisp, содержащий набор спецификаций, которые можно использовать для поиска шрифта. Одной спецификации шрифта могут соответствовать несколько шрифтов.
- Функция: font-spec &rest arguments
-
Возвращает новую спецификацию шрифта на основе спецификаций из arguments, которые должны идти парами
property-value. Возможны следующие спецификации::name-
Имя шрифта (строка) в формате XLFD, Fontconfig или GTK+. См. Шрифты в Руководстве GNU Emacs.
:family:foundry:weight:slant:width-
Эти спецификации имеют то же значение, что и одноимённые атрибуты начертания. См. Атрибуты начертания.
:familyи:foundry— это строки или символы, а остальные три — символы или числа, числовые значения допустимых символов стиля. Например, значением:slantможет бытьitalic, значением:weight—bold, а значением:width—normal. :size-
Размер шрифта — либо неотрицательное целое число, задающее размер в пикселях, либо число с плавающей точкой, задающее размер в пунктах.
:adstyle-
Дополнительная информация о типографском стиле шрифта, например «sans». Значением должна быть строка или символ.
-
:registry -
Реестр и кодировка набора символов шрифта, например «iso8859-1». Значением должна быть строка или символ.
:dpi-
Разрешение в точках на дюйм, для которого предназначен шрифт. Значение должно быть неотрицательным числом.
:spacing-
Интервал шрифта: proportional, dual, mono или charcell. Значением должно быть целое число (0 для proportional, 90 для dual, 100 для mono, 110 для charcell) либо однобуквенный символ (один из
P,D,MилиC). :avgwidth-
Средняя ширина шрифта в единицах 1/10 пикселя. Значение должно быть неотрицательным числом.
:script-
Система письма, которую должен поддерживать шрифт (символ).
:lang-
Язык, который должен поддерживаться шрифтом. Значением должен быть символ, имя которого представляет собой двухбуквенное название языка по ISO-639. В X значение сопоставляется с полем «Additional Style» имени XLFD шрифта, если оно не пусто. В MS-Windows шрифты, соответствующие спецификации, должны поддерживать кодовые страницы, необходимые для этого языка. В настоящее время это свойство поддерживается только для небольшого набора языков CJK: «ja», «ko» и «zh».
-
:otf -
Шрифт должен быть шрифтом OpenType, поддерживающим эти функции OpenType, при условии, что Emacs собран с библиотекой, например «libotf» в GNU/Linux, которая поддерживает сложную компоновку текста для систем письма, которым она необходима. Значением должен быть список следующей формы
(script-tag langsys-tag gsub gpos)где script-tag — символ тега системы письма OpenType; langsys-tag — символ тега языковой системы OpenType или
nilдля использования языковой системы по умолчанию;gsub— список символов тегов функций OpenType GSUB илиnil, если ни одна из них не требуется; аgpos— список символов тегов функций OpenType GPOS илиnil, если ни одна из них не требуется. Еслиgsubилиgpos— список, элементnilв этом списке означает, что шрифт не должен соответствовать ни одному из оставшихся символов тегов. Элементgposможно опустить. Список тегов систем письма, языков и функций OpenType см. в списке зарегистрированных тегов OTF. -
:type Символ, задающий серверную часть шрифта, используемую для отрисовки символов. Возможные значения зависят от платформы и параметров, с которыми был собран Emacs. Типичные значения:
ftcrhbиxfthbв X,harfbuzzв MS-Windows,nsв GNUstep и т. д. Если значение не указано, обычно в спецификации шрифта, оно также может бытьnil.
- Функция: font-put font-spec property value
Устанавливает свойству шрифта property в спецификации шрифта font-spec значение value. Аргумент property может быть любым из описанных выше свойств.
Сущность шрифта — это ссылка на шрифт, который может быть не открыт. Её свойства занимают промежуточное положение между объектом шрифта и спецификацией шрифта: подобно объекту шрифта и в отличие от спецификации шрифта, она ссылается на один конкретный шрифт. В отличие от объекта шрифта, создание сущности шрифта не загружает содержимое шрифта в память компьютера. Для одного объекта сущности шрифта, ссылающегося на масштабируемый шрифт, Emacs может открыть несколько объектов шрифтов разных размеров.
- Функция: find-font font-spec &optional frame
Эта функция возвращает сущность шрифта, которая лучше всего соответствует спецификации шрифта font-spec в кадре frame. Если frame равен
nil, по умолчанию используется выбранный кадр.
- Функция: list-fonts font-spec &optional frame num prefer
-
Эта функция возвращает список всех сущностей шрифтов, соответствующих спецификации шрифта font-spec.
Необязательный аргумент frame, если он не равен
nil, задаёт кадр, в котором должны отображаться шрифты. Необязательный аргумент num, если он не равенnil, должен быть целым числом, задающим максимальную длину возвращаемого списка. Необязательный аргумент prefer, если он не равенnil, должен быть другой спецификацией шрифта, которая используется для управления порядком элементов возвращаемого списка; сущности шрифтов в нём сортируются по убыванию степени соответствия этой спецификации.
Если вызвать set-face-attribute и передать спецификацию шрифта, сущность шрифта или строку с именем шрифта в качестве значения атрибута :font, Emacs откроет наиболее подходящий шрифт, доступный для отображения. Затем он сохранит соответствующий объект шрифта как фактическое значение атрибута :font для этого начертания.
Для получения сведений о шрифте можно использовать следующие функции. В этих функциях аргумент font может быть объектом шрифта, сущностью шрифта или спецификацией шрифта.
- Функция: font-get font property
-
Эта функция возвращает значение свойства шрифта property для font. Аргумент property может быть любым из свойств, поддерживаемых
font-spec.Если font — спецификация шрифта и в ней не задано свойство property, возвращаемое значение —
nil. Если font — объект шрифта или сущность шрифта, значение свойства :script может быть списком систем письма, поддерживаемых шрифтом, а значение свойства:otf— это cons вида(gsub . gpos), где gsub и gpos — списки функций OpenType, поддерживаемых шрифтом, следующего вида((script-tag (langsys-tag feature...) ...) ...)
где script-tag, langsys-tag и feature — символы, представляющие теги компоновки OpenType.
Если font — объект шрифта, специальное свойство
:combining-capabilityне равноnil, если серверная часть шрифта для font поддерживает отрисовку комбинируемых символов для шрифтов, не относящихся к OpenType.
- Функция: font-face-attributes font &optional frame
-
Эта функция возвращает список атрибутов начертания, соответствующих font. Необязательный аргумент frame задаёт кадр, в котором должен отображаться шрифт. Если он равен
nil, используется выбранный кадр. Возвращаемое значение имеет вид(:family family :height height :weight weight :slant slant :width width)
где значения family, height, weight, slant и width являются значениями атрибутов начертания. Некоторые пары «ключ—атрибут» могут отсутствовать в списке, если они не заданы для font.
- Функция: font-xlfd-name font &optional fold-wildcards long-xlfds
-
Эта функция возвращает строку XLFD (X Logical Font Descriptor), соответствующую font. Сведения о XLFD см. в разделе Шрифты в Руководстве GNU Emacs.
Если необязательный аргумент fold-wildcards не равен
nil, последовательные подстановочные знаки в XLFD объединяются в один.Если необязательный аргумент long-xlfds опущен или равен
nil, функция возвращаетnil, если длина XLFD превышает 255 символов; это необходимо для совместимости с протоколом X, который ограничивает длину XLFD этим значением. Если long-xlfds не равенnil, это ограничение снимается и функция может возвращать XLFD любой длины.
Следующие две функции возвращают важные сведения о шрифте.
- Функция: font-info name &optional frame
-
Эта функция возвращает сведения о шрифте, заданном строкой name, используемом в кадре frame. Если frame опущен или равен
nil, по умолчанию используется выбранный кадр.Функция возвращает вектор вида
[opened-name full-name size height baseline-offset relative-compose default-ascent max-width ascent descent space-width average-width filename capability]. Ниже описан каждый компонент этого вектора:- opened-name
-
Имя, использованное для открытия шрифта; строка.
- full-name
-
Полное имя шрифта; строка.
- size
-
Размер шрифта в пикселях.
- height
-
Высота шрифта в пикселях.
- baseline-offset
-
Смещение в пикселях относительно базовой линии ASCII, положительное направление — вверх.
- relative-compose
- default-ascent
-
Числа, определяющие способ объединения символов.
- max-width
-
Максимальная ширина продвижения шрифта.
- ascent
- descent
-
Верхний и нижний выносные элементы этого шрифта. Сумма этих двух чисел должна быть равна указанному выше значению height.
- space-width
-
Ширина пробела в шрифте в пикселях.
- average-width
-
Средняя ширина символов шрифта. Emacs использует это значение для вычисления компоновки текста при отображении; если значение average-width равно нулю, для этих целей Emacs использует значение space-width.
- filename
-
Имя файла шрифта в виде строки. Значением может быть
nil, если серверная часть шрифта не предоставляет способа определить имя файла шрифта. - capability
Список, первый элемент которого — символ, представляющий тип шрифта: один из
x,opentype,truetype,type1,pcfилиbdf. Для шрифтов OpenType список содержит ещё 2 элемента с описанием функций GSUB и GPOS, поддерживаемых шрифтом. Каждый из этих элементов — список вида((script (langsys feature …) …) …), где script — символ, представляющий тег системы письма OpenType, langsys — символ, представляющий тег языковой системы OpenType (илиnil, обозначающий языковую систему по умолчанию), а каждый feature — символ, представляющий тег функции OpenType.
- Функция: query-font font-object
-
Эта функция возвращает сведения об объекте font-object. (В отличие от неё,
font-infoпринимает в качестве аргумента имя шрифта — строку.)Функция возвращает вектор вида
[name filename pixel-size max-width ascent descent space-width average-width capability]. Ниже описан каждый компонент этого вектора:- name
-
Имя шрифта; строка.
- filename
-
Имя файла шрифта в виде строки. Значением может быть
nil, если серверная часть шрифта не предоставляет способа определить имя файла шрифта. - pixel-size
-
Размер в пикселях, использованный при открытии шрифта.
- max-width
-
Максимальная ширина продвижения шрифта.
- ascent
- descent
-
Верхний и нижний выносные элементы этого шрифта. Сумма этих двух чисел задаёт высоту шрифта.
- space-width
-
Ширина пробела в шрифте в пикселях.
- average-width
-
Средняя ширина символов шрифта. Если это значение равно нулю, при вычислении компоновки текста для отображения Emacs использует значение space-width.
- capability
Список, первый элемент которого — символ, представляющий тип шрифта: один из
x,opentype,truetype,type1,pcfилиbdf. Для шрифтов OpenType список содержит ещё 2 элемента с описанием функций GSUB и GPOS, поддерживаемых шрифтом. Каждый из этих элементов — список вида((script (langsys feature …) …) …), где script — символ, представляющий тег системы письма OpenType, langsys — символ, представляющий тег языковой системы OpenType (илиnil, обозначающий языковую систему по умолчанию), а каждый feature — символ, представляющий тег функции OpenType.
Следующие четыре функции возвращают сведения о размерах шрифтов, используемых различными начертаниями, что позволяет учитывать различные аспекты компоновки в программах на Lisp. Эти функции учитывают переназначение начертаний и возвращают сведения о переназначенном начертании, если рассматриваемое начертание было переназначено. См. Переназначение начертаний.
- Функция: default-font-width
Эта функция возвращает среднюю ширину в пикселях шрифта, используемого начертанием по умолчанию текущего буфера, определённым для выбранного кадра.
- Функция: default-font-height
Эта функция возвращает высоту в пикселях шрифта, используемого начертанием по умолчанию текущего буфера, определённым для выбранного кадра.
- Функция: window-font-width &optional window face
Эта функция возвращает среднюю ширину в пикселях шрифта, используемого начертанием face в окне window. Указанное окно window должно быть действующим. Если аргумент равен
nilили опущен, по умолчанию для window используется выбранное окно, а для face — начертание по умолчанию в window.
- Функция: window-font-height &optional window face
Эта функция возвращает высоту в пикселях шрифта, используемого начертанием face в окне window. Указанное окно window должно быть действующим. Если аргумент равен
nilили опущен, по умолчанию для window используется выбранное окно, а для face — начертание по умолчанию в window.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Low_002dLevel-Font.html