GNU/Linux >> Tutoriels Linux >  >> Linux

Existe-t-il un outil de ligne de commande Unix capable d'analyser les fichiers de police ?

Je pense que vous cherchez otfinfo. Il ne semble pas y avoir d'option pour accéder directement à la sous-famille, mais vous pouvez le faire :

otfinfo --info *.ttf | grep Subfamily

Notez qu'un certain nombre de polices que j'ai examinées utilisent "Oblique" au lieu de "Italique".


Sous Linux, si vous avez des polices .ttf, vous avez très probablement aussi fontconfig, qui vient avec le fc.scan utilitaire. Vous pouvez analyser la sortie pour les informations que vous voulez, ou utiliser le --format mal documenté option.

Par exemple :

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

Les propriétés de police que vous pouvez imprimer de cette manière sont affichées ici :http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Certaines propriétés sont répertoriées dans plusieurs langues. Par exemple, %{fullname} peut être une liste. Dans ce cas, %{fullnamelang} listera les langues. Si cela vous montre votre langue en quatrième position dans la liste, vous pouvez utiliser %{fullname[3]} comme chaîne de format pour imprimer le nom complet uniquement dans cette langue.

Ce truc de langage étant assez gênant, j'ai fini par écrire un script Perl complet pour lister les informations que je voulais dans un seul langage :

#!/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 outils de ligne de commande pour trouver rapidement des fichiers sous Linux

  2. Existe-t-il un outil en ligne de commande pour la visualisation et l'analyse des données ?

  3. Longueur maximale de l'argument de ligne de commande pouvant être transmis à SQL*Plus ?

  4. Outil en ligne de commande pour générer des mots de passe mémorables ?

  5. Existe-t-il un outil capable de détecter (et si possible de corriger) les bugs dans les fichiers MP3 ?

4 outils Markdown pour la ligne de commande Linux

fdupes - Un outil de ligne de commande pour rechercher et supprimer des fichiers en double sous Linux

Commande ls sous Linux/UNIX

15 exemples pratiques de commande Grep sous Linux / UNIX

Ligne de commande uniquement SE UNIX/Linux

Existe-t-il une distribution Linux certifiée UNIX ?