Comment savoir quels points de code Unicode sont définis dans un fichier TTF?

11

J'ai besoin d'automatiser un processus de vérification pour savoir quels caractères Unicode ont des glyphes réels définis pour eux dans un fichier de police True Type. Comment puis-je faire ça? Je n'arrive pas à trouver des informations sur la façon de comprendre les chiffres que je semble obtenir lorsque j'ouvre un fichier .ttf dans un éditeur de texte.

Sanuuu
la source

Réponses:

7

J'ai trouvé une bibliothèque python, fonttools ( pypi ) qui peut être utilisée pour le faire avec un peu de script python.

Voici un script simple qui répertorie toutes les polices qui ont spécifié le glyphe:

#!/usr/bin/env python3

from fontTools.ttLib import TTFont
import sys

char = int(sys.argv[1], base=0)

print("Looking for U+%X (%c)" % (char, chr(char)))

for arg in sys.argv[2:]:
    try:
        font = TTFont(arg)

        for cmap in font['cmap'].tables:
            if cmap.isUnicode():
                if char in cmap.cmap:
                    print("Found in", arg)
                    break
    except Exception as e:
        print("Failed to read", arg)
        print(e)

Le premier argument est le point de code (décimal ou hexa avec 0x) et le reste est les fichiers de police à rechercher.

Je n'ai pas pris la peine d'essayer de le faire fonctionner pour les .ttcfichiers (cela nécessite un paramètre supplémentaire quelque part).

Remarque: J'ai d'abord essayé l'outil otfinfo, mais je n'ai obtenu que des caractères plan multilingues de base (<= U + FFFF). Le script python trouve les caractères de plan étendus OK.

Jan Hudec
la source
6

otfinfo semble prometteur:

-u, --unicode
  Print each Unicode code point supported by the font, followed by
  the glyph number representing that code point (and, if present,
  the name of the corresponding glyph).

Par exemple, DejaVuSans-Bold connaît la fl ligature (fl):

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl
michas
la source
Cet outil est exactement ce dont j'ai besoin, mais il ne semble pas non plus fonctionner avec les polices TrueType, uniquement celles OpenType.
Sanuuu
Cela fonctionne aussi avec ttf. Voir mon exemple ci-dessus. (Selon wikipedia, ttf est un type spécial de police OpenType.)
michas
Hmm ... ma version d'otfinfo (2.92) ne semble pas du tout avoir l'option -u. Quelle version utilisez-vous?
Sanuuu
J'ai utilisé "otfinfo (LCDF typetools) 2.104" de mon paquet texlive .
michas
@Sanuuu, l' -uoption n'apparaît pas dans --help, mais semble toujours exister. Cependant (au moins dans la version Debian 2.105), il semble ne lister que le plan de base (jusqu'à U + FFFF). L' -goption connaît les plans étendus, mais cela ne fonctionne pas pour toutes les polices.
Jan Hudec