Немного о WASM'е в шрифтах

Когда я вчера в небольшом кругу рассказал о том как работает WASM в шрифтах, оказалось, что никто не понял некоторые базовые вещи, которые мне казались очевидными. Поэтому я хочу их расписать и тут тоже.

Давайте опять немного о том, почему язык программирования в шрифте — это удобно.

Шрифты сейчас устроены довольно сложно. Если не приглядываться, то ничего и не заметишь, но если разглядывать как взаимодействуют буквы между собой, окажется, что даже в отображении привычных нам кириллических и латинских букв есть особенности — в хороших шрифтах расстояния между различными парами букв тщательно выверено и записано внутрь шрифта.

Это делается для красоты, чтобы шрифт казался однородным. Буквы не квадратные, одни шире, другие у́же, «о» круглая, а «ж» похожа на причёску Альберта Эйнштейна. Если писать буквы как есть, то будет выглядеть неаккуратно, поэтому в местах их прилегания расстояния подбирают так, чтобы смотрелось хорошо.

Но вот нам хочется добавить в Юникод египетские иероглифы, а там имя фараона пишется в продолговатом овале — картуше. Как это решить в шрифте? Да никак. Мы можем ввести символы начала картуша и конца, а линии, которыми они должны соединяться, запрограммируем в движке, который рисует нам символы. Причём дизайнер шрифта никак не будет влиять на то, как эти линии рисуются.

Статуэтка египетского фараона в короне, сидящего на троне, выставлена на белой подставке в музее на фоне размытых посетителей.
Так как многим ребятам тяжело читать текст без картинок, вот вам фараон Хеопс, которому важно, чтобы его имя писалось в картуше

Может показаться, что это не так уж и важно, наверное правда в этом есть, но это всего лишь пример. Есть и более актуальные проблемы, например, в арабском письме, но там их объяснить сложнее. По крайней мере, сложнее для меня.

Вместо того чтобы писать каждый раз новую логику в библиотеке, есть другое решение — внедрить этот кусок кода в сам шрифт, тогда с каждым шрифтом будет идти «инструкция» как его рисовать. Это удобно, потому что не нужно ждать, пока библиотека обновится во всех программах, где нам хочется, чтобы картуши рисовались правильно.

Как это работает?

Библиотека, если сильно упрощать, получает на вход от приложения место на экране (координаты) и строку, которую надо написать в этом месте. Строка, перед тем как начнётся отрисовка, засовывается в программу, которая хранится внутри шрифта. Эта программа производит с символами какие-то манипуляции (я, например, заменил каждую букву на эквивалент в азбуке Морзе) и полученная строка отображается на экране.

Внутри программы можно менять символы, сдвигать их на другие позиции и так далее. Самое главное — программе доступен контекст в виде целой строки. Таким образом можно обнаружить (в случае египетских иероглифов), что слово начинается с символа начала картуша и нарисовать линии до признака его конца.

3

Читайте также

WASM в шрифтах
Ну вот мы и дожили до момента, когда в шрифтах появился язык программирования. В harfbuzz, лидирующей библиотеке для отрисовки шрифтов появилась встроенная поддержка WASM.
2024
Египетская письменность
Для развлечения редкого читателя моего дневника публикую картинку, переснятую с сумки, полученной в Каире комплектом к сувенирам, купленным в результате моего вяленького торга с владельцем лавки. На сумке изображены египетские иероглифы и их соответствие латинскому алфавиту.
2024
Неожиданно…
Аппарат президента… Только что понял насколько это строго-эротично звучит…
2002

Комментарии 8

SiMMmr E16/NR04δ13 № 1

лругое?

тогда с каждым шрифтов будет идти «инструкция»

шрифтоМ
PS: можно удалить после исправления

Евгений Степанищев автор № 4
спасибо, сейчас на сайте исправлю.