Jak dowiedzieć się, które punkty kodowe Unicode są zdefiniowane w pliku TTF?


11

Muszę zautomatyzować proces weryfikacji, które znaki Unicode mają zdefiniowane dla nich rzeczywiste glify w pliku czcionek True Type. Jak mam to robić? Nie mogę znaleźć informacji o tym, jak zrozumieć liczby, które wydaje mi się, gdy otwieram plik .ttf w edytorze tekstu.

Odpowiedzi:


7

Znalazłem biblioteki Python, fonttools ( PyPI ), które mogą być wykorzystane, aby to zrobić przy odrobinie Pythona skryptów.

Oto prosty skrypt, który wyświetla wszystkie czcionki, które mają określony glif:

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

Pierwszym argumentem jest punkt kodowy (dziesiętny lub szesnastkowy z 0x), a reszta to pliki czcionek do przeszukania.

Nie zawracałem sobie głowy próbą uruchomienia go dla .ttcplików (wymaga to jakiegoś dodatkowego parametru).

Uwaga: najpierw wypróbowałem narzędzie otfinfo, ale dostałem tylko podstawowe wielojęzyczne znaki na płaszczyźnie (<= U + FFFF). W skrypcie Python znaki rozszerzonej płaszczyzny są OK.


6

otfinfo wygląda obiecująco:

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

Na przykład DejaVuSans-Bold wie o ligaturze (fl):

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

To narzędzie jest dokładnie tym, czego potrzebuję, ale wydaje się również, że nie działa z czcionkami TrueType, tylko z czcionkami OpenType.
Sanuuu,

Działa również z ttf. Zobacz mój przykład powyżej. (Według wikipedia ttf to specjalny typ czcionki OpenType.)
michas

Hmm ... wydaje mi się, że moja wersja otfinfo (2.92) nie ma opcji -u. Jakiej wersji używasz?
Sanuuu,

Użyłem „otfinfo (LCDF typetools) 2.104” z mojego pakietu texlive .
michas,

@Sanuuu, -uopcja nie pojawia się --help, ale wydaje się, że istnieje. Jednak (przynajmniej w kompilacji Debian 2.105) wydaje się, że zawiera tylko podstawową płaszczyznę (do U + FFFF). -gOpcja wie o rozszerzonych samolotów, ale to nie działa dla wszystkich czcionek.
Jan Hudec
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.