Для веб-приложения мне нужен способ предотвратить возврат браузера к другому шрифту, если мой веб-шрифт не содержит символ. Кажется, единственный способ сделать это — добавить в стек шрифтов еще один шрифт, который включает «все» возможные символы 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
.
Если я использую закомментированные A-Z из файла Feature, он работает, поэтому этот подход не кажется полностью неправильным.
Почему шрифтовые инструменты не могут найти глифы, если я указываю диапазон в нотации CID? Есть ли другой способ создать класс для файла функций OpenType, который включает все глифы?