Tools(listFontWithLang.pl): Change the building of fontname.

A try to combine the style info and family into the font-name in such a way,
that the features are not doubled.
This commit is contained in:
Kornel Benko 2020-06-17 00:24:21 +02:00
parent ddcbfb77bf
commit 0d84f0b9fd

View File

@ -48,13 +48,14 @@ use constant {
sub convertlang($);
sub extractlist($$$); # my ($l, $islang, $txt, $rres) = @_;
sub getIndexes($$);
sub getVal($$$); # my ($l, $txtval, $txtlang) = @_;
sub getVal($$$$); # my ($l, $txtval, $txtlang, $combine) = @_;
sub getproperties($$$$);
sub ismathfont($$);
sub correctstyle($);
sub decimalUnicode($);
sub contains($$);
sub sprintIntervalls($);
sub buildFontName($$$$);
# Following fields for a parameter can be defined:
# fieldname: Name of entry in %options
@ -292,7 +293,7 @@ my $nexttype = 6;
# list of regexes for known sans serif fonts
my %sansFonts = (
"value" => SANS, # Sans serif
"a" => qr/^(aharoni|arial|andika|angostura|anonymous|arab|aroania|arimo|asap)/i,
"a" => qr/^a(030|becedario|bydos|haroni|rial|ndika|ngostura|nonymous|rab|roania|rimo|sap)/i,
"b" => qr/^b(aekmuk|ebas|erenika|eteckna|euron|lue)/i,
"c" => qr/^c(abin|aliban|antarell|arbon|arlito|handas|hivo|mu bright|omfortaa|omi[cx]|oolvetica|ortoba|ousine|uprum|wtex(hei|yen)|yklop|ypro)/i,
"d" => qr/^(d2coding|dimnah|dosis|dyuthi)/i,
@ -300,7 +301,7 @@ my %sansFonts = (
"f" => qr/^(fandolhei|fetamont|fira|font awesome 5|forgotten)/i,
"g" => qr/^(gardiner|garuda|gfs ?neo|gillius|granada|graph|guanine|gunplay)/i,
"h" => qr/^(hack|hani|haramain|harano|harmattan|hor\b)/i,
"i" => qr/^(ibm plex|ikarius|inconsolata|induni.?h|iwona)/i,
"i" => qr/^(ibm ?(plex ?mono|3270)|ikarius|inconsolata|induni.?h|iwona)/i,
"j" => qr/^(jara|jura)/i,
"k" => qr/^(kalimati|kanji|karla|karma|kayrawan|kenyan|keraleeyam|khalid|khmer [or]|kiloji|klaudia|ko[mn]atu|kurier|kustom)/i,
"l" => qr/^l(aksaman|arabie|ato|eague|exend|exigulim|ibel|iberation|ibre franklin|ibris|inux biolinum|obster|ogix|ohit|oma)/i,
@ -312,7 +313,7 @@ my %sansFonts = (
"r" => qr/^(rachana|radio\b|raleway|ricty|roboto|rosario)/i,
"s" => qr/^(salem|samanata|sawasdee|shado|sharja|simple|sophia|soul|source|switzera)/i,
"t" => qr/^(tarablus|teen|texgyre(adventor|heros)|tiresias|trebuchet|tscu|tuffy)/i,
"u" => qr/^(ubuntu|ukij (bom|chechek|cjk|diwani|ekran|elipbe|inchike|jelliy|kufi|qara|qolyazma|teng|title|tor)|umpush|un ?(dinaru|jamo|graphic|taza|vada|yetgul)|uni(kurd|space|versalis)|uroob|urw ?classico)/i,
"u" => qr/^u(buntu|kij (bom|chechek|cjk|diwani|ekran|elipbe|inchike|jelliy|kufi|mejnuntal|qara|qolyazma|teng|title|tor|tuz ?(neqish|tom))|mpush|n ?(dinaru|jamo|graphic|taza|vada|yetgul)|uni(kurd|space|versalis)|roob|rw ?classico)/i,
"v" => qr/^(veranda|vn ?urwclassico)/i,
"w" => qr/^(waree)/i,
"y" => qr/^(yanone)/i,
@ -329,7 +330,8 @@ my %scriptFonts = (
"n" => qr/^(nanum (brush|pen) script)/i,
"q" => qr/^qt(arabian|boulevard|brushstroke|chancery|coronation|florencia|handwriting|linostroke|merry|pandora|slogan)/i,
"r" => qr/^((romande.*|ruf)script|rsfs)/i,
"u" => qr/^(un ?pilgi|urw ?chancery)/i,
"t" => qr/^typo ?script/i,
"u" => qr/^u(n ?pilgi|rw ?chancery|kij ?(jelliy|moy|qolyazma ?(tez|yantu)))/i,
);
my %fraktFonts = (
@ -339,20 +341,24 @@ my %fraktFonts = (
"m" => qr/^(missaali)/i,
"o" => qr/^(oldania)/i,
"q" => qr/^qt(blackforest|cloisteredmonk|dublinirish|fraktur|heidelbergtype|(lino|london)scroll)/i,
"u" => qr/^ukij ?(kufi ?tar|mejnun ?reg)/i,
);
my %fancyFonts = (
"value" => FANCY, # Fancy
"a" => qr/^a(bandoned|bberancy)/i,
"c" => qr/^(cretino)/i,
"d" => qr/^dseg/i,
"f" => qr/^frederika/i,
"g" => qr/^(gfs.?theo)/i,
"k" => qr/^keter|kicking|kredit|kouzan|kerkis calligraphic/i,
"u" => qr/^ukij ?(saet|tiken)/i,
);
my %initialFonts = (
"value" => INITIALS, # Initials
"e" => qr/^(eb.?garamond.?init)/i,
"t" => qr/^typographer/i,
"y" => qr/^(yinit)/i,
);
@ -373,6 +379,7 @@ my %symbolFonts = (
"q" => qr/^(qtdingbits)/i,
"s" => qr/^stmary/i,
"t" => qr/^(typicons|twemoji)/i,
"u" => qr/^ukij ?(imaret|orxun|tughra)/i,
"w" => qr/^(webdings|wasy)/i,
);
@ -410,37 +417,16 @@ if (open(FI, "$cmd |")) {
for my $lang (@langs) {
next NXTLINE if (! defined($usedlangs{$lang}));
}
my $style = &getVal($l, "style", "stylelang");
my $style = &getVal($l, "style", "stylelang", 1);
$style =~ s/^\\040//;
my $fullname = &getVal($l, "fn", "fnl");
my $postscriptname = "";
if ($l =~ /postscriptname=\"([^\"]+)\"/) {
$postscriptname = $1;
}
my $family = &getVal($l, "family", "flang");
$family =~ s/\\040/\-/;
my $fontname;
if (length($fullname) < 3) {
if (length($postscriptname) < 2) {
$fontname = "$family $style";
}
else {
$fontname = $postscriptname;
}
}
else {
if ($fullname !~ /^font\d+$/) {
$fontname = $fullname;
}
else {
if ($family ne $style) {
$fontname = "$family $style";
}
else {
$fontname = $family;
}
}
}
my $family = &getVal($l, "family", "flang", 0);
my $fontname = &buildFontName($family, $style, $fullname, $postscriptname);
if (defined($options{NFontName})) {
for my $fn (@{$options{NFontName}}) {
next NXTLINE if ($fontname =~ /$fn/i);
@ -636,9 +622,9 @@ sub getIndexes($$)
return(\@res);
}
sub getVal($$$)
sub getVal($$$$)
{
my ($l, $txtval, $txtlang) = @_;
my ($l, $txtval, $txtlang, $combine) = @_;
my @values = ();
my @langs = ();
&extractlist($l, 0, $txtval, \@values);
@ -647,8 +633,20 @@ sub getVal($$$)
my $i = &getIndexes("en", \@langs);
my $res = "";
for my $k (@{$i}) {
if (defined($values[$k]) && (length($values[$k]) > length($res))) {
$res = $values[$k];
if (defined($values[$k])) {
if ($combine) {
if ($res ne "") {
$res .= " $values[$k]";
}
else {
$res = $values[$k];
}
}
else {
if (length($values[$k]) > length($res)) {
$res = $values[$k];
}
}
}
}
return($values[0]) if ($res eq "");
@ -1031,3 +1029,48 @@ sub sprintIntervalls($)
}
return join(',', @out);
}
sub buildFontName($$$$)
{
my ($family, $style, $fullname, $postscriptname) = @_;
my $result = "";
$style =~ s/\\040//;
$family =~ s/\\040/\-/;
$family =~ s/\bcond\b/Condensed/i;
$family =~ s/\bblk\b/Black/i;
$family =~ s/\bsembd\b/SemiBold/i;
$family =~ s/\bsemcond\b/SemiCondensed/i;
$family =~ s/\bextcond\b/ExtraCondensed/i;
$family =~ s/\bextbd\b/ExtraBold/i;
$family =~ s/\bextlt\b/ExtraLight/i;
$style =~ s/\bextra\-light\b/ExtraLight/i;
$style =~ s/\bbol\b/Bold/i;
$family =~ s/\bmed\b/Medium/i;
if ($family =~ /powerline/i) {
my $a = 17;
}
$family =~ s/^([A-Z]+[a-z]+)([A-Z][a-z]+)\b/$1 $2/;
my @style = split(' ', $style);
for my $st (@style) {
$st = ucfirst($st);
if ($family !~ s/$st/$st/i) {
$family .= " $st";
}
else {
# check if $st in $family starts with ' '
$family =~ s/(\w)$st/$1 $st/i;
}
}
$postscriptname =~ s/[- ]?Regular$//;
if ($fullname =~ /^(font)?\d+/) {
$fullname = "";
}
if (length($fullname) <= length($family)) {
$result = $family;
}
else {
$result = $fullname;
}
return($result);
}