Come scoprire quali codici unicode sono definiti in un file TTF?


11

Devo automatizzare un processo di verifica per cui i caratteri Unicode hanno glifi effettivi definiti per loro in un file Font True Type. Come posso andare in giro a farlo? Non riesco a trovare informazioni su come dare un senso ai numeri che sembra ottenere quando apro un file .ttf in un editor di testo.

Risposte:


7

Ho trovato una libreria Python, fonttools ( pypi ) che può essere usato per farlo con un po 'di scripting Python.

Ecco un semplice script che elenca tutti i caratteri che hanno specificato 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)

Il primo argomento è il punto di codice (decimale o hexa con 0x) e il resto sono i file dei caratteri da cercare.

Non mi sono preoccupato di provare a farlo funzionare per i .ttcfile (richiede qualche parametro aggiuntivo da qualche parte).

Nota: ho provato per la prima volta lo strumento otfinfo, ma ho ottenuto solo caratteri di piano multilingue di base (<= U + FFFF). Lo script python trova OK i caratteri del piano esteso.


6

otfinfo sembra promettente:

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

Ad esempio, DejaVuSans-Bold conosce la legatura (fl):

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl

Questo strumento è esattamente ciò di cui ho bisogno, ma non sembra funzionare con i caratteri TrueType, ma solo con quelli OpenType.
Sanuuu,

Funziona anche con ttf. Vedi il mio esempio sopra. (Secondo Wikipedia ttf è un tipo speciale di font OpenType.)
michas

Hmm ... la mia versione di otfinfo (2.92) non sembra avere affatto l'opzione -u. Che versione stai usando?
Sanuuu,

Ho usato "otfinfo (LCDF typetools) 2.104" dal mio pacchetto texlive .
michas,

@Sanuuu, l' -uopzione non appare in --help, ma sembra ancora esistere. Comunque (almeno nella build di Debian 2.105) sembra elencare solo il piano di base (fino a U + FFFF). L' -gopzione conosce i piani estesi, ma non funziona per tutti i tipi di carattere.
Jan Hudec,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.