Як дізнатися, які кодові точки Unicode визначені у файлі TTF?


11

Мені потрібно автоматизувати процес перевірки, які символи Unicode мають фактичні гліфи, визначені для них у файлі шрифту True Type. Як мені це зробити? Я не можу знайти інформацію про те, як зрозуміти ті цифри, які, здається, отримую, коли я відкриваю .ttf файл у текстовому редакторі.

Відповіді:


7

Я знайшов бібліотеку python, fonttools ( pypi ), яку можна використати для цього за допомогою трохи сценаріїв python.

Ось простий скрипт, у якому перераховані всі шрифти, які вказали гліф:

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

Перший аргумент - це кодова точка (десяткова або шестигранна з 0x), а решта - файли шрифтів, які слід шукати.

Я не турбувався, намагаючись змусити його працювати з .ttcфайлами (для нього потрібен десь додатковий параметр).

Примітка. Спочатку я спробував інструмент otfinfo, але отримав лише основні багатомовні символи площини (<= U + FFFF). Сценарій python знаходить добре розширені символи площини.


6

otfinfo виглядає перспективно:

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

Наприклад, DejaVuSans-Bold знає про fl-лігатуру (fl):

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

Цей інструмент саме те, що мені потрібно, але він також не працює з TrueType шрифтами, лише з OpenType.
Сануу

Він працює і з ttf. Дивіться мій приклад вище. (Згідно з wikipedia, ttf - це особливий тип шрифту OpenType.)
michas

Хм ... у моєї версії otfinfo (2.92) начебто немає опції -u. Яку версію ви використовуєте?
Сануу

Я використовував "otfinfo (LCDF typetools) 2.104" зі свого пакунку texlive .
michas

@Sanuuu, -uпараметр не відображається --help, але все ще існує. Однак (принаймні, у Debian 2.105 build), здається, перелічено лише базову площину (до U + FFFF). -gОпція знає про розширених планах, але це не працює для всіх шрифтів.
Ян Худець
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.