фон:
используя fonttools, я хочу изменить символ, такой как "ل" (U + 0644), до его начальной формы "ﻟ" (U + FEDF). Я могу сделать это в 4 шага:
с помощью fonttools, сохранить данные шрифта в формате xml и затем проанализировать их
font = TTFont(fontPath)
font.saveXML("tempfont.xml")
найти имя, связанное с U + 0644, в таблице cmap (предположим, имя "isolam")
в таблице GSUB найдите таблицу для «init» и найдите запись с атрибутом «in» для «isolam», а затем прочитайте его атрибут «out» (предположим, что это «initlam»)
и, наконец, найдите имя "initlam" в таблице cmap и получите кодовую точку
этот процесс очень медленный, и я думаю, что это потому, что xml-файл записывается на жестком диске, а затем читается оттуда, а также есть много итераций по xml-файлу.
вопрос:
вместо сохранения XML-файла я сейчас пытаюсь напрямую работать с объектом TTFont. но у меня проблемы с чтением кодов из cmap.
font = TTFont(fontPath)
cmap = font['cmap'].tables
# there are 3 cmap tables for different platform in the font i am using, but
# for now i'm using cmap[2] which has platformId = 3 and is for windows.
print(cmap[2].data)
но результат кажется gibberish.it очень длинный, поэтому я просто покажу некоторые из них:
Ь '\ x00` \ x00 @ \ x00 \ x05 \ x00 \ x00 \ x00 + \ x00 / \ X009 \ x00: \ x00> \ x00 [\ x00] \ x00 {\ x00} \ x00 \ Xab \ x00 \ Xbb \
теперь я ожидал, что он вернет словарь с кодовыми точками в качестве ключей и имена в качестве значений, или, может быть, список кортежей.
так как я могу получить доступ к данным cmap в понятном формате?
или как я могу получить имя глифа, учитывая соответствующую кодовую точку и наоборот?