Wie finde ich heraus, welche Unicode-Codepunkte in einer TTF-Datei definiert sind?


11

Ich muss einen Überprüfungsprozess automatisieren, für den Unicode-Zeichen tatsächliche Glyphen in einer True Type Font-Datei definiert sind. Wie mache ich das? Ich kann anscheinend keine Informationen darüber finden, wie ich die Zahlen, die ich beim Öffnen einer .ttf-Datei in einem Texteditor erhalte, verstehen kann.

Antworten:


7

Ich habe eine Python-Bibliothek gefunden, fonttools ( pypi ), die verwendet werden kann, um es mit ein bisschen Python-Scripting zu tun.

Hier ist ein einfaches Skript, das alle Schriftarten auflistet, für die Glyphen angegeben wurden:

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

Das erste Argument ist Codepoint (Dezimal oder Hexa mit 0x) und der Rest sind Schriftdateien, in die gesucht werden muss.

Ich habe nicht versucht, es für .ttcDateien zum Laufen zu bringen (irgendwo sind zusätzliche Parameter erforderlich).

Hinweis: Ich habe zuerst das Tool otfinfo ausprobiert, aber nur grundlegende mehrsprachige Ebenenzeichen (<= U + FFFF) erhalten. Das Python-Skript findet erweiterte Ebenenzeichen in Ordnung.


6

otfinfo sieht vielversprechend aus:

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

Zum Beispiel kennt DejaVuSans-Bold die Fl-Ligatur (fl):

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

Dieses Tool ist genau das, was ich brauche, aber es scheint auch nicht mit TrueType-Schriftarten zu funktionieren, sondern nur mit OpenType-Schriftarten.
Sanuuu

Es funktioniert auch mit ttf. Siehe mein Beispiel oben. (Laut Wikipedia ist ttf eine spezielle Art von OpenType-Schriftart.)
michas

Hmm ... meine Version von otfinfo (2.92) scheint überhaupt nicht die Option -u zu haben. Welche Version verwenden Sie?
Sanuuu

Ich habe "otfinfo (LCDF typetools) 2.104" aus meinem texlive-Paket verwendet .
Michas

@ Sanuuu, die -uOption erscheint nicht in --help, scheint aber immer noch zu existieren. Allerdings (zumindest in Debian 2.105 Build) scheint es nur die Basisebene aufzulisten (bis zu U + FFFF). Die -gOption kennt die erweiterten Ebenen, funktioniert jedoch nicht für alle Schriftarten.
Jan Hudec
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.