2013-04-09 3 views
9

С помощью языка сценариев (Python или рубин, скажем) на системе Debian основе, я хотел бы найти ни один из:Как найти коды Unicode, для которых шрифт имеет глифы, для системы на базе Debian?

  1. Все Unicode кодовых что конкретный шрифт имеет глифы для
  2. All шрифты, которые имеют глифы для конкретного Unicode элемент кода

(Очевидно, либо 1 или 2 может быть получен вид другой, так что все, что проще было бы здорово.) Я делал это в прошлом, запустив:

fc-list : file charset 

... и разбор выходных данных в конце каждой строки, основанный на this code from fontconfig , но мне кажется, что должен быть гораздо более простой способ сделать это.

(я не совсем уверен, что это правильный сайт StackExchange на этот вопрос, но я искал ответ, который может быть использован программно.)

+0

«Должен быть более простой способ»? Вы знаете, сколько форматов шрифтов есть? И вы хотите иметь возможность обрабатывать все из них ?! –

+0

@ Kerrek SB: Я знаю (конечно!), Что существует много разных форматов шрифтов, но у нас есть библиотеки, которые имеют дело с этим - например, команда fontconfig, которую я дал в вопросе, дает вам информацию, которую я за ней шрифты нескольких разных форматов. –

+1

Связанный: http://stackoverflow.com/questions/4458696/finding-out-what-characters-a-font-supports – leonbloy

ответ

6

Я хотел бы попробовать любого из FreeType 2 language bindings. Вот решение Perl перечислить кодовые точки Unicode шрифта с помощью Font::FreeType:

use Font::FreeType; 
Font::FreeType->new->face('DejaVuSans.ttf')->foreach_char(sub { 
    printf("%04X\n", $_->char_code); 
}); 
+0

+1 Спасибо, это очень полезно - я подожду немного, прежде чем тикать «принять», если будут другие ответы. –

+1

Любая идея, почему это, похоже, не замечает глифов, которые выделяются частным областям использования, например, чередующиеся перекосы? – tchrist

+0

Нет, но это, безусловно, не проблема, связанная с привязками к Perl. С быстрым взглядом на исходный код freetype2, возможно, ['find_unicode_charmap'] (http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/base/ftobjs.c#n973) выбирает неправильный charmap? – nwellnhof

1

Недавно я перечислил отображение Юникода в glypths кодовых в TTF с помощью TTX/FontTools. Этот инструмент написан на Python, поэтому он соответствует тегу Python в вашем сообщении. Команда

ttx -t cmap foo.ttf 

будет генерировать XML файл foo.ttx, который описывает, что отображение, для различных сред и кодировок. См. this reference для описания того, что на самом деле означают идентификаторы платформы и кодирования. Я предполагаю, что пакет можно использовать как библиотеку, а также инструмент командной строки, но у меня нет опыта.