Odpowiedzi:
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 .ttc
plikó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.
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
-u
opcja 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). -g
Opcja wie o rozszerzonych samolotów, ale to nie działa dla wszystkich czcionek.