¿Cómo averiguar qué puntos de código Unicode se definen en un archivo TTF?

11

Necesito automatizar un proceso de verificación de que los caracteres Unicode tienen glifos reales definidos para ellos en un archivo de fuente True Type. ¿Cómo hago para hacer eso? Parece que no puedo encontrar información sobre cómo dar sentido a los números que parece que obtengo cuando abro un archivo .ttf en un editor de texto.

Sanuuu
fuente

Respuestas:

7

Encontré una biblioteca de python, fonttools ( pypi ) que se puede usar para hacerlo con un poco de script de python.

Aquí hay un script simple que enumera todas las fuentes que tienen un glifo especificado:

#!/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)

El primer argumento es codepoint (decimal o hexa con 0x) y el resto son archivos de fuente para buscar.

No me molesté en intentar que funcionara para .ttcarchivos (requiere algún parámetro adicional en alguna parte).

Nota: Primero probé la herramienta otfinfo, pero solo obtuve caracteres planos multilingües básicos (<= U + FFFF). El script de Python encuentra que los caracteres de plano extendido están bien

Jan Hudec
fuente
6

otfinfo parece prometedor:

-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).

Por ejemplo, DejaVuSans-Bold sabe acerca de la ligadura de fl (fl):

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl
michas
fuente
Esta herramienta es exactamente lo que necesito, pero tampoco parece funcionar con fuentes TrueType, solo OpenType.
Sanuuu
Funciona con ttf, también. Vea mi ejemplo arriba. (Según wikipedia, ttf es un tipo especial de fuente OpenType)
Michas
Hmm ... mi versión de otfinfo (2.92) no parece tener la opción -u en absoluto. ¿Qué versión está utilizando?
Sanuuu
Utilicé "otfinfo (herramientas de tipo LCDF) 2.104" de mi paquete texlive .
michas
@Sanuuu, la -uopción no aparece --help, pero parece existir. Sin embargo (al menos en la compilación Debian 2.105) parece solo listar el plano básico (hasta U + FFFF). La -gopción conoce los planos extendidos, pero eso no funciona para todas las fuentes.
Jan Hudec