Наборы шрифтов
Набор шрифтов — это список шрифтов, каждый из которых назначен определённому диапазону кодов символов. Отдельный шрифт не может отобразить весь диапазон символов, поддерживаемых Emacs, но набор шрифтов может. Наборы шрифтов имеют имена, как и шрифты, и вы можете использовать имя набора шрифтов вместо имени шрифта, когда задаёте шрифт для фрейма или лица. Ниже приведена информация о определении набора шрифтов под управлением программы Lisp.
- Функция: create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
-
Эта функция определяет новый набор шрифтов в соответствии со строкой спецификации fontset-spec. Строка должна иметь следующий формат:
fontpattern, [charset:font]…
Пробельные символы перед и после запятых игнорируются.
Первая часть строки, fontpattern, должна иметь вид стандартного имени шрифта X, за исключением того, что последние два поля должны быть ‘fontset-alias’.
Новый набор шрифтов имеет два имени: длинное и короткое. Длинное имя — это fontpattern целиком. Короткое имя — ‘fontset-alias’. Вы можете ссылаться на набор шрифтов по любому из этих имён. Если набор шрифтов с таким же именем уже существует, выдаётся ошибка, если не указан noerror, в этом случае функция ничего не делает.
Если необязательный аргумент style-variant-p имеет ненулевое значение, создаются также варианты набора шрифтов для жирным, курсивом и жирным курсивом. Эти наборы шрифтов-вариантов не имеют короткого имени, только длинное, которое формируется путём изменения fontpattern для указания жирности и/или курсива.
Строка спецификации также указывает, какие шрифты использовать в наборе шрифтов. Подробности см. ниже.
Конструкт ‘charset:font’ указывает, какой шрифт использовать (в этом наборе шрифтов) для одного конкретного набора символов. Здесь charset — имя набора символов, а font — шрифт, используемый для этого набора символов. Вы можете использовать этот конструкт любое количество раз в строке спецификации.
Для остальных наборов символов, которые вы не указываете явно, Emacs выбирает шрифт на основе fontpattern: он заменяет ‘fontset-alias’ значением, которое называет один набор символов. Для набора символов ASCII, ‘fontset-alias’ заменяется на ‘ISO8859-1’.
Кроме того, когда несколько последовательных полей являются подстановочными знаками, Emacs объединяет их в один подстановочный знак. Это делается для предотвращения использования шрифтов с автоматическим масштабированием. Шрифты, созданные путём масштабирования больших шрифтов, непригодны для редактирования, а масштабирование меньшего шрифта нецелесообразно, так как лучше использовать меньший шрифт в его собственном размере, что и делает Emacs.
Таким образом, если fontpattern таков:
-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
спецификация шрифта для символов ASCII будет такой:
-*-fixed-medium-r-normal-*-24-*-ISO8859-1
а спецификация шрифта для китайских символов GB2312 будет такой:
-*-fixed-medium-r-normal-*-24-*-gb2312*-*
У вас может не быть китайского шрифта, соответствующего вышеуказанной спецификации шрифта. Большинство дистрибутивов X включают только китайские шрифты, у которых в поле family указаны ‘song ti’ или ‘fangsong ti’. В таком случае ‘Fontset-n’ может быть указан как показано ниже:
Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
Тогда спецификации шрифтов для всех, кроме китайских символов GB2312, содержат ‘fixed’ в поле family, а спецификация шрифта для китайских символов GB2312 содержит подстановочный знак ‘*’ в поле family.
- Функция: set-fontset-font fontset characters font-spec &optional frame add
-
Эта функция изменяет существующий fontset для использования шрифта, указанного в font-spec, для отображения указанных characters.
Если fontset —
nil, эта функция изменяет набор шрифтов выделенного фрейма или набора шрифтов frame, если frame неnil.Если fontset —
t, эта функция изменяет набор шрифтов по умолчанию, короткое имя которого в виде строки — ‘fontset-default’.Аргумент characters может быть одним символом, который должен отображаться с помощью font-spec. Он также может быть списком
(from . to), где from и to — символы. В этом случае используйте font-spec для всех символов в диапазоне from и to (включительно).characters может быть символом набора символов (см. Наборы символов). В этом случае используйте font-spec для всех символов в наборе символов.
characters может быть символом шрифта (см. char-script-table). В этом случае используйте font-spec для всех символов, относящихся к этому шрифту.
characters может быть
nil, что означает использовать font-spec для любого символа в fontset, для которого не указана спецификация шрифта.font-spec может быть объектом спецификации шрифта, созданным функцией
font-spec(см. Шрифт низкого уровня).font-spec может быть списком
(family . registry), где family — имя семейства шрифтов (возможно, включая имя производителя шрифта в начале), а registry — имя реестра шрифта (возможно, включая имя кодировки в конце).font-spec может быть именем шрифта, строкой.
font-spec может быть
nil, что явно указывает, что нет шрифта для указанных characters. Это полезно, например, для предотвращения дорогостоящего поиска шрифтов для символов, у которых нет глифов, таких как символы из области частного использования Unicode (PUA).Необязательный аргумент add, если он имеет ненулевое значение, определяет способ добавления font-spec к спецификациям шрифтов, ранее заданных для characters. Если он равен
prepend, font-spec предваряет существующие спецификации. Если он равенappend, font-spec добавляется в конец. По умолчанию font-spec перезаписывает ранее заданные спецификации шрифтов.Например, это изменяет набор шрифтов по умолчанию, чтобы использовать шрифт с именем семейства ‘Kochi Gothic’ для всех символов, принадлежащих набору символов
japanese-jisx0208:(set-fontset-font t 'japanese-jisx0208 (font-spec :family "Kochi Gothic"))
- Функция: char-displayable-p char
-
Эта функция возвращает ненулевое значение, если Emacs должен быть способен отобразить char. Или, точнее, если набор шрифтов выбранного фрейма содержит шрифт для отображения набора символов, к которому относится char.
Наборы шрифтов могут указывать шрифт для каждого символа; когда набор шрифтов делает это, значение этой функции может быть неточным.
Эта функция может возвращать ненулевое значение, даже если шрифт недоступен, так как она также проверяет, может ли кодировочная система текстового терминала закодировать символ (см. Кодирование ввода-вывода терминала).
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/Fontsets.html