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

9

Eu preciso automatizar um processo de verificação que caracteres Unicode têm glifos reais definidos para eles em um arquivo True Type Font. Como eu vou por aí fazendo isso? Não consigo encontrar informações sobre como entender os números que parecem estar obtendo quando abro um arquivo .ttf em um editor de texto.

    
por Sanuuu 03.12.2015 / 13:00

2 respostas

6

Eu encontrei uma biblioteca python, fonttools ( pypi ) que pode ser usado 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/python

from fontTools.ttLib import TTFont
import sys

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

print u"Looking for U+%X (%c)" % (char, unichr(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, e:
        print "Failed to read", arg
        print e

O primeiro argumento é codepoint (decimal ou hexa com 0x) e o resto são arquivos de fonte para procurar.

Eu não me incomodei tentando fazer isso funcionar para .ttc files (requer algum parâmetro extra em algum lugar).

Nota: Eu tentei pela primeira vez a ferramenta otfinfo, mas eu só tenho os caracteres básicos do plano multilingue (< = U + FFFF). O script python encontra os caracteres do plano estendido OK.

    
por 27.01.2016 / 23:08
4

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, DejaVuSans-Bold sabe sobre a fligura (fl):

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl
    
por 03.12.2015 / 13:21