Existe uma ferramenta de linha de comando unix que pode analisar arquivos de fonte?

32

Dado um diretório de arquivos de fonte (TTF e OTF), gostaria de inspecionar cada fonte e determinar qual estilo (regular, itálico, negrito, negrito-itálico) é. Existe uma ferramenta de linha de comando para sistemas operacionais com sabor unix que pode fazer isso? Ou alguém sabe como extrair os metadados de um arquivo de fonte TTF ou OTF?

grego
fonte

Respostas:

30

Eu acho que você está procurando otfinfo . Não parece haver uma opção para chegar diretamente à subfamília, mas você pode:

otfinfo --info *.ttf | grep Subfamily

Observe que várias das fontes que eu olhei usam "Oblique" em vez de "Itálico".

cjm
fonte
10
Perfeito, obrigado! Para os interessados eu estou no OS X e instalado via bebida combrew install lcdf-typetools
Kreek
FWIW, o pacote MacPorts também é chamado lcdf-typetools(e é uma dependência de texlive-fontutils, portanto, ele já pode estar instalado para pessoas que usam TeX).
hans_meine 4/03
15

No Linux, se você tiver fontes .ttf, provavelmente também terá o fontconfig , que vem com o fc.scanutilitário. Você pode analisar a saída para as informações desejadas ou usar a --formatopção mal documentada .

Por exemplo:

fc-scan --format "%{foundry} : %{family}\n" /usr/share/fonts/truetype/msttcorefonts/arialbd.ttf

As propriedades da fonte que você pode imprimir dessa maneira são mostradas aqui: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Algumas propriedades estão listadas em vários idiomas. Por exemplo, %{fullname}pode ser uma lista. Nesse caso, %{fullnamelang}listará os idiomas. Se isso mostrar o seu idioma na quarta posição da lista, você poderá usar %{fullname[3]}como string de formato para imprimir o nome completo somente nesse idioma.

Como essa coisa de linguagem é bastante inconveniente, acabei escrevendo um script Perl completo para listar as informações que queria em apenas um idioma:

#!/usr/bin/perl

use strict;
my $VERSION=0.1;
my $debug=1;

my @wanted  = qw(foundry family fullname style weight slant width spacing file);
my @lang_dependent = qw(family fullname style);
my $lang = "en";

my $separator = ", ";


use File::Basename;
use Data::Dumper; $Data::Dumper::Sortkeys = 1;



my $me = basename $0;
die "Usage: $me FILENAME\n" unless @ARGV;

my $fontfile = shift;

unless (-f $fontfile) {
    die "Bad argument: '$fontfile' is not a file !\n";
}



my $fc_format = join( "\\n", map { "\%{$_}" } @wanted );

my @info = `fc-scan --format "$fc_format" "$fontfile"`;
chomp @info;

my %fontinfo;
@fontinfo{@wanted} = @info;

if ( grep /,/, @fontinfo{ @lang_dependent } ) {
    my $format = join( "\\n", map { "\%{${_}lang}" } @lang_dependent );
    my @langs = `fc-scan --format "$format" "$fontfile"`;

    for my $i (0..$#lang_dependent) {
        my @lang_list = split /,/, $langs[$i];
        my ($pos) = grep { $lang_list[$_] ~~ $lang } 0 .. $#lang_list;
        my @vals = split /,/, $fontinfo{$lang_dependent[$i]};
        $fontinfo{$lang_dependent[$i]} = $vals[$pos];
    }
}

warn Dumper(\%fontinfo), "\n" if $debug;

$fontinfo{'fullname'} ||= $fontinfo{'family'}; # some old fonts don't have a fullname? (WINNT/Fonts/marlett.ttf)

print join($separator, @fontinfo{@wanted}), "\n";
mivk
fonte
Impressionante, obrigado pela dica (e pelo script .. embora ainda não testei o script). Você sabe se existe uma maneira de obter informações sobre licença / direitos autorais também? Tentei% {license},% {copyright} e nenhum formato, mas nenhum deles produziu nada, enquanto o fontforge é capaz de mostrar isso para mim.
Insaner #
De fato, o fc-scan não parece mostrar os direitos autorais. foundryé o mais próximo que você oferece. Mas otfinfo -i, sugerido pelo cjm, ele exibe.
mivk
Ah, isso é ótimo, eu instalei lcdf-typetoolse executei otfinfo -icomo sugerido e isso fez o truque, obrigado! (E também dei +1 ao @cjm).
Insaner #
O fc-scan é ótimo para obter a fonte "nome completo" usada para referenciar a fonte nos programas.
Mpr #