Создание облегченного резервного шрифта с помощью fontforge и fonttools
Для веб-приложения мне нужен способ предотвратить использование браузером другого шрифта, если мой веб-шрифт не содержит символа. Кажется, единственный способ сделать это - добавить другой шрифт в стек шрифтов, который включает "все" возможные символы 1.
Уже существуют резервные шрифты, но они больше помогают при отладке, поскольку показывают кодовую точку как число, поэтому они слишком тяжелые (>2 МБ).
Резервный шрифт для моего варианта использования должен просто показывать что-то наподобие прямоугольника, обозначающего пропущенный символ.
Моя идея состояла в том, чтобы создать простой шрифт с одним глифом и применить файл функций, который заменит все глифы этим.
Мой скрипт для fontforge:
import fontforge
import fontTools.feaLib.builder as feaLibBuilder
from fontTools.ttLib import TTFont
font_name = 'maeh.ttf'
font = fontforge.font()
glyph = font.createChar(33, "theone")
pen = glyph.glyphPen()
pen.moveTo((100,100))
pen.lineTo((100,500))
pen.lineTo((500,500))
pen.lineTo((500,100))
pen.closePath()
for i in range(34, 99):
glyph = font.createChar(i)
glyph.width=10
font.cidConvertTo('Adobe', 'Identity', 0) # doesn't make a difference
font.generate(font_name)
font = TTFont(font_name)
feaLibBuilder.addOpenTypeFeatures(font, 'fallback.fea')
font.save("fea_"+font_name)
Мой файл функций:
languagesystem DFLT dflt;
@all=[\00035-\00039];
#@all=[A-Z] this works
feature liga {
sub @all by theone;
} liga;
Но приведенные выше результаты в
KeyError: ('cid00037', 'SingleSubst[0]', 'Lookup[0]', 'LookupList')
с изменением номера для cid00037
,
Если я использую закомментированный AZ из файла Feature, он работает, поэтому этот подход не кажется полностью неправильным.
Почему fonttools не может найти глифы, если я укажу диапазон в нотации CID? Есть ли другой способ создать класс для файла объектов OpenType, который включает все глифы?
1 ответ
Работая над вышеуказанной проблемой, кто-то намекнул мне на шрифт Adobe NotDef, который я в основном искал. По какой-то причине я не смог преобразовать.otf из Adobe NotDef в woff или woff2 с помощью fontforge. Также все онлайн-инструменты для создания файлов веб-шрифтов, таких как fontsquirrel, потерпели неудачу. Для создания файла woff я использовал sfnt2woff из пакета woff-tools. Для файла woff2 я использовал https://github.com/google/woff2.