GNU/Linux >> Linux Esercitazione >  >> Linux

Esiste uno strumento da riga di comando unix in grado di analizzare i file di font?

Penso che tu stia cercando otfinfo. Non sembra esserci un'opzione per accedere direttamente alla sottofamiglia, ma potresti fare:

otfinfo --info *.ttf | grep Subfamily

Nota che un certo numero di caratteri che ho esaminato usano "Oblique" invece di "Italic".


In Linux, se hai i font .ttf, molto probabilmente hai anche fontconfig, che viene fornito con fc.scan utilità. Puoi analizzare l'output per le informazioni che desideri o utilizzare il mal documentato --format opzione.

Ad esempio:

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

Le proprietà dei caratteri che puoi stampare in questo modo sono mostrate qui:http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Alcune proprietà sono elencate in più lingue. Ad esempio, %{fullname} potrebbe essere un elenco In tal caso, %{fullnamelang} elencherà le lingue. Se questo ti mostra la tua lingua in quarta posizione nell'elenco, puoi usare %{fullname[3]} come stringa di formato per stampare il nome completo solo in quella lingua.

Questa roba linguistica è piuttosto scomoda, ho finito per scrivere uno script Perl completo per elencare le informazioni che volevo in una sola lingua:

#!/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 strumenti da riga di comando per trovare rapidamente file in Linux

  2. Strumento da riga di comando robusto per l'elaborazione di file CSV?

  3. Eliminazione di file per età?

  4. Esiste uno strumento a riga di comando per la visualizzazione e l'analisi dei dati?

  5. Lunghezza massima dell'argomento della riga di comando che può essere passato a SQL*Plus?

4 Strumenti di markdown per la riga di comando di Linux

fdupes:uno strumento da riga di comando per trovare ed eliminare file duplicati in Linux

comando ls in Linux/UNIX

15 Esempi pratici di comandi Grep in Linux / UNIX

Riga di comando solo SO UNIX/Linux

Esiste una distribuzione Linux certificata UNIX?