Como descobrir quais pontos de código unicode são definidos em um arquivo TTF?

11

Preciso automatizar um processo de verificação de quais caracteres Unicode possuem glifos reais definidos para eles em um arquivo de fonte True Type. Como faço para fazer isso? Não consigo encontrar informações sobre como entender os números que parece estar recebendo quando abro um arquivo .ttf em um editor de texto.

Sanuuu
fonte

Respostas:

7

Encontrei uma biblioteca python, fonttools ( pypi ), que pode ser usada para fazer isso com um pouco de script python.

Aqui está um script simples que lista todas as fontes que especificaram o glifo:

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

O primeiro argumento é o ponto de código (decimal ou hexa com 0x) e o restante são os arquivos de fonte para procurar.

Eu não me incomodei em tentar fazê-lo funcionar para .ttcarquivos (requer algum parâmetro extra em algum lugar).

Nota: Tentei pela primeira vez a ferramenta otfinfo, mas só obtive caracteres de plano multilíngue básico (<= U + FFFF). O script python encontra caracteres de plano estendidos OK.

Jan Hudec
fonte
6

otfinfo parece promissor:

-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 exemplo, o DejaVuSans-Bold conhece a ligadura fl (fl):

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl
michas
fonte
Essa ferramenta é exatamente o que eu preciso, mas também não parece funcionar com fontes TrueType, apenas com fontes OpenType.
Sanuuu
Também funciona com ttf. Veja meu exemplo acima. (Segundo a Wikipedia ttf é um tipo especial de fonte OpenType.)
Michas
Hmm ... minha versão do otfinfo (2.92) não parece ter a opção -u. Qual versão você está usando?
precisa saber é o seguinte
Eu usei "otfinfo (LCDF typetools) 2.104" do meu pacote texlive .
Michas
@ Sanuuu, a -uopção não aparece --help, mas ainda parece existir. Entretanto (pelo menos na versão Debian 2.105), parece listar apenas o plano básico (até U + FFFF). A -gopção conhece os planos estendidos, mas isso não funciona para todas as fontes.
Jan Hudec