Gibt es ein Unix-Kommandozeilen-Tool, das Zeichensatzdateien analysieren kann?

32

Angesichts eines Verzeichnisses mit Schriftdateien (TTF und OTF) möchte ich jede Schrift untersuchen und feststellen, welcher Stil (normal, kursiv, fett, fett-kursiv) sie ist. Gibt es ein Befehlszeilentool für Betriebssysteme mit Unix-Version, das dies ermöglicht? Oder weiß jemand, wie man die Metadaten aus einer TTF- oder OTF-Schriftartdatei extrahiert?

kreek
quelle

Antworten:

30

Ich denke du suchst otfinfo . Es scheint keine Möglichkeit zu geben, direkt zu der Unterfamilie zu gelangen, aber Sie könnten Folgendes tun:

otfinfo --info *.ttf | grep Subfamily

Beachten Sie, dass einige der von mir betrachteten Schriftarten "Oblique" anstelle von "Italic" verwenden.

cjm
quelle
10
Perfekt danke! Für Interessierte bin ich auf OS X und habe es via brew install lcdf-typetools
Brew
FWIW, das MacPorts-Paket wird ebenfalls aufgerufen lcdf-typetools(und ist eine Abhängigkeit von texlive-fontutils, sodass es möglicherweise bereits für TeX- Benutzer installiert ist).
Hans_Meine
15

Wenn Sie unter Linux über .ttf-Schriftarten verfügen , verfügen Sie höchstwahrscheinlich auch über fontconfig , das mit dem fc.scanDienstprogramm geliefert wird . Sie können die Ausgabe nach den gewünschten Informationen durchsuchen oder die schlecht dokumentierte --formatOption verwenden.

Beispielsweise:

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

Die Schrifteigenschaften, die Sie auf diese Weise drucken können, werden hier angezeigt: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Einige Eigenschaften sind in mehreren Sprachen aufgeführt. Zum Beispiel %{fullname}kann eine Liste sein. In diesem Fall %{fullnamelang}werden die Sprachen aufgelistet. Wenn das Ihre Sprache an vierter Stelle in der Liste anzeigt, können Sie %{fullname[3]}als Formatierungszeichenfolge den vollständigen Namen nur in dieser Sprache drucken.

Da diese Sprache ziemlich unpraktisch ist, habe ich ein vollständiges Perl-Skript geschrieben, um die gewünschten Informationen in nur einer Sprache aufzulisten:

#!/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
quelle
Super, danke für den Tipp (und Skript .. obwohl ich das Skript noch nicht getestet habe). Wissen Sie, ob es auch eine Möglichkeit gibt, Lizenz- / Copyright-Informationen abzurufen? Ich habe% {license},% {copyright} und kein Format ausprobiert, aber keines hat etwas ergeben, wohingegen fontforge es mir zeigen kann.
Wahnsinn
In der Tat scheint fc-scan das Copyright nicht zu zeigen. foundryist der nächste, den es dir gibt. Aber otfinfo -i, von cjm vorgeschlagen, zeigt es an.
Mivk
Ah, das ist großartig, ich habe installiert lcdf-typetoolsund ausgeführt, otfinfo -iwie vorgeschlagen, und das hat den Trick getan, danke! (Und ich habe @cjm auch eine +1 gegeben).
Wahnsinn
Mit fc-scan können Sie die Schriftart "fullname" ermitteln, mit der in Programmen auf die Schriftart verwiesen wird.
9.