Spec-Zone.ru › Elisp

Низкоуровневое представление шрифтов

Обычно нет необходимости напрямую манипулировать шрифтами. Если вам всё же нужно это сделать, в этом разделе объясняется, как это сделать.

В 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API