Представление шрифта низкого уровня
Обычно нет необходимости непосредственно манипулировать шрифтами. В случае необходимости этот раздел объясняет, как это сделать.
В Emacs Lisp шрифты представлены с помощью трёх типов объектов Lisp: объекты шрифта, спецификации шрифта и сущности шрифта.
- Функция: fontp объект &optional тип
-
Возвращает
t, если объект является объектом шрифта, спецификацией шрифта или сущностью шрифта. В противном случае возвращаетnil.Необязательный аргумент тип, если он не
nil, определяет точный тип объекта Lisp для проверки. В этом случае тип должен быть одним изfont-object,font-spec, илиfont-entity.
Объект шрифта — это объект Lisp, представляющий шрифт, который Emacs открыл. Объекты шрифтов нельзя изменять в Lisp, но их можно инспектировать.
- Функция: font-at позиция &optional окно строка
Возвращает объект шрифта, используемый для отображения символа по позиции позиция в окне окно. Если окно
nil, оно по умолчанию устанавливается в выделенное окно. Если строкаnil, позиция указывает позицию в текущем буфере; в противном случае строка должна быть строкой, а позиция указывает позицию в этой строке.
Спецификация шрифта — это объект Lisp, содержащий набор спецификаций, которые могут быть использованы для поиска шрифта. Может соответствовать нескольким шрифтам.
- Функция: font-spec &rest аргументы
-
Возвращает новую спецификацию шрифта, используя спецификации в аргументах, которые должны быть в формате
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-
Интервалы шрифта: пропорциональные, двойные, моноширинные или charcell. Значение должно быть либо целым числом (0 для пропорциональных, 90 для двойных, 100 для моноширинных, 110 для charcell), либо символом из одной буквы (одним из
P,D,M, илиC). :avgwidth-
Средняя ширина шрифта в 1/10 пикселей.
:script-
Шрифт, который должен поддерживать шрифт (символ).
:lang-
Язык, который должен поддерживать шрифт. Значение должно быть символом, имя которого — двухбуквенное имя языка ISO-639. На X оно сопоставляется со значением поля «Дополнительный стиль» имени 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— список меток тегов функции GSUB OpenType, илиnil, если не требуется; иgpos— список меток тегов функции GPOS OpenType, илиnil, если не требуется. Еслиgsubилиgposявляется списком, элементnilв этом списке означает, что шрифт не должен соответствовать остальным символам тегов. Элементgposможет быть опущен. Список меток тегов скрипта, языка и функций OpenType см. в списке зарегистрированных меток OTF. :type-
Символ, определяющий задний план шрифта, используемый для рисования символов. Возможные значения зависят от платформы и от того, как был сконфигурирован Emacs при компиляции. Типичные значения включают
ftcrhbиxfthbна X,harfbuzzна MS-Windows,nsна GNUstep и т. д. Также может бытьnil, если значение не задано, обычно в спецификации шрифта.
- Функция: font-put спецификация-шрифта свойство значение
Устанавливает свойство шрифта свойство в спецификации шрифта спецификация-шрифта на значение. свойство может быть любым из описанных выше.
Сущность шрифта — это ссылка на шрифт, который не обязательно должен быть открыт. Его свойства находятся между объектом шрифта и спецификацией шрифта: подобно объекту шрифта, но в отличие от спецификации шрифта, он ссылается на один конкретный шрифт. В отличие от объекта шрифта, создание сущности шрифта не загружает содержимое этого шрифта в оперативную память. Emacs может открыть несколько объектов шрифта разных размеров из одной сущности шрифта, ссылающейся на масштабируемый шрифт.
- Функция: find-font спецификация-шрифта &optional фрейм
Эта функция возвращает сущность шрифта, которая наилучшим образом соответствует спецификации шрифта спецификация-шрифта во фрейме фрейм. Если фрейм
nil, он по умолчанию устанавливается в выделенный фрейм.
- Функция: list-fonts спецификация-шрифта &optional фрейм число предпочтение
-
Эта функция возвращает список всех сущностей шрифтов, которые соответствуют спецификации шрифта спецификация-шрифта.
Необязательный аргумент фрейм, если он не
nil, определяет фрейм, на котором шрифты должны быть отображены. Необязательный аргумент число, если он неnil, должен быть целым числом, которое определяет максимальную длину возвращаемого списка. Необязательный аргумент предпочтение, если он неnil, должен быть другой спецификацией шрифта, которая используется для управления порядком возвращаемого списка; возвращаемые сущности шрифтов сортируются в порядке убывания близости к этой спецификации шрифта.
Если вы вызываете set-face-attribute и передаёте спецификацию шрифта, сущность шрифта или строку с именем шрифта в качестве значения атрибута :font, Emacs откроет наилучший соответствующий шрифт, доступный для отображения. Затем он сохраняет соответствующий объект шрифта как фактическое значение атрибута :font для этой грани.
Следующие функции могут быть использованы для получения информации о шрифте. Для этих функций аргумент шрифт может быть объектом шрифта, сущностью шрифта или спецификацией шрифта.
- Функция: font-get шрифт свойство
-
Эта функция возвращает значение свойства шрифта свойство для шрифт. свойство может быть любым из тех, которые
font-specподдерживает.Если шрифт является спецификацией шрифта и спецификация шрифта не задаёт свойство, возвращаемое значение равно
nil. Если шрифт — объект шрифта или сущность шрифта, значение свойства :script может быть списком скриптов, поддерживаемых шрифтом, а значение свойства:otfявляется списком вида(gsub . gpos), где gsub и gpos — списки, представляющие поддерживаемые шрифтом функции OpenType, вида((script-tag (langsys-tag feature…) …) …)
где script-tag, langsys-tag и feature — символы, представляющие метки макета OpenType.
Если шрифт — объект шрифта, специальное свойство
:combining-capabilityимеет ненулевое значение, если движок рендеринга шрифта шрифт поддерживает отображение знаков объединения для шрифтов, не являющихся OpenType.
- Функция: font-face-attributes шрифт &optional фрейм
-
Эта функция возвращает список атрибутов стиля грани, соответствующих шрифту. Необязательный аргумент фрейм определяет фрейм, на котором шрифт должен быть отображён. Если он
nil, используется выбранный фрейм. Возвращаемое значение имеет вид(:family family :height height :weight weight :slant slant :width width)
где значения семья, высота, вес, наклон и ширина — значения атрибутов стиля грани. Некоторые из этих пар «ключ-атрибут» могут отсутствовать в списке, если они не заданы шрифтом.
- Функция: font-xlfd-name шрифт &optional сложить-подстановочные-знаки
-
Эта функция возвращает XLFD (X Logical Font Descriptor), строку, соответствующую шрифту. См. Шрифты в Руководстве по GNU Emacs, для получения информации об XLFD. Если имя слишком длинное для XLFD (которое может содержать не более 255 символов), функция возвращает
nil.Если необязательный аргумент сложить-подстановочные-знаки не
nil, последовательные подстановочные знаки в XLFD сводятся к одному.
Следующие две функции возвращают важную информацию о шрифте.
- Функция: font-info имя &необязательный кадр
-
Эта функция возвращает информацию о шрифте, указанном его именем, строкой, как он используется в кадре. Если кадр опущен или
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 использует значение space-width вместо него при расчёте вывода текста на экране.
- filename
-
Имя файла шрифта в виде строки. Может быть
nil, если шрифтовой бэкенд не предоставляет способ узнать имя файла шрифта. - capability
Список, первый элемент которого – символ, представляющий тип шрифта, один из
x,opentype,truetype,type1,pcf, илиbdf. Для OpenType шрифтов список включает 2 дополнительных элемента, описывающие поддерживаемые шрифтом функции GSUB и GPOS. Каждый из этих элементов представляет собой список вида((script (langsys feature …) …) …), где script – символ, представляющий тег сценария OpenType, langsys – символ, представляющий тег langsys OpenType (илиnil, обозначающий язык по умолчанию), а каждый feature – символ, представляющий тег функции OpenType.
- Функция: query-font объект-шрифт
-
Эта функция возвращает информацию об объекте-шрифте. (Это в отличие от
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 – символ, представляющий тег langsys OpenType (илиnil, обозначающий язык по умолчанию), а каждый feature – символ, представляющий тег функции OpenType.
Следующие четыре функции возвращают информацию о размерах шрифтов, используемых различными стилями, позволяя учитывать различные аспекты макета в программах Lisp. Эти функции учитывают переназначение стилей, возвращая информацию о переназначенном стиле, если соответствующий стиль был переназначен. См. Переназначение стилей.
- Функция: default-font-width
Эта функция возвращает среднюю ширину, в пикселях, шрифта, используемого стилем по умолчанию текущего буфера, как он определен для выбранного кадра.
- Функция: default-font-height
Эта функция возвращает высоту, в пикселях, шрифта, используемого стилем по умолчанию текущего буфера, как он определен для выбранного кадра.
- Функция: window-font-width &необязательный окно стиль
Эта функция возвращает среднюю ширину, в пикселях, шрифта, используемого стилем стиль в окне. Указанное окно должно быть активным окном. Если
nilили опущено, окно по умолчанию устанавливается для выбранного окна, а стиль по умолчанию устанавливается для стиля по умолчанию в окне.
- Функция: window-font-height &необязательный окно стиль
Эта функция возвращает высоту, в пикселях, шрифта, используемого стилем стиль в окне. Указанное окно должно быть активным окном. Если
nilили опущено, окно по умолчанию устанавливается для выбранного окна, а стиль по умолчанию устанавливается для стиля по умолчанию в окне.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Low_002dLevel-Font.html