Oddities and possibile enhancements of :postscriptname pattern with partial matches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I was testing matching of fonts with a :postscriptname pattern with
partial name matching, for example "Noto", "Liberation", "Deja". I
know that FontConfig doesn't support matching with wildcards and I
know these loosely qualified patterns are cringe. Still API
FcFontMatch and/or fc-match seem to do a bare minimum to handle them,
but fail with a less trivial pattern, casting some doubts they are
really respecting the contract of "using the normal fontconfig
matching rules to find the best font available" (as per the
documentation).

First I make the questions, then I elaborate them:
1) Why a :postscriptname pattern partially matching name seems it
can't be used together a :style pattern?
2) Why match on a :postscriptname doesn't perform more pattern
normalizations? For examples it trims spaces, which is good, but it
doesn't (for example) convert commas ',' to hyphen '-' (which it would
in general match more fonts);
3) Why partial match on :family produces even worse results than on
:postscriptname?

Elaborating the questions, at first I actually tried doing some
partial matches on family name, and the results were quite bad:

$ fc-match ":family=Liberation" postscriptname style family
Noto Sans:style=Regular:postscriptname=NotoSans-Regular

... (notice it returned a Noto font instead of any available
Liberation font). Then I tried with matching :postscriptname and these
matches seem to to be promising:

$ fc-match ":postscriptname=Liberation" postscriptname style family
Liberation Mono:style=Regular:postscriptname=LiberationMono
$ fc-match ":postscriptname=Noto" postscriptname style family
Noto Mono:style=Regular:postscriptname=NotoMono
$ fc-match ":postscriptname=Deja" postscriptname style family
DejaVu Sans:style=Book:postscriptname=DejaVuSans

At this pointed I really want to enforce a scalable font, and not a
monospaced one. This works:

$ fc-match ":postscriptname=Liberation:spacing=0" postscriptname style family
Liberation Sans:style=Regular:postscriptname=LiberationSans

But if I also want an italic font (which is definitely available) then
this fails:

fc-match ":postscriptname=Liberation:spacing=0:style=Italic"
postscriptname style family
Liberation Sans:style=Regular:postscriptname=LiberationSans

The behavior is reproducible using the linked testbed which has a
small font database[1] (with small differences, as it seems to prefer
"Bold" fonts to "Regular" ones), using the latest FontConfig git
revision.

As one more discussion point, I noticed that some pattern
normalization is performed in :postscriptname, as for example trimming
spaces. For example the following works, which is great:

fc-match ":postscriptname=Liberation Sans-Bold" postscriptname family style
Liberation Sans:style=Bold:postscriptname=LiberationSans-Bold

But that's seem to be the only normalization performed, and the
following match will fail:

fc-match ":postscriptname=LiberationSans,Bold" postscriptname family style
Liberation Sans:style=Regular:postscriptname=LiberationSans

Please consider that using the comma as in "LiberationSans,Bold" is
quite a common convention as suggested in the PdfReference for a long
time (before ISO standardization) to compose a postscript name for the
font (read 5.5.2 TrueType Fonts in PdfReference 1.7[2], suggestion
removed starting with ISO 32000-1:2008).

Thank you for your attention.

Cheers,
Francesco

[1] https://github.com/user-attachments/files/17990992/testpsmatch.zip
[2] https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/pdfreference1.7old.pdf



[Index of Archives]     [Fedora Fonts]     [Fedora Users]     [Fedora Cloud]     [Kernel]     [Fedora Packaging]     [Fedora Desktop]     [PAM]     [Gimp Graphics Editor]     [Yosemite News]

  Powered by Linux