[Fontconfig] Questionable usage of FcPatternAddInteger()

Raimund Steger rs at mytum.de
Sat Apr 28 05:16:56 PDT 2012

Fabian Greffrath wrote:
>> FcFontSort() doesn't necessarily returns only FcPatterns matched the
>> given pattern. it returns FcPatterns sorted by the score according to
>> the result of matching the pattern. I guess what you are expecting to
>> see may be more close to FcFontList() perhaps.
> Thanks for your reply, but this doesn't really answer my question.

Well, part of your question was why FcFontSort didn't restrict the list, 
wasn't it?

Other than that: I tried the attached example with the argument 
'FreeMono', and as you suggested, it produces pretty identical results 
to 'fc-match --sort FreeMono:spacing=mono', with FreeMono on top of the 
list because it's the closest match. So I can find nothing wrong with 
the way you build the pattern.

(If you leave out the call to FcPatternAddInteger, you might get a 
different order because a missing element produces a slightly different 
score in the match.)

Whether fontconfig is able to substitute Liberation Mono for FreeMono on 
a system where the latter isn't available is another story. (Meaning, 
treating it as a closer match than other fonts.)
This benefits from appropriate rules in fontconfig's configuration 
files, which typically operate on 'family', not on 'spacing' (the 
priority of 'family' in the match is higher than that of 'spacing' anyway).
These work through the generic family name 'monospace'. I. e. adding 
'Liberation Mono' for the monospace family in 60-latin.conf improves its 
eligibility as a substitute for FreeMono. Although on a system where it 
isn't clear what kind of monospace font is available it would be an 
option to use the generic family name directly.


More information about the Fontconfig mailing list