GNU/Linux >> Znalost Linux >  >> Linux

Existuje unixový nástroj příkazového řádku, který dokáže analyzovat soubory písem?

Myslím, že hledáte otfinfo. Zdá se, že neexistuje možnost dostat se přímo do podrodiny, ale můžete:

otfinfo --info *.ttf | grep Subfamily

Všimněte si, že řada písem, na která jsem se díval, používá „Oblique“ místo „Italic“.


V Linuxu, pokud máte .ttf fonty, máte s největší pravděpodobností také fontconfig, který je dodáván s fc.scan utility. Můžete analyzovat výstup na informace, které chcete, nebo použít špatně zdokumentovaný --format možnost.

Například:

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

Vlastnosti písma, které můžete tímto způsobem vytisknout, jsou uvedeny zde:http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Některé vlastnosti jsou uvedeny ve více jazycích. Například %{fullname} může být seznam. V takovém případě %{fullnamelang} zobrazí seznam jazyků. Pokud se váš jazyk zobrazí na čtvrté pozici v seznamu, můžete použít %{fullname[3]} jako formátovací řetězec pro tisk celého jména pouze v tomto jazyce.

Vzhledem k tomu, že tento jazyk je docela nepohodlný, nakonec jsem napsal úplný skript v Perlu, abych vypsal informace, které jsem chtěl, pouze v jednom jazyce:

#!/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";

Linux
  1. 5 nástrojů příkazového řádku pro rychlé vyhledání souborů v systému Linux

  2. Jak mohu najít soubor/adresář, který by mohl být kdekoli na příkazovém řádku linuxu?

  3. Jak mohu zapisovat do dmesg z příkazového řádku?

  1. Robustní nástroj příkazového řádku pro zpracování souborů Csv?

  2. Existují nějaké nástroje příkazového řádku, které dokážou zachytit stisknutí tlačítka joysticku?

  3. Příkazový řádek pouze OS UNIX/Linux

  1. Mazání souborů podle věku?

  2. Kalkulačka příkazového řádku Unix bc v dávkovém režimu

  3. Existuje nástroj příkazového řádku pro vizualizaci a analýzu dat?