2 votes

Création d'une police de secours légère avec fontforge et fonttools

Pour une application web, j'ai besoin d'un moyen d'empêcher le navigateur de revenir à une autre police si ma police web n'inclut pas un caractère. Il semble que la seule façon de le faire soit d'ajouter une autre police à la pile de polices qui inclut "tous" les caractères possibles. 1 .

Il existe déjà des solution de repli polices mais il s'agit plutôt d'aides au débogage, car elles montrent le point de code sous forme de nombre, et elles sont donc beaucoup trop lourdes (>2MB).

La police de secours pour mon cas d'utilisation devrait simplement afficher quelque chose comme une boîte pour signaler un caractère manquant.

Mon idée était de générer une police simple avec un seul glyphe et d'appliquer un fichier de caractéristiques qui remplacera tous les glyphes par celui-ci.

Mon script pour 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)

Mon fichier de caractéristiques :

languagesystem DFLT dflt;

@all=[\00035-\00039];
#@all=[A-Z]   this works 

feature liga {
    sub @all by theone;
} liga;

Mais ce qui précède aboutit à un

KeyError: ('cid00037', 'SingleSubst[0]', 'Lookup[0]', 'LookupList')

avec des numéros changeants pour cid00037 .

Si j'utilise les sorties commentées de A à Z du fichier Feature, cela fonctionne, donc cette approche ne semble pas être complètement fausse.

Pourquoi fonttools ne peut-il pas trouver les glyphes si je spécifie la gamme en notation CID ? Existe-t-il un autre moyen de créer une classe pour le fichier de caractéristiques OpenType qui inclut tous les glyphes ?

0voto

tobltobs Points 1523

Alors que je travaillais sur le problème ci-dessus, quelqu'un m'a conseillé de consulter l'article suivant Adobe NotDef ce qui correspond à peu près à ce que je recherchais. Pour une raison quelconque, je n'ai pas réussi à convertir le fichier .otf de l'Adobe NotDef en woff ou woff2 avec fontforge. De même, tous les outils en ligne permettant de créer des fichiers de polices pour le web, comme fontsquirrel, ont échoué. Pour créer le fichier woff, j'ai utilisé sfnt2woff du paquet woff-tools. Pour le fichier woff2, j'ai utilisé https://github.com/google/woff2 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X