Làm thế nào để tìm ra các điểm mã unicode được xác định trong tệp TTF?


11

Tôi cần tự động hóa một quy trình xác minh các ký tự Unicode có glyphs thực được xác định cho chúng trong tệp Phông chữ đúng. Làm thế nào để tôi đi xung quanh làm điều đó? Tôi dường như không thể tìm thấy thông tin về cách hiểu ý nghĩa của những con số mà tôi dường như sẽ nhận được khi tôi mở tệp .ttf trong trình soạn thảo văn bản.

Câu trả lời:


7

Tôi tìm thấy một thư viện python, fonttools ( pypi ) có thể được sử dụng để làm điều đó với một chút kịch bản python.

Đây là một tập lệnh đơn giản liệt kê tất cả các phông chữ đã chỉ định glyph:

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

Đối số đầu tiên là codepoint (thập phân hoặc hexa với 0x) và phần còn lại là các tệp phông chữ cần xem.

Tôi đã không cố gắng làm cho nó hoạt động cho .ttccác tập tin (nó đòi hỏi một số tham số bổ sung ở đâu đó).

Lưu ý: Lần đầu tiên tôi thử công cụ otfinfo, nhưng tôi chỉ có các ký tự mặt phẳng đa ngôn ngữ cơ bản (<= U + FFFF). Kịch bản python tìm thấy các ký tự máy bay mở rộng OK.


6

otfinfo có vẻ đầy hứa hẹn:

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

Ví dụ: DejaVuSans-Bold biết về chữ ghép (fl):

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

Công cụ này chính xác là những gì tôi cần nhưng dường như nó cũng không hoạt động với phông chữ TrueType, chỉ những phông chữ OpenType.
Sanuuu

Nó hoạt động với ttf, quá. Xem ví dụ của tôi ở trên. (Theo wikipedia ttf là một loại phông chữ OpenType đặc biệt.)
michas

Hmm ... phiên bản otfinfo của tôi (2.92) dường như không có tùy chọn -u nào cả. Phiên bản bạn đang sử dụng?
Sanuuu

Tôi đã sử dụng "otfinfo (LCDF typetools) 2.104" từ gói texlive của mình .
michas

@Sanuuu, -utùy chọn không xuất hiện --help, nhưng dường như vẫn tồn tại. Tuy nhiên (ít nhất là trong bản dựng Debian 2.105) dường như chỉ liệt kê mặt phẳng cơ bản (tối đa U + FFFF). Các -gtùy chọn biết về những chiếc máy bay mở rộng, nhưng điều đó không làm việc cho tất cả các phông chữ.
Jan Hudec
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.