Bagaimana cara mengetahui codepoint unicode yang didefinisikan dalam file TTF?

11

Saya perlu mengotomatiskan proses verifikasi yang karakter Unicode memiliki mesin terbang aktual yang ditentukan untuk mereka dalam file Font Type Sejati. Bagaimana saya berkeliling melakukan itu? Sepertinya saya tidak dapat menemukan informasi tentang cara memahami angka-angka yang tampaknya saya dapatkan ketika saya membuka file .ttf dalam editor teks.

Sanuuu
sumber

Jawaban:

7

Saya menemukan perpustakaan python, fonttools ( pypi ) yang dapat digunakan untuk melakukannya dengan sedikit skrip python.

Berikut ini adalah skrip sederhana yang mencantumkan semua font yang telah menentukan mesin terbang:

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

Argumen pertama adalah codepoint (desimal atau heksa dengan 0x) dan sisanya adalah file font untuk dilihat.

Saya tidak repot-repot mencoba membuatnya berfungsi untuk .ttcfile (memerlukan beberapa parameter tambahan di suatu tempat).

Catatan: Saya pertama kali mencoba alat otfinfo, tetapi saya hanya mendapatkan karakter dasar multibahasa (<= U + FFFF). Skrip python menemukan karakter bidang yang diperluas OK.

Jan Hudec
sumber
6

otfinfo terlihat menjanjikan:

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

Misalnya DejaVuSans-Bold tahu tentang ligatur fl (fl):

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl
michas
sumber
Alat ini adalah persis apa yang saya butuhkan tetapi juga tampaknya tidak berfungsi dengan font TrueType, hanya yang OpenType.
Sanuuu
Ini bekerja dengan ttf juga. Lihat contoh saya di atas. (Menurut wikipedia ttf adalah jenis khusus font OpenType.)
michas
Hmm ... versi otfinfo saya (2.92) tampaknya tidak memiliki opsi -u sama sekali. Versi mana yang Anda gunakan?
Sanuuu
Saya menggunakan "otfinfo (LCDF typetools) 2.104" dari paket texlive saya .
michas
@Sanuuu, -uopsi tidak muncul --help, tetapi sepertinya masih ada. Namun (setidaknya dalam Debian 2.105 build) tampaknya hanya mencantumkan bidang dasar (hingga U + FFFF). The -gpilihan tahu tentang pesawat diperpanjang, tapi itu tidak bekerja untuk semua font.
Jan Hudec