Получить поддерживаемые диапазоны Unicode из файла Font * .ttf в Ubuntu

9

У меня есть несколько шрифтов в формате 'ttf' на моей машине с Ubuntu.

Я хочу знать некоторые метаданные этих шрифтов, о том, какие юникодные диапазоны и какие кодовые страницы не в юникоде поддерживаются этими файлами шрифтов.

Как я могу это сделать?

Добавлено 1: Забыл упомянуть, что я хочу получить эту информацию для нескольких сотен шрифтов, поэтому мне нужна какая-то терминальная утилита, которую можно автоматизировать

ShockwaveNN
источник

Ответы:

8

fc-queryможет показать поддерживаемые наборы символов Unicode. Я не знаю других кодовых страниц, хотя.

Например, fc-query /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttfна моем Debian показано это:

…
charset: 
    0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
    0001: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    0002: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 008873ff
…

Он показывает поддерживаемые диапазоны символов, хотя он не относится к какому блоку он принадлежит (вы должны знать, какой диапазон принадлежит какому блоку).

Например, четвертый столбец 0000, который соответствует U + 0060 - U + 007F, имеет шестнадцатеричное значение 7fffffff. Это имеет значение бита 0111 1111 1111 1111 1111 1111 1111 1111, где самый правый бит - U + 0060, а самый левый - U + 007F. Это означает, что U + 007F не поддерживается в этом шрифте.

Вам, вероятно, нужно написать скрипт, который выполняет побитовые операции с информацией, предоставленной fc-query.

P / S: Мой любимый сайт для получения информации о юникоде - FileFormat.Info

syockit
источник
Где мне найти информацию о том, какой диапазон принадлежит какому блоку?
akaihola
Ах, номер строки дает самые левые шестнадцатеричные цифры кодовой точки, а позиция бита в битовом поле дает две самые правые шестнадцатеричные цифры. Правильно?
akaihola
1

Я бы порекомендовал FontForge . Он доступен в менеджере пакетов Ubuntu просто как fontforge.

Даниэль Андерссон
источник
Да, я нашел эту программу - но, насколько я понимаю, она имеет только графический интерфейс, но мне нужен терминал, чтобы автоматизировать эту вещь
ShockwaveNN
@ ShockwaveNN: ну так скажи в своем вопросе. Ваши шансы получить подходящий ответ на ваш вопрос возрастут, если вы сформулируете свой фактический вопрос.
Даниэль Андерссон
1

Примечание для тех, кто находит это ..

fc-запрос не является надежным на 100% на выходе charset.

Например, Yogafont на dafont.com показывает пустой набор символов, хотя в нем определенно есть символы.

$ fc-query yogafont.TTF
Pattern has 20 elts (size 32)
    family: "Yogafont"(s)
    familylang: "en"(s)
    style: "Regular"(s)
    stylelang: "en"(s)
    fullname: "Yogafont"(s)
    fullnamelang: "en"(s)
    slant: 0(i)(s)
    weight: 80(i)(s)
    width: 100(i)(s)
    spacing: 100(i)(s)
    foundry: "unknown"(s)
    file: "yogafont.TTF"(s)
    index: 0(i)(s)
    outline: FcTrue(s)
    scalable: FcTrue(s)
    charset: 
(s)
    lang: (s)
    fontversion: 0(i)(s)
    fontformat: "TrueType"(s)
    decorative: FcFalse(s)

Другие шрифты с рисунками, такими как WW1, показывают ограниченный набор символов.

$ fc-query WW1-A___.TTF 
Pattern has 19 elts (size 32)
    family: "WW1  A"(s)
    familylang: "en"(s)
    style: "Regular"(s)
    stylelang: "en"(s)
    fullname: "WW1  A"(s)
    fullnamelang: "en"(s)
    slant: 0(i)(s)
    weight: 80(i)(s)
    width: 100(i)(s)
    foundry: "unknown"(s)
    file: "WW1-A___.TTF"(s)
    index: 0(i)(s)
    outline: FcTrue(s)
    scalable: FcTrue(s)
    charset: 
    0000: 00000000 00000001 00000000 0001fffe 00000000 00000000 00000000 00000000
(s)
    lang: (s)
    fontversion: 65536(i)(s)
    fontformat: "TrueType"(s)
    decorative: FcFalse(s)
Пол Дж
источник