Trong Linux, nếu bạn có phông chữ .ttf, bạn có lẽ hầu hết cũng có fontconfig , mà đi kèm với các fc.scan
tiện ích. Bạn có thể phân tích đầu ra cho thông tin bạn muốn hoặc sử dụng --format
tùy chọn tài liệu xấu .
Ví dụ:
fc-scan --format "%{foundry} : %{family}\n" /usr/share/fonts/truetype/msttcorefonts/arialbd.ttf
Các thuộc tính phông chữ bạn có thể in theo cách này được hiển thị ở đây: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21
Một số thuộc tính được liệt kê bằng nhiều ngôn ngữ. Ví dụ, %{fullname}
có thể là một danh sách. Trong trường hợp đó, %{fullnamelang}
sẽ liệt kê các ngôn ngữ. Nếu điều đó cho bạn thấy ngôn ngữ của bạn ở vị trí thứ tư trong danh sách, bạn có thể sử dụng %{fullname[3]}
làm chuỗi định dạng để in tên đầy đủ chỉ bằng ngôn ngữ đó.
Công cụ ngôn ngữ này khá bất tiện, cuối cùng tôi đã viết một tập lệnh Perl đầy đủ để liệt kê thông tin tôi muốn chỉ bằng một ngôn ngữ:
#!/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";
brew install lcdf-typetools